1*740e3947S猫头猫import getOrCreateMMKV from '@/utils/getOrCreateMMKV.ts'; 2*740e3947S猫头猫import safeParse from '@/utils/safeParse.ts'; 3*740e3947S猫头猫import {InteractionManager} from 'react-native'; 4*740e3947S猫头猫import safeStringify from '@/utils/safeStringify.ts'; 5*740e3947S猫头猫import {SortType} from '@/constants/commonConst.ts'; 6*740e3947S猫头猫 7*740e3947S猫头猫function getStorageBase(key: string) { 8*740e3947S猫头猫 const mmkv = getOrCreateMMKV(`LocalSheet.${key}`); 9*740e3947S猫头猫 10*740e3947S猫头猫 return safeParse(mmkv.getString('data')); 11*740e3947S猫头猫} 12*740e3947S猫头猫 13*740e3947S猫头猫async function setStorageBase(key: string, value: any) { 14*740e3947S猫头猫 return InteractionManager.runAfterInteractions(() => { 15*740e3947S猫头猫 const mmkv = getOrCreateMMKV(`LocalSheet.${key}`); 16*740e3947S猫头猫 mmkv.set('data', safeStringify(value)); 17*740e3947S猫头猫 }); 18*740e3947S猫头猫} 19*740e3947S猫头猫 20*740e3947S猫头猫function removeStorageBase(key: string) { 21*740e3947S猫头猫 const mmkv = getOrCreateMMKV(`LocalSheet.${key}`); 22*740e3947S猫头猫 mmkv.clearAll(); 23*740e3947S猫头猫} 24*740e3947S猫头猫 25*740e3947S猫头猫/** 26*740e3947S猫头猫 * 存储歌单的基本信息 27*740e3947S猫头猫 * @param sheets 歌单数据 28*740e3947S猫头猫 */ 29*740e3947S猫头猫async function setSheets(sheets: IMusic.IMusicSheetItemBase[]) { 30*740e3947S猫头猫 return await setStorageBase('music-sheets', sheets); 31*740e3947S猫头猫} 32*740e3947S猫头猫 33*740e3947S猫头猫/** 34*740e3947S猫头猫 * 获取歌单的基本信息 35*740e3947S猫头猫 */ 36*740e3947S猫头猫function getSheets(): IMusic.IMusicSheetItemBase[] { 37*740e3947S猫头猫 return getStorageBase('music-sheets'); 38*740e3947S猫头猫} 39*740e3947S猫头猫 40*740e3947S猫头猫/** 41*740e3947S猫头猫 * 存储歌单的基本信息 42*740e3947S猫头猫 * @param sheets 歌单数据 43*740e3947S猫头猫 */ 44*740e3947S猫头猫async function setStarredSheets(sheets: IMusic.IMusicSheetItemBase[]) { 45*740e3947S猫头猫 return await setStorageBase('starred-sheets', sheets); 46*740e3947S猫头猫} 47*740e3947S猫头猫 48*740e3947S猫头猫/** 49*740e3947S猫头猫 * 获取歌单的基本信息 50*740e3947S猫头猫 */ 51*740e3947S猫头猫function getStarredSheets(): IMusic.IMusicSheetItem[] { 52*740e3947S猫头猫 return getStorageBase('starred-sheets'); 53*740e3947S猫头猫} 54*740e3947S猫头猫 55*740e3947S猫头猫/** 56*740e3947S猫头猫 * 存储歌单内的歌曲 57*740e3947S猫头猫 * @param sheetId 歌单id 58*740e3947S猫头猫 * @param musicList 歌曲列表 59*740e3947S猫头猫 */ 60*740e3947S猫头猫async function setMusicList(sheetId: string, musicList: IMusic.IMusicItem[]) { 61*740e3947S猫头猫 return await setStorageBase(sheetId, musicList); 62*740e3947S猫头猫} 63*740e3947S猫头猫 64*740e3947S猫头猫/** 65*740e3947S猫头猫 * 获取歌单内的歌曲 66*740e3947S猫头猫 * @param sheetId 歌单id 67*740e3947S猫头猫 * @returns 歌曲列表 68*740e3947S猫头猫 */ 69*740e3947S猫头猫function getMusicList(sheetId: string): IMusic.IMusicItem[] { 70*740e3947S猫头猫 return getStorageBase(sheetId); 71*740e3947S猫头猫} 72*740e3947S猫头猫 73*740e3947S猫头猫/** 74*740e3947S猫头猫 * 清空歌单内的歌曲/其他信息 75*740e3947S猫头猫 * @param sheetId 76*740e3947S猫头猫 */ 77*740e3947S猫头猫function removeMusicList(sheetId: string) { 78*740e3947S猫头猫 return removeStorageBase(sheetId); 79*740e3947S猫头猫} 80*740e3947S猫头猫 81*740e3947S猫头猫interface IMusicSheetMeta extends Record<string, string> { 82*740e3947S猫头猫 sort: SortType; 83*740e3947S猫头猫} 84*740e3947S猫头猫 85*740e3947S猫头猫function setSheetMeta<K extends keyof IMusicSheetMeta>( 86*740e3947S猫头猫 sheetId: string, 87*740e3947S猫头猫 key: K, 88*740e3947S猫头猫 value: IMusicSheetMeta[K], 89*740e3947S猫头猫) { 90*740e3947S猫头猫 const mmkv = getOrCreateMMKV(`LocalSheet.${sheetId}`); 91*740e3947S猫头猫 mmkv.set('meta.' + key, value); 92*740e3947S猫头猫} 93*740e3947S猫头猫 94*740e3947S猫头猫function getSheetMeta<K extends keyof IMusicSheetMeta>( 95*740e3947S猫头猫 sheetId: string, 96*740e3947S猫头猫 key: K, 97*740e3947S猫头猫): IMusicSheetMeta[K] | null { 98*740e3947S猫头猫 const mmkv = getOrCreateMMKV(`LocalSheet.${sheetId}`); 99*740e3947S猫头猫 return mmkv.getString('meta.' + key) || null; 100*740e3947S猫头猫} 101*740e3947S猫头猫 102*740e3947S猫头猫const storage = { 103*740e3947S猫头猫 setSheets, 104*740e3947S猫头猫 getSheets, 105*740e3947S猫头猫 setMusicList, 106*740e3947S猫头猫 getMusicList, 107*740e3947S猫头猫 removeMusicList, 108*740e3947S猫头猫 setSheetMeta, 109*740e3947S猫头猫 getSheetMeta, 110*740e3947S猫头猫 setStarredSheets, 111*740e3947S猫头猫 getStarredSheets, 112*740e3947S猫头猫}; 113*740e3947S猫头猫 114*740e3947S猫头猫export default storage; 115