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