Skip to content

Commit a4b43ef

Browse files
committed
Add lyrics server option
Closed #128
1 parent 4bfc889 commit a4b43ef

File tree

9 files changed

+29
-5
lines changed

9 files changed

+29
-5
lines changed

Diff for: package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "spotify-lyrics",
3-
"version": "1.6.6",
3+
"version": "1.6.7",
44
"description": "Desktop Spotify Web Player Instant Synchronized Lyrics",
55
"scripts": {
66
"lint": "tsc --noEmit && eslint --ext .ts --fix src/",

Diff for: public/_locales/en/messages.json

+4
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,10 @@
128128
"message": "Lyrics transform"
129129
},
130130

131+
"optionsLyricsServer": {
132+
"message": "Lyrics server"
133+
},
134+
131135
"optionsLyricsTransformDetail": {
132136
"message": "When using simplified Chinese, try to load the translated lyrics"
133137
},

Diff for: public/_locales/zh/messages.json

+4
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,10 @@
9999
"message": "歌词转换"
100100
},
101101

102+
"optionsLyricsServer": {
103+
"message": "歌词服务"
104+
},
105+
102106
"optionsLyricsTransformDetail": {
103107
"message": "当使用简体中文时会尝试加载翻译的歌词"
104108
},

Diff for: public/manifest.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"$schema": "https://raw.githubusercontent.com/extend-chrome/manifest-json-schema/main/schema/manifest.schema.json",
33
"name": "__MSG_extensionName__",
4-
"version": "1.6.6",
4+
"version": "1.6.7",
55
"manifest_version": 3,
66
"description": "__MSG_extensionDescription__",
77
"default_locale": "en",

Diff for: src/common/constants.ts

+2
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ export const LyricsPositions = ['page', 'pip'] as const;
3838
export const LyricsAlign = ['left', 'center'] as const;
3939
export const LyricsFontFamily = ['CircularSp', 'Sans-Serif', 'Serif', 'Cursive'] as const;
4040
export const LyricsTransform = ['Origin', 'Simplified', 'Traditional'] as const;
41+
export const LyricsServer = ['NetEase', 'LRCLIB'] as const;
4142
export interface Options {
4243
cid: string;
4344
'font-size': string;
@@ -52,6 +53,7 @@ export interface Options {
5253
/**@deprecated */
5354
'traditional-chinese-lyrics': SwitchValue;
5455
'lyrics-transform': (typeof LyricsTransform)[number];
56+
'lyrics-server': (typeof LyricsServer)[number];
5557
/**@deprecated */
5658
'lyrics-smooth-scroll'?: SwitchValue;
5759
'strict-mode'?: SwitchValue;

Diff for: src/options/app.ts

+8
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import {
77
LyricsAlign,
88
LyricsFontFamily,
99
LyricsTransform,
10+
LyricsServer,
1011
} from '../common/constants';
1112
import { sendEvent, events } from '../common/ga';
1213
import { theme } from '../common/theme';
@@ -196,6 +197,13 @@ export class OptionsApp extends GemElement<State> {
196197
default-value=${options['use-unreviewed-lyrics']}
197198
></ele-switch>
198199
</ele-form-item>
200+
<ele-form-item label="${i18n.optionsLyricsServer()} *">
201+
<ele-select
202+
name=${'lyrics-server' as keyof Options}
203+
default-value=${options['lyrics-server']}
204+
.options=${LyricsServer.map((e) => ({ label: e, value: e }))}
205+
></ele-select>
206+
</ele-form-item>
199207
</ele-form>
200208
<ul class="tip">
201209
<li>* ${i18n.optionsSaveTip1()}</li>

Diff for: src/options/store.ts

+1
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ const defaultOptions: Options = {
1818
'toggle-shortcut': 'l',
1919
'traditional-chinese-lyrics': uiLanguage === 'zh-TW' || uiLanguage === 'zh-HK' ? 'on' : 'off',
2020
'lyrics-transform': 'Origin',
21+
'lyrics-server': 'NetEase',
2122
};
2223

2324
export async function getOptions() {

Diff for: src/page/share-data.ts

+4
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@ import { optionsPromise } from './options';
1616
import { captureException, querySelector } from './utils';
1717
import { audioPromise } from './element';
1818
import { configPromise } from './config';
19+
import { fetchNetEaseSongList } from './netease';
20+
import { fetchLRCLIBSongList } from './lrclib';
1921

2022
interface CacheReq {
2123
name: string;
@@ -186,6 +188,8 @@ export class SharedData {
186188
const parseLyricsOptions = await this._getParseLyricsOptions();
187189
const [{ list, id }, remoteData] = await Promise.all([
188190
matchingLyrics(this.req, {
191+
fetchSongList:
192+
options['lyrics-server'] === 'NetEase' ? fetchNetEaseSongList : fetchLRCLIBSongList,
189193
getDuration: async () => {
190194
const audioMetadataLoaded = new Promise<any>((res) =>
191195
audio.addEventListener('loadedmetadata', res, { once: true }),

Diff for: src/page/utils.ts

+4-3
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,10 @@ export function documentQueryHasSelector(s: string) {
2828
}
2929

3030
export function querySelectorAll(selector: string) {
31-
const [rootSelector, sub] = selector.split('>>');
32-
if (sub) {
33-
const root = querySelector(rootSelector);
31+
const parts = selector.split('>>');
32+
if (parts.length > 1) {
33+
const sub = parts.pop()!;
34+
const root = querySelector(parts.join('>>'));
3435
return root?.shadowRoot?.querySelectorAll(sub);
3536
}
3637
return document.querySelectorAll(selector);

0 commit comments

Comments
 (0)