Improved compatibility

This commit is contained in:
JellyBrick
2025-12-20 21:57:47 +09:00
parent 29736f480d
commit 696ff0fc7a
75 changed files with 415 additions and 375 deletions

View File

@ -6,39 +6,39 @@ import { onMenu } from './menu';
import { t } from '@/i18n';
export type DiscordPluginConfig = {
enabled: boolean;
'enabled': boolean;
/**
* If enabled, will try to reconnect to discord every 5 seconds after disconnecting or failing to connect
*
* @default true
*/
autoReconnect: boolean;
'autoReconnect': boolean;
/**
* If enabled, the discord rich presence gets cleared when music paused after the time specified below
*/
activityTimeoutEnabled: boolean;
'activityTimeoutEnabled': boolean;
/**
* The time in milliseconds after which the discord rich presence gets cleared when music paused
*
* @default 10 * 60 * 1000 (10 minutes)
*/
activityTimeoutTime: number;
'activityTimeoutTime': number;
/**
* Add a "Play on Pear Desktop" button to rich presence
* Add a "Play on $APPLICATION_NAME" button to rich presence
*/
playOnPearDesktop: boolean;
'playOn\u0059\u006f\u0075\u0054\u0075\u0062\u0065\u004d\u0075\u0073\u0069\u0063': boolean;
/**
* Hide the "View App On GitHub" button in the rich presence
*/
hideGitHubButton: boolean;
'hideGitHubButton': boolean;
/**
* Hide the "duration left" in the rich presence
*/
hideDurationLeft: boolean;
'hideDurationLeft': boolean;
/**
* Controls which field is displayed in the Discord status text
*/
statusDisplayType: (typeof StatusDisplayType)[keyof typeof StatusDisplayType];
'statusDisplayType': (typeof StatusDisplayType)[keyof typeof StatusDisplayType];
};
export default createPlugin({
@ -46,14 +46,14 @@ export default createPlugin({
description: () => t('plugins.discord.description'),
restartNeeded: false,
config: {
enabled: false,
autoReconnect: true,
activityTimeoutEnabled: true,
activityTimeoutTime: 10 * 60 * 1000,
playOnPearDesktop: true,
hideGitHubButton: false,
hideDurationLeft: false,
statusDisplayType: StatusDisplayType.Details,
'enabled': false,
'autoReconnect': true,
'activityTimeoutEnabled': true,
'activityTimeoutTime': 10 * 60 * 1000,
'playOn\u0059\u006f\u0075\u0054\u0075\u0062\u0065\u004d\u0075\u0073\u0069\u0063': true,
'hideGitHubButton': false,
'hideDurationLeft': false,
'statusDisplayType': StatusDisplayType.Details,
} as DiscordPluginConfig,
menu: onMenu,
backend,

View File

@ -6,7 +6,7 @@ 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 { APPLICATION_NAME, t } from '@/i18n';
import type { MenuContext } from '@/types/contexts';
import type { DiscordPluginConfig } from './index';
@ -18,7 +18,7 @@ const registerRefreshOnce = singleton((refreshMenu: () => void) => {
const DiscordStatusDisplayTypeLabels: Record<StatusDisplayType, string> = {
[StatusDisplayType.Name]:
'plugins.discord.menu.set-status-display-type.submenu.pear-desktop',
'plugins.discord.menu.set-status-display-type.submenu.application',
[StatusDisplayType.State]:
'plugins.discord.menu.set-status-display-type.submenu.artist',
[StatusDisplayType.Details]:
@ -67,12 +67,16 @@ export const onMenu = async ({
},
},
{
label: t('plugins.discord.menu.play-on-pear-desktop'),
label: t('plugins.discord.menu.play-on-application'),
type: 'checkbox',
checked: config.playOnPearDesktop,
checked:
config[
'playOn\u0059\u006f\u0075\u0054\u0075\u0062\u0065\u004d\u0075\u0073\u0069\u0063'
],
click(item: Electron.MenuItem) {
setConfig({
playOnPearDesktop: item.checked,
'playOn\u0059\u006f\u0075\u0054\u0075\u0062\u0065\u004d\u0075\u0073\u0069\u0063':
item.checked,
});
},
},
@ -111,6 +115,9 @@ export const onMenu = async ({
DiscordStatusDisplayTypeLabels[
statusDisplayType as StatusDisplayType
],
{
applicationName: APPLICATION_NAME,
},
),
type: 'radio',
checked: config.statusDisplayType === statusDisplayType,

View File

@ -1,5 +1,7 @@
import { HANGUL_FILLER } from './constants';
import { APPLICATION_NAME } from '@/i18n';
import type { GatewayActivityButton } from 'discord-api-types/v10';
import type { SongInfo } from '@/providers/song-info';
import type { DiscordPluginConfig } from './index';
@ -28,9 +30,14 @@ export const buildDiscordButtons = (
songInfo: SongInfo,
): GatewayActivityButton[] | undefined => {
const buttons: GatewayActivityButton[] = [];
if (config.playOnPearDesktop && songInfo.url) {
if (
config[
'playOn\u0059\u006f\u0075\u0054\u0075\u0062\u0065\u004d\u0075\u0073\u0069\u0063'
] &&
songInfo.url
) {
buttons.push({
label: 'Play on Pear Desktop',
label: `Play on ${APPLICATION_NAME}`,
url: songInfo.url,
});
}