mirror of
https://github.com/austinried/subtracks.git
synced 2025-12-27 17:19:27 +01:00
76 lines
2.5 KiB
TypeScript
76 lines
2.5 KiB
TypeScript
import { useReset } from '@app/hooks/trackplayer'
|
|
import { CacheItemTypeKey } from '@app/models/cache'
|
|
import queryClient from '@app/query/queryClient'
|
|
import { useStore, useStoreDeep } from '@app/state/store'
|
|
import cacheDir from '@app/util/cacheDir'
|
|
import RNFS from 'react-native-fs'
|
|
import qk from '@app/query/queryKeys'
|
|
|
|
export const useSwitchActiveServer = () => {
|
|
const activeServerId = useStore(store => store.settings.activeServerId)
|
|
const setActiveServer = useStore(store => store.setActiveServer)
|
|
const resetPlayer = useReset()
|
|
|
|
return async (id: string) => {
|
|
if (id === activeServerId) {
|
|
return
|
|
}
|
|
|
|
await queryClient.cancelQueries(undefined, { active: true })
|
|
await resetPlayer()
|
|
queryClient.removeQueries()
|
|
setActiveServer(id)
|
|
}
|
|
}
|
|
|
|
export const useFirstRun = () => {
|
|
return useStore(store => Object.keys(store.settings.servers).length === 0)
|
|
}
|
|
|
|
export const useResetImageCache = () => {
|
|
const serverIds = useStoreDeep(store => Object.keys(store.settings.servers))
|
|
const changeCacheBuster = useStore(store => store.changeCacheBuster)
|
|
const setDisableMusicTabs = useStore(store => store.setDisableMusicTabs)
|
|
|
|
return async () => {
|
|
setDisableMusicTabs(true)
|
|
|
|
try {
|
|
// disable/invalidate queries
|
|
await Promise.all([
|
|
queryClient.cancelQueries(qk.artistArt(), { active: true }),
|
|
queryClient.cancelQueries(qk.coverArt(), { active: true }),
|
|
queryClient.cancelQueries(qk.existingFiles(), { active: true }),
|
|
queryClient.invalidateQueries(qk.artistArt(), { refetchActive: false }),
|
|
queryClient.invalidateQueries(qk.coverArt(), { refetchActive: false }),
|
|
queryClient.invalidateQueries(qk.existingFiles(), { refetchActive: false }),
|
|
])
|
|
|
|
// delete all images
|
|
const itemTypes: CacheItemTypeKey[] = ['artistArt', 'artistArtThumb', 'coverArt', 'coverArtThumb']
|
|
await Promise.all(
|
|
serverIds.flatMap(id =>
|
|
itemTypes.map(async type => {
|
|
const dir = cacheDir(id, type)
|
|
try {
|
|
await RNFS.unlink(dir)
|
|
} catch {}
|
|
}),
|
|
),
|
|
)
|
|
|
|
// change cacheBuster
|
|
changeCacheBuster()
|
|
} finally {
|
|
setDisableMusicTabs(false)
|
|
|
|
// enable queries
|
|
await Promise.all([
|
|
queryClient.refetchQueries(qk.existingFiles(), { active: true }),
|
|
queryClient.refetchQueries(qk.artistArt(), { active: true }),
|
|
queryClient.refetchQueries(qk.coverArt(), { active: true }),
|
|
])
|
|
}
|
|
}
|
|
}
|