fix(discord-rpc, scrobbler): Align artist and title with the last.fm's de facto standard

- Display only the main artist.
- Display the title in its original language without romanization.

- fix #3358
- fix #3641
This commit is contained in:
JellyBrick
2025-09-06 10:25:54 +09:00
parent 555817e2f5
commit 26fa1f85b2
10 changed files with 61 additions and 39 deletions

View File

@ -1,30 +1,27 @@
import prompt from 'custom-electron-prompt';
import { discordService } from './main';
import { StatusDisplayType } from 'discord-api-types/v10';
import { discordService } from './main';
import { singleton } from '@/providers/decorators';
import promptOptions from '@/providers/prompt-options';
import { setMenuOptions } from '@/config/plugins';
import { t } from '@/i18n';
import { DiscordStatusDisplayType } from './constants';
import type { MenuContext } from '@/types/contexts';
import type { DiscordPluginConfig } from './index';
import type { MenuTemplate } from '@/menu';
const registerRefreshOnce = singleton((refreshMenu: () => void) => {
discordService?.registerRefreshCallback(refreshMenu);
});
const DiscordStatusDisplayTypeLabels = {
[DiscordStatusDisplayType.YOUTUBE_MUSIC]:
const DiscordStatusDisplayTypeLabels: Record<StatusDisplayType, string> = {
[StatusDisplayType.Name]:
'plugins.discord.menu.set-status-display-type.submenu.youtube-music',
[DiscordStatusDisplayType.ARTIST]:
[StatusDisplayType.State]:
'plugins.discord.menu.set-status-display-type.submenu.artist',
[DiscordStatusDisplayType.TITLE]:
[StatusDisplayType.Details]:
'plugins.discord.menu.set-status-display-type.submenu.title',
};
@ -105,18 +102,24 @@ export const onMenu = async ({
},
{
label: t('plugins.discord.menu.set-status-display-type.label'),
submenu: Object.values(DiscordStatusDisplayType).map(
(statusDisplayType) => ({
label: t(DiscordStatusDisplayTypeLabels[statusDisplayType]),
submenu: Object.values(StatusDisplayType)
.filter(
(v) => typeof StatusDisplayType[v as StatusDisplayType] !== 'number',
)
.map((statusDisplayType) => ({
label: t(
DiscordStatusDisplayTypeLabels[
statusDisplayType as StatusDisplayType
],
),
type: 'radio',
checked: config.statusDisplayType == statusDisplayType,
checked: config.statusDisplayType === statusDisplayType,
click() {
setConfig({
statusDisplayType,
statusDisplayType: statusDisplayType as StatusDisplayType,
});
},
}),
),
})),
},
];
};