mirror of
https://github.com/GiriNeko/YesPlayMusic.git
synced 2025-12-17 21:58:03 +00:00
feat: updates
This commit is contained in:
parent
d96bd2a547
commit
e3486ab550
23 changed files with 331 additions and 261 deletions
|
|
@ -1,23 +1,41 @@
|
|||
import Realm from 'realm'
|
||||
import type { FetchTracksResponse } from '../renderer/src/api/track'
|
||||
import type { FetchAlbumResponse } from '../renderer/src/api/album'
|
||||
|
||||
enum ModelNames {
|
||||
TRACK = 'Track',
|
||||
ALBUM = 'Album',
|
||||
ARTIST = 'Artist',
|
||||
PLAYLIST = 'Playlist',
|
||||
}
|
||||
|
||||
const universalProperties = {
|
||||
id: 'int',
|
||||
json: 'string',
|
||||
updateAt: 'int',
|
||||
}
|
||||
|
||||
const TrackSchema = {
|
||||
name: ModelNames.TRACK,
|
||||
properties: {
|
||||
id: 'int',
|
||||
json: 'string',
|
||||
updateAt: 'int',
|
||||
},
|
||||
properties: universalProperties,
|
||||
primaryKey: 'id',
|
||||
}
|
||||
|
||||
const AlbumSchema = {
|
||||
name: ModelNames.ALBUM,
|
||||
properties: universalProperties,
|
||||
primaryKey: 'id',
|
||||
}
|
||||
|
||||
const PlaylistSchema = {
|
||||
name: ModelNames.PLAYLIST,
|
||||
properties: universalProperties,
|
||||
primaryKey: 'id',
|
||||
}
|
||||
|
||||
const realm = new Realm({
|
||||
path: './dist/db.realm',
|
||||
schema: [TrackSchema],
|
||||
path: './.tmp/db.realm',
|
||||
schema: [TrackSchema, AlbumSchema, PlaylistSchema],
|
||||
})
|
||||
|
||||
export const database = {
|
||||
|
|
@ -29,7 +47,7 @@ export const database = {
|
|||
model,
|
||||
{
|
||||
id: key,
|
||||
updateAt: ~~(Date.now() / 1000),
|
||||
updateAt: Date.now(),
|
||||
json: JSON.stringify(value),
|
||||
},
|
||||
'modified'
|
||||
|
|
@ -40,29 +58,43 @@ export const database = {
|
|||
},
|
||||
}
|
||||
|
||||
export function setTracks(data: FetchTracksResponse) {
|
||||
const tracks = data.songs
|
||||
export async function setTracks(data: FetchTracksResponse) {
|
||||
if (!data.songs) return
|
||||
const write = async () =>
|
||||
realm.write(() => {
|
||||
tracks.forEach(track => {
|
||||
database.set(ModelNames.TRACK, track.id, track)
|
||||
})
|
||||
const tracks = data.songs
|
||||
realm.write(() => {
|
||||
tracks.forEach(track => {
|
||||
database.set(ModelNames.TRACK, track.id, track)
|
||||
})
|
||||
write()
|
||||
})
|
||||
}
|
||||
|
||||
export async function setCache(api: string, data: any) {
|
||||
switch (api) {
|
||||
case 'song_detail':
|
||||
case 'song_detail': {
|
||||
setTracks(data)
|
||||
return
|
||||
}
|
||||
case 'album': {
|
||||
if (!data.album) return
|
||||
realm.write(() => {
|
||||
database.set(ModelNames.ALBUM, Number(data.album.id), data)
|
||||
})
|
||||
return
|
||||
}
|
||||
case 'playlist_detail': {
|
||||
if (!data.playlist) return
|
||||
realm.write(() => {
|
||||
database.set(ModelNames.PLAYLIST, Number(data.playlist.id), data)
|
||||
})
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export function getCache(api: string, query: any) {
|
||||
switch (api) {
|
||||
case 'song_detail': {
|
||||
const ids: string[] = query.ids.split(',')
|
||||
const ids: string[] = query?.ids.split(',')
|
||||
const idsQuery = ids.map(id => `id = ${id}`).join(' OR ')
|
||||
const tracksRaw = realm
|
||||
.objects(ModelNames.TRACK)
|
||||
|
|
@ -78,5 +110,23 @@ export function getCache(api: string, query: any) {
|
|||
privileges: {},
|
||||
}
|
||||
}
|
||||
case 'album': {
|
||||
if (!query?.id) return
|
||||
const album = realm.objectForPrimaryKey(
|
||||
ModelNames.ALBUM,
|
||||
Number(query?.id)
|
||||
)?.json
|
||||
if (album) return JSON.parse(album)
|
||||
return
|
||||
}
|
||||
case 'playlist_detail': {
|
||||
if (!query?.id) return
|
||||
const playlist = realm.objectForPrimaryKey(
|
||||
ModelNames.PLAYLIST,
|
||||
Number(query?.id)
|
||||
)?.json
|
||||
if (playlist) return JSON.parse(playlist)
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue