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