mirror of
https://github.com/samuelthomas2774/nxapi.git
synced 2026-03-21 18:04:10 -05:00
Add Discord presence/friend notification options to app context menus
This commit is contained in:
parent
8d38b94dcd
commit
62604f3c2a
|
|
@ -37,8 +37,7 @@ export default function DiscordSetup(props: DiscordSetupProps) {
|
|||
|
||||
useEffect(() => {
|
||||
if (!discord_presence_source) {
|
||||
setSelectedMode(props.users?.length && props.friend_nsa_id ?
|
||||
DiscordSourceType.CORAL : DiscordSourceType.NONE);
|
||||
setSelectedMode(props.friend_nsa_id ? DiscordSourceType.CORAL : DiscordSourceType.NONE);
|
||||
} else if ('na_id' in discord_presence_source) {
|
||||
setSelectedMode(DiscordSourceType.CORAL);
|
||||
setSelectedUserId(discord_presence_source.na_id);
|
||||
|
|
|
|||
|
|
@ -247,6 +247,7 @@ export class Store extends EventEmitter {
|
|||
detail: err instanceof Error ? err.stack ?? err.message : err as any,
|
||||
type: 'error',
|
||||
buttons: ['OK', 'Retry'],
|
||||
defaultId: 1,
|
||||
});
|
||||
|
||||
if (response === 1) {
|
||||
|
|
@ -273,6 +274,7 @@ export class Store extends EventEmitter {
|
|||
detail: err instanceof Error ? err.stack ?? err.message : err as any,
|
||||
type: 'error',
|
||||
buttons: ['OK', 'Retry'],
|
||||
defaultId: 1,
|
||||
});
|
||||
|
||||
if (response === 1) {
|
||||
|
|
|
|||
|
|
@ -15,6 +15,7 @@ import { getDiscordRpcClients } from '../../discord/rpc.js';
|
|||
import { defaultTitle } from '../../discord/titles.js';
|
||||
import type { FriendProps } from '../browser/friend/index.js';
|
||||
import type { DiscordSetupProps } from '../browser/discord/index.js';
|
||||
import { EmbeddedPresenceMonitor } from './monitor.js';
|
||||
|
||||
const debug = createDebug('app:main:ipc');
|
||||
|
||||
|
|
@ -137,15 +138,9 @@ export function setupIpc(appinstance: App, ipcMain: IpcMain) {
|
|||
ipcMain.handle('nxapi:misc:share', (e, item: SharingItem) =>
|
||||
new ShareMenu(item).popup({window: BrowserWindow.fromWebContents(e.sender)!}));
|
||||
|
||||
ipcMain.handle('nxapi:menu:user', (e, user: NintendoAccountUser, nso?: CurrentUser, moon?: boolean) => (Menu.buildFromTemplate([
|
||||
new MenuItem({label: 'Nintendo Account ID: ' + user.id, enabled: false}),
|
||||
...(nso ? [
|
||||
new MenuItem({label: 'Coral ID: ' + nso.id, enabled: false}),
|
||||
new MenuItem({label: 'NSA ID: ' + nso.nsaId, enabled: false}),
|
||||
] : []),
|
||||
new MenuItem({type: 'separator'}),
|
||||
new MenuItem({label: 'Use the nxapi command to remove this user', enabled: false}),
|
||||
]).popup({window: BrowserWindow.fromWebContents(e.sender)!}), undefined));
|
||||
ipcMain.handle('nxapi:menu:user', (e, user: NintendoAccountUser, nso?: CurrentUser, moon?: boolean) =>
|
||||
(buildUserMenu(appinstance, user, nso, moon, BrowserWindow.fromWebContents(e.sender) ?? undefined)
|
||||
.popup({window: BrowserWindow.fromWebContents(e.sender)!}), undefined));
|
||||
ipcMain.handle('nxapi:menu:add-user', e => (Menu.buildFromTemplate([
|
||||
new MenuItem({label: 'Add Nintendo Switch Online account', click: () => askAddNsoAccount(storage)}),
|
||||
new MenuItem({label: 'Add Nintendo Switch Parental Controls account', click: () => askAddPctlAccount(storage)}),
|
||||
|
|
@ -182,6 +177,62 @@ function sendToAllWindows(channel: string, ...args: any[]) {
|
|||
}
|
||||
}
|
||||
|
||||
function buildUserMenu(app: App, user: NintendoAccountUser, nso?: CurrentUser, moon?: boolean, window?: BrowserWindow) {
|
||||
const dm = app.monitors.getActiveDiscordPresenceMonitor();
|
||||
const monitor = app.monitors.monitors.find(m => m instanceof EmbeddedPresenceMonitor && m.data.user.id === user.id);
|
||||
|
||||
return Menu.buildFromTemplate([
|
||||
new MenuItem({label: 'Nintendo Account ID: ' + user.id, enabled: false}),
|
||||
...(nso ? [
|
||||
new MenuItem({label: 'Coral ID: ' + nso.id, enabled: false}),
|
||||
new MenuItem({label: 'NSA ID: ' + nso.nsaId, enabled: false}),
|
||||
new MenuItem({type: 'separator'}),
|
||||
...(monitor?.presence_user === nso.nsaId ? [
|
||||
new MenuItem({label: 'Disable Discord presence',
|
||||
click: () => app.menu?.setActiveDiscordPresenceUser(null)}),
|
||||
] : monitor?.presence_user ? [
|
||||
new MenuItem({label: 'Discord presence enabled for ' +
|
||||
monitor.user?.friends.result.friends.find(f => f.nsaId === monitor.presence_user)?.name ??
|
||||
monitor.presence_user,
|
||||
enabled: false}),
|
||||
new MenuItem({label: 'Disable Discord presence',
|
||||
click: () => app.menu?.setActiveDiscordPresenceUser(null)}),
|
||||
] : dm?.presence_user === nso.nsaId ? [
|
||||
new MenuItem({label: 'Discord presence enabled using ' +
|
||||
dm.data.user.nickname +
|
||||
(dm.data.user.nickname!== dm.data.nsoAccount.user.name ? '/' + dm.data.nsoAccount.user.name : ''),
|
||||
enabled: false}),
|
||||
new MenuItem({label: 'Disable Discord presence',
|
||||
click: () => app.menu?.setActiveDiscordPresenceUser(null)}),
|
||||
] : [
|
||||
new MenuItem({label: 'Enable Discord presence for this user...',
|
||||
click: () => createWindow(WindowType.DISCORD_PRESENCE, {
|
||||
friend_nsa_id: nso.nsaId,
|
||||
}, {
|
||||
parent: window,
|
||||
modal: true,
|
||||
show: false,
|
||||
maximizable: false,
|
||||
minimizable: false,
|
||||
width: 560,
|
||||
height: 300,
|
||||
minWidth: 450,
|
||||
maxWidth: 700,
|
||||
minHeight: 300,
|
||||
maxHeight: 300,
|
||||
})}),
|
||||
]),
|
||||
new MenuItem({label: 'Enable friend notifications', type: 'checkbox',
|
||||
checked: monitor?.friend_notifications,
|
||||
click: () => app.menu?.setFriendNotificationsActive(user.id, !monitor?.friend_notifications)}),
|
||||
new MenuItem({label: 'Update now', enabled: !!monitor,
|
||||
click: () => monitor?.skipIntervalInCurrentLoop(true)}),
|
||||
] : []),
|
||||
new MenuItem({type: 'separator'}),
|
||||
new MenuItem({label: 'Use the nxapi command to remove this user', enabled: false}),
|
||||
]);
|
||||
}
|
||||
|
||||
function buildFriendMenu(app: App, user: NintendoAccountUser, nso: CurrentUser, friend: Friend) {
|
||||
const discord_presence_source = app.monitors.getDiscordPresenceSource();
|
||||
const discord_presence_active = !!discord_presence_source && 'na_id' in discord_presence_source &&
|
||||
|
|
|
|||
|
|
@ -270,11 +270,13 @@ export class PresenceMonitorManager {
|
|||
(err.stack ?? err.message),
|
||||
type: 'error',
|
||||
buttons: ['OK', 'Retry'],
|
||||
defaultId: 0,
|
||||
} : {
|
||||
message: 'Error updating presence monitor',
|
||||
detail: err instanceof Error ? err.stack ?? err.message : err as any,
|
||||
type: 'error',
|
||||
buttons: ['OK', 'Retry'],
|
||||
defaultId: 0,
|
||||
});
|
||||
|
||||
if (response === 1) {
|
||||
|
|
|
|||
|
|
@ -316,7 +316,7 @@ export class ZncProxyDiscordPresence extends Loop {
|
|||
readonly friend_notifications = false;
|
||||
update_interval = 30;
|
||||
|
||||
presence_user: string | null = null;
|
||||
presence_user: null = null;
|
||||
discord_preconnect = false;
|
||||
show_friend_code = false;
|
||||
force_friend_code: CurrentUser['links']['friendCode'] | undefined = undefined;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user