diff --git a/src/i18n/locales/en.json b/src/i18n/locales/en.json index ab3a9aad..5e64bdb3 100644 --- a/src/i18n/locales/en.json +++ b/src/i18n/locales/en.json @@ -288,6 +288,11 @@ "updateServer": { "success": "server updated successfully", "title": "update server" + }, + "privateMode": { + "enabled": "private mode enabled, playback status is now hidden from external integrations", + "disabled": "private mode disabled, playback status is now visible to enabled external integrations", + "title": "private mode" } }, "page": { diff --git a/src/renderer/features/titlebar/components/app-menu.tsx b/src/renderer/features/titlebar/components/app-menu.tsx index a240d22d..9c56a35e 100644 --- a/src/renderer/features/titlebar/components/app-menu.tsx +++ b/src/renderer/features/titlebar/components/app-menu.tsx @@ -19,6 +19,7 @@ import { } from '/@/renderer/store'; import { DropdownMenu } from '/@/shared/components/dropdown-menu/dropdown-menu'; import { Icon } from '/@/shared/components/icon/icon'; +import { toast } from '/@/shared/components/toast/toast'; import { ServerListItem, ServerType } from '/@/shared/types/domain-types'; const browser = isElectron() ? window.api.browser : null; @@ -84,10 +85,18 @@ export const AppMenu = () => { const handlePrivateModeOff = () => { setPrivateMode(false); + toast.info({ + message: t('form.privateMode.disabled', { postProcess: 'sentenceCase' }), + title: t('form.privateMode.title', { postProcess: 'sentenceCase' }), + }); }; const handlePrivateModeOn = () => { setPrivateMode(true); + toast.info({ + message: t('form.privateMode.enabled', { postProcess: 'sentenceCase' }), + title: t('form.privateMode.title', { postProcess: 'sentenceCase' }), + }); }; const handleQuit = () => { @@ -139,13 +148,16 @@ export const AppMenu = () => { {privateMode ? ( } + leftSection={} onClick={handlePrivateModeOff} > {t('page.appMenu.privateModeOff', { postProcess: 'sentenceCase' })} ) : ( - } onClick={handlePrivateModeOn}> + } + onClick={handlePrivateModeOn} + > {t('page.appMenu.privateModeOn', { postProcess: 'sentenceCase' })} )} diff --git a/src/renderer/layouts/window-bar.tsx b/src/renderer/layouts/window-bar.tsx index 3164405a..3d65bd1d 100644 --- a/src/renderer/layouts/window-bar.tsx +++ b/src/renderer/layouts/window-bar.tsx @@ -12,8 +12,12 @@ import macMinHover from './assets/min-mac-hover.png'; import macMin from './assets/min-mac.png'; import styles from './window-bar.module.css'; -import { useCurrentStatus, useQueueStatus } from '/@/renderer/store'; -import { useWindowSettings } from '/@/renderer/store/settings.store'; +import { + useAppStore, + useCurrentStatus, + useQueueStatus, + useWindowSettings, +} from '/@/renderer/store'; import { Text } from '/@/shared/components/text/text'; import { Platform, PlayerStatus } from '/@/shared/types/types'; @@ -126,14 +130,16 @@ export const WindowBar = () => { const playerStatus = useCurrentStatus(); const { currentSong, index, length } = useQueueStatus(); const { windowBarStyle } = useWindowSettings(); + const { privateMode } = useAppStore(); const statusString = playerStatus === PlayerStatus.PAUSED ? '(Paused) ' : ''; const queueString = length ? `(${index + 1} / ${length}) ` : ''; - const title = length - ? currentSong?.artistName - ? `${statusString}${queueString}${currentSong?.name} — ${currentSong?.artistName}` - : `${statusString}${queueString}${currentSong?.name}` - : 'Feishin'; + const privateModeString = privateMode ? '(Private mode)' : ''; + const title = `${ + length + ? `${statusString}${queueString}${currentSong?.name}${currentSong?.artistName ? ` — ${currentSong?.artistName}` : ''}` + : 'Feishin' + }${privateMode ? ` ${privateModeString}` : ''}`; document.title = title; const [max, setMax] = useState(localSettings?.env.START_MAXIMIZED || false);