diff --git a/lib/widgets/filter_grids/albums_page.dart b/lib/widgets/filter_grids/albums_page.dart index dd9902225..6a4c104cb 100644 --- a/lib/widgets/filter_grids/albums_page.dart +++ b/lib/widgets/filter_grids/albums_page.dart @@ -36,7 +36,7 @@ class AlbumListPage extends StatelessWidget { builder: (context, snapshot) => FilterNavigationPage( source: source, title: 'Albums', - chipSetActionDelegate: AlbumChipSetActionDelegate(), + chipSetActionDelegate: AlbumChipSetActionDelegate(source: source), chipActionDelegate: AlbumChipActionDelegate(source: source), chipActionsBuilder: (filter) => [ settings.pinnedFilters.contains(filter) ? ChipAction.unpin : ChipAction.pin, diff --git a/lib/widgets/filter_grids/common/chip_actions.dart b/lib/widgets/filter_grids/common/chip_actions.dart index 9d2c00467..a63edfd8f 100644 --- a/lib/widgets/filter_grids/common/chip_actions.dart +++ b/lib/widgets/filter_grids/common/chip_actions.dart @@ -3,6 +3,8 @@ import 'package:flutter/widgets.dart'; enum ChipSetAction { sort, + refresh, + stats, } enum ChipAction { diff --git a/lib/widgets/filter_grids/common/chip_set_action_delegate.dart b/lib/widgets/filter_grids/common/chip_set_action_delegate.dart index e053ee92a..5112d7396 100644 --- a/lib/widgets/filter_grids/common/chip_set_action_delegate.dart +++ b/lib/widgets/filter_grids/common/chip_set_action_delegate.dart @@ -1,12 +1,19 @@ import 'package:aves/model/settings/settings.dart'; +import 'package:aves/model/source/collection_lens.dart'; +import 'package:aves/model/source/collection_source.dart'; import 'package:aves/model/source/enums.dart'; import 'package:aves/utils/durations.dart'; import 'package:aves/widgets/common/aves_selection_dialog.dart'; +import 'package:aves/widgets/common/data_providers/media_store_collection_provider.dart'; import 'package:aves/widgets/filter_grids/common/chip_actions.dart'; +import 'package:aves/widgets/stats/stats.dart'; import 'package:flutter/material.dart'; import 'package:flutter/scheduler.dart'; +import 'package:pedantic/pedantic.dart'; abstract class ChipSetActionDelegate { + CollectionSource get source; + ChipSortFactor get sortFactor; set sortFactor(ChipSortFactor factor); @@ -19,6 +26,15 @@ abstract class ChipSetActionDelegate { case ChipSetAction.sort: await _showSortDialog(context); break; + case ChipSetAction.refresh: + if (source is MediaStoreSource) { + source.clearEntries(); + unawaited((source as MediaStoreSource).refresh()); + } + break; + case ChipSetAction.stats: + _goToStats(context); + break; } } @@ -38,9 +54,32 @@ abstract class ChipSetActionDelegate { sortFactor = factor; } } + + void _goToStats(BuildContext context) { + Navigator.push( + context, + MaterialPageRoute( + settings: RouteSettings(name: StatsPage.routeName), + builder: (context) => StatsPage( + collection: CollectionLens( + source: source, + groupFactor: settings.collectionGroupFactor, + sortFactor: settings.collectionSortFactor, + ), + ), + ), + ); + } } class AlbumChipSetActionDelegate extends ChipSetActionDelegate { + @override + final CollectionSource source; + + AlbumChipSetActionDelegate({ + @required this.source, + }); + @override ChipSortFactor get sortFactor => settings.albumSortFactor; @@ -49,6 +88,13 @@ class AlbumChipSetActionDelegate extends ChipSetActionDelegate { } class CountryChipSetActionDelegate extends ChipSetActionDelegate { + @override + final CollectionSource source; + + CountryChipSetActionDelegate({ + @required this.source, + }); + @override ChipSortFactor get sortFactor => settings.countrySortFactor; @@ -57,6 +103,13 @@ class CountryChipSetActionDelegate extends ChipSetActionDelegate { } class TagChipSetActionDelegate extends ChipSetActionDelegate { + @override + final CollectionSource source; + + TagChipSetActionDelegate({ + @required this.source, + }); + @override ChipSortFactor get sortFactor => settings.tagSortFactor; diff --git a/lib/widgets/filter_grids/common/filter_grid_page.dart b/lib/widgets/filter_grids/common/filter_grid_page.dart index 6e54cf5bf..89e6db5af 100644 --- a/lib/widgets/filter_grids/common/filter_grid_page.dart +++ b/lib/widgets/filter_grids/common/filter_grid_page.dart @@ -1,5 +1,6 @@ import 'dart:ui'; +import 'package:aves/main.dart'; import 'package:aves/model/filters/filters.dart'; import 'package:aves/model/image_entry.dart'; import 'package:aves/model/settings/settings.dart'; @@ -24,6 +25,7 @@ import 'package:aves/widgets/filter_grids/common/chip_set_action_delegate.dart'; import 'package:aves/widgets/filter_grids/common/decorated_filter_chip.dart'; import 'package:collection/collection.dart'; import 'package:draggable_scrollbar/draggable_scrollbar.dart'; +import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter_staggered_animations/flutter_staggered_animations.dart'; import 'package:pedantic/pedantic.dart'; @@ -121,6 +123,15 @@ class FilterNavigationPage extends StatelessWidget { value: ChipSetAction.sort, child: MenuRow(text: 'Sort…', icon: AIcons.sort), ), + if (kDebugMode) + PopupMenuItem( + value: ChipSetAction.refresh, + child: MenuRow(text: 'Refresh', icon: AIcons.refresh), + ), + PopupMenuItem( + value: ChipSetAction.stats, + child: MenuRow(text: 'Stats', icon: AIcons.stats), + ), ]; }, onSelected: (action) => chipSetActionDelegate.onActionSelected(context, action), diff --git a/lib/widgets/filter_grids/countries_page.dart b/lib/widgets/filter_grids/countries_page.dart index 783e79429..fae95bd1a 100644 --- a/lib/widgets/filter_grids/countries_page.dart +++ b/lib/widgets/filter_grids/countries_page.dart @@ -33,7 +33,7 @@ class CountryListPage extends StatelessWidget { builder: (context, snapshot) => FilterNavigationPage( source: source, title: 'Countries', - chipSetActionDelegate: CountryChipSetActionDelegate(), + chipSetActionDelegate: CountryChipSetActionDelegate(source: source), chipActionDelegate: ChipActionDelegate(), chipActionsBuilder: (filter) => [ settings.pinnedFilters.contains(filter) ? ChipAction.unpin : ChipAction.pin, diff --git a/lib/widgets/filter_grids/tags_page.dart b/lib/widgets/filter_grids/tags_page.dart index 9f8cb47a8..0efce6eca 100644 --- a/lib/widgets/filter_grids/tags_page.dart +++ b/lib/widgets/filter_grids/tags_page.dart @@ -33,7 +33,7 @@ class TagListPage extends StatelessWidget { builder: (context, snapshot) => FilterNavigationPage( source: source, title: 'Tags', - chipSetActionDelegate: TagChipSetActionDelegate(), + chipSetActionDelegate: TagChipSetActionDelegate(source: source), chipActionDelegate: ChipActionDelegate(), chipActionsBuilder: (filter) => [ settings.pinnedFilters.contains(filter) ? ChipAction.unpin : ChipAction.pin,