mirror of
https://github.com/austinried/subtracks.git
synced 2026-02-10 15:02:42 +01:00
added album list filtering
This commit is contained in:
@@ -10,7 +10,7 @@ import {
|
||||
StarrableItemType,
|
||||
} from '@app/models/music'
|
||||
import { Store } from '@app/state/store'
|
||||
import { GetAlbumList2Type, Search3Params, StarParams } from '@app/subsonic/params'
|
||||
import { GetAlbumList2Params, GetAlbumList2TypeBase, Search3Params, StarParams } from '@app/subsonic/params'
|
||||
import produce from 'immer'
|
||||
import { GetState, SetState } from 'zustand'
|
||||
|
||||
@@ -218,7 +218,37 @@ export const createMusicSlice = (set: SetState<Store>, get: GetState<Store>): Mu
|
||||
}
|
||||
|
||||
try {
|
||||
const response = await client.getAlbumList2({ type: 'alphabeticalByArtist', size, offset })
|
||||
const filter = get().settings.screens.library.albums
|
||||
|
||||
let params: GetAlbumList2Params
|
||||
switch (filter.type) {
|
||||
case 'byYear':
|
||||
params = {
|
||||
size,
|
||||
offset,
|
||||
type: filter.type,
|
||||
fromYear: filter.fromYear,
|
||||
toYear: filter.toYear,
|
||||
}
|
||||
break
|
||||
case 'byGenre':
|
||||
params = {
|
||||
size,
|
||||
offset,
|
||||
type: filter.type,
|
||||
genre: filter.genre,
|
||||
}
|
||||
break
|
||||
default:
|
||||
params = {
|
||||
size,
|
||||
offset,
|
||||
type: filter.type,
|
||||
}
|
||||
break
|
||||
}
|
||||
|
||||
const response = await client.getAlbumList2(params)
|
||||
const albums = response.data.albums.map(get().mapAlbumID3toAlbumListItem)
|
||||
|
||||
set(
|
||||
@@ -294,13 +324,13 @@ export const createMusicSlice = (set: SetState<Store>, get: GetState<Store>): Mu
|
||||
}
|
||||
set({ homeListsUpdating: true })
|
||||
|
||||
const types = get().settings.home.lists
|
||||
const types = get().settings.screens.home.lists
|
||||
|
||||
try {
|
||||
const promises: Promise<any>[] = []
|
||||
for (const type of types) {
|
||||
promises.push(
|
||||
client.getAlbumList2({ type: type as GetAlbumList2Type, size: 20 }).then(response => {
|
||||
client.getAlbumList2({ type: type as GetAlbumList2TypeBase, size: 20 }).then(response => {
|
||||
const list = response.data.albums.map(get().mapAlbumID3toAlbumListItem)
|
||||
set(
|
||||
produce<MusicSlice>(state => {
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { AppSettings, Server } from '@app/models/settings'
|
||||
import { AppSettings, FilterSettings, Server } from '@app/models/settings'
|
||||
import { Store } from '@app/state/store'
|
||||
import { SubsonicApiClient } from '@app/subsonic/api'
|
||||
import produce from 'immer'
|
||||
@@ -22,6 +22,8 @@ export type SettingsSlice = {
|
||||
setMaxBuffer: (maxBuffer: number) => void
|
||||
|
||||
pingServer: (server?: Server) => Promise<boolean>
|
||||
|
||||
setLibraryAlbumFilter: (filter: FilterSettings) => void
|
||||
}
|
||||
|
||||
export const selectSettings = {
|
||||
@@ -35,7 +37,7 @@ export const selectSettings = {
|
||||
removeServer: (state: SettingsSlice) => state.removeServer,
|
||||
updateServer: (state: SettingsSlice) => state.updateServer,
|
||||
|
||||
homeLists: (state: SettingsSlice) => state.settings.home.lists,
|
||||
homeLists: (state: SettingsSlice) => state.settings.screens.home.lists,
|
||||
|
||||
scrobble: (state: SettingsSlice) => state.settings.scrobble,
|
||||
setScrobble: (state: SettingsSlice) => state.setScrobble,
|
||||
@@ -54,13 +56,26 @@ export const selectSettings = {
|
||||
setMaxBuffer: (state: SettingsSlice) => state.setMaxBuffer,
|
||||
|
||||
pingServer: (state: SettingsSlice) => state.pingServer,
|
||||
|
||||
setLibraryAlbumFilter: (state: SettingsSlice) => state.setLibraryAlbumFilter,
|
||||
libraryAlbumFilter: (state: SettingsSlice) => state.settings.screens.library.albums,
|
||||
}
|
||||
|
||||
export const createSettingsSlice = (set: SetState<Store>, get: GetState<Store>): SettingsSlice => ({
|
||||
settings: {
|
||||
servers: [],
|
||||
home: {
|
||||
lists: ['recent', 'random', 'frequent', 'starred'],
|
||||
screens: {
|
||||
home: {
|
||||
lists: ['recent', 'random', 'frequent', 'starred'],
|
||||
},
|
||||
library: {
|
||||
albums: {
|
||||
type: 'alphabeticalByArtist',
|
||||
fromYear: 1,
|
||||
toYear: 9999,
|
||||
genre: '',
|
||||
},
|
||||
},
|
||||
},
|
||||
scrobble: false,
|
||||
estimateContentLength: true,
|
||||
@@ -226,6 +241,14 @@ export const createSettingsSlice = (set: SetState<Store>, get: GetState<Store>):
|
||||
return false
|
||||
}
|
||||
},
|
||||
|
||||
setLibraryAlbumFilter: filter => {
|
||||
set(
|
||||
produce<SettingsSlice>(state => {
|
||||
state.settings.screens.library.albums = filter
|
||||
}),
|
||||
)
|
||||
},
|
||||
})
|
||||
|
||||
function replaceIndex<T>(array: T[], index: number, replacement: T): T[] {
|
||||
|
||||
Reference in New Issue
Block a user