fix(libraries): exclude episodes from mixed roots

close #1675
This commit is contained in:
edde746
2026-07-25 09:13:00 +02:00
parent 9a6f48a4cb
commit 0959cd3040
11 changed files with 129 additions and 31 deletions
@@ -2342,6 +2342,8 @@ void main() {
expect(albumBrowse['Fields'], 'PremiereDate,OriginalTitle,SortName');
expect(albumBrowse['EnableUserData'], 'false');
expect(trackBrowse['Fields'], 'UserData,PremiereDate,OriginalTitle,SortName');
expect(albumBrowse['IncludeItemTypes'], 'MusicAlbum');
expect(trackBrowse['IncludeItemTypes'], 'Audio');
expect(trackBrowse.containsKey('EnableUserData'), isFalse);
expect(artistAlbums['Fields'], 'PremiereDate,OriginalTitle,SortName');
expect(artistAlbums['EnableUserData'], 'false');
+13 -4
View File
@@ -474,13 +474,22 @@ void main() {
}
});
test('falls back to MediaKind.unknown for unrecognised collections', () {
final lib = JellyfinMappers.library({
'Id': 'view-x',
test('maps mixed collections to a movie and show root browse', () {
final mixed = JellyfinMappers.library({
'Id': 'view-mixed',
'Name': 'Mixed',
'CollectionType': 'mixed',
}, serverId: ServerId(_serverId))!;
expect(lib.kind, MediaKind.unknown);
expect(mixed.kind, MediaKind.unknown);
expect(mixed.defaultBrowseKinds, const [MediaKind.movie, MediaKind.show]);
final unrecognised = JellyfinMappers.library({
'Id': 'view-books',
'Name': 'Books',
'CollectionType': 'books',
}, serverId: ServerId(_serverId))!;
expect(unrecognised.kind, MediaKind.unknown);
expect(unrecognised.defaultBrowseKinds, isEmpty);
});
});
@@ -21,6 +21,11 @@ void main() {
expect(params['type'], '2');
});
test('multiple kinds map to a comma-delimited type filter', () {
final params = translator.toQueryParameters(const LibraryQuery(includeKinds: [MediaKind.movie, MediaKind.show]));
expect(params['type'], '1,2');
});
test('collection kind has no Plex type number (filtered separately)', () {
final params = translator.toQueryParameters(const LibraryQuery(kind: MediaKind.collection));
expect(params, isNot(contains('type')));
@@ -98,6 +103,13 @@ void main() {
expect(params['IncludeItemTypes'], 'Series');
});
test('multiple kinds map to combined IncludeItemTypes', () {
final params = translator.toQueryParameters(
const LibraryQuery(kind: MediaKind.episode, includeKinds: [MediaKind.movie, MediaKind.show]),
);
expect(params['IncludeItemTypes'], 'Movie,Series');
});
test('collection kind maps to IncludeItemTypes=BoxSet', () {
final params = translator.toQueryParameters(const LibraryQuery(kind: MediaKind.collection));
expect(params['IncludeItemTypes'], 'BoxSet');