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 @@