xref: /MusicFree/src/utils/qualities.ts (revision b7048bd186614b21df0139d0ea098fdf91a74107)
1*b7048bd1S猫头猫/**
2*b7048bd1S猫头猫 * 音质相关的所有工具代码
3*b7048bd1S猫头猫 */
4*b7048bd1S猫头猫
5*b7048bd1S猫头猫export const qualityKeys: IMusic.IQualityKey[] = [
6*b7048bd1S猫头猫    'low',
7*b7048bd1S猫头猫    'standard',
8*b7048bd1S猫头猫    'high',
9*b7048bd1S猫头猫    'super',
10*b7048bd1S猫头猫];
11*b7048bd1S猫头猫
12*b7048bd1S猫头猫export const qualityText = {
13*b7048bd1S猫头猫    low: '低音质',
14*b7048bd1S猫头猫    standard: '标准音质',
15*b7048bd1S猫头猫    high: '高音质',
16*b7048bd1S猫头猫    super: '超高音质',
17*b7048bd1S猫头猫};
18*b7048bd1S猫头猫
19*b7048bd1S猫头猫export function getQuality(
20*b7048bd1S猫头猫    qualities: IMusic.IQuality,
21*b7048bd1S猫头猫    qualityKey: IMusic.IQualityKey,
22*b7048bd1S猫头猫    sort: 'asc' | 'desc',
23*b7048bd1S猫头猫) {
24*b7048bd1S猫头猫    const quality = qualities[qualityKey];
25*b7048bd1S猫头猫    if (quality) {
26*b7048bd1S猫头猫        return quality;
27*b7048bd1S猫头猫    }
28*b7048bd1S猫头猫    const idx = qualityKeys.indexOf(qualityKey);
29*b7048bd1S猫头猫    const left = qualityKeys.slice(0, idx);
30*b7048bd1S猫头猫    const right = qualityKeys.slice(idx + 1);
31*b7048bd1S猫头猫    /** 优先选择音质更高的 */
32*b7048bd1S猫头猫    if (sort === 'asc') {
33*b7048bd1S猫头猫        for (let i = 0; i < right.length; ++i) {
34*b7048bd1S猫头猫            if (qualities[right[i]]) {
35*b7048bd1S猫头猫                return qualities[right[i]];
36*b7048bd1S猫头猫            }
37*b7048bd1S猫头猫        }
38*b7048bd1S猫头猫        for (let i = left.length - 1; i >= 0; --i) {
39*b7048bd1S猫头猫            if (qualities[left[i]]) {
40*b7048bd1S猫头猫                return qualities[left[i]];
41*b7048bd1S猫头猫            }
42*b7048bd1S猫头猫        }
43*b7048bd1S猫头猫    }
44*b7048bd1S猫头猫    /** 优先选择音质更低的 */
45*b7048bd1S猫头猫    if (sort === 'desc') {
46*b7048bd1S猫头猫        for (let i = left.length - 1; i >= 0; --i) {
47*b7048bd1S猫头猫            if (qualities[left[i]]) {
48*b7048bd1S猫头猫                return qualities[left[i]];
49*b7048bd1S猫头猫            }
50*b7048bd1S猫头猫        }
51*b7048bd1S猫头猫        for (let i = 0; i < right.length; ++i) {
52*b7048bd1S猫头猫            if (qualities[right[i]]) {
53*b7048bd1S猫头猫                return qualities[right[i]];
54*b7048bd1S猫头猫            }
55*b7048bd1S猫头猫        }
56*b7048bd1S猫头猫    }
57*b7048bd1S猫头猫}
58*b7048bd1S猫头猫
59*b7048bd1S猫头猫export function getQualityUrl(
60*b7048bd1S猫头猫    qualities: IMusic.IQuality,
61*b7048bd1S猫头猫    qualityKey: IMusic.IQualityKey,
62*b7048bd1S猫头猫    sort: 'asc' | 'desc',
63*b7048bd1S猫头猫) {
64*b7048bd1S猫头猫    const quality = qualities[qualityKey];
65*b7048bd1S猫头猫    if (quality?.url) {
66*b7048bd1S猫头猫        return quality.url;
67*b7048bd1S猫头猫    }
68*b7048bd1S猫头猫    const idx = qualityKeys.indexOf(qualityKey);
69*b7048bd1S猫头猫    const left = qualityKeys.slice(0, idx);
70*b7048bd1S猫头猫    const right = qualityKeys.slice(idx + 1);
71*b7048bd1S猫头猫    /** 优先选择音质更高的 */
72*b7048bd1S猫头猫    if (sort === 'asc') {
73*b7048bd1S猫头猫        for (let i = 0; i < right.length; ++i) {
74*b7048bd1S猫头猫            if (qualities[right[i]]?.url) {
75*b7048bd1S猫头猫                return qualities[right[i]].url;
76*b7048bd1S猫头猫            }
77*b7048bd1S猫头猫        }
78*b7048bd1S猫头猫        for (let i = left.length - 1; i >= 0; --i) {
79*b7048bd1S猫头猫            if (qualities[left[i]]?.url) {
80*b7048bd1S猫头猫                return qualities[left[i]].url;
81*b7048bd1S猫头猫            }
82*b7048bd1S猫头猫        }
83*b7048bd1S猫头猫    }
84*b7048bd1S猫头猫    /** 优先选择音质更低的 */
85*b7048bd1S猫头猫    if (sort === 'desc') {
86*b7048bd1S猫头猫        for (let i = left.length - 1; i >= 0; --i) {
87*b7048bd1S猫头猫            if (qualities[left[i]]?.url) {
88*b7048bd1S猫头猫                return qualities[left[i]].url;
89*b7048bd1S猫头猫            }
90*b7048bd1S猫头猫        }
91*b7048bd1S猫头猫        for (let i = 0; i < right.length; ++i) {
92*b7048bd1S猫头猫            if (qualities[right[i]]?.url) {
93*b7048bd1S猫头猫                return qualities[right[i]].url;
94*b7048bd1S猫头猫            }
95*b7048bd1S猫头猫        }
96*b7048bd1S猫头猫    }
97*b7048bd1S猫头猫}
98