From 3587f3a769b8853e23aa2f266355b66f9b3c6bf5 Mon Sep 17 00:00:00 2001 From: KingRainbow44 Date: Sat, 16 Mar 2024 13:05:34 -0400 Subject: [PATCH] (feat:context) Add context to NowPlaying --- src/Laudiolin.tsx | 31 ++++++++++---------- src/ui/NowPlaying.tsx | 67 +++++++++++++++++++++++++++++++++++++++---- 2 files changed, 78 insertions(+), 20 deletions(-) diff --git a/src/Laudiolin.tsx b/src/Laudiolin.tsx index 6223fb7..93d6d0e 100644 --- a/src/Laudiolin.tsx +++ b/src/Laudiolin.tsx @@ -36,18 +36,19 @@ function Laudiolin(props: IProps) { - - { - global.showTrackPage && - } - { - global.showLoginPage && - } - - + + + { + global.showTrackPage && + } + { + global.showLoginPage && + } + + ( @@ -71,9 +72,9 @@ function Laudiolin(props: IProps) { name={"Settings"} component={Settings} /> - - - + + + ); diff --git a/src/ui/NowPlaying.tsx b/src/ui/NowPlaying.tsx index bba1fe3..0c52a7d 100644 --- a/src/ui/NowPlaying.tsx +++ b/src/ui/NowPlaying.tsx @@ -1,4 +1,4 @@ -import { ReactElement, useEffect, useState } from "react"; +import { useEffect, useState } from "react"; import { StyleSheet, TouchableOpacity, View } from "react-native"; import AdIcon from "react-native-vector-icons/AntDesign"; @@ -20,12 +20,19 @@ import { NavigationContainerRef } from "@react-navigation/core"; import { GestureDetector, Gesture, Directions } from "react-native-gesture-handler"; import ProgressBar from "@widgets/ProgressBar"; + +import StyledMenu from "@components/StyledMenu"; import StyledText, { Size } from "@components/StyledText"; -import Player from "@backend/player"; -import { useGlobal } from "@backend/stores"; +import Player, { currentlyPlaying } from "@backend/player"; +import { useFavorites, useGlobal } from "@backend/stores"; import { colors, value } from "@style/Laudiolin"; +import Playlist from "@backend/playlist"; +import SelectAPlaylist from "@modals/SelectAPlaylist"; +import * as WebBrowser from "expo-web-browser"; +import User from "@backend/user"; +import StyledModal from "@components/StyledModal"; function RepeatIcon({ loop }: { loop: RepeatMode }) { switch (loop) { @@ -41,12 +48,20 @@ function RepeatIcon({ loop }: { loop: RepeatMode }) { function NowPlaying({ navigation }: { navigation: NavigationContainerRef }) { const global = useGlobal(); + let favorites = useFavorites(); + favorites = Object.values(favorites); + const track = useActiveTrack(); const { state } = usePlaybackState(); const progress = useProgress(500); + const isFavorite = favorites.find(t => t.id == track?.id); + const [repeatMode, setRepeatMode] = useState(RepeatMode.Off); + const [showSelect, setShowSelect] = useState(false); + const [showMenu, setShowMenu] = useState(false); + useEffect(() => { TrackPlayer.getRepeatMode().then(setRepeatMode); }); @@ -82,9 +97,8 @@ function NowPlaying({ navigation }: { navigation: NavigationContainerRef }) ) } - null}> + setShowMenu(true)}> - {/* TODO: Move favorite track into context menu. */} @@ -141,6 +155,49 @@ function NowPlaying({ navigation }: { navigation: NavigationContainerRef }) + + setShowSelect(false)} + > + { + if (currentlyPlaying && currentlyPlaying?.title == track?.title) { + Playlist.addTrackToPlaylist(playlist, currentlyPlaying) + .catch(() => null); + } + }} + /> + + + setShowMenu(false)} + options={[ + currentlyPlaying && { + text: "Add to Playlist", + icon: , + onPress: () => setShowMenu(false), + }, + track && { + text: "Open Track Source", + icon: , + onPress: () => WebBrowser.openBrowserAsync(track.url) + }, + currentlyPlaying ? { + text: `${isFavorite ? "Remove from" : "Add to"} Favorites`, + icon: , + onPress: () => { + if (currentlyPlaying?.type == "remote") { + User.favoriteTrack(currentlyPlaying, !isFavorite) + .catch(() => null); + } + } + } : undefined, + ]} + style={{ top: 10, right: 10 }} + /> );