mirror of
https://github.com/th-ch/youtube-music.git
synced 2026-01-09 01:31:46 +00:00
72 lines
2.0 KiB
TypeScript
72 lines
2.0 KiB
TypeScript
import { app } from 'electron';
|
|
|
|
import { registerCallback, SongInfoEvent } from '@/providers/song-info';
|
|
import { createBackend } from '@/utils';
|
|
|
|
import { DiscordService } from './discord-service';
|
|
import { TIME_UPDATE_DEBOUNCE_MS } from './constants';
|
|
|
|
import type { DiscordPluginConfig } from './index';
|
|
|
|
export let discordService = null as DiscordService | null;
|
|
|
|
export const backend = createBackend<
|
|
{
|
|
config?: DiscordPluginConfig;
|
|
lastTimeUpdateSent: number;
|
|
},
|
|
DiscordPluginConfig
|
|
>({
|
|
lastTimeUpdateSent: 0,
|
|
|
|
async start(ctx) {
|
|
// Get initial configuration from the context
|
|
const config = await ctx.getConfig();
|
|
discordService = new DiscordService(ctx.window, config);
|
|
|
|
if (config.enabled) {
|
|
ctx.window.once('ready-to-show', () => {
|
|
discordService?.connect(!config.autoReconnect);
|
|
|
|
registerCallback((songInfo, event) => {
|
|
if (!discordService?.isConnected()) return;
|
|
|
|
if (event !== SongInfoEvent.TimeChanged) {
|
|
discordService?.updateActivity(songInfo);
|
|
this.lastTimeUpdateSent = Date.now();
|
|
} else {
|
|
const now = Date.now();
|
|
if (now - this.lastTimeUpdateSent > TIME_UPDATE_DEBOUNCE_MS) {
|
|
discordService?.updateActivity(songInfo);
|
|
this.lastTimeUpdateSent = now; // Record the time of this debounced update
|
|
}
|
|
}
|
|
});
|
|
});
|
|
}
|
|
|
|
ctx.ipc.on('peard:player-api-loaded', () => {
|
|
ctx.ipc.send('peard:setup-time-changed-listener');
|
|
});
|
|
|
|
app.on('before-quit', () => {
|
|
discordService?.cleanup();
|
|
});
|
|
},
|
|
|
|
stop() {
|
|
discordService?.cleanup();
|
|
},
|
|
|
|
onConfigChange(newConfig) {
|
|
discordService?.onConfigChange(newConfig);
|
|
|
|
const currentlyConnected = discordService?.isConnected() ?? false;
|
|
if (newConfig.enabled && !currentlyConnected) {
|
|
discordService?.connect(!newConfig.autoReconnect);
|
|
} else if (!newConfig.enabled && currentlyConnected) {
|
|
discordService?.disconnect();
|
|
}
|
|
},
|
|
});
|