From 2969b6c768f248bbf70aea45099a4befe44cc1ea Mon Sep 17 00:00:00 2001 From: austinried <4966622+austinried@users.noreply.github.com> Date: Sun, 20 Mar 2022 15:41:38 +0900 Subject: [PATCH] set starred/unstar assuming it works and correct state on error --- app/state/library.ts | 76 ++++++++++++++++++++++++++++++++------------ 1 file changed, 56 insertions(+), 20 deletions(-) diff --git a/app/state/library.ts b/app/state/library.ts index c63403a..582fd21 100644 --- a/app/state/library.ts +++ b/app/state/library.ts @@ -496,23 +496,41 @@ export const createLibrarySlice = (set: SetState, get: GetState): return } - try { - await client.star(params) - } catch { + let id = '-1' + let entity: 'songs' | 'artists' | 'albums' = 'songs' + if (params.id) { + id = params.id + entity = 'songs' + } else if (params.albumId) { + id = params.albumId + entity = 'albums' + } else if (params.artistId) { + id = params.artistId + entity = 'artists' + } else { return } + const item = get().entities[entity][id] + const originalValue = item ? item.starred : null + set( produce(state => { - if (params.id) { - state.entities.songs[params.id].starred = new Date() - } else if (params.albumId) { - state.entities.albums[params.albumId].starred = new Date() - } else if (params.artistId) { - state.entities.artists[params.artistId].starred = new Date() - } + state.entities[entity][id].starred = new Date() }), ) + + try { + await client.star(params) + } catch { + set( + produce(state => { + if (originalValue !== null) { + state.entities[entity][id].starred = originalValue + } + }), + ) + } }, unstar: async params => { @@ -521,22 +539,40 @@ export const createLibrarySlice = (set: SetState, get: GetState): return } - try { - await client.unstar(params) - } catch { + let id = '-1' + let entity: 'songs' | 'artists' | 'albums' = 'songs' + if (params.id) { + id = params.id + entity = 'songs' + } else if (params.albumId) { + id = params.albumId + entity = 'albums' + } else if (params.artistId) { + id = params.artistId + entity = 'artists' + } else { return } + const item = get().entities[entity][id] + const originalValue = item ? item.starred : null + set( produce(state => { - if (params.id) { - state.entities.songs[params.id].starred = undefined - } else if (params.albumId) { - state.entities.albums[params.albumId].starred = undefined - } else if (params.artistId) { - state.entities.artists[params.artistId].starred = undefined - } + state.entities[entity][id].starred = undefined }), ) + + try { + await client.unstar(params) + } catch { + set( + produce(state => { + if (originalValue !== null) { + state.entities[entity][id].starred = originalValue + } + }), + ) + } }, })