17993f90eS猫头猫import { 27993f90eS猫头猫 internalSerializeKey, 37993f90eS猫头猫 localPluginPlatform, 47993f90eS猫头猫} from '@/constants/commonConst'; 5242960d3S猫头猫import produce from 'immer'; 60e4173cdS猫头猫import objectPath from 'object-path'; 7242960d3S猫头猫 8242960d3S猫头猫/** 获取mediakey */ 9242960d3S猫头猫export function getMediaKey(mediaItem: ICommon.IMediaBase) { 10242960d3S猫头猫 return `${mediaItem.platform}@${mediaItem.id}`; 11242960d3S猫头猫} 12242960d3S猫头猫 135276aef9S猫头猫/** 解析mediakey */ 145276aef9S猫头猫export function parseMediaKey(key: string): ICommon.IMediaBase { 155276aef9S猫头猫 try { 165276aef9S猫头猫 const str = JSON.parse(key.trim()); 175276aef9S猫头猫 let platform, id; 185276aef9S猫头猫 if (typeof str === 'string') { 195276aef9S猫头猫 [platform, id] = str.split('@'); 205276aef9S猫头猫 } else { 215276aef9S猫头猫 platform = str?.platform; 225276aef9S猫头猫 id = str?.id; 235276aef9S猫头猫 } 245276aef9S猫头猫 if (!platform || !id) { 254060c00aS猫头猫 throw new Error('mediakey不完整'); 265276aef9S猫头猫 } 275276aef9S猫头猫 return { 285276aef9S猫头猫 platform, 295276aef9S猫头猫 id, 305276aef9S猫头猫 }; 315276aef9S猫头猫 } catch (e: any) { 325276aef9S猫头猫 throw e; 335276aef9S猫头猫 } 345276aef9S猫头猫} 355276aef9S猫头猫 360e4173cdS猫头猫/** 比较两media是否相同 */ 37242960d3S猫头猫export function isSameMediaItem( 38242960d3S猫头猫 a: ICommon.IMediaBase | null | undefined, 39242960d3S猫头猫 b: ICommon.IMediaBase | null | undefined, 40242960d3S猫头猫) { 41*80b610c3S猫头猫 return a && b && a.id == b.id && a.platform === b.platform; 42242960d3S猫头猫} 43242960d3S猫头猫 440e4173cdS猫头猫/** 查找是否存在 */ 450e4173cdS猫头猫export function includesMedia( 460e4173cdS猫头猫 a: ICommon.IMediaBase[] | null | undefined, 470e4173cdS猫头猫 b: ICommon.IMediaBase | null | undefined, 480e4173cdS猫头猫) { 490e4173cdS猫头猫 if (!a || !b) { 500e4173cdS猫头猫 return false; 510e4173cdS猫头猫 } 520e4173cdS猫头猫 return a.findIndex(_ => isSameMediaItem(_, b)) !== -1; 530e4173cdS猫头猫} 540e4173cdS猫头猫 55242960d3S猫头猫/** 获取复位的mediaItem */ 568b88e961S猫头猫export function resetMediaItem<T extends ICommon.IMediaBase>( 578b88e961S猫头猫 mediaItem: T, 58242960d3S猫头猫 platform?: string, 598b88e961S猫头猫 newObj?: boolean, 608b88e961S猫头猫): T { 617993f90eS猫头猫 // 本地音乐不做处理 627993f90eS猫头猫 if ( 637993f90eS猫头猫 mediaItem.platform === localPluginPlatform || 647993f90eS猫头猫 platform === localPluginPlatform 657993f90eS猫头猫 ) { 667993f90eS猫头猫 return newObj ? {...mediaItem} : mediaItem; 677993f90eS猫头猫 } 688b88e961S猫头猫 if (!newObj) { 69242960d3S猫头猫 mediaItem.platform = platform ?? mediaItem.platform; 700e4173cdS猫头猫 mediaItem[internalSerializeKey] = undefined; 71242960d3S猫头猫 return mediaItem; 72242960d3S猫头猫 } else { 73242960d3S猫头猫 return produce(mediaItem, _ => { 74242960d3S猫头猫 _.platform = platform ?? mediaItem.platform; 750e4173cdS猫头猫 _[internalSerializeKey] = undefined; 76242960d3S猫头猫 }); 77242960d3S猫头猫 } 78242960d3S猫头猫} 798b88e961S猫头猫 805276aef9S猫头猫export function mergeProps( 815276aef9S猫头猫 mediaItem: ICommon.IMediaBase, 825276aef9S猫头猫 props: Record<string, any> | undefined, 8374d0cf81S猫头猫 anotherProps?: Record<string, any> | undefined | null, 845276aef9S猫头猫) { 855276aef9S猫头猫 return props 865276aef9S猫头猫 ? { 878b88e961S猫头猫 ...mediaItem, 885276aef9S猫头猫 ...props, 8974d0cf81S猫头猫 ...(anotherProps ?? {}), 9074d0cf81S猫头猫 id: mediaItem.id, 9174d0cf81S猫头猫 platform: mediaItem.platform, 925276aef9S猫头猫 } 935276aef9S猫头猫 : mediaItem; 948b88e961S猫头猫} 950e4173cdS猫头猫 960e4173cdS猫头猫export enum InternalDataType { 970e4173cdS猫头猫 LOCALPATH = 'localPath', 980e4173cdS猫头猫} 990e4173cdS猫头猫 1000e4173cdS猫头猫export function setInternalData<T extends ICommon.IMediaBase>( 1010e4173cdS猫头猫 mediaItem: T, 1020e4173cdS猫头猫 key: InternalDataType, 1030e4173cdS猫头猫 value: string | number | undefined | null, 1040e4173cdS猫头猫): T { 1050e4173cdS猫头猫 return produce(mediaItem, draft => { 1060e4173cdS猫头猫 objectPath.set(draft, `${internalSerializeKey}.${key}`, value); 1070e4173cdS猫头猫 }); 1080e4173cdS猫头猫} 1090e4173cdS猫头猫 1100e4173cdS猫头猫export function getInternalData<T>( 1110e4173cdS猫头猫 mediaItem: ICommon.IMediaBase | null | undefined, 1120e4173cdS猫头猫 key: InternalDataType, 1130e4173cdS猫头猫): T | undefined { 1140e4173cdS猫头猫 if (!mediaItem) { 1150e4173cdS猫头猫 return undefined; 1160e4173cdS猫头猫 } 1170e4173cdS猫头猫 return objectPath.get(mediaItem, `${internalSerializeKey}.${key}`); 1180e4173cdS猫头猫} 119