diff --git a/src/main/features/core/player/media-keys.ts b/src/main/features/core/player/media-keys.ts index 815944da..2af856d2 100644 --- a/src/main/features/core/player/media-keys.ts +++ b/src/main/features/core/player/media-keys.ts @@ -3,6 +3,8 @@ import { BrowserWindow, globalShortcut, systemPreferences } from 'electron'; import { isMacOS, isWindows } from '../../../utils'; import { store } from '../settings'; +import { PlaybackType } from '/@/shared/types/types'; + export const enableMediaKeys = (window: BrowserWindow | null) => { if (isMacOS()) { const shouldPrompt = store.get('should_prompt_accessibility', true) as boolean; @@ -24,7 +26,9 @@ export const enableMediaKeys = (window: BrowserWindow | null) => { } const enableWindowsMediaSession = store.get('mediaSession', false) as boolean; - if (!(enableWindowsMediaSession && isWindows())) { + const playbackType = store.get('playbackType', PlaybackType.WEB) as PlaybackType; + + if (!enableWindowsMediaSession || !isWindows() || playbackType !== PlaybackType.WEB) { globalShortcut.register('MediaStop', () => { window?.webContents.send('renderer-player-stop'); }); diff --git a/src/main/index.ts b/src/main/index.ts index fb8058d5..1e7d7546 100644 --- a/src/main/index.ts +++ b/src/main/index.ts @@ -38,7 +38,7 @@ import { } from './utils'; import './features'; -import { TitleTheme } from '/@/shared/types/types'; +import { PlaybackType, TitleTheme } from '/@/shared/types/types'; export default class AppUpdater { constructor() { @@ -549,7 +549,9 @@ async function createWindow(first = true): Promise { } const enableWindowsMediaSession = store.get('mediaSession', false) as boolean; -const shouldDisableMediaFeatures = !isWindows() || !enableWindowsMediaSession; +const playbackType = store.get('playbackType', PlaybackType.WEB) as PlaybackType; +const shouldDisableMediaFeatures = + !isWindows() || !enableWindowsMediaSession || playbackType !== PlaybackType.WEB; if (shouldDisableMediaFeatures) { app.commandLine.appendSwitch( 'disable-features', diff --git a/src/renderer/features/settings/components/hotkeys/window-hotkey-settings.tsx b/src/renderer/features/settings/components/hotkeys/window-hotkey-settings.tsx index a93edfdc..1f7f6d93 100644 --- a/src/renderer/features/settings/components/hotkeys/window-hotkey-settings.tsx +++ b/src/renderer/features/settings/components/hotkeys/window-hotkey-settings.tsx @@ -7,6 +7,7 @@ import { } from '/@/renderer/features/settings/components/settings-section'; import { useHotkeySettings, usePlaybackSettings, useSettingsStoreActions } from '/@/renderer/store'; import { Switch } from '/@/shared/components/switch/switch'; +import { PlaybackType } from '/@/shared/types/types'; const localSettings = isElectron() ? window.api.localSettings : null; const isWindows = isElectron() ? window.api.utils.isWindows() : false; @@ -15,14 +16,19 @@ export const WindowHotkeySettings = () => { const { t } = useTranslation(); const settings = useHotkeySettings(); const { setSettings } = useSettingsStoreActions(); - const { mediaSession: enableWindowsMediaSession } = usePlaybackSettings(); + const { mediaSession: enableWindowsMediaSession, type: playbackType } = usePlaybackSettings(); const options: SettingOption[] = [ { control: ( { setSettings({ hotkeys: { @@ -44,7 +50,7 @@ export const WindowHotkeySettings = () => { context: 'description', postProcess: 'sentenceCase', }), - isHidden: !isElectron() || (enableWindowsMediaSession && isWindows), + isHidden: !isElectron(), title: t('setting.globalMediaHotkeys', { postProcess: 'sentenceCase' }), }, ]; diff --git a/src/renderer/features/settings/components/playback/audio-settings.tsx b/src/renderer/features/settings/components/playback/audio-settings.tsx index c17fab7a..6bb2be79 100644 --- a/src/renderer/features/settings/components/playback/audio-settings.tsx +++ b/src/renderer/features/settings/components/playback/audio-settings.tsx @@ -15,6 +15,8 @@ import { Switch } from '/@/shared/components/switch/switch'; import { toast } from '/@/shared/components/toast/toast'; import { CrossfadeStyle, PlaybackStyle, PlaybackType, PlayerStatus } from '/@/shared/types/types'; +const ipc = isElectron() ? window.api.ipc : null; + const getAudioDevice = async () => { const devices = await navigator.mediaDevices.enumerateDevices(); return (devices || []).filter((dev: MediaDeviceInfo) => dev.kind === 'audiooutput'); @@ -62,6 +64,7 @@ export const AudioSettings = ({ hasFancyAudio }: { hasFancyAudio: boolean }) => disabled={status === PlayerStatus.PLAYING} onChange={(e) => { setSettings({ playback: { ...settings, type: e as PlaybackType } }); + ipc?.send('settings-set', { property: 'playbackType', value: e }); if (isElectron() && e === PlaybackType.LOCAL) { const queueData = usePlayerStore.getState().actions.getPlayerData(); setQueue(queueData); diff --git a/src/renderer/features/settings/components/playback/media-session-settings.tsx b/src/renderer/features/settings/components/playback/media-session-settings.tsx index 6274bb37..faab7d69 100644 --- a/src/renderer/features/settings/components/playback/media-session-settings.tsx +++ b/src/renderer/features/settings/components/playback/media-session-settings.tsx @@ -7,6 +7,7 @@ import { } from '/@/renderer/features/settings/components/settings-section'; import { usePlaybackSettings, useSettingsStoreActions } from '/@/renderer/store/settings.store'; import { Switch } from '/@/shared/components/switch/switch'; +import { PlaybackType } from '/@/shared/types/types'; const isWindows = isElectron() ? window.api.utils.isWindows() : null; const isDesktop = isElectron(); @@ -14,7 +15,7 @@ const ipc = isElectron() ? window.api.ipc : null; export const MediaSessionSettings = () => { const { t } = useTranslation(); - const { mediaSession } = usePlaybackSettings(); + const { mediaSession, type: playbackType } = usePlaybackSettings(); const { toggleMediaSession } = useSettingsStoreActions(); function handleMediaSessionChange() { @@ -29,6 +30,7 @@ export const MediaSessionSettings = () => { ),