Merge remote-tracking branch 'origin/develop' into develop

This commit is contained in:
Hosted Weblate 2025-05-14 19:52:27 +00:00
commit 69ab902e3b
No known key found for this signature in database
GPG key ID: A3FAAA06E6569B4C
6 changed files with 15 additions and 13 deletions

View file

@ -4,6 +4,10 @@ All notable changes to this project will be documented in this file.
## <a id="unreleased"></a>[Unreleased] ## <a id="unreleased"></a>[Unreleased]
### Fixed
- albums: show groups to move/copy/export items
## <a id="v1.13.0"></a>[v1.13.0] - 2025-05-12 ## <a id="v1.13.0"></a>[v1.13.0] - 2025-05-12
### Added ### Added

View file

@ -46,7 +46,7 @@ mixin EntryStorageMixin on FeedbackMixin, PermissionAwareMixin, SizeAwareMixin {
final destinationAlbumFilter = await pickAlbum( final destinationAlbumFilter = await pickAlbum(
context: context, context: context,
moveType: MoveType.export, moveType: MoveType.export,
albumTypes: {AlbumChipType.stored}, albumChipTypes: {AlbumChipType.stored},
initialGroup: null, initialGroup: null,
); );
if (destinationAlbumFilter == null || destinationAlbumFilter is! StoredAlbumFilter) return false; if (destinationAlbumFilter == null || destinationAlbumFilter is! StoredAlbumFilter) return false;
@ -379,7 +379,7 @@ mixin EntryStorageMixin on FeedbackMixin, PermissionAwareMixin, SizeAwareMixin {
final destinationAlbumFilter = await pickAlbum( final destinationAlbumFilter = await pickAlbum(
context: context, context: context,
moveType: moveType, moveType: moveType,
albumTypes: {AlbumChipType.stored}, albumChipTypes: {AlbumChipType.stored},
initialGroup: null, initialGroup: null,
); );
if (destinationAlbumFilter == null || destinationAlbumFilter is! StoredAlbumFilter) return false; if (destinationAlbumFilter == null || destinationAlbumFilter is! StoredAlbumFilter) return false;

View file

@ -40,7 +40,7 @@ import 'package:provider/provider.dart';
Future<AlbumBaseFilter?> pickAlbum({ Future<AlbumBaseFilter?> pickAlbum({
required BuildContext context, required BuildContext context,
required MoveType? moveType, required MoveType? moveType,
required Iterable<AlbumChipType> albumTypes, required Iterable<AlbumChipType> albumChipTypes,
required Uri? initialGroup, required Uri? initialGroup,
}) async { }) async {
final source = context.read<CollectionSource>(); final source = context.read<CollectionSource>();
@ -56,7 +56,7 @@ Future<AlbumBaseFilter?> pickAlbum({
builder: (context) => _AlbumPickPage( builder: (context) => _AlbumPickPage(
source: source, source: source,
moveType: moveType, moveType: moveType,
albumChipTypes: albumTypes, albumChipTypes: albumChipTypes,
initialGroup: initialGroup, initialGroup: initialGroup,
), ),
), ),

View file

@ -97,7 +97,7 @@ class AlbumListPage extends StatelessWidget {
static List<FilterGridItem<AlbumBaseFilter>> getAlbumGridItems( static List<FilterGridItem<AlbumBaseFilter>> getAlbumGridItems(
BuildContext context, BuildContext context,
CollectionSource source, CollectionSource source,
Iterable<AlbumChipType> albumTypes, Iterable<AlbumChipType> albumChipTypes,
Uri? groupUri, Uri? groupUri,
) { ) {
final groupContent = albumGrouping.getDirectChildren(groupUri); final groupContent = albumGrouping.getDirectChildren(groupUri);
@ -110,7 +110,7 @@ class AlbumListPage extends StatelessWidget {
} }
final listedStoredAlbums = <String>{}; final listedStoredAlbums = <String>{};
if (albumTypes.contains(AlbumChipType.stored)) { if (albumChipTypes.contains(AlbumChipType.stored)) {
if (groupUri == null) { if (groupUri == null) {
final withinGroups = whereTypeRecursively<StoredAlbumFilter>(groupContent).map((v) => v.album).toSet(); final withinGroups = whereTypeRecursively<StoredAlbumFilter>(groupContent).map((v) => v.album).toSet();
listedStoredAlbums.addAll(source.rawAlbums.whereNot(withinGroups.contains)); listedStoredAlbums.addAll(source.rawAlbums.whereNot(withinGroups.contains));
@ -120,7 +120,7 @@ class AlbumListPage extends StatelessWidget {
} }
final listedDynamicAlbums = <DynamicAlbumFilter>{}; final listedDynamicAlbums = <DynamicAlbumFilter>{};
if (albumTypes.contains(AlbumChipType.dynamic)) { if (albumChipTypes.contains(AlbumChipType.dynamic)) {
if (groupUri == null) { if (groupUri == null) {
final withinGroups = whereTypeRecursively<DynamicAlbumFilter>(groupContent).toSet(); final withinGroups = whereTypeRecursively<DynamicAlbumFilter>(groupContent).toSet();
listedDynamicAlbums.addAll(dynamicAlbums.all.whereNot(withinGroups.contains)); listedDynamicAlbums.addAll(dynamicAlbums.all.whereNot(withinGroups.contains));
@ -129,10 +129,8 @@ class AlbumListPage extends StatelessWidget {
} }
} }
final albumGroupFilters = <AlbumGroupFilter>{}; // always show groups, which are needed to navigate to other types
if (albumTypes.contains(AlbumChipType.group)) { final albumGroupFilters = groupContent.whereType<AlbumGroupFilter>().toSet();
albumGroupFilters.addAll(groupContent.whereType<AlbumGroupFilter>());
}
final filters = <AlbumBaseFilter>{ final filters = <AlbumBaseFilter>{
...albumGroupFilters, ...albumGroupFilters,

View file

@ -458,7 +458,7 @@ class AlbumChipSetActionDelegate extends ChipSetActionDelegate<AlbumBaseFilter>
final filter = await pickAlbum( final filter = await pickAlbum(
context: context, context: context,
moveType: null, moveType: null,
albumTypes: {AlbumChipType.group}, albumChipTypes: {AlbumChipType.group},
initialGroup: initialGroup, initialGroup: initialGroup,
); );
if (filter == null) return; if (filter == null) return;

View file

@ -68,7 +68,7 @@ class _DrawerAlbumTabState extends State<DrawerAlbumTab> {
final albumFilter = await pickAlbum( final albumFilter = await pickAlbum(
context: context, context: context,
moveType: null, moveType: null,
albumTypes: AlbumChipType.values, albumChipTypes: AlbumChipType.values,
initialGroup: null, initialGroup: null,
); );
if (albumFilter == null || items.contains(albumFilter)) return; if (albumFilter == null || items.contains(albumFilter)) return;