import getOrCreateMMKV from "@/utils/getOrCreateMMKV.ts";
import { InteractionManager } from "react-native";
import { SortType } from "@/constants/commonConst.ts";
import { safeParse, safeStringify } from "@/utils/jsonUtil";
function getStorageData(key: string) {
const mmkv = getOrCreateMMKV(`LocalSheet.${key}`);
return safeParse(mmkv.getString("data"));
}
async function setStorageData(key: string, value: any) {
return InteractionManager.runAfterInteractions(() => {
const mmkv = getOrCreateMMKV(`LocalSheet.${key}`);
mmkv.set("data", safeStringify(value));
});
}
function removeStorageData(key: string) {
const mmkv = getOrCreateMMKV(`LocalSheet.${key}`);
mmkv.clearAll();
}
* 存储歌单的基本信息
* @param sheets 歌单数据
*/
async function setSheets(sheets: IMusic.IMusicSheetItemBase[]) {
return await setStorageData("music-sheets", sheets);
}
* 获取歌单的基本信息
*/
function getSheets(): IMusic.IMusicSheetItemBase[] {
return getStorageData("music-sheets");
}
* 存储歌单的基本信息
* @param sheets 歌单数据
*/
async function setStarredSheets(sheets: IMusic.IMusicSheetItemBase[]) {
return await setStorageData("starred-sheets", sheets);
}
* 获取歌单的基本信息
*/
function getStarredSheets(): IMusic.IMusicSheetItem[] {
return getStorageData("starred-sheets");
}
* 存储歌单内的歌曲
* @param sheetId 歌单id
* @param musicList 歌曲列表
*/
async function setMusicList(sheetId: string, musicList: IMusic.IMusicItem[]) {
return await setStorageData(sheetId, musicList);
}
* 获取歌单内的歌曲
* @param sheetId 歌单id
* @returns 歌曲列表
*/
function getMusicList(sheetId: string): IMusic.IMusicItem[] {
return getStorageData(sheetId);
}
* 清空歌单内的歌曲/其他信息
* @param sheetId
*/
function removeMusicList(sheetId: string) {
return removeStorageData(sheetId);
}
interface IMusicSheetMeta extends Record<string, string> {
sort: SortType;
}
function setSheetMeta<K extends keyof IMusicSheetMeta>(
sheetId: string,
key: K,
value: IMusicSheetMeta[K],
) {
const mmkv = getOrCreateMMKV(`LocalSheet.${sheetId}`);
mmkv.set("meta." + key, value);
}
function getSheetMeta<K extends keyof IMusicSheetMeta>(
sheetId: string,
key: K,
): IMusicSheetMeta[K] | null {
const mmkv = getOrCreateMMKV(`LocalSheet.${sheetId}`);
return mmkv.getString("meta." + key) || null;
}
const storage = {
setSheets,
getSheets,
setMusicList,
getMusicList,
removeMusicList,
setSheetMeta,
getSheetMeta,
setStarredSheets,
getStarredSheets,
};
export default storage;