1import getOrCreateMMKV from '@/utils/getOrCreateMMKV'; 2import {getMediaKey} from '@/utils/mediaItem'; 3import safeParse from '@/utils/safeParse'; 4 5// Internal Method 6const mediaCacheStore = getOrCreateMMKV('cache.MediaCache', true); 7 8// 最多缓存1000条数据 9const maxCacheCount = 800; 10 11/** 获取meta信息 */ 12const getMediaCache = (mediaItem: ICommon.IMediaBase) => { 13 if (mediaItem.platform && mediaItem.id) { 14 const cacheMediaItem = mediaCacheStore.getString( 15 getMediaKey(mediaItem), 16 ); 17 return cacheMediaItem 18 ? safeParse<ICommon.IMediaBase>(cacheMediaItem) 19 : null; 20 } 21 22 return null; 23}; 24 25/** 设置meta信息 */ 26const setMediaCache = (mediaItem: ICommon.IMediaBase) => { 27 if (mediaItem.platform && mediaItem.id) { 28 const allKeys = mediaCacheStore.getAllKeys(); 29 if (allKeys.length >= maxCacheCount) { 30 // TODO: 随机删一半 31 for (let i = 0; i < maxCacheCount / 2; ++i) { 32 mediaCacheStore.delete(allKeys[i]); 33 } 34 } 35 36 mediaCacheStore.set(getMediaKey(mediaItem), JSON.stringify(mediaItem)); 37 return true; 38 } 39 40 return false; 41}; 42 43/** 移除缓存信息 */ 44const removeMediaCache = (mediaItem: ICommon.IMediaBase) => { 45 if (mediaItem.platform && mediaItem.id) { 46 mediaCacheStore.delete(getMediaKey(mediaItem)); 47 } 48 49 return false; 50}; 51 52const MediaCache = { 53 getMediaCache, 54 setMediaCache, 55 removeMediaCache, 56}; 57 58export default MediaCache; 59