Refactor account pref

This commit is contained in:
Ming Ming 2023-07-17 16:23:57 +08:00
parent 0725e8ebce
commit 484da170d4
7 changed files with 149 additions and 130 deletions

View file

@ -405,7 +405,7 @@ class ScanAccountDirBloc
// no data in this bloc, ignore // no data in this bloc, ignore
return; return;
} }
if (ev.key == PrefKey.shareFolder && if (ev.key == AccountPrefKey.shareFolder &&
identical(ev.pref, AccountPref.of(account))) { identical(ev.pref, AccountPref.of(account))) {
_log.info("[_onAccountPrefUpdatedEvent] Request refresh"); _log.info("[_onAccountPrefUpdatedEvent] Request refresh");
_refreshThrottler.trigger( _refreshThrottler.trigger(

View file

@ -65,68 +65,8 @@ class AccountPref {
} }
} }
bool? isEnableFaceRecognitionApp() => Future<bool> _set<T>(AccountPrefKey key, T value,
provider.getBool(PrefKey.isEnableFaceRecognitionApp); Future<bool> Function(AccountPrefKey key, T value) setFn) async {
bool isEnableFaceRecognitionAppOr([bool def = true]) =>
isEnableFaceRecognitionApp() ?? def;
Future<bool> setEnableFaceRecognitionApp(bool value) => _set<bool>(
PrefKey.isEnableFaceRecognitionApp,
value,
(key, value) => provider.setBool(key, value));
String? getShareFolder() => provider.getString(PrefKey.shareFolder);
String getShareFolderOr([String def = ""]) => getShareFolder() ?? def;
Future<bool> setShareFolder(String value) => _set<String>(PrefKey.shareFolder,
value, (key, value) => provider.setString(key, value));
bool? hasNewSharedAlbum() => provider.getBool(PrefKey.hasNewSharedAlbum);
bool hasNewSharedAlbumOr([bool def = false]) => hasNewSharedAlbum() ?? def;
Future<bool> setNewSharedAlbum(bool value) => _set<bool>(
PrefKey.hasNewSharedAlbum,
value,
(key, value) => provider.setBool(key, value));
bool? isEnableMemoryAlbum() => provider.getBool(PrefKey.isEnableMemoryAlbum);
bool isEnableMemoryAlbumOr([bool def = false]) =>
isEnableMemoryAlbum() ?? def;
Future<bool> setEnableMemoryAlbum(bool value) => _set<bool>(
PrefKey.isEnableMemoryAlbum,
value,
(key, value) => provider.setBool(key, value));
String? getTouchRootEtag() => provider.getString(PrefKey.touchRootEtag);
String getTouchRootEtagOr([String def = ""]) => getTouchRootEtag() ?? def;
Future<bool> setTouchRootEtag(String value) => _set<String>(
PrefKey.touchRootEtag,
value,
(key, value) => provider.setString(key, value));
Future<bool> removeTouchRootEtag() => _remove(PrefKey.touchRootEtag);
String? getAccountLabel() => provider.getString(PrefKey.accountLabel);
String getAccountLabelOr([String def = ""]) => getAccountLabel() ?? def;
Future<bool> setAccountLabel(String? value) {
if (value == null) {
return _remove(PrefKey.accountLabel);
} else {
return _set<String>(PrefKey.accountLabel, value,
(key, value) => provider.setString(key, value));
}
}
int? getLastNewCollectionType() =>
provider.getInt(PrefKey.lastNewCollectionType);
int getLastNewCollectionTypeOr(int def) => getLastNewCollectionType() ?? def;
Future<bool> setLastNewCollectionType(int? value) {
if (value == null) {
return _remove(PrefKey.lastNewCollectionType);
} else {
return _set<int>(PrefKey.lastNewCollectionType, value,
(key, value) => provider.setInt(key, value));
}
}
Future<bool> _set<T>(PrefKey key, T value,
Future<bool> Function(PrefKey key, T value) setFn) async {
if (await setFn(key, value)) { if (await setFn(key, value)) {
KiwiContainer() KiwiContainer()
.resolve<EventBus>() .resolve<EventBus>()
@ -137,14 +77,18 @@ class AccountPref {
} }
} }
Future<bool> _remove(PrefKey key) => provider.remove(key); Future<bool> _remove(AccountPrefKey key) => provider.remove(key);
final PrefProvider provider; final PrefProvider provider;
static final _insts = <String, AccountPref>{}; static final _insts = <String, AccountPref>{};
} }
enum PrefKey { abstract class PrefKeyInterface {
String toStringKey();
}
enum PrefKey implements PrefKeyInterface {
accounts3, accounts3,
currentAccountIndex, currentAccountIndex,
homePhotosZoomLevel, homePhotosZoomLevel,
@ -179,17 +123,9 @@ enum PrefKey {
isSlideshowReverse, isSlideshowReverse,
seedColor, seedColor,
isVideoPlayerMute, isVideoPlayerMute,
isVideoPlayerLoop, isVideoPlayerLoop;
// account pref
isEnableFaceRecognitionApp,
shareFolder,
hasNewSharedAlbum,
isEnableMemoryAlbum,
touchRootEtag,
accountLabel,
lastNewCollectionType;
@override
String toStringKey() { String toStringKey() {
switch (this) { switch (this) {
case PrefKey.accounts3: case PrefKey.accounts3:
@ -262,21 +198,35 @@ enum PrefKey {
return "isVideoPlayerMute"; return "isVideoPlayerMute";
case PrefKey.isVideoPlayerLoop: case PrefKey.isVideoPlayerLoop:
return "isVideoPlayerLoop"; return "isVideoPlayerLoop";
}
}
}
// account pref enum AccountPrefKey implements PrefKeyInterface {
case PrefKey.isEnableFaceRecognitionApp: isEnableFaceRecognitionApp,
shareFolder,
hasNewSharedAlbum,
isEnableMemoryAlbum,
touchRootEtag,
accountLabel,
lastNewCollectionType;
@override
String toStringKey() {
switch (this) {
case AccountPrefKey.isEnableFaceRecognitionApp:
return "isEnableFaceRecognitionApp"; return "isEnableFaceRecognitionApp";
case PrefKey.shareFolder: case AccountPrefKey.shareFolder:
return "shareFolder"; return "shareFolder";
case PrefKey.hasNewSharedAlbum: case AccountPrefKey.hasNewSharedAlbum:
return "hasNewSharedAlbum"; return "hasNewSharedAlbum";
case PrefKey.isEnableMemoryAlbum: case AccountPrefKey.isEnableMemoryAlbum:
return "isEnableMemoryAlbum"; return "isEnableMemoryAlbum";
case PrefKey.touchRootEtag: case AccountPrefKey.touchRootEtag:
return "touchRootEtag"; return "touchRootEtag";
case PrefKey.accountLabel: case AccountPrefKey.accountLabel:
return "accountLabel"; return "accountLabel";
case PrefKey.lastNewCollectionType: case AccountPrefKey.lastNewCollectionType:
return "lastNewCollectionType"; return "lastNewCollectionType";
} }
} }
@ -284,18 +234,18 @@ enum PrefKey {
/// Provide the data for [Pref] /// Provide the data for [Pref]
abstract class PrefProvider { abstract class PrefProvider {
bool? getBool(PrefKey key); bool? getBool(PrefKeyInterface key);
Future<bool> setBool(PrefKey key, bool value); Future<bool> setBool(PrefKeyInterface key, bool value);
int? getInt(PrefKey key); int? getInt(PrefKeyInterface key);
Future<bool> setInt(PrefKey key, int value); Future<bool> setInt(PrefKeyInterface key, int value);
String? getString(PrefKey key); String? getString(PrefKeyInterface key);
Future<bool> setString(PrefKey key, String value); Future<bool> setString(PrefKeyInterface key, String value);
List<String>? getStringList(PrefKey key); List<String>? getStringList(PrefKeyInterface key);
Future<bool> setStringList(PrefKey key, List<String> value); Future<bool> setStringList(PrefKeyInterface key, List<String> value);
Future<bool> remove(PrefKey key); Future<bool> remove(PrefKeyInterface key);
Future<bool> clear(); Future<bool> clear();
} }

View file

@ -268,3 +268,70 @@ extension PrefExtension on Pref {
value, value,
(key, value) => provider.setBool(key, 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<bool> setEnableFaceRecognitionApp(bool value) => _set<bool>(
AccountPrefKey.isEnableFaceRecognitionApp,
value,
(key, value) => provider.setBool(key, value));
String? getShareFolder() => provider.getString(AccountPrefKey.shareFolder);
String getShareFolderOr([String def = ""]) => getShareFolder() ?? def;
Future<bool> setShareFolder(String value) => _set<String>(
AccountPrefKey.shareFolder,
value,
(key, value) => provider.setString(key, value));
bool? hasNewSharedAlbum() =>
provider.getBool(AccountPrefKey.hasNewSharedAlbum);
bool hasNewSharedAlbumOr([bool def = false]) => hasNewSharedAlbum() ?? def;
Future<bool> setNewSharedAlbum(bool value) => _set<bool>(
AccountPrefKey.hasNewSharedAlbum,
value,
(key, value) => provider.setBool(key, value));
bool? isEnableMemoryAlbum() =>
provider.getBool(AccountPrefKey.isEnableMemoryAlbum);
bool isEnableMemoryAlbumOr([bool def = false]) =>
isEnableMemoryAlbum() ?? def;
Future<bool> setEnableMemoryAlbum(bool value) => _set<bool>(
AccountPrefKey.isEnableMemoryAlbum,
value,
(key, value) => provider.setBool(key, value));
String? getTouchRootEtag() =>
provider.getString(AccountPrefKey.touchRootEtag);
String getTouchRootEtagOr([String def = ""]) => getTouchRootEtag() ?? def;
Future<bool> setTouchRootEtag(String value) => _set<String>(
AccountPrefKey.touchRootEtag,
value,
(key, value) => provider.setString(key, value));
Future<bool> removeTouchRootEtag() => _remove(AccountPrefKey.touchRootEtag);
String? getAccountLabel() => provider.getString(AccountPrefKey.accountLabel);
String getAccountLabelOr([String def = ""]) => getAccountLabel() ?? def;
Future<bool> setAccountLabel(String? value) {
if (value == null) {
return _remove(AccountPrefKey.accountLabel);
} else {
return _set<String>(AccountPrefKey.accountLabel, value,
(key, value) => provider.setString(key, value));
}
}
int? getLastNewCollectionType() =>
provider.getInt(AccountPrefKey.lastNewCollectionType);
int getLastNewCollectionTypeOr(int def) => getLastNewCollectionType() ?? def;
Future<bool> setLastNewCollectionType(int? value) {
if (value == null) {
return _remove(AccountPrefKey.lastNewCollectionType);
} else {
return _set<int>(AccountPrefKey.lastNewCollectionType, value,
(key, value) => provider.setInt(key, value));
}
}
}

View file

@ -7,28 +7,29 @@ class PrefMemoryProvider extends PrefProvider {
]) : _data = Map.of(initialData); ]) : _data = Map.of(initialData);
@override @override
bool? getBool(PrefKey key) => _get<bool>(key); bool? getBool(PrefKeyInterface key) => _get<bool>(key);
@override @override
Future<bool> setBool(PrefKey key, bool value) => _set(key, value); Future<bool> setBool(PrefKeyInterface key, bool value) => _set(key, value);
@override @override
int? getInt(PrefKey key) => _get<int>(key); int? getInt(PrefKeyInterface key) => _get<int>(key);
@override @override
Future<bool> setInt(PrefKey key, int value) => _set(key, value); Future<bool> setInt(PrefKeyInterface key, int value) => _set(key, value);
@override @override
String? getString(PrefKey key) => _get<String>(key); String? getString(PrefKeyInterface key) => _get<String>(key);
@override @override
Future<bool> setString(PrefKey key, String value) => _set(key, value); Future<bool> setString(PrefKeyInterface key, String value) =>
@override
List<String>? getStringList(PrefKey key) => _get<List<String>>(key);
@override
Future<bool> setStringList(PrefKey key, List<String> value) =>
_set(key, value); _set(key, value);
@override @override
Future<bool> remove(PrefKey key) async { List<String>? getStringList(PrefKeyInterface key) => _get<List<String>>(key);
@override
Future<bool> setStringList(PrefKeyInterface key, List<String> value) =>
_set(key, value);
@override
Future<bool> remove(PrefKeyInterface key) async {
_data.remove(key); _data.remove(key);
return true; return true;
} }
@ -39,9 +40,9 @@ class PrefMemoryProvider extends PrefProvider {
return true; return true;
} }
T? _get<T>(PrefKey key) => _data[key.toStringKey()]; T? _get<T>(PrefKeyInterface key) => _data[key.toStringKey()];
Future<bool> _set<T>(PrefKey key, T value) async { Future<bool> _set<T>(PrefKeyInterface key, T value) async {
_data[key.toStringKey()] = value; _data[key.toStringKey()] = value;
return true; return true;
} }

View file

@ -20,36 +20,36 @@ class PrefSharedPreferencesProvider extends PrefProvider {
} }
@override @override
bool? getBool(PrefKey key) => _pref.getBool(key.toStringKey()); bool? getBool(PrefKeyInterface key) => _pref.getBool(key.toStringKey());
@override @override
Future<bool> setBool(PrefKey key, bool value) => Future<bool> setBool(PrefKeyInterface key, bool value) =>
_pref.setBool(key.toStringKey(), value); _pref.setBool(key.toStringKey(), value);
@override @override
int? getInt(PrefKey key) => _pref.getInt(key.toStringKey()); int? getInt(PrefKeyInterface key) => _pref.getInt(key.toStringKey());
@override @override
Future<bool> setInt(PrefKey key, int value) => Future<bool> setInt(PrefKeyInterface key, int value) =>
_pref.setInt(key.toStringKey(), value); _pref.setInt(key.toStringKey(), value);
@override @override
String? getString(PrefKey key) => _pref.getString(key.toStringKey()); String? getString(PrefKeyInterface key) => _pref.getString(key.toStringKey());
@override @override
Future<bool> setString(PrefKey key, String value) => Future<bool> setString(PrefKeyInterface key, String value) =>
_pref.setString(key.toStringKey(), value); _pref.setString(key.toStringKey(), value);
@override @override
List<String>? getStringList(PrefKey key) => List<String>? getStringList(PrefKeyInterface key) =>
_pref.getStringList(key.toStringKey()); _pref.getStringList(key.toStringKey());
@override @override
Future<bool> setStringList(PrefKey key, List<String> value) => Future<bool> setStringList(PrefKeyInterface key, List<String> value) =>
_pref.setStringList(key.toStringKey(), value); _pref.setStringList(key.toStringKey(), value);
@override @override
Future<bool> remove(PrefKey key) => _pref.remove(key.toStringKey()); Future<bool> remove(PrefKeyInterface key) => _pref.remove(key.toStringKey());
@override @override
Future<bool> clear() => _pref.clear(); Future<bool> clear() => _pref.clear();

