route to person memory

This commit is contained in:
laurenspriem
2025-06-05 10:36:47 +05:30
parent b17ba26268
commit 22e32baf34
2 changed files with 57 additions and 1 deletions

View File

@@ -20,9 +20,11 @@ import "package:photos/models/memories/smart_memory.dart";
import "package:photos/models/memories/smart_memory_constants.dart";
import "package:photos/service_locator.dart";
import "package:photos/services/language_service.dart";
import "package:photos/services/machine_learning/face_ml/person/person_service.dart";
import "package:photos/services/notification_service.dart";
import "package:photos/services/search_service.dart";
import "package:photos/ui/home/memories/full_screen_memory.dart";
import "package:photos/ui/viewer/people/people_page.dart";
import "package:photos/utils/navigation_util.dart";
import "package:shared_preferences/shared_preferences.dart";
import "package:synchronized/synchronized.dart";
@@ -526,6 +528,57 @@ class MemoriesCacheService {
);
}
Future<void> goToPersonMemory(BuildContext context, String personID) async {
final allMemories = await getMemories();
if (allMemories.isEmpty) return;
final personMemories = <PeopleMemory>[];
for (final memory in allMemories) {
if (memory is PeopleMemory &&
(memory.isBirthday ?? false) &&
memory.personID == personID) {
personMemories.add(memory);
}
}
PeopleMemory? personMemory;
for (final memory in personMemories) {
if (memory.peopleMemoryType == PeopleMemoryType.youAndThem) {
personMemory = memory;
break; // breaking to prefer youAndThem over spotlight
}
if (memory.peopleMemoryType == PeopleMemoryType.spotlight) {
personMemory = memory;
}
}
if (personMemory == null) {
_logger.severe(
"Could not find person memory, routing to person page instead",
);
final person = await PersonService.instance.getPerson(personID);
if (person == null) {
_logger.severe("Person with ID $personID not found");
return;
}
await routeToPage(
context,
PeoplePage(
person: person,
searchResult: null,
),
forceCustomPageRoute: true,
);
}
await routeToPage(
context,
FullScreenMemoryDataUpdater(
initialIndex: 0,
memories: personMemory!.memories,
child: FullScreenMemory(personMemory.title, 0),
),
forceCustomPageRoute: true,
);
}
Future<void> toggleOnThisDayNotifications() async {
final oldValue = localSettings.isOnThisDayNotificationsEnabled;
await localSettings.setOnThisDayNotificationsEnabled(!oldValue);

View File

@@ -864,8 +864,11 @@ class _HomeWidgetState extends State<HomeWidget> {
if (payload.toLowerCase().contains("onthisday")) {
// ignore: unawaited_futures
memoriesCacheService.goToOnThisDayMemory(context);
} else if (payload.toLowerCase().contains("birthday")) {
final personID = payload.substring("birthday_".length);
// ignore: unawaited_futures
memoriesCacheService.goToPersonMemory(context, personID);
} else {
// TODO:lau (after mergin main): add another case here for birthday notifications
final collectionID = Uri.parse(payload).queryParameters["collectionID"];
if (collectionID != null) {
final collection = CollectionsService.instance