1*0e4173cdS猫头猫import {internalSerializeKey} from '@/constants/commonConst'; 2242960d3S猫头猫import produce from 'immer'; 3*0e4173cdS猫头猫import objectPath from 'object-path'; 4242960d3S猫头猫 5242960d3S猫头猫/** 获取mediakey */ 6242960d3S猫头猫export function getMediaKey(mediaItem: ICommon.IMediaBase) { 7242960d3S猫头猫 return `${mediaItem.platform}@${mediaItem.id}`; 8242960d3S猫头猫} 9242960d3S猫头猫 105276aef9S猫头猫/** 解析mediakey */ 115276aef9S猫头猫export function parseMediaKey(key: string): ICommon.IMediaBase { 125276aef9S猫头猫 try { 135276aef9S猫头猫 const str = JSON.parse(key.trim()); 145276aef9S猫头猫 let platform, id; 155276aef9S猫头猫 if (typeof str === 'string') { 165276aef9S猫头猫 [platform, id] = str.split('@'); 175276aef9S猫头猫 } else { 185276aef9S猫头猫 platform = str?.platform; 195276aef9S猫头猫 id = str?.id; 205276aef9S猫头猫 } 215276aef9S猫头猫 if (!platform || !id) { 224060c00aS猫头猫 throw new Error('mediakey不完整'); 235276aef9S猫头猫 } 245276aef9S猫头猫 return { 255276aef9S猫头猫 platform, 265276aef9S猫头猫 id, 275276aef9S猫头猫 }; 285276aef9S猫头猫 } catch (e: any) { 295276aef9S猫头猫 throw e; 305276aef9S猫头猫 } 315276aef9S猫头猫} 325276aef9S猫头猫 33*0e4173cdS猫头猫/** 比较两media是否相同 */ 34242960d3S猫头猫export function isSameMediaItem( 35242960d3S猫头猫 a: ICommon.IMediaBase | null | undefined, 36242960d3S猫头猫 b: ICommon.IMediaBase | null | undefined, 37242960d3S猫头猫) { 38242960d3S猫头猫 return a && b && a.id === b.id && a.platform === b.platform; 39242960d3S猫头猫} 40242960d3S猫头猫 41*0e4173cdS猫头猫/** 查找是否存在 */ 42*0e4173cdS猫头猫export function includesMedia( 43*0e4173cdS猫头猫 a: ICommon.IMediaBase[] | null | undefined, 44*0e4173cdS猫头猫 b: ICommon.IMediaBase | null | undefined, 45*0e4173cdS猫头猫) { 46*0e4173cdS猫头猫 if (!a || !b) { 47*0e4173cdS猫头猫 return false; 48*0e4173cdS猫头猫 } 49*0e4173cdS猫头猫 return a.findIndex(_ => isSameMediaItem(_, b)) !== -1; 50*0e4173cdS猫头猫} 51*0e4173cdS猫头猫 52242960d3S猫头猫/** 获取复位的mediaItem */ 538b88e961S猫头猫export function resetMediaItem<T extends ICommon.IMediaBase>( 548b88e961S猫头猫 mediaItem: T, 55242960d3S猫头猫 platform?: string, 568b88e961S猫头猫 newObj?: boolean, 578b88e961S猫头猫): T { 588b88e961S猫头猫 if (!newObj) { 59242960d3S猫头猫 mediaItem.platform = platform ?? mediaItem.platform; 60*0e4173cdS猫头猫 mediaItem[internalSerializeKey] = undefined; 61242960d3S猫头猫 return mediaItem; 62242960d3S猫头猫 } else { 63242960d3S猫头猫 return produce(mediaItem, _ => { 64242960d3S猫头猫 _.platform = platform ?? mediaItem.platform; 65*0e4173cdS猫头猫 _[internalSerializeKey] = undefined; 66242960d3S猫头猫 }); 67242960d3S猫头猫 } 68242960d3S猫头猫} 698b88e961S猫头猫 705276aef9S猫头猫export function mergeProps( 715276aef9S猫头猫 mediaItem: ICommon.IMediaBase, 725276aef9S猫头猫 props: Record<string, any> | undefined, 735276aef9S猫头猫) { 745276aef9S猫头猫 return props 755276aef9S猫头猫 ? { 768b88e961S猫头猫 ...mediaItem, 775276aef9S猫头猫 ...props, 785276aef9S猫头猫 } 795276aef9S猫头猫 : mediaItem; 808b88e961S猫头猫} 81*0e4173cdS猫头猫 82*0e4173cdS猫头猫export enum InternalDataType { 83*0e4173cdS猫头猫 LOCALPATH = 'localPath', 84*0e4173cdS猫头猫} 85*0e4173cdS猫头猫 86*0e4173cdS猫头猫export function setInternalData<T extends ICommon.IMediaBase>( 87*0e4173cdS猫头猫 mediaItem: T, 88*0e4173cdS猫头猫 key: InternalDataType, 89*0e4173cdS猫头猫 value: string | number | undefined | null, 90*0e4173cdS猫头猫): T { 91*0e4173cdS猫头猫 return produce(mediaItem, draft => { 92*0e4173cdS猫头猫 objectPath.set(draft, `${internalSerializeKey}.${key}`, value); 93*0e4173cdS猫头猫 }); 94*0e4173cdS猫头猫} 95*0e4173cdS猫头猫 96*0e4173cdS猫头猫export function getInternalData<T>( 97*0e4173cdS猫头猫 mediaItem: ICommon.IMediaBase | null | undefined, 98*0e4173cdS猫头猫 key: InternalDataType, 99*0e4173cdS猫头猫): T | undefined { 100*0e4173cdS猫头猫 if (!mediaItem) { 101*0e4173cdS猫头猫 return undefined; 102*0e4173cdS猫头猫 } 103*0e4173cdS猫头猫 return objectPath.get(mediaItem, `${internalSerializeKey}.${key}`); 104*0e4173cdS猫头猫} 105