diff --git a/src/main/plugins/lastfmProvider.plugin.ts b/src/main/plugins/lastfmProvider.plugin.ts index f88f46a..3f03927 100644 --- a/src/main/plugins/lastfmProvider.plugin.ts +++ b/src/main/plugins/lastfmProvider.plugin.ts @@ -185,6 +185,7 @@ export default class LastFMProvider extends BaseProvider implements AfterInit, O async handleTrackStart(track: TrackData) { { if (!this.client.isConnected()) return; + this.views.toolbarView?.webContents.send(IPC_EVENT_NAMES.LAST_FM_SUBMIT_STATE, "start"); await this.client .updateNowPlaying({ artist: track.video.author, @@ -193,14 +194,19 @@ export default class LastFMProvider extends BaseProvider implements AfterInit, O }) .then(stringifyJson) .then((d) => this.logger.debug(d)) + .then(() => { + this.views.toolbarView?.webContents.send(IPC_EVENT_NAMES.LAST_FM_SUBMIT_STATE, true); + }) .catch((err) => { this.logger.error(err); - }); + this.views.toolbarView?.webContents.send(IPC_EVENT_NAMES.LAST_FM_SUBMIT_STATE, false); + }) } } async handleTrackChange(track: TrackData) { if (!this.client.isConnected()) return; + this.views.toolbarView?.webContents.send(IPC_EVENT_NAMES.LAST_FM_SUBMIT_STATE, "change"); await this.client .scrobble({ artist: track.video.author, @@ -210,8 +216,12 @@ export default class LastFMProvider extends BaseProvider implements AfterInit, O }) .then(stringifyJson) .then((d) => this.logger.debug(d)) + .then(() => { + this.views.toolbarView?.webContents.send(IPC_EVENT_NAMES.LAST_FM_SUBMIT_STATE, true); + }) .catch((err) => { this.logger.error(err); - }); + this.views.toolbarView?.webContents.send(IPC_EVENT_NAMES.LAST_FM_SUBMIT_STATE, false); + }) } } diff --git a/src/main/plugins/trackProvider.plugin.ts b/src/main/plugins/trackProvider.plugin.ts index b517fa9..9eb77e3 100644 --- a/src/main/plugins/trackProvider.plugin.ts +++ b/src/main/plugins/trackProvider.plugin.ts @@ -113,8 +113,9 @@ export default class TrackProvider extends BaseProvider implements AfterInit { track.video.videoId === this._activeTrackId || (await this.getActiveTrackByDOM()) === track.video.videoId ) { + const lastTrackId = this._activeTrackId; this._activeTrackId = track.video.videoId; - this.pushTrackToViews(track as TrackData); + this.pushTrackToViews(track as TrackData, lastTrackId !== track.video.videoId); } } @IpcOn("track:title-change", { @@ -169,7 +170,7 @@ export default class TrackProvider extends BaseProvider implements AfterInit { } } private trackChangeTimeout: any; - public async pushTrackToViews(trackRef: TrackData) { + public async pushTrackToViews(trackRef: TrackData, updateLastFm: boolean = true) { trackRef.meta.startedAt = new Date().getTime() / 1000; const track = clone(trackRef); this.views.toolbarView.webContents.send("track:title", track?.video?.title); @@ -181,7 +182,7 @@ export default class TrackProvider extends BaseProvider implements AfterInit { api.sendMessage("track:change", track); const lastfm = this.getProvider("lastfm"); const lastfmState = lastfm.getState(); - if (lastfm && lastfmState.connected && !lastfmState.processing) { + if (updateLastFm && lastfm && lastfmState.connected && !lastfmState.processing && track.video.videoId) { await lastfm.handleTrackStart(track); if (this.trackChangeTimeout) clearTimeout(this.trackChangeTimeout); this.trackChangeTimeout = setTimeout( diff --git a/src/main/utils/eventNames.ts b/src/main/utils/eventNames.ts index 0467831..d16523b 100644 --- a/src/main/utils/eventNames.ts +++ b/src/main/utils/eventNames.ts @@ -27,6 +27,7 @@ const IPC_EVENT_NAMES = { LAST_FM_STATUS: "lastfm.status", LAST_FM_PROFILE: "lastfm.profile", LAST_FM_TOGGLE: "lastfm.toggle", + LAST_FM_SUBMIT_STATE: "lastfm.stateObserver", ...API_ROUTES, }; export default IPC_EVENT_NAMES; diff --git a/src/preload/base.ts b/src/preload/base.ts index b858871..9a46183 100644 --- a/src/preload/base.ts +++ b/src/preload/base.ts @@ -22,6 +22,7 @@ export const setContext = (key: string, value: any) => process.contextIsolated ? contextBridge.exposeInMainWorld(key, value) : (window[key] = Object.freeze(value)); +ipcRenderer.setMaxListeners(100); export default { ipcRenderer: { emit: (event, ...data) => ipcRenderer.send(event, ...data), diff --git a/src/renderer/src/views/youtube/toolbar-options.vue b/src/renderer/src/views/youtube/toolbar-options.vue index 2cc7693..4854a47 100644 --- a/src/renderer/src/views/youtube/toolbar-options.vue +++ b/src/renderer/src/views/youtube/toolbar-options.vue @@ -8,11 +8,18 @@ }" @click="authorizeLastFM" > + + {{ lastFM.name }} @@ -86,6 +93,7 @@