xref: /MusicFree/src/core/musicHistory.ts (revision 41ddce918e1138d8f16e522cc7c19ac86ceca698)
1import { isSameMediaItem } from "@/utils/mediaItem";
2import { GlobalState } from "@/utils/stateMapper";
3import { getStorage, setStorage } from "@/utils/storage";
4import Config from "./config.ts";
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.getConfig('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