diff --git a/mobile/lib/extensions/user_extension.dart b/mobile/lib/extensions/user_extension.dart new file mode 100644 index 0000000000..6670cd95e8 --- /dev/null +++ b/mobile/lib/extensions/user_extension.dart @@ -0,0 +1,14 @@ +import "package:photos/models/api/collection/user.dart"; +import "package:photos/services/machine_learning/face_ml/person/person_service.dart"; + +extension UserExtension on User { + String? displayName() { + final emailToName = PersonService.instance.emailToNameMapCache; + if (emailToName.containsKey(email)) { + return emailToName[email]; + } else { + //Some initial users have name in name field. + return name; + } + } +} diff --git a/mobile/lib/models/api/collection/user.dart b/mobile/lib/models/api/collection/user.dart index cce90d8147..179756d8c1 100644 --- a/mobile/lib/models/api/collection/user.dart +++ b/mobile/lib/models/api/collection/user.dart @@ -3,6 +3,10 @@ import "dart:convert"; class User { int? id; String email; + @Deprecated( + "Use displayName() extension method instead. Note: Some early users have" + " value in name field.", + ) String? name; String? role; diff --git a/mobile/lib/services/machine_learning/face_ml/person/person_service.dart b/mobile/lib/services/machine_learning/face_ml/person/person_service.dart index 3ff47f167f..351e713cf1 100644 --- a/mobile/lib/services/machine_learning/face_ml/person/person_service.dart +++ b/mobile/lib/services/machine_learning/face_ml/person/person_service.dart @@ -19,7 +19,7 @@ class PersonService { final EntityService entityService; final MLDataDB faceMLDataDB; final SharedPreferences prefs; - final _emailToNameMap = {}; + final _emailToNameMapCache = {}; PersonService(this.entityService, this.faceMLDataDB, this.prefs); @@ -44,14 +44,17 @@ class PersonService { _instance!.getPersons().then((value) { for (var person in value) { if (person.data.email != null && person.data.email!.isNotEmpty) { - _instance!._emailToNameMap[person.data.email!] = person.data.name; + _instance!._emailToNameMapCache[person.data.email!] = + person.data.name; } } }); } + Map get emailToNameMapCache => _emailToNameMapCache; + void clearCache() { - _emailToNameMap.clear(); + _emailToNameMapCache.clear(); } Future> getPersons() async { @@ -191,7 +194,7 @@ class PersonService { clusterID: clusterID, ); if (data.email != null) { - _emailToNameMap[data.email!] = data.name; + _emailToNameMapCache[data.email!] = data.name; } return PersonEntity(result.id, data); } @@ -282,7 +285,7 @@ class PersonService { justName.data.logStats(); if (entity.data.email != null) { - _emailToNameMap.remove(entity.data.email!); + _emailToNameMapCache.remove(entity.data.email!); } } else { await entityService.deleteEntry(personID); @@ -290,7 +293,7 @@ class PersonService { if (entity != null) { if (entity.data.email != null) { - _emailToNameMap.remove(entity.data.email!); + _emailToNameMapCache.remove(entity.data.email!); } } } @@ -454,10 +457,10 @@ class PersonService { ); await updatePerson(updatedPerson).then((value) { if (email != null) { - _emailToNameMap[email] = updatedPerson.data.name; + _emailToNameMapCache[email] = updatedPerson.data.name; } if (name != null && updatedPerson.data.email != null) { - _emailToNameMap[updatedPerson.data.email!] = name; + _emailToNameMapCache[updatedPerson.data.email!] = name; } }); return updatedPerson;