diff --git a/src/renderer/api/navidrome/navidrome-controller.ts b/src/renderer/api/navidrome/navidrome-controller.ts index 4b7e3caa2..2101ca64f 100644 --- a/src/renderer/api/navidrome/navidrome-controller.ts +++ b/src/renderer/api/navidrome/navidrome-controller.ts @@ -143,8 +143,10 @@ export const NavidromeController: InternalControllerEndpoint = { body: { comment: body.comment, name: body.name, + ownerId: body.ownerId, public: body.public, - ...body._custom, + rules: body.queryBuilderRules, + sync: body.sync, }, }); @@ -326,9 +328,9 @@ export const NavidromeController: InternalControllerEndpoint = { library_id: getLibraryId(query.musicFolderId), name: query.searchTerm, recently_played: query.isRecentlyPlayed, + starred: query.favorite, year: query.maxYear || query.minYear, ...query._custom, - starred: query.favorite, ...excludeMissing(apiClientProps.server), }, }); @@ -359,9 +361,9 @@ export const NavidromeController: InternalControllerEndpoint = { _start: query.startIndex, library_id: getLibraryId(query.musicFolderId), name: query.searchTerm, + role: query.role || undefined, starred: query.favorite, ...query._custom, - role: query.role || undefined, ...excludeMissing(apiClientProps.server), }, }); @@ -471,16 +473,6 @@ export const NavidromeController: InternalControllerEndpoint = { }, getPlaylistList: async (args) => { const { apiClientProps, query } = args; - const customQuery = query._custom; - - // Smart playlists only became available in 0.48.0. Do not filter for previous versions - if ( - customQuery && - customQuery.smart !== undefined && - !hasFeature(apiClientProps.server, ServerFeature.PLAYLISTS_SMART) - ) { - customQuery.smart = undefined; - } const res = await ndApiClient(apiClientProps).getPlaylistList({ query: { @@ -489,7 +481,7 @@ export const NavidromeController: InternalControllerEndpoint = { _sort: query.sortBy ? playlistListSortMap.navidrome[query.sortBy] : undefined, _start: query.startIndex, q: query.searchTerm, - ...customQuery, + smart: query.excludeSmartPlaylists ? false : undefined, }, }); @@ -821,7 +813,10 @@ export const NavidromeController: InternalControllerEndpoint = { body: { comment: body.comment || '', name: body.name, + ownerId: body.ownerId, public: body?.public || false, + rules: body.queryBuilderRules, + sync: body.sync, ...body._custom, }, params: { diff --git a/src/renderer/features/albums/components/album-detail-content.tsx b/src/renderer/features/albums/components/album-detail-content.tsx index 955875c90..88d292c4a 100644 --- a/src/renderer/features/albums/components/album-detail-content.tsx +++ b/src/renderer/features/albums/components/album-detail-content.tsx @@ -327,11 +327,6 @@ export const AlbumDetailContent = () => { excludeIds: detailQuery?.data?.id ? [detailQuery.data.id] : undefined, isHidden: !detailQuery?.data?.albumArtists?.[0]?.id, query: { - _custom: { - jellyfin: { - ExcludeItemIds: detailQuery?.data?.id, - }, - }, artistIds: detailQuery?.data?.albumArtists.length ? [detailQuery?.data?.albumArtists[0].id] : undefined, @@ -346,11 +341,11 @@ export const AlbumDetailContent = () => { excludeIds: detailQuery?.data?.id ? [detailQuery.data.id] : undefined, isHidden: !detailQuery?.data?.genres?.[0], query: { - genres: detailQuery?.data?.genres.length + genreIds: detailQuery?.data?.genres.length ? [detailQuery?.data?.genres[0].id] : undefined, }, - rowCount: 2, + rowCount: 1, sortBy: AlbumListSort.RANDOM, sortOrder: SortOrder.ASC, title: `${t('page.albumDetail.moreFromGeneric', { diff --git a/src/renderer/features/context-menu/actions/add-to-playlist-action.tsx b/src/renderer/features/context-menu/actions/add-to-playlist-action.tsx index 08d13669d..1e676d502 100644 --- a/src/renderer/features/context-menu/actions/add-to-playlist-action.tsx +++ b/src/renderer/features/context-menu/actions/add-to-playlist-action.tsx @@ -38,11 +38,7 @@ export const AddToPlaylistAction = ({ items, itemType }: AddToPlaylistActionProp const playlistsQuery = useQuery( playlistsQueries.list({ query: { - _custom: { - navidrome: { - smart: false, - }, - }, + excludeSmartPlaylists: true, sortBy: PlaylistListSort.NAME, sortOrder: SortOrder.ASC, startIndex: 0, diff --git a/src/renderer/features/playlists/components/add-to-playlist-context-modal.tsx b/src/renderer/features/playlists/components/add-to-playlist-context-modal.tsx index 4a572184c..e51476dfc 100644 --- a/src/renderer/features/playlists/components/add-to-playlist-context-modal.tsx +++ b/src/renderer/features/playlists/components/add-to-playlist-context-modal.tsx @@ -74,11 +74,7 @@ export const AddToPlaylistContextModal = ({ const playlistList = useQuery( playlistsQueries.list({ query: { - _custom: { - navidrome: { - smart: false, - }, - }, + excludeSmartPlaylists: true, sortBy: PlaylistListSort.NAME, sortOrder: SortOrder.ASC, startIndex: 0, diff --git a/src/renderer/features/playlists/components/create-playlist-form.tsx b/src/renderer/features/playlists/components/create-playlist-form.tsx index bc31f9569..7c3ce5bf7 100644 --- a/src/renderer/features/playlists/components/create-playlist-form.tsx +++ b/src/renderer/features/playlists/components/create-playlist-form.tsx @@ -33,13 +33,9 @@ export const CreatePlaylistForm = ({ onCancel }: CreatePlaylistFormProps) => { const form = useForm({ initialValues: { - _custom: { - navidrome: { - rules: undefined, - }, - }, comment: '', name: '', + queryBuilderRules: undefined, }, }); const [isSmartPlaylist, setIsSmartPlaylist] = useState(false); @@ -79,14 +75,7 @@ export const CreatePlaylistForm = ({ onCancel }: CreatePlaylistFormProps) => { apiClientProps: { serverId: server.id }, body: { ...values, - _custom: { - navidrome: { - ...values._custom?.navidrome, - rules, - }, - // Top-level rules field is what Navidrome expects for smart playlists. - ...(rules ? { rules } : {}), - }, + ...(rules ? { queryBuilderRules: rules } : {}), }, }, { diff --git a/src/renderer/features/playlists/components/save-as-playlist-form.tsx b/src/renderer/features/playlists/components/save-as-playlist-form.tsx index b1d823f2d..6dbf98dd4 100644 --- a/src/renderer/features/playlists/components/save-as-playlist-form.tsx +++ b/src/renderer/features/playlists/components/save-as-playlist-form.tsx @@ -36,15 +36,10 @@ export const SaveAsPlaylistForm = ({ const form = useForm({ initialValues: { - _custom: { - navidrome: { - rules: undefined, - ...body?._custom?.navidrome, - }, - }, comment: body.comment || '', name: body.name || '', public: body.public, + queryBuilderRules: body.queryBuilderRules, }, }); diff --git a/src/renderer/features/playlists/components/update-playlist-form.tsx b/src/renderer/features/playlists/components/update-playlist-form.tsx index 20c5f5ebd..9b795fcb3 100644 --- a/src/renderer/features/playlists/components/update-playlist-form.tsx +++ b/src/renderer/features/playlists/components/update-playlist-form.tsx @@ -48,17 +48,12 @@ export const UpdatePlaylistForm = ({ body, onCancel, query, users }: UpdatePlayl const form = useForm({ initialValues: { - _custom: { - navidrome: { - owner: body?._custom?.navidrome?.owner || '', - ownerId: body?._custom?.navidrome?.ownerId || '', - rules: undefined, - sync: body?._custom?.navidrome?.sync || false, - }, - }, comment: body?.comment || '', name: body?.name || '', + ownerId: body.ownerId, public: body.public, + queryBuilderRules: body.queryBuilderRules, + sync: body.sync, }, }); @@ -114,7 +109,7 @@ export const UpdatePlaylistForm = ({ body, onCancel, query, users }: UpdatePlayl {isOwnerDisplayed && (