diff --git a/apps/weblibre/lib/features/geckoview/features/bookmarks/domain/entities/bookmark_list_ui_state.dart b/apps/weblibre/lib/features/geckoview/features/bookmarks/domain/entities/bookmark_list_ui_state.dart index 78d02954..abb38613 100644 --- a/apps/weblibre/lib/features/geckoview/features/bookmarks/domain/entities/bookmark_list_ui_state.dart +++ b/apps/weblibre/lib/features/geckoview/features/bookmarks/domain/entities/bookmark_list_ui_state.dart @@ -19,15 +19,21 @@ */ import 'package:copy_with_extension/copy_with_extension.dart'; import 'package:fast_equatable/fast_equatable.dart'; +import 'package:json_annotation/json_annotation.dart'; import 'package:weblibre/features/geckoview/features/bookmarks/domain/entities/bookmark_sort_type.dart'; part 'bookmark_list_ui_state.g.dart'; +@JsonSerializable() @CopyWith() class BookmarkListUiState with FastEquatable { + @JsonKey(includeFromJson: false, includeToJson: false) final bool selectionMode; + @JsonKey(includeFromJson: false, includeToJson: false) final Set selectedGuids; + @JsonKey(defaultValue: BookmarkSortType.manual) final BookmarkSortType sortType; + @JsonKey(defaultValue: false) final bool foldersOnly; BookmarkListUiState({ @@ -37,6 +43,11 @@ class BookmarkListUiState with FastEquatable { this.foldersOnly = false, }); + factory BookmarkListUiState.fromJson(Map json) => + _$BookmarkListUiStateFromJson(json); + + Map toJson() => _$BookmarkListUiStateToJson(this); + @override List get hashParameters => [ selectionMode, diff --git a/apps/weblibre/lib/features/geckoview/features/bookmarks/domain/entities/bookmark_list_ui_state.g.dart b/apps/weblibre/lib/features/geckoview/features/bookmarks/domain/entities/bookmark_list_ui_state.g.dart index 64059268..dea5496d 100644 --- a/apps/weblibre/lib/features/geckoview/features/bookmarks/domain/entities/bookmark_list_ui_state.g.dart +++ b/apps/weblibre/lib/features/geckoview/features/bookmarks/domain/entities/bookmark_list_ui_state.g.dart @@ -98,3 +98,32 @@ extension $BookmarkListUiStateCopyWith on BookmarkListUiState { _$BookmarkListUiStateCWProxy get copyWith => _$BookmarkListUiStateCWProxyImpl(this); } + +// ************************************************************************** +// JsonSerializableGenerator +// ************************************************************************** + +BookmarkListUiState _$BookmarkListUiStateFromJson(Map json) => + BookmarkListUiState( + sortType: + $enumDecodeNullable(_$BookmarkSortTypeEnumMap, json['sortType']) ?? + BookmarkSortType.manual, + foldersOnly: json['foldersOnly'] as bool? ?? false, + ); + +Map _$BookmarkListUiStateToJson( + BookmarkListUiState instance, +) => { + 'sortType': _$BookmarkSortTypeEnumMap[instance.sortType]!, + 'foldersOnly': instance.foldersOnly, +}; + +const _$BookmarkSortTypeEnumMap = { + BookmarkSortType.manual: 'manual', + BookmarkSortType.titleAsc: 'titleAsc', + BookmarkSortType.titleDesc: 'titleDesc', + BookmarkSortType.urlAsc: 'urlAsc', + BookmarkSortType.urlDesc: 'urlDesc', + BookmarkSortType.dateAddedDesc: 'dateAddedDesc', + BookmarkSortType.dateAddedAsc: 'dateAddedAsc', +}; diff --git a/apps/weblibre/lib/features/geckoview/features/bookmarks/domain/providers/bookmark_list_ui_state.dart b/apps/weblibre/lib/features/geckoview/features/bookmarks/domain/providers/bookmark_list_ui_state.dart index 3b00f113..af77396e 100644 --- a/apps/weblibre/lib/features/geckoview/features/bookmarks/domain/providers/bookmark_list_ui_state.dart +++ b/apps/weblibre/lib/features/geckoview/features/bookmarks/domain/providers/bookmark_list_ui_state.dart @@ -17,16 +17,27 @@ * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . */ +import 'package:riverpod/experimental/persist.dart'; +import 'package:riverpod_annotation/experimental/json_persist.dart'; import 'package:riverpod_annotation/riverpod_annotation.dart'; import 'package:weblibre/features/geckoview/features/bookmarks/domain/entities/bookmark_list_ui_state.dart'; import 'package:weblibre/features/geckoview/features/bookmarks/domain/entities/bookmark_sort_type.dart'; +import 'package:weblibre/features/user/data/providers.dart'; part 'bookmark_list_ui_state.g.dart'; @Riverpod() +@JsonPersist() class BookmarkListUiStateNotifier extends _$BookmarkListUiStateNotifier { @override - BookmarkListUiState build() => BookmarkListUiState(); + BookmarkListUiState build() { + persist( + ref.watch(riverpodDatabaseStorageProvider), + key: 'BookmarkListUiState', + ); + + return stateOrNull ?? BookmarkListUiState(); + } void enterSelectionMode({String? initialGuid}) { state = state.copyWith( diff --git a/apps/weblibre/lib/features/geckoview/features/bookmarks/domain/providers/bookmark_list_ui_state.g.dart b/apps/weblibre/lib/features/geckoview/features/bookmarks/domain/providers/bookmark_list_ui_state.g.dart index 982fc6d3..8cf04e46 100644 --- a/apps/weblibre/lib/features/geckoview/features/bookmarks/domain/providers/bookmark_list_ui_state.g.dart +++ b/apps/weblibre/lib/features/geckoview/features/bookmarks/domain/providers/bookmark_list_ui_state.g.dart @@ -10,8 +10,10 @@ part of 'bookmark_list_ui_state.dart'; // ignore_for_file: type=lint, type=warning @ProviderFor(BookmarkListUiStateNotifier) +@JsonPersist() final bookmarkListUiStateProvider = BookmarkListUiStateNotifierProvider._(); +@JsonPersist() final class BookmarkListUiStateNotifierProvider extends $NotifierProvider { @@ -43,9 +45,10 @@ final class BookmarkListUiStateNotifierProvider } String _$bookmarkListUiStateNotifierHash() => - r'7c764fc2f1deb178063ca95764775ca237471f9f'; + r'13f01daba9d1591c700e956428f0e0e8cb2bfe92'; -abstract class _$BookmarkListUiStateNotifier +@JsonPersist() +abstract class _$BookmarkListUiStateNotifierBase extends $Notifier { BookmarkListUiState build(); @$mustCallSuper @@ -63,3 +66,41 @@ abstract class _$BookmarkListUiStateNotifier return element.handleCreate(ref, build); } } + +// ************************************************************************** +// JsonGenerator +// ************************************************************************** + +// GENERATED CODE - DO NOT MODIFY BY HAND +abstract class _$BookmarkListUiStateNotifier + extends _$BookmarkListUiStateNotifierBase { + /// The default key used by [persist]. + String get key { + const resolvedKey = "BookmarkListUiStateNotifier"; + return resolvedKey; + } + + /// A variant of [persist], for JSON-specific encoding. + /// + /// You can override [key] to customize the key used for storage. + PersistResult persist( + FutureOr> storage, { + String? key, + String Function(BookmarkListUiState state)? encode, + BookmarkListUiState Function(String encoded)? decode, + StorageOptions options = const StorageOptions(), + }) { + return NotifierPersistX(this).persist( + storage, + key: key ?? this.key, + encode: encode ?? $jsonCodex.encode, + decode: + decode ?? + (encoded) { + final e = $jsonCodex.decode(encoded); + return BookmarkListUiState.fromJson(e as Map); + }, + options: options, + ); + } +}