import prompt from 'custom-electron-prompt'; import { BrowserWindow } from 'electron'; import { t } from '@/i18n'; import promptOptions from '@/providers/prompt-options'; import { ScrobblerPluginConfig } from './index'; import { SetConfType, backend } from './main'; import type { MenuContext } from '@/types/contexts'; import type { MenuTemplate } from '@/menu'; async function promptLastFmOptions(options: ScrobblerPluginConfig, setConfig: SetConfType, window: BrowserWindow) { const output = await prompt( { title: t('plugins.scrobbler.menu.lastfm.api-settings'), label: t('plugins.scrobbler.menu.lastfm.api-settings'), type: 'multiInput', multiInputOptions: [ { label: t('plugins.scrobbler.prompt.lastfm.api-key'), value: options.scrobblers.lastfm?.apiKey, inputAttrs: { type: 'text' } }, { label: t('plugins.scrobbler.prompt.lastfm.api-secret'), value: options.scrobblers.lastfm?.secret, inputAttrs: { type: 'text' } } ], resizable: true, height: 360, ...promptOptions(), }, window, ); if (output) { if (output[0]) { options.scrobblers.lastfm.apiKey = output[0]; } if (output[1]) { options.scrobblers.lastfm.secret = output[1]; } setConfig(options); } } async function promptListenbrainzOptions(options: ScrobblerPluginConfig, setConfig: SetConfType, window: BrowserWindow) { const output = await prompt( { title: t('plugins.scrobbler.prompt.listenbrainz.token.title'), label: t('plugins.scrobbler.prompt.listenbrainz.token.label'), type: 'input', value: options.scrobblers.listenbrainz?.token, ...promptOptions(), }, window, ); if (output) { options.scrobblers.listenbrainz.token = output; setConfig(options); } } export const onMenu = async ({ window, getConfig, setConfig, }: MenuContext): Promise => { const config = await getConfig(); return [ { label: t('plugins.scrobbler.menu.scrobble-other-media'), type: 'checkbox', checked: Boolean(config.scrobbleOtherMedia), click(item) { config.scrobbleOtherMedia = item.checked; setConfig(config); }, }, { label: 'Last.fm', submenu: [ { label: t('main.menu.plugins.enabled'), type: 'checkbox', checked: Boolean(config.scrobblers.lastfm?.enabled), click(item) { backend.toggleScrobblers(config, window); config.scrobblers.lastfm.enabled = item.checked; setConfig(config); }, }, { label: t('plugins.scrobbler.menu.lastfm.api-settings'), click() { promptLastFmOptions(config, setConfig, window); }, }, ], }, { label: 'ListenBrainz', submenu: [ { label: t('main.menu.plugins.enabled'), type: 'checkbox', checked: Boolean(config.scrobblers.listenbrainz?.enabled), click(item) { backend.toggleScrobblers(config, window); config.scrobblers.listenbrainz.enabled = item.checked; setConfig(config); }, }, { label: t('plugins.scrobbler.menu.listenbrainz.token'), click() { promptListenbrainzOptions(config, setConfig, window); }, }, ], }, ]; };