Fix borked discord RPC controls

This commit is contained in:
kyngs 2023-07-06 21:29:36 +02:00
parent d954314e9b
commit fc130ff843

View file

@ -254,7 +254,31 @@ let status = null
const discord = new Client({
transport: 'ipc'
})
function setDiscordRPC (event, data) {
function setDiscordRPC (data) {
if (!data) {
data = {
activity: {
timestamps: {
start: Date.now()
},
details: 'Stream anime torrents, real-time.',
state: 'Watching anime',
assets: {
small_image: 'logo',
small_text: 'https://github.com/ThaUnknown/miru'
},
buttons: [
{
label: 'Download app',
url: 'https://github.com/ThaUnknown/miru/releases/latest'
}
],
instance: true,
type: 3
}
}
}
status = data
if (discord?.user && status) {
status.pid = process.pid
@ -262,9 +286,39 @@ function setDiscordRPC (event, data) {
}
}
ipcMain.on('discord', setDiscordRPC)
let allowDiscordDetails = false
let requestedDiscordDetails = false
let rpcStarted = false
let cachedPresence = null
ipcMain.on('discord_status', (event, data) => {
requestedDiscordDetails = data;
if (!rpcStarted) {
handleRPC()
setInterval(handleRPC, 5000) //According to Discord documentation, clients can only update their presence 5 times per 20 seconds. We will add an extra second to be safe.
rpcStarted = true
}
})
function handleRPC() {
if (allowDiscordDetails === requestedDiscordDetails) return
allowDiscordDetails = requestedDiscordDetails
if (!allowDiscordDetails) {
setDiscordRPC(null)
} else if (cachedPresence) {
setDiscordRPC(cachedPresence)
}
}
ipcMain.on('discord', (event, data) => {
cachedPresence = data
if (allowDiscordDetails) {
setDiscordRPC(data)
}
})
discord.on('ready', async () => {
setDiscordRPC(null, status)
setDiscordRPC(status)
discord.subscribe('ACTIVITY_JOIN_REQUEST')
discord.subscribe('ACTIVITY_JOIN')
discord.subscribe('ACTIVITY_SPECTATE')