diff --git a/src/lib/components/AboutModal.svelte b/src/lib/components/AboutModal.svelte index 852a116b5..fbabb2110 100644 --- a/src/lib/components/AboutModal.svelte +++ b/src/lib/components/AboutModal.svelte @@ -6,6 +6,7 @@ import { getName, getVersion } from '@tauri-apps/api/app'; import { onMount } from 'svelte'; import QobuzLegalNotice from '$lib/components/QobuzLegalNotice.svelte'; + import { platform } from '$lib/utils/platform'; interface Props { isOpen: boolean; @@ -37,9 +38,7 @@ } }); - // Detect platform for Easter eggs - const isMac = typeof navigator !== 'undefined' && /Mac/.test(navigator.platform); - const platformLabel = isMac ? 'macOS (Tauri 2.0)' : 'Linux (Tauri 2.0)'; + const platformLabel = platform === 'macos' ? 'macOS (Tauri 2.0)' : 'Linux (Tauri 2.0)'; function handleOpenUrl(url: string) { openUrl(url).catch(err => console.error('Failed to open URL:', err)); @@ -193,7 +192,7 @@ México

- {$t('about.signatureDetail')} Tux + {$t('about.signatureDetail')} Tux

diff --git a/src/lib/stores/titleBarStore.ts b/src/lib/stores/titleBarStore.ts index c2dea63e7..330578cf1 100644 --- a/src/lib/stores/titleBarStore.ts +++ b/src/lib/stores/titleBarStore.ts @@ -9,14 +9,12 @@ */ import { invoke } from '@tauri-apps/api/core'; +import { platform } from '$lib/utils/platform'; const STORAGE_KEY_HIDE = 'qbz-hide-titlebar'; const STORAGE_KEY_SYSTEM = 'qbz-use-system-titlebar'; const STORAGE_KEY_WINDOW_CONTROLS = 'qbz-show-window-controls'; -// Platform detection (cached once — never changes at runtime) -const isMacOS = typeof document !== 'undefined' && document.documentElement.classList.contains('macos'); - // State let hideTitleBar = false; let useSystemTitleBar = false; @@ -91,7 +89,7 @@ export function getUseSystemTitleBar(): boolean { */ export function shouldShowTitleBar(): boolean { // macOS always uses native decorations — no custom title bar - if (isMacOS) return false; + if (platform === 'macos') return false; return !hideTitleBar && !useSystemTitleBar; } @@ -100,7 +98,7 @@ export function shouldShowTitleBar(): boolean { * Returns 0 if title bar is hidden or system title bar is active, 40 otherwise */ export function getTitleBarHeight(): number { - if (isMacOS) return 0; + if (platform === 'macos') return 0; return (hideTitleBar || useSystemTitleBar) ? 0 : 40; } diff --git a/src/lib/utils/keyboard.ts b/src/lib/utils/keyboard.ts index 445f9d19b..dfe2f4d28 100644 --- a/src/lib/utils/keyboard.ts +++ b/src/lib/utils/keyboard.ts @@ -2,6 +2,8 @@ * Keyboard utilities for keybindings system */ +import { platform } from '$lib/utils/platform'; + /** Display mappings for special keys */ const KEY_DISPLAY_MAP: Record = { ArrowLeft: '←', @@ -78,21 +80,17 @@ export function parseShortcut(shortcut: string): { * @example formatShortcutDisplay('Ctrl+ArrowRight') // '⌘ →' on macOS, 'Ctrl + →' on others */ export function formatShortcutDisplay(shortcut: string): string { - const isMac = - typeof navigator !== 'undefined' && - navigator.platform.toLowerCase().includes('mac'); - const { ctrl, alt, shift, key } = parseShortcut(shortcut); const parts: string[] = []; - if (ctrl) parts.push(isMac ? '⌘' : 'Ctrl'); - if (alt) parts.push(isMac ? '⌥' : 'Alt'); - if (shift) parts.push(isMac ? '⇧' : 'Shift'); + if (ctrl) parts.push(platform === 'macos' ? '⌘' : 'Ctrl'); + if (alt) parts.push(platform === 'macos' ? '⌥' : 'Alt'); + if (shift) parts.push(platform === 'macos' ? '⇧' : 'Shift'); const displayKey = KEY_DISPLAY_MAP[key] || key.toUpperCase(); parts.push(displayKey); - return parts.join(isMac ? ' ' : ' + '); + return parts.join(platform === 'macos' ? ' ' : ' + '); } /** diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte index 23fd59fb7..c66c5d0c9 100644 --- a/src/routes/+page.svelte +++ b/src/routes/+page.svelte @@ -154,6 +154,7 @@ import { loadAlbumFavorites } from '$lib/stores/albumFavoritesStore'; import { loadArtistFavorites } from '$lib/stores/artistFavoritesStore'; import { getDefaultFavoritesTab } from '$lib/utils/favorites'; + import { platform } from '$lib/utils/platform'; import type { FavoritesPreferences, ResolvedMusician } from '$lib/types'; // Navigation state management @@ -479,7 +480,6 @@ // Title Bar State (from titleBarStore subscription) let showTitleBar = $state(shouldShowTitleBar()); let showWindowControls = $state(getShowWindowControls()); - const isMacOS = typeof document !== 'undefined' && document.documentElement.classList.contains('macos'); // Search Bar Location State let searchBarLocationPref = $state(getSearchBarLocation()); @@ -4883,7 +4883,7 @@ {:else}
- {#if !showTitleBar && isMacOS} + {#if !showTitleBar && platform === 'macos'}
{/if}