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