mirror of
https://github.com/kilyabin/psysonic.git
synced 2026-07-22 14:35:41 +00:00
chore(orbit): toggle to hide the Psy Orbit topbar trigger in Settings
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -3,6 +3,7 @@ import { createPortal } from 'react-dom';
|
|||||||
import { Orbit as OrbitIcon, Plus, LogIn, HelpCircle } from 'lucide-react';
|
import { Orbit as OrbitIcon, Plus, LogIn, HelpCircle } from 'lucide-react';
|
||||||
import { useTranslation } from 'react-i18next';
|
import { useTranslation } from 'react-i18next';
|
||||||
import { useOrbitStore } from '../store/orbitStore';
|
import { useOrbitStore } from '../store/orbitStore';
|
||||||
|
import { useAuthStore } from '../store/authStore';
|
||||||
import { useHelpModalStore } from '../store/helpModalStore';
|
import { useHelpModalStore } from '../store/helpModalStore';
|
||||||
import OrbitStartModal from './OrbitStartModal';
|
import OrbitStartModal from './OrbitStartModal';
|
||||||
import OrbitJoinModal from './OrbitJoinModal';
|
import OrbitJoinModal from './OrbitJoinModal';
|
||||||
@@ -16,6 +17,7 @@ import OrbitJoinModal from './OrbitJoinModal';
|
|||||||
export default function OrbitStartTrigger() {
|
export default function OrbitStartTrigger() {
|
||||||
const { t } = useTranslation();
|
const { t } = useTranslation();
|
||||||
const role = useOrbitStore(s => s.role);
|
const role = useOrbitStore(s => s.role);
|
||||||
|
const visible = useAuthStore(s => s.showOrbitTrigger);
|
||||||
|
|
||||||
const [popoverOpen, setPopoverOpen] = useState(false);
|
const [popoverOpen, setPopoverOpen] = useState(false);
|
||||||
const [startOpen, setStartOpen] = useState(false);
|
const [startOpen, setStartOpen] = useState(false);
|
||||||
@@ -42,6 +44,7 @@ export default function OrbitStartTrigger() {
|
|||||||
}, [popoverOpen]);
|
}, [popoverOpen]);
|
||||||
|
|
||||||
if (role !== null) return null;
|
if (role !== null) return null;
|
||||||
|
if (!visible) return null;
|
||||||
|
|
||||||
const anchor = btnRef.current?.getBoundingClientRect();
|
const anchor = btnRef.current?.getBoundingClientRect();
|
||||||
const popoverStyle: React.CSSProperties = anchor
|
const popoverStyle: React.CSSProperties = anchor
|
||||||
|
|||||||
@@ -670,6 +670,8 @@ export const deTranslation = {
|
|||||||
hiResDesc: "Standardmäßig wird auf 44,1 kHz begrenzt (maximale Stabilität). Nur aktivieren, wenn Hardware und Netzwerk zuverlässig hohe Abtastraten (88,2 kHz+) unterstützen.",
|
hiResDesc: "Standardmäßig wird auf 44,1 kHz begrenzt (maximale Stabilität). Nur aktivieren, wenn Hardware und Netzwerk zuverlässig hohe Abtastraten (88,2 kHz+) unterstützen.",
|
||||||
showArtistImages: 'Künstlerbilder anzeigen',
|
showArtistImages: 'Künstlerbilder anzeigen',
|
||||||
showArtistImagesDesc: 'Lädt und zeigt Künstlerbilder in der Künstlerübersicht. Standardmäßig deaktiviert, um Server-I/O und Netzwerklast bei großen Bibliotheken zu reduzieren.',
|
showArtistImagesDesc: 'Lädt und zeigt Künstlerbilder in der Künstlerübersicht. Standardmäßig deaktiviert, um Server-I/O und Netzwerklast bei großen Bibliotheken zu reduzieren.',
|
||||||
|
showOrbitTrigger: '„Psy Orbit" im Header zeigen',
|
||||||
|
showOrbitTriggerDesc: 'Der Kopfzeilen-Button zum Starten oder Beitreten einer gemeinsamen Hör-Session. Ausblenden, wenn du Orbit nicht nutzt — hier lässt er sich jederzeit wieder einschalten.',
|
||||||
showTrayIcon: 'Tray-Icon anzeigen',
|
showTrayIcon: 'Tray-Icon anzeigen',
|
||||||
showTrayIconDesc: 'Psysonic-Icon im System-Tray / in der Menüleiste anzeigen.',
|
showTrayIconDesc: 'Psysonic-Icon im System-Tray / in der Menüleiste anzeigen.',
|
||||||
minimizeToTray: 'Im Tray minimieren',
|
minimizeToTray: 'Im Tray minimieren',
|
||||||
|
|||||||
@@ -672,6 +672,8 @@ export const enTranslation = {
|
|||||||
hiResDesc: "Forces 44.1 kHz output by default for maximum stability. Enable only if your hardware and network reliably support high sample rates (88.2 kHz+).",
|
hiResDesc: "Forces 44.1 kHz output by default for maximum stability. Enable only if your hardware and network reliably support high sample rates (88.2 kHz+).",
|
||||||
showArtistImages: 'Show Artist Images',
|
showArtistImages: 'Show Artist Images',
|
||||||
showArtistImagesDesc: 'Load and display artist images in the Artists overview. Disabled by default to reduce server disk I/O and network load on large libraries.',
|
showArtistImagesDesc: 'Load and display artist images in the Artists overview. Disabled by default to reduce server disk I/O and network load on large libraries.',
|
||||||
|
showOrbitTrigger: 'Show "Psy Orbit" in the header',
|
||||||
|
showOrbitTriggerDesc: 'The top-bar trigger for starting or joining a shared listening session. Hide it if you don\'t use Orbit — you can turn it back on here.',
|
||||||
showTrayIcon: 'Show Tray Icon',
|
showTrayIcon: 'Show Tray Icon',
|
||||||
showTrayIconDesc: 'Display the Psysonic icon in the system notification area / menu bar.',
|
showTrayIconDesc: 'Display the Psysonic icon in the system notification area / menu bar.',
|
||||||
minimizeToTray: 'Minimize to Tray',
|
minimizeToTray: 'Minimize to Tray',
|
||||||
|
|||||||
@@ -663,6 +663,8 @@ export const esTranslation = {
|
|||||||
hiResDesc: "Fuerza 44.1 kHz de salida por defecto para máxima estabilidad. Habilita solo si tu hardware y red soportan confiablemente altas tasas de muestreo (88.2 kHz+).",
|
hiResDesc: "Fuerza 44.1 kHz de salida por defecto para máxima estabilidad. Habilita solo si tu hardware y red soportan confiablemente altas tasas de muestreo (88.2 kHz+).",
|
||||||
showArtistImages: 'Mostrar Imágenes de Artistas',
|
showArtistImages: 'Mostrar Imágenes de Artistas',
|
||||||
showArtistImagesDesc: 'Carga y muestra imágenes de artistas en el resumen de Artistas. Desactivado por defecto para reducir I/O de disco del servidor y carga de red en bibliotecas grandes.',
|
showArtistImagesDesc: 'Carga y muestra imágenes de artistas en el resumen de Artistas. Desactivado por defecto para reducir I/O de disco del servidor y carga de red en bibliotecas grandes.',
|
||||||
|
showOrbitTrigger: 'Mostrar "Psy Orbit" en la cabecera',
|
||||||
|
showOrbitTriggerDesc: 'El botón en la cabecera para iniciar o unirse a una sesión de escucha compartida. Ocúltalo si no usas Orbit — puedes volver a activarlo aquí.',
|
||||||
showTrayIcon: 'Mostrar Icono en Bandeja',
|
showTrayIcon: 'Mostrar Icono en Bandeja',
|
||||||
showTrayIconDesc: 'Muestra el icono de Psysonic en el área de notificación / barra de menú.',
|
showTrayIconDesc: 'Muestra el icono de Psysonic en el área de notificación / barra de menú.',
|
||||||
minimizeToTray: 'Minimizar a Bandeja',
|
minimizeToTray: 'Minimizar a Bandeja',
|
||||||
|
|||||||
@@ -660,6 +660,8 @@ export const frTranslation = {
|
|||||||
hiResDesc: "Force une sortie à 44,1 kHz par défaut pour une stabilité maximale. N'activer que si le matériel et le réseau prennent en charge les hautes fréquences d'échantillonnage (88,2 kHz+).",
|
hiResDesc: "Force une sortie à 44,1 kHz par défaut pour une stabilité maximale. N'activer que si le matériel et le réseau prennent en charge les hautes fréquences d'échantillonnage (88,2 kHz+).",
|
||||||
showArtistImages: 'Afficher les images d\'artistes',
|
showArtistImages: 'Afficher les images d\'artistes',
|
||||||
showArtistImagesDesc: 'Charge et affiche les images d\'artistes dans la vue d\'ensemble. Désactivé par défaut pour réduire les E/S disque serveur et la charge réseau sur les grandes bibliothèques.',
|
showArtistImagesDesc: 'Charge et affiche les images d\'artistes dans la vue d\'ensemble. Désactivé par défaut pour réduire les E/S disque serveur et la charge réseau sur les grandes bibliothèques.',
|
||||||
|
showOrbitTrigger: 'Afficher « Psy Orbit » dans l\'en-tête',
|
||||||
|
showOrbitTriggerDesc: 'Le bouton d\'en-tête pour démarrer ou rejoindre une session d\'écoute partagée. Masque-le si tu n\'utilises pas Orbit — tu peux le réactiver ici.',
|
||||||
showTrayIcon: 'Afficher l\'icône dans la barre système',
|
showTrayIcon: 'Afficher l\'icône dans la barre système',
|
||||||
showTrayIconDesc: 'Affiche l\'icône Psysonic dans la zone de notification / barre des menus.',
|
showTrayIconDesc: 'Affiche l\'icône Psysonic dans la zone de notification / barre des menus.',
|
||||||
minimizeToTray: 'Réduire dans la barre système',
|
minimizeToTray: 'Réduire dans la barre système',
|
||||||
|
|||||||
@@ -661,6 +661,8 @@ export const nbTranslation = {
|
|||||||
hiResDesc: "Begrenser utdata til 44,1 kHz som standard for maksimal stabilitet. Aktiver kun hvis maskinvare og nettverk støtter høye samplingsrater (88,2 kHz+) pålitelig.",
|
hiResDesc: "Begrenser utdata til 44,1 kHz som standard for maksimal stabilitet. Aktiver kun hvis maskinvare og nettverk støtter høye samplingsrater (88,2 kHz+) pålitelig.",
|
||||||
showArtistImages: 'Vis artistbilder',
|
showArtistImages: 'Vis artistbilder',
|
||||||
showArtistImagesDesc: 'Last inn og vis artistbilder i artistoversikten. Denne er deaktivert som standard, for å redusere disk-I/O og nettverksbelastningen på store biblioteker.',
|
showArtistImagesDesc: 'Last inn og vis artistbilder i artistoversikten. Denne er deaktivert som standard, for å redusere disk-I/O og nettverksbelastningen på store biblioteker.',
|
||||||
|
showOrbitTrigger: 'Vis «Psy Orbit» i toppen',
|
||||||
|
showOrbitTriggerDesc: 'Knappen i toppen for å starte eller bli med i en delt lytteøkt. Skjul den hvis du ikke bruker Orbit — du kan slå den på igjen her.',
|
||||||
minimizeToTray: 'Minimer til oppgavelinjen',
|
minimizeToTray: 'Minimer til oppgavelinjen',
|
||||||
minimizeToTrayDesc: 'Når vinduet lukkes, vil Psysonic bli kjørende i oppgavelinjen fremfor å bli avsluttet.',
|
minimizeToTrayDesc: 'Når vinduet lukkes, vil Psysonic bli kjørende i oppgavelinjen fremfor å bli avsluttet.',
|
||||||
preloadMiniPlayer: 'Forhåndslast miniavspiller',
|
preloadMiniPlayer: 'Forhåndslast miniavspiller',
|
||||||
|
|||||||
@@ -659,6 +659,8 @@ export const nlTranslation = {
|
|||||||
hiResDesc: "Beperkt de uitvoer standaard tot 44,1 kHz voor maximale stabiliteit. Alleen inschakelen als hardware en netwerk hoge samplerates (88,2 kHz+) ondersteunen.",
|
hiResDesc: "Beperkt de uitvoer standaard tot 44,1 kHz voor maximale stabiliteit. Alleen inschakelen als hardware en netwerk hoge samplerates (88,2 kHz+) ondersteunen.",
|
||||||
showArtistImages: 'Artiestafbeeldingen weergeven',
|
showArtistImages: 'Artiestafbeeldingen weergeven',
|
||||||
showArtistImagesDesc: 'Laadt en toont artiestafbeeldingen in het artiestenoverzicht. Standaard uitgeschakeld om server-I/O en netwerkbelasting bij grote bibliotheken te beperken.',
|
showArtistImagesDesc: 'Laadt en toont artiestafbeeldingen in het artiestenoverzicht. Standaard uitgeschakeld om server-I/O en netwerkbelasting bij grote bibliotheken te beperken.',
|
||||||
|
showOrbitTrigger: '"Psy Orbit" in de kop tonen',
|
||||||
|
showOrbitTriggerDesc: 'De knop in de kop voor starten of deelnemen aan een gedeelde luistersessie. Verberg hem als je Orbit niet gebruikt — je kunt hem hier weer aanzetten.',
|
||||||
showTrayIcon: 'Tray-pictogram weergeven',
|
showTrayIcon: 'Tray-pictogram weergeven',
|
||||||
showTrayIconDesc: 'Toont het Psysonic-pictogram in het systeemvak / de menubalk.',
|
showTrayIconDesc: 'Toont het Psysonic-pictogram in het systeemvak / de menubalk.',
|
||||||
minimizeToTray: 'Minimaliseren naar systeemvak',
|
minimizeToTray: 'Minimaliseren naar systeemvak',
|
||||||
|
|||||||
@@ -692,6 +692,8 @@ export const ruTranslation = {
|
|||||||
showArtistImages: 'Фото исполнителей',
|
showArtistImages: 'Фото исполнителей',
|
||||||
showArtistImagesDesc:
|
showArtistImagesDesc:
|
||||||
'Показывать обложки в разделе «Исполнители». По умолчанию выключено — меньше нагрузки на диск и сеть.',
|
'Показывать обложки в разделе «Исполнители». По умолчанию выключено — меньше нагрузки на диск и сеть.',
|
||||||
|
showOrbitTrigger: 'Показывать «Psy Orbit» в шапке',
|
||||||
|
showOrbitTriggerDesc: 'Кнопка в шапке для запуска или присоединения к совместной сессии. Скрой, если не используешь Orbit — здесь же можно включить обратно.',
|
||||||
showTrayIcon: 'Иконка в трее',
|
showTrayIcon: 'Иконка в трее',
|
||||||
showTrayIconDesc: 'Показывать Psysonic в области уведомлений / строке меню.',
|
showTrayIconDesc: 'Показывать Psysonic в области уведомлений / строке меню.',
|
||||||
minimizeToTray: 'Сворачивать в трей',
|
minimizeToTray: 'Сворачивать в трей',
|
||||||
|
|||||||
@@ -654,6 +654,8 @@ export const zhTranslation = {
|
|||||||
hiResDesc: "默认强制 44.1 kHz 输出以获得最大稳定性。仅在硬件和网络可靠支持高采样率(88.2 kHz+)时启用。",
|
hiResDesc: "默认强制 44.1 kHz 输出以获得最大稳定性。仅在硬件和网络可靠支持高采样率(88.2 kHz+)时启用。",
|
||||||
showArtistImages: '显示艺术家图片',
|
showArtistImages: '显示艺术家图片',
|
||||||
showArtistImagesDesc: '在艺术家概览中加载并显示艺术家图片。默认关闭以减少大型音乐库的服务器磁盘I/O和网络负载。',
|
showArtistImagesDesc: '在艺术家概览中加载并显示艺术家图片。默认关闭以减少大型音乐库的服务器磁盘I/O和网络负载。',
|
||||||
|
showOrbitTrigger: '在顶栏显示"Psy Orbit"',
|
||||||
|
showOrbitTriggerDesc: '用于启动或加入共享收听会话的顶栏按钮。如果不使用 Orbit,可以隐藏 — 随时可在此重新开启。',
|
||||||
showTrayIcon: '显示托盘图标',
|
showTrayIcon: '显示托盘图标',
|
||||||
showTrayIconDesc: '在系统通知区域 / 菜单栏显示 Psysonic 图标。',
|
showTrayIconDesc: '在系统通知区域 / 菜单栏显示 Psysonic 图标。',
|
||||||
minimizeToTray: '最小化到托盘',
|
minimizeToTray: '最小化到托盘',
|
||||||
|
|||||||
@@ -3326,6 +3326,17 @@ export default function Settings() {
|
|||||||
<span className="toggle-track" />
|
<span className="toggle-track" />
|
||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
|
<div className="settings-section-divider" />
|
||||||
|
<div className="settings-toggle-row">
|
||||||
|
<div>
|
||||||
|
<div style={{ fontWeight: 500 }}>{t('settings.showOrbitTrigger')}</div>
|
||||||
|
<div style={{ fontSize: 12, color: 'var(--text-muted)' }}>{t('settings.showOrbitTriggerDesc')}</div>
|
||||||
|
</div>
|
||||||
|
<label className="toggle-switch" aria-label={t('settings.showOrbitTrigger')}>
|
||||||
|
<input type="checkbox" checked={auth.showOrbitTrigger} onChange={e => auth.setShowOrbitTrigger(e.target.checked)} />
|
||||||
|
<span className="toggle-track" />
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
{!IS_WINDOWS && (
|
{!IS_WINDOWS && (
|
||||||
<>
|
<>
|
||||||
<div className="settings-section-divider" />
|
<div className="settings-section-divider" />
|
||||||
|
|||||||
@@ -61,6 +61,9 @@ interface AuthState {
|
|||||||
showArtistImages: boolean;
|
showArtistImages: boolean;
|
||||||
showTrayIcon: boolean;
|
showTrayIcon: boolean;
|
||||||
minimizeToTray: boolean;
|
minimizeToTray: boolean;
|
||||||
|
/** Whether the "Psy Orbit" topbar trigger is rendered. Users who never
|
||||||
|
* touch Orbit can hide it so the header stays uncluttered. */
|
||||||
|
showOrbitTrigger: boolean;
|
||||||
discordRichPresence: boolean;
|
discordRichPresence: boolean;
|
||||||
enableAppleMusicCoversDiscord: boolean;
|
enableAppleMusicCoversDiscord: boolean;
|
||||||
/** Opt-in: fetch upcoming tour dates from Bandsintown for the Now-Playing info panel. */
|
/** Opt-in: fetch upcoming tour dates from Bandsintown for the Now-Playing info panel. */
|
||||||
@@ -217,6 +220,7 @@ interface AuthState {
|
|||||||
setShowArtistImages: (v: boolean) => void;
|
setShowArtistImages: (v: boolean) => void;
|
||||||
setShowTrayIcon: (v: boolean) => void;
|
setShowTrayIcon: (v: boolean) => void;
|
||||||
setMinimizeToTray: (v: boolean) => void;
|
setMinimizeToTray: (v: boolean) => void;
|
||||||
|
setShowOrbitTrigger: (v: boolean) => void;
|
||||||
setDiscordRichPresence: (v: boolean) => void;
|
setDiscordRichPresence: (v: boolean) => void;
|
||||||
setEnableAppleMusicCoversDiscord: (v: boolean) => void;
|
setEnableAppleMusicCoversDiscord: (v: boolean) => void;
|
||||||
setEnableBandsintown: (v: boolean) => void;
|
setEnableBandsintown: (v: boolean) => void;
|
||||||
@@ -327,6 +331,7 @@ export const useAuthStore = create<AuthState>()(
|
|||||||
showArtistImages: false,
|
showArtistImages: false,
|
||||||
showTrayIcon: true,
|
showTrayIcon: true,
|
||||||
minimizeToTray: false,
|
minimizeToTray: false,
|
||||||
|
showOrbitTrigger: true,
|
||||||
discordRichPresence: false,
|
discordRichPresence: false,
|
||||||
enableAppleMusicCoversDiscord: false,
|
enableAppleMusicCoversDiscord: false,
|
||||||
enableBandsintown: false,
|
enableBandsintown: false,
|
||||||
@@ -463,6 +468,7 @@ export const useAuthStore = create<AuthState>()(
|
|||||||
setShowArtistImages: (v) => set({ showArtistImages: v }),
|
setShowArtistImages: (v) => set({ showArtistImages: v }),
|
||||||
setShowTrayIcon: (v) => set({ showTrayIcon: v }),
|
setShowTrayIcon: (v) => set({ showTrayIcon: v }),
|
||||||
setMinimizeToTray: (v) => set({ minimizeToTray: v }),
|
setMinimizeToTray: (v) => set({ minimizeToTray: v }),
|
||||||
|
setShowOrbitTrigger: (v) => set({ showOrbitTrigger: v }),
|
||||||
setDiscordRichPresence: (v) => set({ discordRichPresence: v }),
|
setDiscordRichPresence: (v) => set({ discordRichPresence: v }),
|
||||||
setEnableAppleMusicCoversDiscord: (v) => set({ enableAppleMusicCoversDiscord: v }),
|
setEnableAppleMusicCoversDiscord: (v) => set({ enableAppleMusicCoversDiscord: v }),
|
||||||
setEnableBandsintown: (v) => set({ enableBandsintown: v }),
|
setEnableBandsintown: (v) => set({ enableBandsintown: v }),
|
||||||
|
|||||||
Reference in New Issue
Block a user