mirror of
https://gitlab.com/nkming2/nc-photos.git
synced 2025-02-02 06:46:22 +01:00
Move more pref to controller
This commit is contained in:
parent
3ab0829ba2
commit
0feb6aa59b
11 changed files with 76 additions and 75 deletions
|
@ -5,7 +5,6 @@ import 'dart:convert';
|
|||
import 'package:flutter/material.dart';
|
||||
import 'package:logging/logging.dart';
|
||||
import 'package:nc_photos/account.dart';
|
||||
import 'package:nc_photos/di_container.dart';
|
||||
import 'package:nc_photos/entity/collection/util.dart';
|
||||
import 'package:nc_photos/entity/pref.dart';
|
||||
import 'package:nc_photos/json_util.dart';
|
||||
|
@ -24,7 +23,7 @@ part 'pref_controller/util.dart';
|
|||
|
||||
@npSubjectAccessor
|
||||
class PrefController {
|
||||
PrefController(this._c);
|
||||
PrefController(this.pref);
|
||||
|
||||
Future<bool> setAccounts(List<Account> value) => _set<List<Account>>(
|
||||
controller: _accountsController,
|
||||
|
@ -32,7 +31,7 @@ class PrefController {
|
|||
value: value,
|
||||
);
|
||||
|
||||
Future<bool> setCurrentAccountIndex(int value) => _setOrRemove<int>(
|
||||
Future<bool> setCurrentAccountIndex(int? value) => _setOrRemove<int>(
|
||||
controller: _currentAccountIndexController,
|
||||
setter: (pref, value) => pref.setCurrentAccountIndex(value),
|
||||
remover: (pref) => pref.setCurrentAccountIndex(null),
|
||||
|
@ -203,7 +202,7 @@ class PrefController {
|
|||
required T value,
|
||||
}) =>
|
||||
_doSet(
|
||||
pref: _c.pref,
|
||||
pref: pref,
|
||||
controller: controller,
|
||||
setter: setter,
|
||||
value: value,
|
||||
|
@ -217,7 +216,7 @@ class PrefController {
|
|||
T? defaultValue,
|
||||
}) =>
|
||||
_doSetOrRemove(
|
||||
pref: _c.pref,
|
||||
pref: pref,
|
||||
controller: controller,
|
||||
setter: setter,
|
||||
remover: remover,
|
||||
|
@ -233,90 +232,91 @@ class PrefController {
|
|||
}
|
||||
}
|
||||
|
||||
final DiContainer _c;
|
||||
final Pref pref;
|
||||
|
||||
@npSubjectAccessor
|
||||
late final _accountsController =
|
||||
BehaviorSubject.seeded(_c.pref.getAccounts3() ?? []);
|
||||
BehaviorSubject.seeded(pref.getAccounts3() ?? []);
|
||||
@npSubjectAccessor
|
||||
late final _currentAccountIndexController =
|
||||
BehaviorSubject.seeded(_c.pref.getCurrentAccountIndex());
|
||||
BehaviorSubject.seeded(pref.getCurrentAccountIndex());
|
||||
@npSubjectAccessor
|
||||
late final _languageController =
|
||||
BehaviorSubject.seeded(_langIdToAppLanguage(_c.pref.getLanguageOr(0)));
|
||||
BehaviorSubject.seeded(_langIdToAppLanguage(pref.getLanguageOr(0)));
|
||||
@npSubjectAccessor
|
||||
late final _homePhotosZoomLevelController =
|
||||
BehaviorSubject.seeded(_c.pref.getHomePhotosZoomLevelOr(0));
|
||||
BehaviorSubject.seeded(pref.getHomePhotosZoomLevelOr(0));
|
||||
@npSubjectAccessor
|
||||
late final _albumBrowserZoomLevelController =
|
||||
BehaviorSubject.seeded(_c.pref.getAlbumBrowserZoomLevelOr(0));
|
||||
BehaviorSubject.seeded(pref.getAlbumBrowserZoomLevelOr(0));
|
||||
@npSubjectAccessor
|
||||
late final _homeAlbumsSortController = BehaviorSubject.seeded(
|
||||
CollectionSort.values[_c.pref.getHomeAlbumsSortOr(0)]);
|
||||
CollectionSort.values[pref.getHomeAlbumsSortOr(0)]);
|
||||
@npSubjectAccessor
|
||||
late final _isEnableExifController =
|
||||
BehaviorSubject.seeded(_c.pref.isEnableExifOr(true));
|
||||
BehaviorSubject.seeded(pref.isEnableExifOr(true));
|
||||
@npSubjectAccessor
|
||||
late final _shouldProcessExifWifiOnlyController =
|
||||
BehaviorSubject.seeded(_c.pref.shouldProcessExifWifiOnlyOr(true));
|
||||
BehaviorSubject.seeded(pref.shouldProcessExifWifiOnlyOr(true));
|
||||
@npSubjectAccessor
|
||||
late final _memoriesRangeController =
|
||||
BehaviorSubject.seeded(_c.pref.getMemoriesRangeOr(2));
|
||||
BehaviorSubject.seeded(pref.getMemoriesRangeOr(2));
|
||||
@npSubjectAccessor
|
||||
late final _viewerScreenBrightnessController =
|
||||
BehaviorSubject.seeded(_c.pref.getViewerScreenBrightnessOr(-1));
|
||||
BehaviorSubject.seeded(pref.getViewerScreenBrightnessOr(-1));
|
||||
@npSubjectAccessor
|
||||
late final _isViewerForceRotationController =
|
||||
BehaviorSubject.seeded(_c.pref.isViewerForceRotationOr(false));
|
||||
BehaviorSubject.seeded(pref.isViewerForceRotationOr(false));
|
||||
@npSubjectAccessor
|
||||
late final _gpsMapProviderController = BehaviorSubject.seeded(
|
||||
GpsMapProvider.values[_c.pref.getGpsMapProviderOr(0)]);
|
||||
GpsMapProvider.values[pref.getGpsMapProviderOr(0)]);
|
||||
@npSubjectAccessor
|
||||
late final _isAlbumBrowserShowDateController =
|
||||
BehaviorSubject.seeded(_c.pref.isAlbumBrowserShowDateOr(false));
|
||||
BehaviorSubject.seeded(pref.isAlbumBrowserShowDateOr(false));
|
||||
@npSubjectAccessor
|
||||
late final _isDoubleTapExitController =
|
||||
BehaviorSubject.seeded(_c.pref.isDoubleTapExitOr(false));
|
||||
BehaviorSubject.seeded(pref.isDoubleTapExitOr(false));
|
||||
@npSubjectAccessor
|
||||
late final _isSaveEditResultToServerController =
|
||||
BehaviorSubject.seeded(_c.pref.isSaveEditResultToServerOr(true));
|
||||
BehaviorSubject.seeded(pref.isSaveEditResultToServerOr(true));
|
||||
@npSubjectAccessor
|
||||
late final _enhanceMaxSizeController = BehaviorSubject.seeded(
|
||||
SizeInt(_c.pref.getEnhanceMaxWidthOr(), _c.pref.getEnhanceMaxHeightOr()));
|
||||
SizeInt(pref.getEnhanceMaxWidthOr(), pref.getEnhanceMaxHeightOr()));
|
||||
@npSubjectAccessor
|
||||
late final _isDarkThemeController =
|
||||
BehaviorSubject.seeded(_c.pref.isDarkThemeOr(false));
|
||||
BehaviorSubject.seeded(pref.isDarkThemeOr(false));
|
||||
@npSubjectAccessor
|
||||
late final _isFollowSystemThemeController =
|
||||
BehaviorSubject.seeded(_c.pref.isFollowSystemThemeOr(false));
|
||||
BehaviorSubject.seeded(pref.isFollowSystemThemeOr(false));
|
||||
@npSubjectAccessor
|
||||
late final _isUseBlackInDarkThemeController =
|
||||
BehaviorSubject.seeded(_c.pref.isUseBlackInDarkThemeOr(false));
|
||||
BehaviorSubject.seeded(pref.isUseBlackInDarkThemeOr(false));
|
||||
@NpSubjectAccessor(type: "Color?")
|
||||
late final _seedColorController =
|
||||
BehaviorSubject<Color?>.seeded(_c.pref.getSeedColor()?.let(Color.new));
|
||||
BehaviorSubject<Color?>.seeded(pref.getSeedColor()?.let(Color.new));
|
||||
@NpSubjectAccessor(type: "Color?")
|
||||
late final _secondarySeedColorController = BehaviorSubject<Color?>.seeded(
|
||||
_c.pref.getSecondarySeedColor()?.let(Color.new));
|
||||
pref.getSecondarySeedColor()?.let(Color.new));
|
||||
@npSubjectAccessor
|
||||
late final _isDontShowVideoPreviewHintController =
|
||||
BehaviorSubject.seeded(_c.pref.isDontShowVideoPreviewHintOr(false));
|
||||
BehaviorSubject.seeded(pref.isDontShowVideoPreviewHintOr(false));
|
||||
@npSubjectAccessor
|
||||
late final _mapBrowserPrevPositionController = BehaviorSubject.seeded(_c.pref
|
||||
late final _mapBrowserPrevPositionController = BehaviorSubject.seeded(pref
|
||||
.getMapBrowserPrevPosition()
|
||||
?.let(tryJsonDecode)
|
||||
?.let(_tryMapCoordFromJson));
|
||||
@npSubjectAccessor
|
||||
late final _isNewHttpEngineController =
|
||||
BehaviorSubject.seeded(_c.pref.isNewHttpEngine() ?? false);
|
||||
BehaviorSubject.seeded(pref.isNewHttpEngine() ?? false);
|
||||
@npSubjectAccessor
|
||||
late final _firstRunTimeController = BehaviorSubject.seeded(_c.pref
|
||||
late final _firstRunTimeController = BehaviorSubject.seeded(pref
|
||||
.getFirstRunTime()
|
||||
?.let((v) => DateTime.fromMillisecondsSinceEpoch(v).toUtc()));
|
||||
@npSubjectAccessor
|
||||
late final _lastVersionController =
|
||||
BehaviorSubject.seeded(_c.pref.getLastVersion() ??
|
||||
BehaviorSubject.seeded(pref.getLastVersion() ??
|
||||
// v6 is the last version without saving the version number in pref
|
||||
(_c.pref.getSetupProgress() == null ? k.version : 6));
|
||||
(pref.getSetupProgress() == null ? k.version : 6));
|
||||
}
|
||||
|
||||
extension PrefControllerExtension on PrefController {
|
||||
|
@ -331,7 +331,7 @@ extension PrefControllerExtension on PrefController {
|
|||
|
||||
@npSubjectAccessor
|
||||
class SecurePrefController {
|
||||
SecurePrefController(this._c);
|
||||
SecurePrefController(this.securePref);
|
||||
|
||||
Future<bool> setProtectedPageAuthType(ProtectedPageAuthType? value) =>
|
||||
_setOrRemove<ProtectedPageAuthType>(
|
||||
|
@ -366,7 +366,7 @@ class SecurePrefController {
|
|||
required T value,
|
||||
}) =>
|
||||
_doSet(
|
||||
pref: _c.securePref,
|
||||
pref: securePref,
|
||||
controller: controller,
|
||||
setter: setter,
|
||||
value: value,
|
||||
|
@ -381,7 +381,7 @@ class SecurePrefController {
|
|||
T? defaultValue,
|
||||
}) =>
|
||||
_doSetOrRemove(
|
||||
pref: _c.securePref,
|
||||
pref: securePref,
|
||||
controller: controller,
|
||||
setter: setter,
|
||||
remover: remover,
|
||||
|
@ -389,18 +389,19 @@ class SecurePrefController {
|
|||
defaultValue: defaultValue,
|
||||
);
|
||||
|
||||
final DiContainer _c;
|
||||
final Pref securePref;
|
||||
|
||||
@npSubjectAccessor
|
||||
late final _protectedPageAuthTypeController = BehaviorSubject.seeded(_c
|
||||
.securePref
|
||||
.getProtectedPageAuthType()
|
||||
?.let((e) => ProtectedPageAuthType.values[e]));
|
||||
late final _protectedPageAuthTypeController = BehaviorSubject.seeded(
|
||||
securePref
|
||||
.getProtectedPageAuthType()
|
||||
?.let((e) => ProtectedPageAuthType.values[e]));
|
||||
@npSubjectAccessor
|
||||
late final _protectedPageAuthPinController =
|
||||
BehaviorSubject.seeded(_c.securePref.getProtectedPageAuthPin()?.toCi());
|
||||
BehaviorSubject.seeded(securePref.getProtectedPageAuthPin()?.toCi());
|
||||
@npSubjectAccessor
|
||||
late final _protectedPageAuthPasswordController = BehaviorSubject.seeded(
|
||||
_c.securePref.getProtectedPageAuthPassword()?.toCi());
|
||||
late final _protectedPageAuthPasswordController =
|
||||
BehaviorSubject.seeded(securePref.getProtectedPageAuthPassword()?.toCi());
|
||||
}
|
||||
|
||||
Future<bool> _doSet<T>({
|
||||
|
|
|
@ -110,6 +110,15 @@ extension on Pref {
|
|||
return provider.setInt(PrefKey.firstRunTime, value);
|
||||
}
|
||||
}
|
||||
|
||||
int? getCurrentAccountIndex() => provider.getInt(PrefKey.currentAccountIndex);
|
||||
Future<bool> setCurrentAccountIndex(int? value) {
|
||||
if (value == null) {
|
||||
return provider.remove(PrefKey.currentAccountIndex);
|
||||
} else {
|
||||
return provider.setInt(PrefKey.currentAccountIndex, value);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
MapCoord? _tryMapCoordFromJson(dynamic json) {
|
||||
|
|
|
@ -1,14 +1,6 @@
|
|||
part of '../pref.dart';
|
||||
|
||||
extension PrefExtension on Pref {
|
||||
Account? getCurrentAccount() {
|
||||
try {
|
||||
return getAccounts3()![getCurrentAccountIndex()!];
|
||||
} catch (_) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
List<Account>? getAccounts3() {
|
||||
final jsonObjs = provider.getStringList(PrefKey.accounts3);
|
||||
return jsonObjs
|
||||
|
@ -36,17 +28,6 @@ extension PrefExtension on Pref {
|
|||
}
|
||||
}
|
||||
|
||||
int? getCurrentAccountIndex() => provider.getInt(PrefKey.currentAccountIndex);
|
||||
int getCurrentAccountIndexOr(int def) => getCurrentAccountIndex() ?? def;
|
||||
Future<bool> setCurrentAccountIndex(int? value) {
|
||||
if (value == null) {
|
||||
return _remove(PrefKey.currentAccountIndex);
|
||||
} else {
|
||||
return _set<int>(PrefKey.currentAccountIndex, value,
|
||||
(key, value) => provider.setInt(key, value));
|
||||
}
|
||||
}
|
||||
|
||||
int? getHomePhotosZoomLevel() => provider.getInt(PrefKey.homePhotosZoomLevel);
|
||||
int getHomePhotosZoomLevelOr(int def) => getHomePhotosZoomLevel() ?? def;
|
||||
Future<bool> setHomePhotosZoomLevel(int value) => _set<int>(
|
||||
|
|
|
@ -5,6 +5,7 @@ import 'package:flutter_bloc/flutter_bloc.dart';
|
|||
import 'package:logging/logging.dart';
|
||||
import 'package:nc_photos/account.dart';
|
||||
import 'package:nc_photos/app_localizations.dart';
|
||||
import 'package:nc_photos/controller/pref_controller.dart';
|
||||
import 'package:nc_photos/db/entity_converter.dart';
|
||||
import 'package:nc_photos/entity/pref.dart';
|
||||
import 'package:nc_photos/entity/pref_util.dart' as pref_util;
|
||||
|
@ -315,8 +316,9 @@ class _SignInState extends State<SignIn> {
|
|||
_log.shout("[_connect] Failed reading pref for account: $account", e,
|
||||
stackTrace);
|
||||
}
|
||||
final prefController = context.read<PrefController>();
|
||||
unawaited(Pref().setAccounts3(accounts));
|
||||
unawaited(Pref().setCurrentAccountIndex(accounts.indexOf(account)));
|
||||
unawaited(prefController.setCurrentAccountIndex(accounts.indexOf(account)));
|
||||
}
|
||||
|
||||
final _formKey = GlobalKey<FormState>();
|
||||
|
|
|
@ -10,6 +10,7 @@ import 'package:logging/logging.dart';
|
|||
import 'package:nc_photos/account.dart';
|
||||
import 'package:nc_photos/app_init.dart' as app_init;
|
||||
import 'package:nc_photos/app_localizations.dart';
|
||||
import 'package:nc_photos/controller/pref_controller.dart';
|
||||
import 'package:nc_photos/di_container.dart';
|
||||
import 'package:nc_photos/entity/file.dart';
|
||||
import 'package:nc_photos/entity/file/data_source.dart';
|
||||
|
@ -104,7 +105,8 @@ class _Service {
|
|||
}
|
||||
|
||||
Future<void> _doWork() async {
|
||||
final account = Pref().getCurrentAccount();
|
||||
final prefController = PrefController(Pref());
|
||||
final account = prefController.currentAccountValue;
|
||||
if (account == null) {
|
||||
_log.shout("[_doWork] account == null");
|
||||
return;
|
||||
|
|
|
@ -47,7 +47,7 @@ class _Bloc extends Bloc<_Event, _State> with BlocLogger {
|
|||
if (index == -1) {
|
||||
throw StateError("Account not found");
|
||||
}
|
||||
await _c.pref.setCurrentAccountIndex(index);
|
||||
await prefController.setCurrentAccountIndex(index);
|
||||
emit(state.copyWith(newSelectAccount: ev.account));
|
||||
});
|
||||
}
|
||||
|
@ -60,7 +60,8 @@ class _Bloc extends Bloc<_Event, _State> with BlocLogger {
|
|||
try {
|
||||
await _prefLock.protect(() async {
|
||||
final accounts = _c.pref.getAccounts3()!;
|
||||
final currentAccount = accounts[_c.pref.getCurrentAccountIndex()!];
|
||||
final currentAccount =
|
||||
accounts[prefController.currentAccountIndexValue!];
|
||||
accounts.remove(ev.account);
|
||||
final newAccountIndex = accounts.indexOf(currentAccount);
|
||||
if (newAccountIndex == -1) {
|
||||
|
@ -74,7 +75,7 @@ class _Bloc extends Bloc<_Event, _State> with BlocLogger {
|
|||
stackTrace);
|
||||
}
|
||||
await Pref().setAccounts3(accounts);
|
||||
await Pref().setCurrentAccountIndex(newAccountIndex);
|
||||
await prefController.setCurrentAccountIndex(newAccountIndex);
|
||||
|
||||
// check if the same account (server + userId) still exists in known
|
||||
// accounts
|
||||
|
|
|
@ -78,10 +78,10 @@ class MyApp extends StatelessWidget {
|
|||
return MultiRepositoryProvider(
|
||||
providers: [
|
||||
RepositoryProvider(
|
||||
create: (_) => PrefController(_c),
|
||||
create: (_) => PrefController(_c.pref),
|
||||
),
|
||||
RepositoryProvider(
|
||||
create: (_) => SecurePrefController(_c),
|
||||
create: (_) => SecurePrefController(_c.securePref),
|
||||
),
|
||||
RepositoryProvider(
|
||||
create: (context) => AccountController(
|
||||
|
|
|
@ -1,11 +1,12 @@
|
|||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||
import 'package:kiwi/kiwi.dart';
|
||||
import 'package:logging/logging.dart';
|
||||
import 'package:nc_photos/account.dart';
|
||||
import 'package:nc_photos/app_localizations.dart';
|
||||
import 'package:nc_photos/controller/pref_controller.dart';
|
||||
import 'package:nc_photos/di_container.dart';
|
||||
import 'package:nc_photos/entity/file.dart';
|
||||
import 'package:nc_photos/entity/pref.dart';
|
||||
import 'package:nc_photos/k.dart' as k;
|
||||
import 'package:nc_photos/snack_bar_manager.dart';
|
||||
import 'package:nc_photos/theme.dart';
|
||||
|
@ -84,7 +85,7 @@ class _ResultViewerState extends State<ResultViewer> {
|
|||
|
||||
Future<void> _doWork() async {
|
||||
_log.info("[_doWork] URL: ${widget.resultUrl}");
|
||||
_account = _c.pref.getCurrentAccount();
|
||||
_account = context.read<PrefController>().currentAccountValue;
|
||||
if (_account == null) {
|
||||
SnackBarManager().showSnackBar(SnackBar(
|
||||
content: Text(L10n.global().errorUnauthenticated),
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||
import 'package:nc_photos/app_localizations.dart';
|
||||
import 'package:nc_photos/controller/pref_controller.dart';
|
||||
import 'package:nc_photos/entity/pref.dart';
|
||||
import 'package:nc_photos/k.dart' as k;
|
||||
import 'package:nc_photos/widget/home.dart';
|
||||
|
@ -97,7 +99,7 @@ class _SetupState extends State<Setup> {
|
|||
void _onDonePressed() {
|
||||
Pref().setSetupProgress(_PageId.all);
|
||||
|
||||
final account = Pref().getCurrentAccount();
|
||||
final account = context.read<PrefController>().currentAccountValue;
|
||||
if (account == null) {
|
||||
Navigator.pushReplacementNamed(context, SignIn.routeName);
|
||||
} else {
|
||||
|
|
|
@ -6,6 +6,7 @@ import 'package:flutter_bloc/flutter_bloc.dart';
|
|||
import 'package:logging/logging.dart';
|
||||
import 'package:nc_photos/account.dart';
|
||||
import 'package:nc_photos/app_localizations.dart';
|
||||
import 'package:nc_photos/controller/pref_controller.dart';
|
||||
import 'package:nc_photos/db/entity_converter.dart';
|
||||
import 'package:nc_photos/entity/pref.dart';
|
||||
import 'package:nc_photos/entity/pref_util.dart' as pref_util;
|
||||
|
@ -183,8 +184,9 @@ class _SignInState extends State<SignIn> {
|
|||
_log.shout("[_connect] Failed reading pref for account: $account", e,
|
||||
stackTrace);
|
||||
}
|
||||
final prefController = context.read<PrefController>();
|
||||
unawaited(Pref().setAccounts3(accounts));
|
||||
unawaited(Pref().setCurrentAccountIndex(accounts.indexOf(account)));
|
||||
unawaited(prefController.setCurrentAccountIndex(accounts.indexOf(account)));
|
||||
}
|
||||
|
||||
final _formKey = GlobalKey<FormState>();
|
||||
|
|
|
@ -118,7 +118,7 @@ class _Bloc extends Bloc<_Event, _State> with BlocLogger {
|
|||
} catch (e, stackTrace) {
|
||||
_log.shout("[_upgrade46] Failed while clearDefaultCache", e, stackTrace);
|
||||
unawaited(Pref().setAccounts3(null));
|
||||
unawaited(Pref().setCurrentAccountIndex(null));
|
||||
unawaited(prefController.setCurrentAccountIndex(null));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue