xref: /MusicFree/src/core/mediaExtra.ts (revision 410a159129b1f6a7a1f44fde7bfad9a46f91e161)
1import getOrCreateMMKV from '@/utils/getOrCreateMMKV';
2import safeParse from '@/utils/safeParse';
3
4// Internal Method
5const getPluginStore = (pluginName: string) => {
6    return getOrCreateMMKV(`MediaExtra.${pluginName}`);
7};
8
9/** 获取meta信息 */
10const get = (mediaItem: ICommon.IMediaBase) => {
11    if (mediaItem.platform && mediaItem.id) {
12        const meta = getPluginStore(mediaItem.platform).getString(
13            `${mediaItem.id}`,
14        );
15        if (!meta) {
16            return null;
17        }
18
19        return safeParse<ICommon.IMediaMeta>(meta);
20    }
21
22    return null;
23};
24
25/** 设置meta信息 */
26const set = (mediaItem: ICommon.IMediaBase, meta: ICommon.IMediaMeta) => {
27    if (mediaItem.platform && mediaItem.id) {
28        const store = getPluginStore(mediaItem.platform);
29        store.set(mediaItem.id, JSON.stringify(meta));
30        return true;
31    }
32
33    return false;
34};
35
36/** 更新meta信息 */
37const update = (
38    mediaItem: ICommon.IMediaBase,
39    meta: Partial<ICommon.IMediaMeta>,
40) => {
41    if (mediaItem.platform && mediaItem.id) {
42        const store = getPluginStore(mediaItem.platform);
43        const originalMeta = get(mediaItem);
44
45        store.set(
46            `${mediaItem.id}`,
47            JSON.stringify({
48                ...(originalMeta || {}),
49                ...meta,
50            }),
51        );
52        return true;
53    }
54
55    return false;
56};
57
58/** 删除meta信息 */
59const remove = (mediaItem: ICommon.IMediaBase) => {
60    if (mediaItem.platform && mediaItem.id) {
61        const store = getPluginStore(mediaItem.platform);
62        store.delete(`${mediaItem.id}`);
63        return true;
64    }
65
66    return false;
67};
68
69const removeAll = (pluginName: string) => {
70    const store = getPluginStore(pluginName);
71    store.clearAll();
72};
73
74const MediaExtra = {
75    get: get,
76    set: set,
77    update: update,
78    remove: remove,
79    removeAll: removeAll,
80};
81
82export default MediaExtra;
83