xref: /MusicFree/src/core/musicSheet/storage.ts (revision 740e39476f71e0e17304d812ac0a4c4cdc183ed1)
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