refactor(lyrics): convert to singleton
This commit is contained in:
parent
fb4b72bc39
commit
c768f8d675
3 changed files with 21 additions and 6 deletions
|
|
@ -106,8 +106,6 @@ let settingsModule = null;
|
||||||
let downloadsModule = null;
|
let downloadsModule = null;
|
||||||
let metadataModule = null;
|
let metadataModule = null;
|
||||||
|
|
||||||
export const managers = {};
|
|
||||||
|
|
||||||
async function loadSettingsModule() {
|
async function loadSettingsModule() {
|
||||||
if (!settingsModule) {
|
if (!settingsModule) {
|
||||||
settingsModule = await import('./settings.js');
|
settingsModule = await import('./settings.js');
|
||||||
|
|
@ -654,9 +652,9 @@ document.addEventListener('DOMContentLoaded', async () => {
|
||||||
|
|
||||||
const scrobbler = new MultiScrobbler();
|
const scrobbler = new MultiScrobbler();
|
||||||
window.monochromeScrobbler = scrobbler;
|
window.monochromeScrobbler = scrobbler;
|
||||||
const lyricsManager = new LyricsManager(MusicAPI.instance);
|
|
||||||
|
const lyricsManager = await LyricsManager.initialize(MusicAPI.instance);
|
||||||
ui.lyricsManager = lyricsManager;
|
ui.lyricsManager = lyricsManager;
|
||||||
managers.lyricsManager = lyricsManager;
|
|
||||||
|
|
||||||
// Check browser support for local files
|
// Check browser support for local files
|
||||||
const selectLocalBtn = document.getElementById('select-local-folder-btn');
|
const selectLocalBtn = document.getElementById('select-local-folder-btn');
|
||||||
|
|
|
||||||
17
js/lyrics.js
17
js/lyrics.js
|
|
@ -151,6 +151,16 @@ class GeniusManager {
|
||||||
}
|
}
|
||||||
|
|
||||||
export class LyricsManager {
|
export class LyricsManager {
|
||||||
|
static #instance = null;
|
||||||
|
|
||||||
|
static get instance() {
|
||||||
|
if (!LyricsManager.#instance) {
|
||||||
|
throw new Error('LyricsManager is not initialized. Call LyricsManager.initialize() first.');
|
||||||
|
}
|
||||||
|
return LyricsManager.#instance;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @private */
|
||||||
constructor(api) {
|
constructor(api) {
|
||||||
this.api = api;
|
this.api = api;
|
||||||
this.currentLyrics = null;
|
this.currentLyrics = null;
|
||||||
|
|
@ -174,6 +184,13 @@ export class LyricsManager {
|
||||||
this.timingOffset = 0; // Offset in milliseconds (positive = delay lyrics, negative = advance lyrics)
|
this.timingOffset = 0; // Offset in milliseconds (positive = delay lyrics, negative = advance lyrics)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static async initialize(api) {
|
||||||
|
if (LyricsManager.#instance) {
|
||||||
|
throw new Error('LyricsManager is already initialized');
|
||||||
|
}
|
||||||
|
return (LyricsManager.#instance = new LyricsManager(api));
|
||||||
|
}
|
||||||
|
|
||||||
// Get timing offset for current track
|
// Get timing offset for current track
|
||||||
getTimingOffset(trackId) {
|
getTimingOffset(trackId) {
|
||||||
try {
|
try {
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
import { getCoverBlob, getTrackTitle, getFullArtistString, getMimeType, getTrackCoverId } from './utils.js';
|
import { getCoverBlob, getTrackTitle, getFullArtistString, getMimeType, getTrackCoverId } from './utils.js';
|
||||||
import { addMetadataWithTagLib, getMetadataWithTagLib } from './taglib.ts';
|
import { addMetadataWithTagLib, getMetadataWithTagLib } from './taglib.ts';
|
||||||
import { doTimed, doTimedAsync } from './doTimed.ts';
|
import { doTimed, doTimedAsync } from './doTimed.ts';
|
||||||
import { managers } from './app.js';
|
import { LyricsManager } from './lyrics.js';
|
||||||
|
|
||||||
export function prefetchMetadataObjects(track, api, coverBlob = null) {
|
export function prefetchMetadataObjects(track, api, coverBlob = null) {
|
||||||
const coverId = getTrackCoverId(track);
|
const coverId = getTrackCoverId(track);
|
||||||
|
|
@ -10,7 +10,7 @@ export function prefetchMetadataObjects(track, api, coverBlob = null) {
|
||||||
: coverId
|
: coverId
|
||||||
? getCoverBlob(api, coverId).catch(console.error)
|
? getCoverBlob(api, coverId).catch(console.error)
|
||||||
: Promise.resolve(null);
|
: Promise.resolve(null);
|
||||||
const lyricsFetch = managers?.lyricsManager?.fetchLyrics?.(track.id, track)?.catch(console.error);
|
const lyricsFetch = LyricsManager.initialize.fetchLyrics?.(track.id, track)?.catch(console.error);
|
||||||
|
|
||||||
return { coverFetch, lyricsFetch };
|
return { coverFetch, lyricsFetch };
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue