diff --git a/src/renderer/features/player/components/left-controls.module.css b/src/renderer/features/player/components/left-controls.module.css
index 37ed61921..61b42c7ff 100644
--- a/src/renderer/features/player/components/left-controls.module.css
+++ b/src/renderer/features/player/components/left-controls.module.css
@@ -50,6 +50,11 @@
object-fit: var(--theme-image-fit);
}
+.radio-image {
+ background: var(--theme-colors-surface);
+ border-radius: var(--theme-radius-md);
+}
+
.line-item {
display: inline-block;
width: 100%;
diff --git a/src/renderer/features/player/components/left-controls.tsx b/src/renderer/features/player/components/left-controls.tsx
index a45a839c3..10028cc34 100644
--- a/src/renderer/features/player/components/left-controls.tsx
+++ b/src/renderer/features/player/components/left-controls.tsx
@@ -21,7 +21,9 @@ import {
useSetFullScreenPlayerStore,
} from '/@/renderer/store';
import { ActionIcon } from '/@/shared/components/action-icon/action-icon';
+import { Center } from '/@/shared/components/center/center';
import { Group } from '/@/shared/components/group/group';
+import { Icon } from '/@/shared/components/icon/icon';
import { Separator } from '/@/shared/components/separator/separator';
import { Text } from '/@/shared/components/text/text';
import { Tooltip } from '/@/shared/components/tooltip/tooltip';
@@ -48,7 +50,7 @@ export const LeftControls = () => {
const { bindings } = useHotkeySettings();
const isRadioMode = isRadioActive;
- const hideImage = (image && !collapsed) || isRadioMode;
+ const hideImage = image && !collapsed;
const isSongDefined = Boolean(currentSong?.id) && !isRadioMode;
const title = currentSong?.name;
const artists = currentSong?.artists;
@@ -116,20 +118,31 @@ export const LeftControls = () => {
})}
openDelay={0}
>
-
+ {isRadioMode ? (
+
+
+
+ ) : (
+
+ )}
{!collapsed && (
& { placeholder?: string; useImageAspectRatio?: boolean }) => {
+}: HTMLMotionProps<'img'> & {
+ placeholder?: string;
+ placeholderIcon?: 'itemAlbum' | 'radio';
+ useImageAspectRatio?: boolean;
+}) => {
if (!props.src) {
return (
-
+
);
}
@@ -80,9 +93,13 @@ export const MobileFullscreenPlayerAlbumArt = () => {
const { fullScreenPlayer: albumArtRes } = useImageRes();
const { useImageAspectRatio } = useFullScreenPlayerStore();
+ const isRadioActive = useIsRadioActive();
+ const { isPlaying: isRadioPlaying } = useRadioPlayer();
const currentSong = usePlayerSong();
const { nextSong } = usePlayerData();
+ const isPlayingRadio = isRadioActive && isRadioPlaying;
+
const currentImageUrl = useItemImageUrl({
id: currentSong?.imageId || undefined,
itemType: LibraryItem.SONG,
@@ -151,38 +168,58 @@ export const MobileFullscreenPlayerAlbumArt = () => {
})}
>
- {imageState.current === 0 && (
+ {isPlayingRadio ? (
- )}
+ ) : (
+ <>
+ {imageState.current === 0 && (
+
+ )}
- {imageState.current === 1 && (
-
+ {imageState.current === 1 && (
+
+ )}
+ >
)}
diff --git a/src/renderer/features/player/components/mobile-fullscreen-player-metadata.tsx b/src/renderer/features/player/components/mobile-fullscreen-player-metadata.tsx
index 5630df629..ee90fb72b 100644
--- a/src/renderer/features/player/components/mobile-fullscreen-player-metadata.tsx
+++ b/src/renderer/features/player/components/mobile-fullscreen-player-metadata.tsx
@@ -16,6 +16,9 @@ interface MobileFullscreenPlayerMetadataProps {
currentSong?: QueueSong;
onToggleFavorite: (e: MouseEvent