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