diff --git a/app/lib/account.dart b/app/lib/account.dart index ab091af4..9e907a0a 100644 --- a/app/lib/account.dart +++ b/app/lib/account.dart @@ -110,7 +110,7 @@ extension AccountExtension on Account { /// /// Return true if two Accounts point to the same user on server. Be careful /// that this does NOT mean that the two Accounts are identical (e.g., they - /// can have difference password) + /// can have different password) bool compareServerIdentity(Account other) { return scheme == other.scheme && address == other.address && diff --git a/app/lib/controller/account_pref_controller.dart b/app/lib/controller/account_pref_controller.dart index 1b6aa39a..ffde9669 100644 --- a/app/lib/controller/account_pref_controller.dart +++ b/app/lib/controller/account_pref_controller.dart @@ -6,6 +6,7 @@ import 'package:np_codegen/np_codegen.dart'; import 'package:rxdart/rxdart.dart'; part 'account_pref_controller.g.dart'; +part 'account_pref_controller/util.dart'; @npLog @npSubjectAccessor @@ -45,6 +46,12 @@ class AccountPrefController { value: value, ); + Future setNewSharedAlbum(bool value) => _set( + controller: _hasNewSharedAlbumController, + setter: (pref, value) => pref.setNewSharedAlbum(value), + value: value, + ); + Future _set({ required BehaviorSubject controller, required Future Function(AccountPref pref, T value) setter, @@ -79,4 +86,7 @@ class AccountPrefController { @npSubjectAccessor late final _isEnableMemoryAlbumController = BehaviorSubject.seeded(_accountPref.isEnableMemoryAlbumOr(true)); + @npSubjectAccessor + late final _hasNewSharedAlbumController = + BehaviorSubject.seeded(_accountPref.hasNewSharedAlbum() ?? false); } diff --git a/app/lib/controller/account_pref_controller.g.dart b/app/lib/controller/account_pref_controller.g.dart index acdd0deb..fff374da 100644 --- a/app/lib/controller/account_pref_controller.g.dart +++ b/app/lib/controller/account_pref_controller.g.dart @@ -43,4 +43,11 @@ extension $AccountPrefControllerNpSubjectAccessor on AccountPrefController { Stream get isEnableMemoryAlbumChange => isEnableMemoryAlbum.distinct().skip(1); bool get isEnableMemoryAlbumValue => _isEnableMemoryAlbumController.value; +// _hasNewSharedAlbumController + ValueStream get hasNewSharedAlbum => + _hasNewSharedAlbumController.stream; + Stream get hasNewSharedAlbumNew => hasNewSharedAlbum.skip(1); + Stream get hasNewSharedAlbumChange => + hasNewSharedAlbum.distinct().skip(1); + bool get hasNewSharedAlbumValue => _hasNewSharedAlbumController.value; } diff --git a/app/lib/controller/account_pref_controller/util.dart b/app/lib/controller/account_pref_controller/util.dart new file mode 100644 index 00000000..48b368a8 --- /dev/null +++ b/app/lib/controller/account_pref_controller/util.dart @@ -0,0 +1,8 @@ +part of '../account_pref_controller.dart'; + +extension on AccountPref { + bool? hasNewSharedAlbum() => + provider.getBool(AccountPrefKey.hasNewSharedAlbum); + // Future setNewSharedAlbum(bool value) => + // provider.setBool(AccountPrefKey.hasNewSharedAlbum, value); +} diff --git a/app/lib/entity/pref/extension.dart b/app/lib/entity/pref/extension.dart index 42ad9fe7..365eb8b8 100644 --- a/app/lib/entity/pref/extension.dart +++ b/app/lib/entity/pref/extension.dart @@ -175,9 +175,6 @@ extension AccountPrefExtension on AccountPref { 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, diff --git a/app/lib/widget/home.dart b/app/lib/widget/home.dart index 98dafc7d..ca54b503 100644 --- a/app/lib/widget/home.dart +++ b/app/lib/widget/home.dart @@ -61,11 +61,17 @@ class Home extends StatefulWidget { @npLog class _HomeState extends State with TickerProviderStateMixin { @override - initState() { + void initState() { super.initState(); + final accountController = context.read(); _importPotentialSharedAlbum().then((value) { if (value.isNotEmpty) { - AccountPref.of(widget.account).setNewSharedAlbum(true); + // check if account changed + if (accountController.account.compareServerIdentity(widget.account)) { + accountController.accountPrefController.setNewSharedAlbum(true); + } else { + AccountPref.of(widget.account).setNewSharedAlbum(true); + } } }); _animationController.value = 1; diff --git a/app/lib/widget/home_collections.dart b/app/lib/widget/home_collections.dart index 6f28fcd0..1f3b3fd8 100644 --- a/app/lib/widget/home_collections.dart +++ b/app/lib/widget/home_collections.dart @@ -12,6 +12,7 @@ import 'package:nc_photos/app_localizations.dart'; import 'package:nc_photos/bloc_util.dart'; import 'package:nc_photos/cache_manager_util.dart'; import 'package:nc_photos/controller/account_controller.dart'; +import 'package:nc_photos/controller/account_pref_controller.dart'; import 'package:nc_photos/controller/collections_controller.dart'; import 'package:nc_photos/controller/pref_controller.dart'; import 'package:nc_photos/entity/album/provider.dart'; @@ -19,7 +20,6 @@ import 'package:nc_photos/entity/collection.dart'; import 'package:nc_photos/entity/collection/content_provider/album.dart'; import 'package:nc_photos/entity/collection/content_provider/nc_album.dart'; import 'package:nc_photos/entity/collection/util.dart' as collection_util; -import 'package:nc_photos/entity/pref.dart'; import 'package:nc_photos/exception_event.dart'; import 'package:nc_photos/k.dart' as k; import 'package:nc_photos/np_api_util.dart'; diff --git a/app/lib/widget/home_collections/view.dart b/app/lib/widget/home_collections/view.dart index bc4caf5d..ab9f2baf 100644 --- a/app/lib/widget/home_collections/view.dart +++ b/app/lib/widget/home_collections/view.dart @@ -28,7 +28,10 @@ class _ButtonGrid extends StatelessWidget { _ButtonGridItemView( icon: Icons.share_outlined, label: L10n.global().collectionSharingLabel, - isShowIndicator: AccountPref.of(account).hasNewSharedAlbumOr(), + isShowIndicator: context + .read() + .accountPrefController + .hasNewSharedAlbumValue, isEnabled: isEnabled, onTap: () { onSharingPressed?.call(); diff --git a/app/lib/widget/sharing_browser.dart b/app/lib/widget/sharing_browser.dart index 4019881f..dfded6be 100644 --- a/app/lib/widget/sharing_browser.dart +++ b/app/lib/widget/sharing_browser.dart @@ -19,10 +19,8 @@ import 'package:nc_photos/entity/album/data_source.dart'; import 'package:nc_photos/entity/collection/builder.dart'; import 'package:nc_photos/entity/file.dart'; import 'package:nc_photos/entity/file/data_source.dart'; -import 'package:nc_photos/entity/pref.dart'; import 'package:nc_photos/entity/share.dart'; import 'package:nc_photos/exception_event.dart'; -import 'package:nc_photos/object_extension.dart'; import 'package:nc_photos/snack_bar_manager.dart'; import 'package:nc_photos/use_case/import_potential_shared_album.dart'; import 'package:nc_photos/widget/collection_browser.dart'; @@ -41,10 +39,6 @@ part 'sharing_browser/bloc.dart'; part 'sharing_browser/state_event.dart'; part 'sharing_browser/type.dart'; -typedef _BlocBuilder = BlocBuilder<_Bloc, _State>; -typedef _BlocListener = BlocListener<_Bloc, _State>; -// typedef _BlocSelector = BlocSelector<_Bloc, _State, T>; - class SharingBrowserArguments { SharingBrowserArguments(this.account); @@ -86,14 +80,12 @@ class _WrappedSharingBrowser extends StatefulWidget { class _WrappedSharingBrowserState extends State<_WrappedSharingBrowser> with RouteAware, PageVisibilityMixin { @override - initState() { + void initState() { super.initState(); _bloc.add(const _Init()); - AccountPref.of(_bloc.account).run((obj) { - if (obj.hasNewSharedAlbumOr()) { - obj.setNewSharedAlbum(false); - } - }); + if (context.bloc.accountPrefController.hasNewSharedAlbumValue) { + context.bloc.accountPrefController.setNewSharedAlbum(false); + } } @override @@ -360,3 +352,14 @@ const _leadingSize = 56.0; DateFormat _getDateFormat(BuildContext context) => DateFormat( DateFormat.YEAR_ABBR_MONTH_DAY, Localizations.localeOf(context).languageCode); + +typedef _BlocBuilder = BlocBuilder<_Bloc, _State>; +typedef _BlocListener = BlocListener<_Bloc, _State>; +// typedef _BlocListenerT = BlocListenerT<_Bloc, _State, T>; +// typedef _BlocSelector = BlocSelector<_Bloc, _State, T>; + +extension on BuildContext { + _Bloc get bloc => read<_Bloc>(); + // _State get state => bloc.state; + // void addEvent(_Event event) => bloc.add(event); +}