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 metadataModule = null;
|
||||
|
||||
export const managers = {};
|
||||
|
||||
async function loadSettingsModule() {
|
||||
if (!settingsModule) {
|
||||
settingsModule = await import('./settings.js');
|
||||
|
|
@ -654,9 +652,9 @@ document.addEventListener('DOMContentLoaded', async () => {
|
|||
|
||||
const scrobbler = new MultiScrobbler();
|
||||
window.monochromeScrobbler = scrobbler;
|
||||
const lyricsManager = new LyricsManager(MusicAPI.instance);
|
||||
|
||||
const lyricsManager = await LyricsManager.initialize(MusicAPI.instance);
|
||||
ui.lyricsManager = lyricsManager;
|
||||
managers.lyricsManager = lyricsManager;
|
||||
|
||||
// Check browser support for local files
|
||||
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 {
|
||||
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) {
|
||||
this.api = api;
|
||||
this.currentLyrics = null;
|
||||
|
|
@ -174,6 +184,13 @@ export class LyricsManager {
|
|||
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
|
||||
getTimingOffset(trackId) {
|
||||
try {
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
import { getCoverBlob, getTrackTitle, getFullArtistString, getMimeType, getTrackCoverId } from './utils.js';
|
||||
import { addMetadataWithTagLib, getMetadataWithTagLib } from './taglib.ts';
|
||||
import { doTimed, doTimedAsync } from './doTimed.ts';
|
||||
import { managers } from './app.js';
|
||||
import { LyricsManager } from './lyrics.js';
|
||||
|
||||
export function prefetchMetadataObjects(track, api, coverBlob = null) {
|
||||
const coverId = getTrackCoverId(track);
|
||||
|
|
@ -10,7 +10,7 @@ export function prefetchMetadataObjects(track, api, coverBlob = null) {
|
|||
: coverId
|
||||
? getCoverBlob(api, coverId).catch(console.error)
|
||||
: 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 };
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue