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