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