10e4173cdS猫头猫import {internalSerializeKey} from '@/constants/commonConst'; 2242960d3S猫头猫import produce from 'immer'; 30e4173cdS猫头猫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猫头猫 330e4173cdS猫头猫/** 比较两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猫头猫 410e4173cdS猫头猫/** 查找是否存在 */ 420e4173cdS猫头猫export function includesMedia( 430e4173cdS猫头猫 a: ICommon.IMediaBase[] | null | undefined, 440e4173cdS猫头猫 b: ICommon.IMediaBase | null | undefined, 450e4173cdS猫头猫) { 460e4173cdS猫头猫 if (!a || !b) { 470e4173cdS猫头猫 return false; 480e4173cdS猫头猫 } 490e4173cdS猫头猫 return a.findIndex(_ => isSameMediaItem(_, b)) !== -1; 500e4173cdS猫头猫} 510e4173cdS猫头猫 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; 600e4173cdS猫头猫 mediaItem[internalSerializeKey] = undefined; 61242960d3S猫头猫 return mediaItem; 62242960d3S猫头猫 } else { 63242960d3S猫头猫 return produce(mediaItem, _ => { 64242960d3S猫头猫 _.platform = platform ?? mediaItem.platform; 650e4173cdS猫头猫 _[internalSerializeKey] = undefined; 66242960d3S猫头猫 }); 67242960d3S猫头猫 } 68242960d3S猫头猫} 698b88e961S猫头猫 705276aef9S猫头猫export function mergeProps( 715276aef9S猫头猫 mediaItem: ICommon.IMediaBase, 725276aef9S猫头猫 props: Record<string, any> | undefined, 73*74d0cf81S猫头猫 anotherProps?: Record<string, any> | undefined | null, 745276aef9S猫头猫) { 755276aef9S猫头猫 return props 765276aef9S猫头猫 ? { 778b88e961S猫头猫 ...mediaItem, 785276aef9S猫头猫 ...props, 79*74d0cf81S猫头猫 ...(anotherProps ?? {}), 80*74d0cf81S猫头猫 id: mediaItem.id, 81*74d0cf81S猫头猫 platform: mediaItem.platform, 825276aef9S猫头猫 } 835276aef9S猫头猫 : mediaItem; 848b88e961S猫头猫} 850e4173cdS猫头猫 860e4173cdS猫头猫export enum InternalDataType { 870e4173cdS猫头猫 LOCALPATH = 'localPath', 880e4173cdS猫头猫} 890e4173cdS猫头猫 900e4173cdS猫头猫export function setInternalData<T extends ICommon.IMediaBase>( 910e4173cdS猫头猫 mediaItem: T, 920e4173cdS猫头猫 key: InternalDataType, 930e4173cdS猫头猫 value: string | number | undefined | null, 940e4173cdS猫头猫): T { 950e4173cdS猫头猫 return produce(mediaItem, draft => { 960e4173cdS猫头猫 objectPath.set(draft, `${internalSerializeKey}.${key}`, value); 970e4173cdS猫头猫 }); 980e4173cdS猫头猫} 990e4173cdS猫头猫 1000e4173cdS猫头猫export function getInternalData<T>( 1010e4173cdS猫头猫 mediaItem: ICommon.IMediaBase | null | undefined, 1020e4173cdS猫头猫 key: InternalDataType, 1030e4173cdS猫头猫): T | undefined { 1040e4173cdS猫头猫 if (!mediaItem) { 1050e4173cdS猫头猫 return undefined; 1060e4173cdS猫头猫 } 1070e4173cdS猫头猫 return objectPath.get(mediaItem, `${internalSerializeKey}.${key}`); 1080e4173cdS猫头猫} 109