diff --git a/.github/workflows/dependency-review.yml b/.github/workflows/dependency-review.yml index d77f789bb..b3f620bdc 100644 --- a/.github/workflows/dependency-review.yml +++ b/.github/workflows/dependency-review.yml @@ -24,4 +24,4 @@ jobs: - name: 'Checkout Repository' uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: 'Dependency Review' - uses: actions/dependency-review-action@38ecb5b593bf0eb19e335c03f97670f792489a8b # v4.7.0 + uses: actions/dependency-review-action@da24556b548a50705dd671f47852072ea4c105d9 # v4.7.1 diff --git a/CHANGELOG.md b/CHANGELOG.md index 292526685..98fb110e9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,13 @@ All notable changes to this project will be documented in this file. ## [Unreleased] +## [v1.13.1] - 2025-05-14 + +### Fixed + +- albums: show groups to move/copy/export items +- albums: hide grouped albums containing hidden items only + ## [v1.13.0] - 2025-05-12 ### Added diff --git a/fastlane/metadata/android/en-US/changelogs/152.txt b/fastlane/metadata/android/en-US/changelogs/152.txt new file mode 100644 index 000000000..1400f36e5 --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/152.txt @@ -0,0 +1,4 @@ +In v1.13.1: +- group albums +- filter by day of the week +Full changelog available on GitHub \ No newline at end of file diff --git a/fastlane/metadata/android/en-US/changelogs/15201.txt b/fastlane/metadata/android/en-US/changelogs/15201.txt new file mode 100644 index 000000000..1400f36e5 --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/15201.txt @@ -0,0 +1,4 @@ +In v1.13.1: +- group albums +- filter by day of the week +Full changelog available on GitHub \ No newline at end of file diff --git a/lib/l10n/app_es.arb b/lib/l10n/app_es.arb index 11f66734d..7e788fe8d 100644 --- a/lib/l10n/app_es.arb +++ b/lib/l10n/app_es.arb @@ -445,7 +445,7 @@ "@menuActionStats": {}, "viewDialogSortSectionTitle": "Ordenar", "@viewDialogSortSectionTitle": {}, - "viewDialogGroupSectionTitle": "Grupo", + "viewDialogGroupSectionTitle": "Secciones", "@viewDialogGroupSectionTitle": {}, "viewDialogLayoutSectionTitle": "Disposición", "@viewDialogLayoutSectionTitle": {}, @@ -1402,5 +1402,33 @@ "editEntryLocationDialogTimeShift": "Desplazamiento de tiempo", "@editEntryLocationDialogTimeShift": {}, "coordinateFormatDdm": "DDM", - "@coordinateFormatDdm": {} + "@coordinateFormatDdm": {}, + "sortByPath": "Por ruta", + "@sortByPath": {}, + "searchFormatSectionTitle": "Formatos", + "@searchFormatSectionTitle": {}, + "newGroupDialogTitle": "Nuevo grupo", + "@newGroupDialogTitle": {}, + "ungrouped": "No agrupado", + "@ungrouped": {}, + "albumTierGroups": "Grupos", + "@albumTierGroups": {}, + "groupEmpty": "Sin grupos", + "@groupEmpty": {}, + "newGroupDialogNameLabel": "Nombre del grupo", + "@newGroupDialogNameLabel": {}, + "createButtonLabel": "CREAR", + "@createButtonLabel": {}, + "chipActionGroup": "Agrupar", + "@chipActionGroup": {}, + "chipActionCreateGroup": "Crear grupo", + "@chipActionCreateGroup": {}, + "groupAlreadyExists": "Ya existe el grupo", + "@groupAlreadyExists": {}, + "groupPickerTitle": "Seleccionar grupo", + "@groupPickerTitle": {}, + "groupPickerUseThisGroupButton": "Usar este grupo", + "@groupPickerUseThisGroupButton": {}, + "sectionNone": "Sin secciones", + "@sectionNone": {} } diff --git a/lib/l10n/app_gl.arb b/lib/l10n/app_gl.arb index e0e0b0c42..452f0d7c3 100644 --- a/lib/l10n/app_gl.arb +++ b/lib/l10n/app_gl.arb @@ -823,7 +823,7 @@ "@menuActionSlideshow": {}, "menuActionStats": "Estatísticas", "@menuActionStats": {}, - "viewDialogGroupSectionTitle": "Agrupar", + "viewDialogGroupSectionTitle": "Seccións", "@viewDialogGroupSectionTitle": {}, "castDialogTitle": "Dispositivos de emisión", "@castDialogTitle": {}, @@ -1610,5 +1610,33 @@ "panoramaDisableSensorControl": "Desactivar control do sensor", "@panoramaDisableSensorControl": {}, "settingsHiddenFiltersBanner": "As fotos e vídeos que cadren cos filtros ocultos non se amosarán na súa colección.", - "@settingsHiddenFiltersBanner": {} + "@settingsHiddenFiltersBanner": {}, + "createButtonLabel": "CREAR", + "@createButtonLabel": {}, + "chipActionGroup": "Agrupar", + "@chipActionGroup": {}, + "chipActionCreateGroup": "Crear grupo", + "@chipActionCreateGroup": {}, + "albumTierGroups": "Grupos", + "@albumTierGroups": {}, + "newGroupDialogTitle": "Novo grupo", + "@newGroupDialogTitle": {}, + "newGroupDialogNameLabel": "Nome do grupo", + "@newGroupDialogNameLabel": {}, + "groupAlreadyExists": "Xa existe o grupo", + "@groupAlreadyExists": {}, + "groupEmpty": "Sen grupos", + "@groupEmpty": {}, + "ungrouped": "Non agrupado", + "@ungrouped": {}, + "groupPickerTitle": "Escolmar grupo", + "@groupPickerTitle": {}, + "groupPickerUseThisGroupButton": "Usar este grupo", + "@groupPickerUseThisGroupButton": {}, + "sectionNone": "Sen seccións", + "@sectionNone": {}, + "sortByPath": "Por ruta", + "@sortByPath": {}, + "searchFormatSectionTitle": "Formatos", + "@searchFormatSectionTitle": {} } diff --git a/lib/l10n/app_he.arb b/lib/l10n/app_he.arb index bf8fa21c6..0cdef30e9 100644 --- a/lib/l10n/app_he.arb +++ b/lib/l10n/app_he.arb @@ -144,5 +144,19 @@ "stopTooltip": "עצור", "@stopTooltip": {}, "chipActionGoToExplorerPage": "הצג בסייר", - "@chipActionGoToExplorerPage": {} + "@chipActionGoToExplorerPage": {}, + "chipActionSetCover": "הגדר עטיפה", + "@chipActionSetCover": {}, + "chipActionCreateAlbum": "צור אלבום", + "@chipActionCreateAlbum": {}, + "chipActionShowCountryStates": "הצג סטטיסטיקות", + "@chipActionShowCountryStates": {}, + "createButtonLabel": "צור", + "@createButtonLabel": {}, + "chipActionGroup": "קבוצה", + "@chipActionGroup": {}, + "chipActionCreateGroup": "צור קבוצה", + "@chipActionCreateGroup": {}, + "chipActionCreateVault": "צור כספת", + "@chipActionCreateVault": {} } diff --git a/lib/widgets/common/action_mixins/entry_storage.dart b/lib/widgets/common/action_mixins/entry_storage.dart index ca2bc1614..b1d0ee7bf 100644 --- a/lib/widgets/common/action_mixins/entry_storage.dart +++ b/lib/widgets/common/action_mixins/entry_storage.dart @@ -46,7 +46,7 @@ mixin EntryStorageMixin on FeedbackMixin, PermissionAwareMixin, SizeAwareMixin { final destinationAlbumFilter = await pickAlbum( context: context, moveType: MoveType.export, - albumTypes: {AlbumChipType.stored}, + albumChipTypes: {AlbumChipType.stored}, initialGroup: null, ); if (destinationAlbumFilter == null || destinationAlbumFilter is! StoredAlbumFilter) return false; @@ -379,7 +379,7 @@ mixin EntryStorageMixin on FeedbackMixin, PermissionAwareMixin, SizeAwareMixin { final destinationAlbumFilter = await pickAlbum( context: context, moveType: moveType, - albumTypes: {AlbumChipType.stored}, + albumChipTypes: {AlbumChipType.stored}, initialGroup: null, ); if (destinationAlbumFilter == null || destinationAlbumFilter is! StoredAlbumFilter) return false; diff --git a/lib/widgets/dialogs/pick_dialogs/album_pick_page.dart b/lib/widgets/dialogs/pick_dialogs/album_pick_page.dart index 3a930bf3e..caf50b4f0 100644 --- a/lib/widgets/dialogs/pick_dialogs/album_pick_page.dart +++ b/lib/widgets/dialogs/pick_dialogs/album_pick_page.dart @@ -40,7 +40,7 @@ import 'package:provider/provider.dart'; Future pickAlbum({ required BuildContext context, required MoveType? moveType, - required Iterable albumTypes, + required Iterable albumChipTypes, required Uri? initialGroup, }) async { final source = context.read(); @@ -56,7 +56,7 @@ Future pickAlbum({ builder: (context) => _AlbumPickPage( source: source, moveType: moveType, - albumChipTypes: albumTypes, + albumChipTypes: albumChipTypes, initialGroup: initialGroup, ), ), diff --git a/lib/widgets/filter_grids/albums_page.dart b/lib/widgets/filter_grids/albums_page.dart index d85b297d7..01ceee68c 100644 --- a/lib/widgets/filter_grids/albums_page.dart +++ b/lib/widgets/filter_grids/albums_page.dart @@ -97,7 +97,7 @@ class AlbumListPage extends StatelessWidget { static List> getAlbumGridItems( BuildContext context, CollectionSource source, - Iterable albumTypes, + Iterable albumChipTypes, Uri? groupUri, ) { final groupContent = albumGrouping.getDirectChildren(groupUri); @@ -110,29 +110,31 @@ class AlbumListPage extends StatelessWidget { } final listedStoredAlbums = {}; - if (albumTypes.contains(AlbumChipType.stored)) { + if (albumChipTypes.contains(AlbumChipType.stored)) { + final allAlbums = source.rawAlbums; if (groupUri == null) { final withinGroups = whereTypeRecursively(groupContent).map((v) => v.album).toSet(); - listedStoredAlbums.addAll(source.rawAlbums.whereNot(withinGroups.contains)); + listedStoredAlbums.addAll(allAlbums.whereNot(withinGroups.contains)); } else { - listedStoredAlbums.addAll(groupContent.whereType().map((v) => v.album)); + // check that group content is listed from source, to prevent displaying hidden content + listedStoredAlbums.addAll(groupContent.whereType().map((v) => v.album).where(allAlbums.contains)); } } final listedDynamicAlbums = {}; - if (albumTypes.contains(AlbumChipType.dynamic)) { + if (albumChipTypes.contains(AlbumChipType.dynamic)) { + final allDynamicAlbums = dynamicAlbums.all; if (groupUri == null) { final withinGroups = whereTypeRecursively(groupContent).toSet(); - listedDynamicAlbums.addAll(dynamicAlbums.all.whereNot(withinGroups.contains)); + listedDynamicAlbums.addAll(allDynamicAlbums.whereNot(withinGroups.contains)); } else { - listedDynamicAlbums.addAll(groupContent.whereType()); + // check that group content is listed from source, to prevent displaying hidden content + listedDynamicAlbums.addAll(groupContent.whereType().where(allDynamicAlbums.contains)); } } - final albumGroupFilters = {}; - if (albumTypes.contains(AlbumChipType.group)) { - albumGroupFilters.addAll(groupContent.whereType()); - } + // always show groups, which are needed to navigate to other types + final albumGroupFilters = groupContent.whereType().toSet(); final filters = { ...albumGroupFilters, diff --git a/lib/widgets/filter_grids/common/action_delegates/album_set.dart b/lib/widgets/filter_grids/common/action_delegates/album_set.dart index 1654d7fd8..f02c3e1b8 100644 --- a/lib/widgets/filter_grids/common/action_delegates/album_set.dart +++ b/lib/widgets/filter_grids/common/action_delegates/album_set.dart @@ -458,7 +458,7 @@ class AlbumChipSetActionDelegate extends ChipSetActionDelegate final filter = await pickAlbum( context: context, moveType: null, - albumTypes: {AlbumChipType.group}, + albumChipTypes: {AlbumChipType.group}, initialGroup: initialGroup, ); if (filter == null) return; diff --git a/lib/widgets/filter_grids/common/filter_grid_page.dart b/lib/widgets/filter_grids/common/filter_grid_page.dart index 6c49e590d..fc4b2f170 100644 --- a/lib/widgets/filter_grids/common/filter_grid_page.dart +++ b/lib/widgets/filter_grids/common/filter_grid_page.dart @@ -473,7 +473,7 @@ class _FilterSectionedContentState extends State<_Fi final GlobalKey scrollableKey = GlobalKey(debugLabel: 'filter-grid-page-scrollable'); - FilterGrouping? _grouping; + FilterGroupNotifier? _groupNotifier; @override void initState() { @@ -486,7 +486,7 @@ class _FilterSectionedContentState extends State<_Fi void didChangeDependencies() { super.didChangeDependencies(); _unregisterDependencies(); - _grouping = context.read(); + _groupNotifier = context.read(); _registerDependencies(); } @@ -505,11 +505,11 @@ class _FilterSectionedContentState extends State<_Fi } void _registerDependencies() { - _grouping?.addListener(_scrollToTop); + _groupNotifier?.addListener(_scrollToTop); } void _unregisterDependencies() { - _grouping?.removeListener(_scrollToTop); + _groupNotifier?.removeListener(_scrollToTop); } void _registerWidget(_FilterSectionedContent widget) { diff --git a/lib/widgets/settings/navigation/drawer_tab_albums.dart b/lib/widgets/settings/navigation/drawer_tab_albums.dart index 84b2051ab..5ab310b2b 100644 --- a/lib/widgets/settings/navigation/drawer_tab_albums.dart +++ b/lib/widgets/settings/navigation/drawer_tab_albums.dart @@ -68,7 +68,7 @@ class _DrawerAlbumTabState extends State { final albumFilter = await pickAlbum( context: context, moveType: null, - albumTypes: AlbumChipType.values, + albumChipTypes: AlbumChipType.values, initialGroup: null, ); if (albumFilter == null || items.contains(albumFilter)) return; diff --git a/pubspec.yaml b/pubspec.yaml index 8ff7ca052..de9243f95 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -7,7 +7,7 @@ repository: https://github.com/deckerst/aves # - play changelog: /whatsnew/whatsnew-en-US # - izzy changelog: /fastlane/metadata/android/en-US/changelogs/XXX01.txt # - libre changelog: /fastlane/metadata/android/en-US/changelogs/XXX.txt -version: 1.13.0+151 +version: 1.13.1+152 publish_to: none environment: diff --git a/whatsnew/whatsnew-en-US b/whatsnew/whatsnew-en-US index 7492062b9..1400f36e5 100644 --- a/whatsnew/whatsnew-en-US +++ b/whatsnew/whatsnew-en-US @@ -1,4 +1,4 @@ -In v1.13.0: +In v1.13.1: - group albums - filter by day of the week Full changelog available on GitHub \ No newline at end of file