diff --git a/app/lib/bloc/scan_account_dir.dart b/app/lib/bloc/scan_account_dir.dart index 9029c7cc..7e2c1edd 100644 --- a/app/lib/bloc/scan_account_dir.dart +++ b/app/lib/bloc/scan_account_dir.dart @@ -405,7 +405,7 @@ class ScanAccountDirBloc // no data in this bloc, ignore return; } - if (ev.key == PrefKey.shareFolder && + if (ev.key == AccountPrefKey.shareFolder && identical(ev.pref, AccountPref.of(account))) { _log.info("[_onAccountPrefUpdatedEvent] Request refresh"); _refreshThrottler.trigger( diff --git a/app/lib/entity/pref.dart b/app/lib/entity/pref.dart index 1f7f2fc7..0bd42e3c 100644 --- a/app/lib/entity/pref.dart +++ b/app/lib/entity/pref.dart @@ -65,68 +65,8 @@ class AccountPref { } } - bool? isEnableFaceRecognitionApp() => - provider.getBool(PrefKey.isEnableFaceRecognitionApp); - bool isEnableFaceRecognitionAppOr([bool def = true]) => - isEnableFaceRecognitionApp() ?? def; - Future setEnableFaceRecognitionApp(bool value) => _set( - PrefKey.isEnableFaceRecognitionApp, - value, - (key, value) => provider.setBool(key, value)); - - String? getShareFolder() => provider.getString(PrefKey.shareFolder); - String getShareFolderOr([String def = ""]) => getShareFolder() ?? def; - Future setShareFolder(String value) => _set(PrefKey.shareFolder, - value, (key, value) => provider.setString(key, value)); - - bool? hasNewSharedAlbum() => provider.getBool(PrefKey.hasNewSharedAlbum); - bool hasNewSharedAlbumOr([bool def = false]) => hasNewSharedAlbum() ?? def; - Future setNewSharedAlbum(bool value) => _set( - PrefKey.hasNewSharedAlbum, - value, - (key, value) => provider.setBool(key, value)); - - bool? isEnableMemoryAlbum() => provider.getBool(PrefKey.isEnableMemoryAlbum); - bool isEnableMemoryAlbumOr([bool def = false]) => - isEnableMemoryAlbum() ?? def; - Future setEnableMemoryAlbum(bool value) => _set( - PrefKey.isEnableMemoryAlbum, - value, - (key, value) => provider.setBool(key, value)); - - String? getTouchRootEtag() => provider.getString(PrefKey.touchRootEtag); - String getTouchRootEtagOr([String def = ""]) => getTouchRootEtag() ?? def; - Future setTouchRootEtag(String value) => _set( - PrefKey.touchRootEtag, - value, - (key, value) => provider.setString(key, value)); - Future removeTouchRootEtag() => _remove(PrefKey.touchRootEtag); - - String? getAccountLabel() => provider.getString(PrefKey.accountLabel); - String getAccountLabelOr([String def = ""]) => getAccountLabel() ?? def; - Future setAccountLabel(String? value) { - if (value == null) { - return _remove(PrefKey.accountLabel); - } else { - return _set(PrefKey.accountLabel, value, - (key, value) => provider.setString(key, value)); - } - } - - int? getLastNewCollectionType() => - provider.getInt(PrefKey.lastNewCollectionType); - int getLastNewCollectionTypeOr(int def) => getLastNewCollectionType() ?? def; - Future setLastNewCollectionType(int? value) { - if (value == null) { - return _remove(PrefKey.lastNewCollectionType); - } else { - return _set(PrefKey.lastNewCollectionType, value, - (key, value) => provider.setInt(key, value)); - } - } - - Future _set(PrefKey key, T value, - Future Function(PrefKey key, T value) setFn) async { + Future _set(AccountPrefKey key, T value, + Future Function(AccountPrefKey key, T value) setFn) async { if (await setFn(key, value)) { KiwiContainer() .resolve() @@ -137,14 +77,18 @@ class AccountPref { } } - Future _remove(PrefKey key) => provider.remove(key); + Future _remove(AccountPrefKey key) => provider.remove(key); final PrefProvider provider; static final _insts = {}; } -enum PrefKey { +abstract class PrefKeyInterface { + String toStringKey(); +} + +enum PrefKey implements PrefKeyInterface { accounts3, currentAccountIndex, homePhotosZoomLevel, @@ -179,17 +123,9 @@ enum PrefKey { isSlideshowReverse, seedColor, isVideoPlayerMute, - isVideoPlayerLoop, - - // account pref - isEnableFaceRecognitionApp, - shareFolder, - hasNewSharedAlbum, - isEnableMemoryAlbum, - touchRootEtag, - accountLabel, - lastNewCollectionType; + isVideoPlayerLoop; + @override String toStringKey() { switch (this) { case PrefKey.accounts3: @@ -262,21 +198,35 @@ enum PrefKey { return "isVideoPlayerMute"; case PrefKey.isVideoPlayerLoop: return "isVideoPlayerLoop"; + } + } +} - // account pref - case PrefKey.isEnableFaceRecognitionApp: +enum AccountPrefKey implements PrefKeyInterface { + isEnableFaceRecognitionApp, + shareFolder, + hasNewSharedAlbum, + isEnableMemoryAlbum, + touchRootEtag, + accountLabel, + lastNewCollectionType; + + @override + String toStringKey() { + switch (this) { + case AccountPrefKey.isEnableFaceRecognitionApp: return "isEnableFaceRecognitionApp"; - case PrefKey.shareFolder: + case AccountPrefKey.shareFolder: return "shareFolder"; - case PrefKey.hasNewSharedAlbum: + case AccountPrefKey.hasNewSharedAlbum: return "hasNewSharedAlbum"; - case PrefKey.isEnableMemoryAlbum: + case AccountPrefKey.isEnableMemoryAlbum: return "isEnableMemoryAlbum"; - case PrefKey.touchRootEtag: + case AccountPrefKey.touchRootEtag: return "touchRootEtag"; - case PrefKey.accountLabel: + case AccountPrefKey.accountLabel: return "accountLabel"; - case PrefKey.lastNewCollectionType: + case AccountPrefKey.lastNewCollectionType: return "lastNewCollectionType"; } } @@ -284,18 +234,18 @@ enum PrefKey { /// Provide the data for [Pref] abstract class PrefProvider { - bool? getBool(PrefKey key); - Future setBool(PrefKey key, bool value); + bool? getBool(PrefKeyInterface key); + Future setBool(PrefKeyInterface key, bool value); - int? getInt(PrefKey key); - Future setInt(PrefKey key, int value); + int? getInt(PrefKeyInterface key); + Future setInt(PrefKeyInterface key, int value); - String? getString(PrefKey key); - Future setString(PrefKey key, String value); + String? getString(PrefKeyInterface key); + Future setString(PrefKeyInterface key, String value); - List? getStringList(PrefKey key); - Future setStringList(PrefKey key, List value); + List? getStringList(PrefKeyInterface key); + Future setStringList(PrefKeyInterface key, List value); - Future remove(PrefKey key); + Future remove(PrefKeyInterface key); Future clear(); } diff --git a/app/lib/entity/pref/extension.dart b/app/lib/entity/pref/extension.dart index edb50979..e57cbfcb 100644 --- a/app/lib/entity/pref/extension.dart +++ b/app/lib/entity/pref/extension.dart @@ -268,3 +268,70 @@ extension PrefExtension on Pref { value, (key, value) => provider.setBool(key, value)); } + +extension AccountPrefExtension on AccountPref { + bool? isEnableFaceRecognitionApp() => + provider.getBool(AccountPrefKey.isEnableFaceRecognitionApp); + bool isEnableFaceRecognitionAppOr([bool def = true]) => + isEnableFaceRecognitionApp() ?? def; + Future setEnableFaceRecognitionApp(bool value) => _set( + AccountPrefKey.isEnableFaceRecognitionApp, + value, + (key, value) => provider.setBool(key, value)); + + String? getShareFolder() => provider.getString(AccountPrefKey.shareFolder); + String getShareFolderOr([String def = ""]) => getShareFolder() ?? def; + Future setShareFolder(String value) => _set( + AccountPrefKey.shareFolder, + value, + (key, value) => provider.setString(key, value)); + + bool? hasNewSharedAlbum() => + provider.getBool(AccountPrefKey.hasNewSharedAlbum); + bool hasNewSharedAlbumOr([bool def = false]) => hasNewSharedAlbum() ?? def; + Future setNewSharedAlbum(bool value) => _set( + AccountPrefKey.hasNewSharedAlbum, + value, + (key, value) => provider.setBool(key, value)); + + bool? isEnableMemoryAlbum() => + provider.getBool(AccountPrefKey.isEnableMemoryAlbum); + bool isEnableMemoryAlbumOr([bool def = false]) => + isEnableMemoryAlbum() ?? def; + Future setEnableMemoryAlbum(bool value) => _set( + AccountPrefKey.isEnableMemoryAlbum, + value, + (key, value) => provider.setBool(key, value)); + + String? getTouchRootEtag() => + provider.getString(AccountPrefKey.touchRootEtag); + String getTouchRootEtagOr([String def = ""]) => getTouchRootEtag() ?? def; + Future setTouchRootEtag(String value) => _set( + AccountPrefKey.touchRootEtag, + value, + (key, value) => provider.setString(key, value)); + Future removeTouchRootEtag() => _remove(AccountPrefKey.touchRootEtag); + + String? getAccountLabel() => provider.getString(AccountPrefKey.accountLabel); + String getAccountLabelOr([String def = ""]) => getAccountLabel() ?? def; + Future setAccountLabel(String? value) { + if (value == null) { + return _remove(AccountPrefKey.accountLabel); + } else { + return _set(AccountPrefKey.accountLabel, value, + (key, value) => provider.setString(key, value)); + } + } + + int? getLastNewCollectionType() => + provider.getInt(AccountPrefKey.lastNewCollectionType); + int getLastNewCollectionTypeOr(int def) => getLastNewCollectionType() ?? def; + Future setLastNewCollectionType(int? value) { + if (value == null) { + return _remove(AccountPrefKey.lastNewCollectionType); + } else { + return _set(AccountPrefKey.lastNewCollectionType, value, + (key, value) => provider.setInt(key, value)); + } + } +} diff --git a/app/lib/entity/pref/provider/memory.dart b/app/lib/entity/pref/provider/memory.dart index 41ceecdd..4d657b4b 100644 --- a/app/lib/entity/pref/provider/memory.dart +++ b/app/lib/entity/pref/provider/memory.dart @@ -7,28 +7,29 @@ class PrefMemoryProvider extends PrefProvider { ]) : _data = Map.of(initialData); @override - bool? getBool(PrefKey key) => _get(key); + bool? getBool(PrefKeyInterface key) => _get(key); @override - Future setBool(PrefKey key, bool value) => _set(key, value); + Future setBool(PrefKeyInterface key, bool value) => _set(key, value); @override - int? getInt(PrefKey key) => _get(key); + int? getInt(PrefKeyInterface key) => _get(key); @override - Future setInt(PrefKey key, int value) => _set(key, value); + Future setInt(PrefKeyInterface key, int value) => _set(key, value); @override - String? getString(PrefKey key) => _get(key); + String? getString(PrefKeyInterface key) => _get(key); @override - Future setString(PrefKey key, String value) => _set(key, value); - - @override - List? getStringList(PrefKey key) => _get>(key); - @override - Future setStringList(PrefKey key, List value) => + Future setString(PrefKeyInterface key, String value) => _set(key, value); @override - Future remove(PrefKey key) async { + List? getStringList(PrefKeyInterface key) => _get>(key); + @override + Future setStringList(PrefKeyInterface key, List value) => + _set(key, value); + + @override + Future remove(PrefKeyInterface key) async { _data.remove(key); return true; } @@ -39,9 +40,9 @@ class PrefMemoryProvider extends PrefProvider { return true; } - T? _get(PrefKey key) => _data[key.toStringKey()]; + T? _get(PrefKeyInterface key) => _data[key.toStringKey()]; - Future _set(PrefKey key, T value) async { + Future _set(PrefKeyInterface key, T value) async { _data[key.toStringKey()] = value; return true; } diff --git a/app/lib/entity/pref/provider/shared_preferences.dart b/app/lib/entity/pref/provider/shared_preferences.dart index dbd8ee21..4962edbb 100644 --- a/app/lib/entity/pref/provider/shared_preferences.dart +++ b/app/lib/entity/pref/provider/shared_preferences.dart @@ -20,36 +20,36 @@ class PrefSharedPreferencesProvider extends PrefProvider { } @override - bool? getBool(PrefKey key) => _pref.getBool(key.toStringKey()); + bool? getBool(PrefKeyInterface key) => _pref.getBool(key.toStringKey()); @override - Future setBool(PrefKey key, bool value) => + Future setBool(PrefKeyInterface key, bool value) => _pref.setBool(key.toStringKey(), value); @override - int? getInt(PrefKey key) => _pref.getInt(key.toStringKey()); + int? getInt(PrefKeyInterface key) => _pref.getInt(key.toStringKey()); @override - Future setInt(PrefKey key, int value) => + Future setInt(PrefKeyInterface key, int value) => _pref.setInt(key.toStringKey(), value); @override - String? getString(PrefKey key) => _pref.getString(key.toStringKey()); + String? getString(PrefKeyInterface key) => _pref.getString(key.toStringKey()); @override - Future setString(PrefKey key, String value) => + Future setString(PrefKeyInterface key, String value) => _pref.setString(key.toStringKey(), value); @override - List? getStringList(PrefKey key) => + List? getStringList(PrefKeyInterface key) => _pref.getStringList(key.toStringKey()); @override - Future setStringList(PrefKey key, List value) => + Future setStringList(PrefKeyInterface key, List value) => _pref.setStringList(key.toStringKey(), value); @override - Future remove(PrefKey key) => _pref.remove(key.toStringKey()); + Future remove(PrefKeyInterface key) => _pref.remove(key.toStringKey()); @override Future clear() => _pref.clear(); diff --git a/app/lib/entity/pref/provider/universal_storage.dart b/app/lib/entity/pref/provider/universal_storage.dart index 3d7c43f1..cfe8ccd2 100644 --- a/app/lib/entity/pref/provider/universal_storage.dart +++ b/app/lib/entity/pref/provider/universal_storage.dart @@ -16,28 +16,29 @@ class PrefUniversalStorageProvider extends PrefProvider { } @override - bool? getBool(PrefKey key) => _get(key); + bool? getBool(PrefKeyInterface key) => _get(key); @override - Future setBool(PrefKey key, bool value) => _set(key, value); + Future setBool(PrefKeyInterface key, bool value) => _set(key, value); @override - int? getInt(PrefKey key) => _get(key); + int? getInt(PrefKeyInterface key) => _get(key); @override - Future setInt(PrefKey key, int value) => _set(key, value); + Future setInt(PrefKeyInterface key, int value) => _set(key, value); @override - String? getString(PrefKey key) => _get(key); + String? getString(PrefKeyInterface key) => _get(key); @override - Future setString(PrefKey key, String value) => _set(key, value); - - @override - List? getStringList(PrefKey key) => _get>(key); - @override - Future setStringList(PrefKey key, List value) => + Future setString(PrefKeyInterface key, String value) => _set(key, value); @override - Future remove(PrefKey key) async { + List? getStringList(PrefKeyInterface key) => _get>(key); + @override + Future setStringList(PrefKeyInterface key, List value) => + _set(key, value); + + @override + Future remove(PrefKeyInterface key) async { final newData = Map.of(_data)..remove(key.toStringKey()); await platform.UniversalStorage().putString(name, jsonEncode(newData)); _data.remove(key.toStringKey()); @@ -51,9 +52,9 @@ class PrefUniversalStorageProvider extends PrefProvider { return true; } - T? _get(PrefKey key) => _data[key.toStringKey()]; + T? _get(PrefKeyInterface key) => _data[key.toStringKey()]; - Future _set(PrefKey key, T value) async { + Future _set(PrefKeyInterface key, T value) async { final newData = Map.of(_data) ..addEntries([MapEntry(key.toStringKey(), value)]); await platform.UniversalStorage().putString(name, jsonEncode(newData)); diff --git a/app/lib/event/event.dart b/app/lib/event/event.dart index 29b53c19..563ba58e 100644 --- a/app/lib/event/event.dart +++ b/app/lib/event/event.dart @@ -42,7 +42,7 @@ class AccountPrefUpdatedEvent { const AccountPrefUpdatedEvent(this.pref, this.key, this.value); final AccountPref pref; - final PrefKey key; + final AccountPrefKey key; final dynamic value; }