feat: updates

This commit is contained in:
qier222 2022-03-17 19:30:43 +08:00
parent d96bd2a547
commit e3486ab550
No known key found for this signature in database
GPG key ID: 9C85007ED905F14D
23 changed files with 331 additions and 261 deletions

View file

@ -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
}
}
}