From 7378bdf8208a8ec6b3e5d70dc46b36459b0e1f77 Mon Sep 17 00:00:00 2001 From: Psychotoxical <171614930+Psychotoxical@users.noreply.github.com> Date: Fri, 24 Apr 2026 19:53:59 +0200 Subject: [PATCH] chore(orbit): toggle to hide the Psy Orbit topbar trigger in Settings Co-Authored-By: Claude Opus 4.7 (1M context) --- src/components/OrbitStartTrigger.tsx | 3 +++ src/locales/de.ts | 2 ++ src/locales/en.ts | 2 ++ src/locales/es.ts | 2 ++ src/locales/fr.ts | 2 ++ src/locales/nb.ts | 2 ++ src/locales/nl.ts | 2 ++ src/locales/ru.ts | 2 ++ src/locales/zh.ts | 2 ++ src/pages/Settings.tsx | 11 +++++++++++ src/store/authStore.ts | 6 ++++++ 11 files changed, 36 insertions(+) diff --git a/src/components/OrbitStartTrigger.tsx b/src/components/OrbitStartTrigger.tsx index c361a840..ddd52bc1 100644 --- a/src/components/OrbitStartTrigger.tsx +++ b/src/components/OrbitStartTrigger.tsx @@ -3,6 +3,7 @@ import { createPortal } from 'react-dom'; import { Orbit as OrbitIcon, Plus, LogIn, HelpCircle } from 'lucide-react'; import { useTranslation } from 'react-i18next'; import { useOrbitStore } from '../store/orbitStore'; +import { useAuthStore } from '../store/authStore'; import { useHelpModalStore } from '../store/helpModalStore'; import OrbitStartModal from './OrbitStartModal'; import OrbitJoinModal from './OrbitJoinModal'; @@ -16,6 +17,7 @@ import OrbitJoinModal from './OrbitJoinModal'; export default function OrbitStartTrigger() { const { t } = useTranslation(); const role = useOrbitStore(s => s.role); + const visible = useAuthStore(s => s.showOrbitTrigger); const [popoverOpen, setPopoverOpen] = useState(false); const [startOpen, setStartOpen] = useState(false); @@ -42,6 +44,7 @@ export default function OrbitStartTrigger() { }, [popoverOpen]); if (role !== null) return null; + if (!visible) return null; const anchor = btnRef.current?.getBoundingClientRect(); const popoverStyle: React.CSSProperties = anchor diff --git a/src/locales/de.ts b/src/locales/de.ts index 2da19803..984a54b3 100644 --- a/src/locales/de.ts +++ b/src/locales/de.ts @@ -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.", 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.', + 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', showTrayIconDesc: 'Psysonic-Icon im System-Tray / in der Menüleiste anzeigen.', minimizeToTray: 'Im Tray minimieren', diff --git a/src/locales/en.ts b/src/locales/en.ts index d0c08820..54704a93 100644 --- a/src/locales/en.ts +++ b/src/locales/en.ts @@ -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+).", 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.', + 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', showTrayIconDesc: 'Display the Psysonic icon in the system notification area / menu bar.', minimizeToTray: 'Minimize to Tray', diff --git a/src/locales/es.ts b/src/locales/es.ts index 9326ec3d..e6993bae 100644 --- a/src/locales/es.ts +++ b/src/locales/es.ts @@ -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+).", 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.', + 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', showTrayIconDesc: 'Muestra el icono de Psysonic en el área de notificación / barra de menú.', minimizeToTray: 'Minimizar a Bandeja', diff --git a/src/locales/fr.ts b/src/locales/fr.ts index 55c1a6fe..f7478fab 100644 --- a/src/locales/fr.ts +++ b/src/locales/fr.ts @@ -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+).", 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.', + 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', showTrayIconDesc: 'Affiche l\'icône Psysonic dans la zone de notification / barre des menus.', minimizeToTray: 'Réduire dans la barre système', diff --git a/src/locales/nb.ts b/src/locales/nb.ts index 7ae336d5..df5200d3 100644 --- a/src/locales/nb.ts +++ b/src/locales/nb.ts @@ -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.", 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.', + 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', minimizeToTrayDesc: 'Når vinduet lukkes, vil Psysonic bli kjørende i oppgavelinjen fremfor å bli avsluttet.', preloadMiniPlayer: 'Forhåndslast miniavspiller', diff --git a/src/locales/nl.ts b/src/locales/nl.ts index c96e2ac7..5d6dc516 100644 --- a/src/locales/nl.ts +++ b/src/locales/nl.ts @@ -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.", showArtistImages: 'Artiestafbeeldingen weergeven', 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', showTrayIconDesc: 'Toont het Psysonic-pictogram in het systeemvak / de menubalk.', minimizeToTray: 'Minimaliseren naar systeemvak', diff --git a/src/locales/ru.ts b/src/locales/ru.ts index 62dc83d5..1bb9644f 100644 --- a/src/locales/ru.ts +++ b/src/locales/ru.ts @@ -692,6 +692,8 @@ export const ruTranslation = { showArtistImages: 'Фото исполнителей', showArtistImagesDesc: 'Показывать обложки в разделе «Исполнители». По умолчанию выключено — меньше нагрузки на диск и сеть.', + showOrbitTrigger: 'Показывать «Psy Orbit» в шапке', + showOrbitTriggerDesc: 'Кнопка в шапке для запуска или присоединения к совместной сессии. Скрой, если не используешь Orbit — здесь же можно включить обратно.', showTrayIcon: 'Иконка в трее', showTrayIconDesc: 'Показывать Psysonic в области уведомлений / строке меню.', minimizeToTray: 'Сворачивать в трей', diff --git a/src/locales/zh.ts b/src/locales/zh.ts index 0b7c8872..1c14208b 100644 --- a/src/locales/zh.ts +++ b/src/locales/zh.ts @@ -654,6 +654,8 @@ export const zhTranslation = { hiResDesc: "默认强制 44.1 kHz 输出以获得最大稳定性。仅在硬件和网络可靠支持高采样率(88.2 kHz+)时启用。", showArtistImages: '显示艺术家图片', showArtistImagesDesc: '在艺术家概览中加载并显示艺术家图片。默认关闭以减少大型音乐库的服务器磁盘I/O和网络负载。', + showOrbitTrigger: '在顶栏显示"Psy Orbit"', + showOrbitTriggerDesc: '用于启动或加入共享收听会话的顶栏按钮。如果不使用 Orbit,可以隐藏 — 随时可在此重新开启。', showTrayIcon: '显示托盘图标', showTrayIconDesc: '在系统通知区域 / 菜单栏显示 Psysonic 图标。', minimizeToTray: '最小化到托盘', diff --git a/src/pages/Settings.tsx b/src/pages/Settings.tsx index 8236b535..e1d2a713 100644 --- a/src/pages/Settings.tsx +++ b/src/pages/Settings.tsx @@ -3326,6 +3326,17 @@ export default function Settings() { +
+
+
+
{t('settings.showOrbitTrigger')}
+
{t('settings.showOrbitTriggerDesc')}
+
+ +
{!IS_WINDOWS && ( <>
diff --git a/src/store/authStore.ts b/src/store/authStore.ts index 93f3f75a..55a3456d 100644 --- a/src/store/authStore.ts +++ b/src/store/authStore.ts @@ -61,6 +61,9 @@ interface AuthState { showArtistImages: boolean; showTrayIcon: 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; enableAppleMusicCoversDiscord: boolean; /** Opt-in: fetch upcoming tour dates from Bandsintown for the Now-Playing info panel. */ @@ -217,6 +220,7 @@ interface AuthState { setShowArtistImages: (v: boolean) => void; setShowTrayIcon: (v: boolean) => void; setMinimizeToTray: (v: boolean) => void; + setShowOrbitTrigger: (v: boolean) => void; setDiscordRichPresence: (v: boolean) => void; setEnableAppleMusicCoversDiscord: (v: boolean) => void; setEnableBandsintown: (v: boolean) => void; @@ -327,6 +331,7 @@ export const useAuthStore = create()( showArtistImages: false, showTrayIcon: true, minimizeToTray: false, + showOrbitTrigger: true, discordRichPresence: false, enableAppleMusicCoversDiscord: false, enableBandsintown: false, @@ -463,6 +468,7 @@ export const useAuthStore = create()( setShowArtistImages: (v) => set({ showArtistImages: v }), setShowTrayIcon: (v) => set({ showTrayIcon: v }), setMinimizeToTray: (v) => set({ minimizeToTray: v }), + setShowOrbitTrigger: (v) => set({ showOrbitTrigger: v }), setDiscordRichPresence: (v) => set({ discordRichPresence: v }), setEnableAppleMusicCoversDiscord: (v) => set({ enableAppleMusicCoversDiscord: v }), setEnableBandsintown: (v) => set({ enableBandsintown: v }),