mirror of
https://github.com/austinried/subtracks.git
synced 2026-02-10 15:02:42 +01:00
Library store refactor (#76)
* start of music store refactor moving stuff into a state cache better separate it from view logic * added paginated list/album list * reworked fetchAlbumList to remove ui state refactored home screen to use new method i broke playing songs somehow, JS thread goes into a loop * don't reset parts manually, do it all at once * fixed perf issue related to too many rerenders rerenders were caused by strict equality check on object/array picks switched artistInfo to new store updated zustand and fixed deprecation warnings * update typescript and use workspace tsc version for vscode * remove old artistInfo * switched to new playlist w/songs removed more unused stuff * remove unused + (slightly) rework search * refactor star * use only original/large imges for covers/artist fix view artist from context menu add loading indicators to song list and artist views (show info we have right away) * set starred/unstar assuming it works and correct state on error * reorg, remove old music slice files * added back fix for song cover art * sort artists by localCompare name * update licenses * fix now playing background grey bar * update react-native-gesture-handler for node-fetch security alert * fix another gradient height grey bar issue * update licenses again * remove thumbnail cache * rename to remove "Library" from methods * Revert "remove thumbnail cache" This reverts commite0db4931f1. * use ids for lists, pull state later * Revert "use only original/large imges for covers/artist" This reverts commitc9aea9065c. * deep equal ListItem props for now this needs a bigger refactor * use immer as middleware * refactor api client to use string method hoping to use this for requestKey/deduping next * use thumbnails in list items * Revert "refactor api client to use string method" This reverts commit234326135b. * rename/cleanup * store servers by id * get rid of settings selectors * renames for clarity remove unused estimateContentLength setting * remove trackplayer selectors * fix migration for library filter settings * fixed shuffle order reporting wrong track/queue * removed the other selectors * don't actually need es6/react for our state * fix slow artist sort on star localeCompare is too slow for large lists
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
import { Album, PlaylistListItem, Artist, Song } from './music'
|
||||
import { Album, Playlist, Artist, Song } from './library'
|
||||
|
||||
export enum CacheItemType {
|
||||
coverArt = 'coverArt',
|
||||
@@ -27,7 +27,7 @@ export type DownloadedAlbum = Album & {
|
||||
songs: string[]
|
||||
}
|
||||
|
||||
export type DownloadedPlaylist = PlaylistListItem & {
|
||||
export type DownloadedPlaylist = Playlist & {
|
||||
songs: string[]
|
||||
}
|
||||
|
||||
|
||||
@@ -6,14 +6,13 @@ export interface Artist {
|
||||
coverArt?: string
|
||||
}
|
||||
|
||||
export interface ArtistInfo extends Artist {
|
||||
albums: Album[]
|
||||
export interface ArtistInfo {
|
||||
id: string
|
||||
smallImageUrl?: string
|
||||
largeImageUrl?: string
|
||||
topSongs: Song[]
|
||||
}
|
||||
|
||||
export interface AlbumListItem {
|
||||
export interface Album {
|
||||
itemType: 'album'
|
||||
id: string
|
||||
name: string
|
||||
@@ -21,24 +20,10 @@ export interface AlbumListItem {
|
||||
artistId?: string
|
||||
starred?: Date
|
||||
coverArt?: string
|
||||
}
|
||||
|
||||
export interface Album extends AlbumListItem {
|
||||
coverArt?: string
|
||||
year?: number
|
||||
}
|
||||
|
||||
export interface AlbumWithSongs extends Album {
|
||||
songs: Song[]
|
||||
}
|
||||
|
||||
export interface SearchResults {
|
||||
artists: Artist[]
|
||||
albums: AlbumListItem[]
|
||||
songs: Song[]
|
||||
}
|
||||
|
||||
export interface PlaylistListItem {
|
||||
export interface Playlist {
|
||||
itemType: 'playlist'
|
||||
id: string
|
||||
name: string
|
||||
@@ -46,10 +31,6 @@ export interface PlaylistListItem {
|
||||
coverArt?: string
|
||||
}
|
||||
|
||||
export interface PlaylistWithSongs extends PlaylistListItem {
|
||||
songs: Song[]
|
||||
}
|
||||
|
||||
export interface Song {
|
||||
itemType: 'song'
|
||||
id: string
|
||||
@@ -62,13 +43,15 @@ export interface Song {
|
||||
discNumber?: number
|
||||
duration?: number
|
||||
starred?: Date
|
||||
|
||||
streamUri: string
|
||||
coverArt?: string
|
||||
}
|
||||
|
||||
export type ListableItem = Song | AlbumListItem | Artist | PlaylistListItem
|
||||
export interface SearchResults {
|
||||
artists: string[]
|
||||
albums: string[]
|
||||
songs: string[]
|
||||
}
|
||||
|
||||
export type HomeLists = { [key: string]: AlbumListItem[] }
|
||||
export type StarrableItemType = 'album' | 'song' | 'artist'
|
||||
|
||||
export type StarrableItemType = 'song' | 'album' | 'artist'
|
||||
export type ListableItem = Album | Song | Artist | Playlist
|
||||
@@ -30,23 +30,3 @@ export type ArtistFilterType = 'random' | 'starred' | 'alphabeticalByName'
|
||||
export interface ArtistFilterSettings {
|
||||
type: ArtistFilterType
|
||||
}
|
||||
|
||||
export interface AppSettings {
|
||||
servers: Server[]
|
||||
screens: {
|
||||
home: {
|
||||
lists: string[]
|
||||
}
|
||||
library: {
|
||||
albums: AlbumFilterSettings
|
||||
artists: ArtistFilterSettings
|
||||
}
|
||||
}
|
||||
activeServer?: string
|
||||
scrobble: boolean
|
||||
estimateContentLength: boolean
|
||||
maxBitrateWifi: number
|
||||
maxBitrateMobile: number
|
||||
minBuffer: number
|
||||
maxBuffer: number
|
||||
}
|
||||
|
||||
14
app/models/state.ts
Normal file
14
app/models/state.ts
Normal file
@@ -0,0 +1,14 @@
|
||||
export interface ById<T> {
|
||||
[id: string]: T
|
||||
}
|
||||
|
||||
export type OneToMany = ById<string[]>
|
||||
|
||||
export interface OrderedById<T> {
|
||||
byId: ById<T>
|
||||
allIds: string[]
|
||||
}
|
||||
|
||||
export interface PaginatedList {
|
||||
[offset: number]: string[]
|
||||
}
|
||||
18
app/models/trackplayer.ts
Normal file
18
app/models/trackplayer.ts
Normal file
@@ -0,0 +1,18 @@
|
||||
import { Track } from 'react-native-track-player'
|
||||
|
||||
export type TrackExt = Track & {
|
||||
id: string
|
||||
coverArt?: string
|
||||
artistId?: string
|
||||
albumId?: string
|
||||
track?: number
|
||||
discNumber?: number
|
||||
}
|
||||
|
||||
export type Progress = {
|
||||
position: number
|
||||
duration: number
|
||||
buffered: number
|
||||
}
|
||||
|
||||
export type QueueContextType = 'album' | 'playlist' | 'song' | 'artist'
|
||||
Reference in New Issue
Block a user