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