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