feat(library): default clip libraries to folder grouping

close #966
This commit is contained in:
edde746
2026-07-12 03:38:23 +02:00
parent 4a81246986
commit 64db84c3e2
3 changed files with 20 additions and 3 deletions
@@ -40,12 +40,16 @@ List<String> libraryBrowseGroupingOptions(MediaLibrary library, {required bool c
};
}
String defaultLibraryBrowseGrouping(MediaLibrary library) {
String defaultLibraryBrowseGrouping(MediaLibrary library, {required bool canGroupByFolders}) {
if (library.isShared) return browseGroupingAll;
return switch (library.kind) {
MediaKind.show => browseGroupingShows,
MediaKind.movie => browseGroupingMovies,
MediaKind.artist => browseGroupingArtists,
// Home-video libraries are folder-organized on the server, so open them
// grouped by folders like the official clients do (#966). An explicitly
// saved grouping still wins — this is only the unset-preference fallback.
MediaKind.clip when canGroupByFolders => browseGroupingFolders,
_ => browseGroupingAll,
};
}
@@ -54,6 +58,6 @@ String normalizeLibraryBrowseGrouping(MediaLibrary library, String? grouping, {r
final options = libraryBrowseGroupingOptions(library, canGroupByFolders: canGroupByFolders);
if (grouping != null && options.contains(grouping)) return grouping;
final fallback = defaultLibraryBrowseGrouping(library);
final fallback = defaultLibraryBrowseGrouping(library, canGroupByFolders: canGroupByFolders);
return options.contains(fallback) ? fallback : options.first;
}
@@ -758,7 +758,7 @@ class _LibraryBrowseTabState extends BaseLibraryTabState<MediaItem, LibraryBrows
}
String _getDefaultGrouping() {
return defaultLibraryBrowseGrouping(widget.library);
return defaultLibraryBrowseGrouping(widget.library, canGroupByFolders: widget.canGroupByFolders);
}
String _normalizeGrouping(String? grouping) {
@@ -110,5 +110,18 @@ void main() {
browseGroupingAll,
);
});
test('clip libraries default to folders when available (#966)', () {
final library = _library(kind: MediaKind.clip);
expect(normalizeLibraryBrowseGrouping(library, null, canGroupByFolders: true), browseGroupingFolders);
expect(normalizeLibraryBrowseGrouping(library, null, canGroupByFolders: false), browseGroupingAll);
});
test('clip libraries keep an explicitly saved flat grouping', () {
final library = _library(kind: MediaKind.clip);
expect(normalizeLibraryBrowseGrouping(library, browseGroupingAll, canGroupByFolders: true), browseGroupingAll);
});
});
}