Feature: Add song and artist links to discord RPC (#1160)

* Add song and artist links to discord RPC

* use first artist name for artist link, full artist name for song link

* use first album artist for song link

* add discord rpc links setting

* simplify discord link settings

* fix setting description

* add musicbrainz links

* fix callback missing dependency

* use encodeURIComponent for lastfm links

Co-authored-by: Kendall Garner <17521368+kgarner7@users.noreply.github.com>

* split musicbrainz ids

* combine link settings

---------

Co-authored-by: Kendall Garner <17521368+kgarner7@users.noreply.github.com>
This commit is contained in:
Evelyn Gravett 2025-10-04 04:27:59 +01:00 committed by GitHub
parent f1a75d8e81
commit 1b278cb33a
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
10 changed files with 108 additions and 6 deletions

View file

@ -5,6 +5,7 @@ import { useCallback, useEffect, useState } from 'react';
import { controller } from '/@/renderer/api/controller';
import {
DiscordDisplayType,
DiscordLinkType,
getServerById,
useAppStore,
useDiscordSettings,
@ -77,6 +78,34 @@ export const useDiscordRpc = () => {
type: discordSettings.showAsListening ? 2 : 0,
};
if (
(discordSettings.linkType == DiscordLinkType.LAST_FM ||
discordSettings.linkType == DiscordLinkType.MBZ_LAST_FM) &&
song?.artistName
) {
activity.stateUrl =
'https://www.last.fm/music/' + encodeURIComponent(song.artists[0].name);
activity.detailsUrl =
'https://www.last.fm/music/' +
encodeURIComponent(song.albumArtists[0].name) +
'/' +
encodeURIComponent(song.album || '_') +
'/' +
encodeURIComponent(song.name);
}
if (
discordSettings.linkType == DiscordLinkType.MBZ ||
discordSettings.linkType == DiscordLinkType.MBZ_LAST_FM
) {
if (song?.mbzTrackId) {
activity.detailsUrl = 'https://musicbrainz.org/track/' + song.mbzTrackId;
} else if (song?.mbzRecordingId) {
activity.detailsUrl =
'https://musicbrainz.org/recording/' + song.mbzRecordingId;
}
}
if ((current[2] as PlayerStatus) === PlayerStatus.PLAYING) {
if (start && end) {
activity.startTimestamp = start;
@ -145,6 +174,7 @@ export const useDiscordRpc = () => {
generalSettings.lastfmApiKey,
discordSettings.clientId,
discordSettings.displayType,
discordSettings.linkType,
lastUniqueId,
],
);