xref: /MusicFree/src/utils/mediaIndexMap.ts (revision 5500cea7e936041b68a2f3709a583c2f0181b9e6)
1*5500cea7S猫头猫interface IIndexMap {
2*5500cea7S猫头猫    getIndexMap: () => Record<string, Record<string, number>>;
3*5500cea7S猫头猫    getIndex: (musicItem: IMusic.IMusicItem) => number;
4*5500cea7S猫头猫    has: (mediaItem: IMusic.IMusicItem) => boolean;
5*5500cea7S猫头猫}
6*5500cea7S猫头猫
7*5500cea7S猫头猫export function createMediaIndexMap(
8*5500cea7S猫头猫    musicItems: IMusic.IMusicItem[],
9*5500cea7S猫头猫): IIndexMap {
10*5500cea7S猫头猫    const indexMap: Record<string, Record<string, number>> = {};
11*5500cea7S猫头猫
12*5500cea7S猫头猫    musicItems.forEach((item, index) => {
13*5500cea7S猫头猫        // 映射中不存在
14*5500cea7S猫头猫        if (!indexMap[item.platform]) {
15*5500cea7S猫头猫            indexMap[item.platform] = {
16*5500cea7S猫头猫                [item.id]: index,
17*5500cea7S猫头猫            };
18*5500cea7S猫头猫        } else {
19*5500cea7S猫头猫            // 修改映射
20*5500cea7S猫头猫            indexMap[item.platform][item.id] = index;
21*5500cea7S猫头猫        }
22*5500cea7S猫头猫    });
23*5500cea7S猫头猫
24*5500cea7S猫头猫    function getIndexMap() {
25*5500cea7S猫头猫        return indexMap;
26*5500cea7S猫头猫    }
27*5500cea7S猫头猫
28*5500cea7S猫头猫    function getIndex(musicItem: IMusic.IMusicItem) {
29*5500cea7S猫头猫        if (!musicItem) {
30*5500cea7S猫头猫            return -1;
31*5500cea7S猫头猫        }
32*5500cea7S猫头猫        return indexMap[musicItem.platform]?.[musicItem.id] ?? -1;
33*5500cea7S猫头猫    }
34*5500cea7S猫头猫
35*5500cea7S猫头猫    function has(musicItem: IMusic.IMusicItem) {
36*5500cea7S猫头猫        if (!musicItem) {
37*5500cea7S猫头猫            return false;
38*5500cea7S猫头猫        }
39*5500cea7S猫头猫
40*5500cea7S猫头猫        return indexMap[musicItem.platform]?.[musicItem.id] > -1;
41*5500cea7S猫头猫    }
42*5500cea7S猫头猫
43*5500cea7S猫头猫    return {
44*5500cea7S猫头猫        getIndexMap,
45*5500cea7S猫头猫        getIndex,
46*5500cea7S猫头猫        has,
47*5500cea7S猫头猫    };
48*5500cea7S猫头猫}
49