From 2d8d49a2825be4e22ab843dc9a20a4b28974f426 Mon Sep 17 00:00:00 2001 From: Thibault Deckers Date: Mon, 8 Nov 2021 15:23:12 +0900 Subject: [PATCH] minor fix --- lib/model/filters/filters.dart | 48 ++++++++++--------- lib/model/source/collection_lens.dart | 2 +- .../dialogs/cover_selection_dialog.dart | 2 +- lib/widgets/drawer/collection_nav_tile.dart | 2 +- .../filter_grids/common/filter_nav_page.dart | 2 +- lib/widgets/home_page.dart | 8 ++-- lib/widgets/search/search_delegate.dart | 2 +- lib/widgets/stats/stats_page.dart | 2 +- 8 files changed, 36 insertions(+), 32 deletions(-) diff --git a/lib/model/filters/filters.dart b/lib/model/filters/filters.dart index 7fc08a231..0ffb1b86a 100644 --- a/lib/model/filters/filters.dart +++ b/lib/model/filters/filters.dart @@ -31,29 +31,33 @@ abstract class CollectionFilter extends Equatable implements Comparable) { - final type = jsonMap['type']; - switch (type) { - case AlbumFilter.type: - return AlbumFilter.fromMap(jsonMap); - case CoordinateFilter.type: - return CoordinateFilter.fromMap(jsonMap); - case FavouriteFilter.type: - return FavouriteFilter.instance; - case LocationFilter.type: - return LocationFilter.fromMap(jsonMap); - case MimeFilter.type: - return MimeFilter.fromMap(jsonMap); - case PathFilter.type: - return PathFilter.fromMap(jsonMap); - case QueryFilter.type: - return QueryFilter.fromMap(jsonMap); - case TagFilter.type: - return TagFilter.fromMap(jsonMap); - case TypeFilter.type: - return TypeFilter.fromMap(jsonMap); + try { + final jsonMap = jsonDecode(jsonString); + if (jsonMap is Map) { + final type = jsonMap['type']; + switch (type) { + case AlbumFilter.type: + return AlbumFilter.fromMap(jsonMap); + case CoordinateFilter.type: + return CoordinateFilter.fromMap(jsonMap); + case FavouriteFilter.type: + return FavouriteFilter.instance; + case LocationFilter.type: + return LocationFilter.fromMap(jsonMap); + case MimeFilter.type: + return MimeFilter.fromMap(jsonMap); + case PathFilter.type: + return PathFilter.fromMap(jsonMap); + case QueryFilter.type: + return QueryFilter.fromMap(jsonMap); + case TagFilter.type: + return TagFilter.fromMap(jsonMap); + case TypeFilter.type: + return TypeFilter.fromMap(jsonMap); + } } + } catch (error, stack) { + debugPrint('failed to parse filter from json=$jsonString error=$error\n$stack'); } debugPrint('failed to parse filter from json=$jsonString'); return null; diff --git a/lib/model/source/collection_lens.dart b/lib/model/source/collection_lens.dart index 24424de3e..6f05c03b3 100644 --- a/lib/model/source/collection_lens.dart +++ b/lib/model/source/collection_lens.dart @@ -37,7 +37,7 @@ class CollectionLens with ChangeNotifier { CollectionLens({ required this.source, - Iterable? filters, + Set? filters, this.id, this.listenToSource = true, this.fixedSelection, diff --git a/lib/widgets/dialogs/cover_selection_dialog.dart b/lib/widgets/dialogs/cover_selection_dialog.dart index 3bafd9a88..2dca81942 100644 --- a/lib/widgets/dialogs/cover_selection_dialog.dart +++ b/lib/widgets/dialogs/cover_selection_dialog.dart @@ -123,7 +123,7 @@ class _CoverSelectionDialogState extends State { builder: (context) => ItemPickDialog( collection: CollectionLens( source: context.read(), - filters: [filter], + filters: {filter}, ), ), fullscreenDialog: true, diff --git a/lib/widgets/drawer/collection_nav_tile.dart b/lib/widgets/drawer/collection_nav_tile.dart index 7368f6483..f8fa85239 100644 --- a/lib/widgets/drawer/collection_nav_tile.dart +++ b/lib/widgets/drawer/collection_nav_tile.dart @@ -50,7 +50,7 @@ class CollectionNavTile extends StatelessWidget { builder: (context) => CollectionPage( collection: CollectionLens( source: context.read(), - filters: [filter], + filters: {filter}, ), ), ), diff --git a/lib/widgets/filter_grids/common/filter_nav_page.dart b/lib/widgets/filter_grids/common/filter_nav_page.dart index f256d8601..7ce66ed98 100644 --- a/lib/widgets/filter_grids/common/filter_nav_page.dart +++ b/lib/widgets/filter_grids/common/filter_nav_page.dart @@ -70,7 +70,7 @@ class FilterNavigationPage extends StatelessWidget { builder: (context) => CollectionPage( collection: CollectionLens( source: source, - filters: [filter], + filters: {filter}, ), ), ), diff --git a/lib/widgets/home_page.dart b/lib/widgets/home_page.dart index 68ed5b420..4569ce373 100644 --- a/lib/widgets/home_page.dart +++ b/lib/widgets/home_page.dart @@ -41,7 +41,7 @@ class HomePage extends StatefulWidget { class _HomePageState extends State { AvesEntry? _viewerEntry; String? _shortcutRouteName, _shortcutSearchQuery; - List? _shortcutFilters; + Set? _shortcutFilters; static const allowedShortcutRoutes = [CollectionPage.routeName, AlbumListPage.routeName, SearchPage.routeName]; @@ -108,7 +108,7 @@ class _HomePageState extends State { _shortcutRouteName = extraRoute; } final extraFilters = intentData['filters']; - _shortcutFilters = extraFilters != null ? (extraFilters as List).cast() : null; + _shortcutFilters = extraFilters != null ? (extraFilters as List).cast().toSet() : null; } } context.read>().value = appMode; @@ -152,12 +152,12 @@ class _HomePageState extends State { } String routeName; - Iterable? filters; + Set? filters; if (appMode == AppMode.pickExternal) { routeName = CollectionPage.routeName; } else { routeName = _shortcutRouteName ?? settings.homePage.routeName; - filters = (_shortcutFilters ?? []).map(CollectionFilter.fromJson); + filters = (_shortcutFilters ?? {}).map(CollectionFilter.fromJson).toSet(); } final source = context.read(); switch (routeName) { diff --git a/lib/widgets/search/search_delegate.dart b/lib/widgets/search/search_delegate.dart index 3796eb7a2..938b7ddde 100644 --- a/lib/widgets/search/search_delegate.dart +++ b/lib/widgets/search/search_delegate.dart @@ -259,7 +259,7 @@ class CollectionSearchDelegate { builder: (context) => CollectionPage( collection: CollectionLens( source: source, - filters: [filter], + filters: {filter}, ), ), ), diff --git a/lib/widgets/stats/stats_page.dart b/lib/widgets/stats/stats_page.dart index bd079ee08..f80232d90 100644 --- a/lib/widgets/stats/stats_page.dart +++ b/lib/widgets/stats/stats_page.dart @@ -295,7 +295,7 @@ class StatsPage extends StatelessWidget { builder: (context) => CollectionPage( collection: CollectionLens( source: source, - filters: [filter], + filters: {filter}, ), ), ),