xref: /MusicFree/src/utils/mediaItem.ts (revision 5276aef9a9da3850fb02bcdfa8c468cc9b4bb88b)
1242960d3S猫头猫import {internalSerialzeKey, internalSymbolKey} from '@/constants/commonConst';
2242960d3S猫头猫import produce from 'immer';
3242960d3S猫头猫
4242960d3S猫头猫/** 获取mediakey */
5242960d3S猫头猫export function getMediaKey(mediaItem: ICommon.IMediaBase) {
6242960d3S猫头猫  return `${mediaItem.platform}@${mediaItem.id}`;
7242960d3S猫头猫}
8242960d3S猫头猫
9*5276aef9S猫头猫/** 解析mediakey */
10*5276aef9S猫头猫export function parseMediaKey(key: string): ICommon.IMediaBase {
11*5276aef9S猫头猫  try {
12*5276aef9S猫头猫    const str = JSON.parse(key.trim());
13*5276aef9S猫头猫    let platform, id;
14*5276aef9S猫头猫    if (typeof str === 'string') {
15*5276aef9S猫头猫      [platform, id] = str.split('@');
16*5276aef9S猫头猫    } else {
17*5276aef9S猫头猫      platform = str?.platform;
18*5276aef9S猫头猫      id = str?.id;
19*5276aef9S猫头猫    }
20*5276aef9S猫头猫    if(!platform || !id) {
21*5276aef9S猫头猫      throw new Error('mediakey不完整')
22*5276aef9S猫头猫    }
23*5276aef9S猫头猫    return {
24*5276aef9S猫头猫      platform,
25*5276aef9S猫头猫      id,
26*5276aef9S猫头猫    };
27*5276aef9S猫头猫  } catch (e: any) {
28*5276aef9S猫头猫    throw e;
29*5276aef9S猫头猫  }
30*5276aef9S猫头猫}
31*5276aef9S猫头猫
32242960d3S猫头猫/** 比较两歌media是否相同 */
33242960d3S猫头猫export function isSameMediaItem(
34242960d3S猫头猫  a: ICommon.IMediaBase | null | undefined,
35242960d3S猫头猫  b: ICommon.IMediaBase | null | undefined,
36242960d3S猫头猫) {
37242960d3S猫头猫  return a && b && a.id === b.id && a.platform === b.platform;
38242960d3S猫头猫}
39242960d3S猫头猫
40242960d3S猫头猫/** 获取复位的mediaItem */
418b88e961S猫头猫export function resetMediaItem<T extends ICommon.IMediaBase>(
428b88e961S猫头猫  mediaItem: T,
43242960d3S猫头猫  platform?: string,
448b88e961S猫头猫  newObj?: boolean,
458b88e961S猫头猫): T {
468b88e961S猫头猫  if (!newObj) {
47242960d3S猫头猫    mediaItem.platform = platform ?? mediaItem.platform;
48242960d3S猫头猫    mediaItem[internalSerialzeKey] = undefined;
49242960d3S猫头猫    return mediaItem;
50242960d3S猫头猫  } else {
51242960d3S猫头猫    return produce(mediaItem, _ => {
52242960d3S猫头猫      _.platform = platform ?? mediaItem.platform;
53242960d3S猫头猫      _[internalSerialzeKey] = undefined;
54242960d3S猫头猫    });
55242960d3S猫头猫  }
56242960d3S猫头猫}
578b88e961S猫头猫
58*5276aef9S猫头猫export function mergeProps(
59*5276aef9S猫头猫  mediaItem: ICommon.IMediaBase,
60*5276aef9S猫头猫  props: Record<string, any> | undefined,
61*5276aef9S猫头猫) {
62*5276aef9S猫头猫  return props
63*5276aef9S猫头猫    ? {
648b88e961S猫头猫        ...mediaItem,
65*5276aef9S猫头猫        ...props,
66*5276aef9S猫头猫      }
67*5276aef9S猫头猫    : mediaItem;
688b88e961S猫头猫}
69