xref: /MusicFree/src/core/musicHistory.ts (revision 410a159129b1f6a7a1f44fde7bfad9a46f91e161)
1import {isSameMediaItem} from '@/utils/mediaItem';
2import {GlobalState} from '@/utils/stateMapper';
3import {getStorage, setStorage} from '@/utils/storage';
4import Config from './config';
5import {musicHistorySheetId} from '@/constants/commonConst';
6
7const musicHistory = new GlobalState<IMusic.IMusicItem[]>([]);
8
9async function setupMusicHistory() {
10    const history = await getStorage(musicHistorySheetId);
11    musicHistory.setValue(history ?? []);
12}
13
14async function addMusic(musicItem: IMusic.IMusicItem) {
15    const newMusicHistory = [
16        musicItem,
17        ...musicHistory
18            .getValue()
19            .filter(item => !isSameMediaItem(item, musicItem)),
20    ].slice(0, Config.get('setting.basic.maxHistoryLen') ?? 50);
21    await setStorage(musicHistorySheetId, newMusicHistory);
22    musicHistory.setValue(newMusicHistory);
23}
24
25async function removeMusic(musicItem: IMusic.IMusicItem) {
26    const newMusicHistory = musicHistory
27        .getValue()
28        .filter(item => !isSameMediaItem(item, musicItem));
29    await setStorage(musicHistorySheetId, newMusicHistory);
30    musicHistory.setValue(newMusicHistory);
31}
32
33async function clearMusic() {
34    await setStorage(musicHistorySheetId, []);
35    musicHistory.setValue([]);
36}
37
38async function setHistory(newHistory: IMusic.IMusicItem[]) {
39    await setStorage(musicHistorySheetId, newHistory);
40    musicHistory.setValue(newHistory);
41}
42
43export default {
44    setupMusicHistory,
45    addMusic,
46    removeMusic,
47    clearMusic,
48    setHistory,
49    useMusicHistory: musicHistory.useValue,
50};
51