From 707960b088641a1bdeb1ebfc63547d29b9de71ac Mon Sep 17 00:00:00 2001 From: angel Date: Wed, 2 Jul 2025 00:37:01 +0000 Subject: [PATCH] feat: update commit SHA, enhance audio player and full screen player with favorite functionality, and update various components to support starred tracks --- .env.local | 2 +- app/components/AudioPlayer.tsx | 29 +++++++++- app/components/AudioPlayerContext.tsx | 80 ++++++++++++++++++++++++++- app/components/FullScreenPlayer.tsx | 36 ++++++++---- app/components/PopularSongs.tsx | 3 +- app/components/album-artwork.tsx | 1 + app/favorites/page.tsx | 2 + app/library/songs/page.tsx | 6 +- app/playlist/[id]/page.tsx | 9 ++- app/search/page.tsx | 6 +- app/settings/page.tsx | 4 +- 11 files changed, 150 insertions(+), 28 deletions(-) diff --git a/.env.local b/.env.local index 0b91c98..b2174de 100644 --- a/.env.local +++ b/.env.local @@ -1 +1 @@ -NEXT_PUBLIC_COMMIT_SHA=0cb4f23 +NEXT_PUBLIC_COMMIT_SHA=d6ac247 diff --git a/app/components/AudioPlayer.tsx b/app/components/AudioPlayer.tsx index 0498e94..2bed2d4 100644 --- a/app/components/AudioPlayer.tsx +++ b/app/components/AudioPlayer.tsx @@ -5,13 +5,14 @@ import { useRouter } from 'next/navigation'; import { useAudioPlayer, Track } from '@/app/components/AudioPlayerContext'; import { FullScreenPlayer } from '@/app/components/FullScreenPlayer'; import { FaPlay, FaPause, FaVolumeHigh, FaForward, FaBackward, FaCompress, FaVolumeXmark, FaExpand, FaShuffle } from "react-icons/fa6"; +import { Heart } from 'lucide-react'; import { Progress } from '@/components/ui/progress'; import { useToast } from '@/hooks/use-toast'; import { useLastFmScrobbler } from '@/hooks/use-lastfm-scrobbler'; import { useStandaloneLastFm } from '@/hooks/use-standalone-lastfm'; export const AudioPlayer: React.FC = () => { - const { currentTrack, playPreviousTrack, addToQueue, playNextTrack, clearQueue, queue, toggleShuffle, shuffle } = useAudioPlayer(); + const { currentTrack, playPreviousTrack, addToQueue, playNextTrack, clearQueue, queue, toggleShuffle, shuffle, toggleCurrentTrackStar } = useAudioPlayer(); const router = useRouter(); const audioRef = useRef(null); const preloadAudioRef = useRef(null); @@ -377,6 +378,19 @@ export const AudioPlayer: React.FC = () => {

{currentTrack.artist}

+ {/* Heart icon for favoriting */} +
- {/* faviorte icon or smthing here */} {/* Control buttons */} +
- {lyrics.length > 0 && ( - - )} + + +
@@ -410,6 +411,17 @@ export const FullScreenPlayer: React.FC = ({ isOpen, onCl )} + {lyrics.length > 0 && ( + + )} {showVolumeSlider && (
{ url: api?.getStreamUrl(song.id) || '', duration: song.duration, coverArt: song.coverArt ? api?.getCoverArtUrl(song.coverArt) : undefined, + starred: !!song.starred }); }; @@ -79,6 +80,7 @@ const FavoritesPage = () => { url: api.getStreamUrl(song.id), duration: song.duration, coverArt: song.coverArt ? api.getCoverArtUrl(song.coverArt) : undefined, + starred: !!song.starred })); playTrack(tracks[0]); diff --git a/app/library/songs/page.tsx b/app/library/songs/page.tsx index a1d8581..3e76b59 100644 --- a/app/library/songs/page.tsx +++ b/app/library/songs/page.tsx @@ -116,7 +116,8 @@ export default function SongsPage() { duration: song.duration, coverArt: song.coverArt ? api.getCoverArtUrl(song.coverArt, 300) : undefined, albumId: song.albumId, - artistId: song.artistId + artistId: song.artistId, + starred: !!song.starred }; playTrack(track); @@ -136,7 +137,8 @@ export default function SongsPage() { duration: song.duration, coverArt: song.coverArt ? api.getCoverArtUrl(song.coverArt, 300) : undefined, albumId: song.albumId, - artistId: song.artistId + artistId: song.artistId, + starred: !!song.starred }; addToQueue(track); diff --git a/app/playlist/[id]/page.tsx b/app/playlist/[id]/page.tsx index b1b957d..749abbd 100644 --- a/app/playlist/[id]/page.tsx +++ b/app/playlist/[id]/page.tsx @@ -59,7 +59,8 @@ export default function PlaylistPage() { duration: song.duration, coverArt: song.coverArt ? api.getCoverArtUrl(song.coverArt, 300) : undefined, albumId: song.albumId, - artistId: song.artistId + artistId: song.artistId, + starred: !!song.starred }; playTrack(track); }; @@ -78,7 +79,8 @@ export default function PlaylistPage() { duration: song.duration, coverArt: song.coverArt ? api.getCoverArtUrl(song.coverArt, 300) : undefined, albumId: song.albumId, - artistId: song.artistId + artistId: song.artistId, + starred: !!song.starred }; addToQueue(track); }; @@ -98,7 +100,8 @@ export default function PlaylistPage() { duration: song.duration, coverArt: song.coverArt ? api.getCoverArtUrl(song.coverArt, 300) : undefined, albumId: song.albumId, - artistId: song.artistId + artistId: song.artistId, + starred: !!song.starred })); // Play the first track and add the rest to queue diff --git a/app/search/page.tsx b/app/search/page.tsx index 76f6809..b626008 100644 --- a/app/search/page.tsx +++ b/app/search/page.tsx @@ -66,7 +66,8 @@ export default function SearchPage() { duration: song.duration, coverArt: song.coverArt ? api.getCoverArtUrl(song.coverArt, 300) : undefined, albumId: song.albumId, - artistId: song.artistId + artistId: song.artistId, + starred: !!song.starred }; playTrack(track); @@ -86,7 +87,8 @@ export default function SearchPage() { duration: song.duration, coverArt: song.coverArt ? api.getCoverArtUrl(song.coverArt, 300) : undefined, albumId: song.albumId, - artistId: song.artistId + artistId: song.artistId, + starred: !!song.starred }; addToQueue(track); diff --git a/app/settings/page.tsx b/app/settings/page.tsx index 081e0fe..6f172bd 100644 --- a/app/settings/page.tsx +++ b/app/settings/page.tsx @@ -443,7 +443,7 @@ const SettingsPage = () => { - + {/* @@ -472,7 +472,7 @@ const SettingsPage = () => {

- + */}