View file

@ -16,28 +16,29 @@ class PrefUniversalStorageProvider extends PrefProvider {
} }
@override @override
bool? getBool(PrefKey key) => _get<bool>(key); bool? getBool(PrefKeyInterface key) => _get<bool>(key);
@override @override
Future<bool> setBool(PrefKey key, bool value) => _set(key, value); Future<bool> setBool(PrefKeyInterface key, bool value) => _set(key, value);
@override @override
int? getInt(PrefKey key) => _get<int>(key); int? getInt(PrefKeyInterface key) => _get<int>(key);
@override @override
Future<bool> setInt(PrefKey key, int value) => _set(key, value); Future<bool> setInt(PrefKeyInterface key, int value) => _set(key, value);
@override @override
String? getString(PrefKey key) => _get<String>(key); String? getString(PrefKeyInterface key) => _get<String>(key);
@override @override
Future<bool> setString(PrefKey key, String value) => _set(key, value); Future<bool> setString(PrefKeyInterface key, String value) =>
@override
List<String>? getStringList(PrefKey key) => _get<List<String>>(key);
@override
Future<bool> setStringList(PrefKey key, List<String> value) =>
_set(key, value); _set(key, value);
@override @override
Future<bool> remove(PrefKey key) async { List<String>? getStringList(PrefKeyInterface key) => _get<List<String>>(key);
@override
Future<bool> setStringList(PrefKeyInterface key, List<String> value) =>
_set(key, value);
@override
Future<bool> remove(PrefKeyInterface key) async {
final newData = Map.of(_data)..remove(key.toStringKey()); final newData = Map.of(_data)..remove(key.toStringKey());
await platform.UniversalStorage().putString(name, jsonEncode(newData)); await platform.UniversalStorage().putString(name, jsonEncode(newData));
_data.remove(key.toStringKey()); _data.remove(key.toStringKey());
@ -51,9 +52,9 @@ class PrefUniversalStorageProvider extends PrefProvider {
return true; return true;
} }
T? _get<T>(PrefKey key) => _data[key.toStringKey()]; T? _get<T>(PrefKeyInterface key) => _data[key.toStringKey()];
Future<bool> _set<T>(PrefKey key, T value) async { Future<bool> _set<T>(PrefKeyInterface key, T value) async {
final newData = Map.of(_data) final newData = Map.of(_data)
..addEntries([MapEntry(key.toStringKey(), value)]); ..addEntries([MapEntry(key.toStringKey(), value)]);
await platform.UniversalStorage().putString(name, jsonEncode(newData)); await platform.UniversalStorage().putString(name, jsonEncode(newData));

View file

@ -42,7 +42,7 @@ class AccountPrefUpdatedEvent {
const AccountPrefUpdatedEvent(this.pref, this.key, this.value); const AccountPrefUpdatedEvent(this.pref, this.key, this.value);
final AccountPref pref; final AccountPref pref;
final PrefKey key; final AccountPrefKey key;
final dynamic value; final dynamic value;
} }