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
return;
}
if (ev.key == PrefKey.shareFolder &&
if (ev.key == AccountPrefKey.shareFolder &&
identical(ev.pref, AccountPref.of(account))) {
_log.info("[_onAccountPrefUpdatedEvent] Request refresh");
_refreshThrottler.trigger(

View file

@ -65,68 +65,8 @@ class AccountPref {
}
}
bool? isEnableFaceRecognitionApp() =>
provider.getBool(PrefKey.isEnableFaceRecognitionApp);
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 {
Future<bool> _set<T>(AccountPrefKey key, T value,
Future<bool> Function(AccountPrefKey key, T value) setFn) async {
if (await setFn(key, value)) {
KiwiContainer()
.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;
static final _insts = <String, AccountPref>{};
}
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<bool> setBool(PrefKey key, bool value);
bool? getBool(PrefKeyInterface key);
Future<bool> setBool(PrefKeyInterface key, bool value);
int? getInt(PrefKey key);
Future<bool> setInt(PrefKey key, int value);
int? getInt(PrefKeyInterface key);
Future<bool> setInt(PrefKeyInterface key, int value);
String? getString(PrefKey key);
Future<bool> setString(PrefKey key, String value);
String? getString(PrefKeyInterface key);
Future<bool> setString(PrefKeyInterface key, String value);
List<String>? getStringList(PrefKey key);
Future<bool> setStringList(PrefKey key, List<String> value);
List<String>? getStringList(PrefKeyInterface key);
Future<bool> setStringList(PrefKeyInterface key, List<String> value);
Future<bool> remove(PrefKey key);
Future<bool> remove(PrefKeyInterface key);
Future<bool> clear();
}

View file

@ -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<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);
@override
bool? getBool(PrefKey key) => _get<bool>(key);
bool? getBool(PrefKeyInterface key) => _get<bool>(key);
@override
Future<bool> setBool(PrefKey key, bool value) => _set(key, value);
Future<bool> setBool(PrefKeyInterface key, bool value) => _set(key, value);
@override
int? getInt(PrefKey key) => _get<int>(key);
int? getInt(PrefKeyInterface key) => _get<int>(key);
@override
Future<bool> setInt(PrefKey key, int value) => _set(key, value);
Future<bool> setInt(PrefKeyInterface key, int value) => _set(key, value);
@override
String? getString(PrefKey key) => _get<String>(key);
String? getString(PrefKeyInterface key) => _get<String>(key);
@override
Future<bool> setString(PrefKey key, String value) => _set(key, value);
@override
List<String>? getStringList(PrefKey key) => _get<List<String>>(key);
@override
Future<bool> setStringList(PrefKey key, List<String> value) =>
Future<bool> setString(PrefKeyInterface key, String value) =>
_set(key, value);
@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);
return true;
}
@ -39,9 +40,9 @@ class PrefMemoryProvider extends PrefProvider {
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;
return true;
}

View file

@ -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<bool> setBool(PrefKey key, bool value) =>
Future<bool> 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<bool> setInt(PrefKey key, int value) =>
Future<bool> 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<bool> setString(PrefKey key, String value) =>
Future<bool> setString(PrefKeyInterface key, String value) =>
_pref.setString(key.toStringKey(), value);
@override
List<String>? getStringList(PrefKey key) =>
List<String>? getStringList(PrefKeyInterface key) =>
_pref.getStringList(key.toStringKey());
@override
Future<bool> setStringList(PrefKey key, List<String> value) =>
Future<bool> setStringList(PrefKeyInterface key, List<String> value) =>
_pref.setStringList(key.toStringKey(), value);
@override
Future<bool> remove(PrefKey key) => _pref.remove(key.toStringKey());
Future<bool> remove(PrefKeyInterface key) => _pref.remove(key.toStringKey());
@override
Future<bool> clear() => _pref.clear();

View file

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

View file

@ -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;
}