From e56350c1c228ad34c9b4ed86fd3e2db03ef986b1 Mon Sep 17 00:00:00 2001 From: jeffvli Date: Fri, 9 Jun 2023 03:53:49 -0700 Subject: [PATCH] Add remaining lyric actions functionality --- src/renderer/features/lyrics/lyric-skip.tsx | 32 ------------ .../features/lyrics/lyrics-actions.tsx | 39 +++++++++++---- src/renderer/features/lyrics/lyrics.tsx | 50 +++++++++---------- .../features/lyrics/synchronized-lyrics.tsx | 24 ++------- .../features/lyrics/unsynchronized-lyrics.tsx | 14 ++---- 5 files changed, 60 insertions(+), 99 deletions(-) delete mode 100644 src/renderer/features/lyrics/lyric-skip.tsx diff --git a/src/renderer/features/lyrics/lyric-skip.tsx b/src/renderer/features/lyrics/lyric-skip.tsx deleted file mode 100644 index d9f6396a..00000000 --- a/src/renderer/features/lyrics/lyric-skip.tsx +++ /dev/null @@ -1,32 +0,0 @@ -import { RiCloseFill } from 'react-icons/ri'; -import styled from 'styled-components'; -import { Button } from '/@/renderer/components'; - -const LyricClearButton = styled(Button)` - position: absolute; - right: 10px; - z-index: 999; - bottom: 6vh; - - @media (max-width: 768px) { - bottom: 3vh; - } -`; - -interface LyricSkipProps { - onClick: (e: React.MouseEvent) => void; -} - -export const LyricSkip = ({ onClick }: LyricSkipProps) => { - return ( - } - size="xl" - tooltip={{ label: 'Remove incorrect lyrics', position: 'top' }} - variant="default" - onClick={onClick} - > - Clear - - ); -}; diff --git a/src/renderer/features/lyrics/lyrics-actions.tsx b/src/renderer/features/lyrics/lyrics-actions.tsx index bd15a449..ec2c6d49 100644 --- a/src/renderer/features/lyrics/lyrics-actions.tsx +++ b/src/renderer/features/lyrics/lyrics-actions.tsx @@ -2,14 +2,31 @@ import { RiAddFill, RiSubtractFill } from 'react-icons/ri'; import { LyricsOverride } from '/@/renderer/api/types'; import { Button, NumberInput } from '/@/renderer/components'; import { openLyricSearchModal } from '/@/renderer/features/lyrics/components/lyrics-search-form'; -import { useCurrentSong } from '/@/renderer/store'; +import { + useCurrentSong, + useLyricsSettings, + useSettingsStore, + useSettingsStoreActions, +} from '/@/renderer/store'; interface LyricsActionsProps { - onSearchOverride?: (params: LyricsOverride) => void; + onRemoveLyric: () => void; + onSearchOverride: (params: LyricsOverride) => void; } -export const LyricsActions = ({ onSearchOverride }: LyricsActionsProps) => { +export const LyricsActions = ({ onRemoveLyric, onSearchOverride }: LyricsActionsProps) => { const currentSong = useCurrentSong(); + const { setSettings } = useSettingsStoreActions(); + const { delayMs } = useLyricsSettings(); + + const handleLyricOffset = (e: number) => { + setSettings({ + lyrics: { + ...useSettingsStore.getState().lyrics, + delayMs: e, + }, + }); + }; return ( <> @@ -27,30 +44,30 @@ export const LyricsActions = ({ onSearchOverride }: LyricsActionsProps) => { Search diff --git a/src/renderer/features/lyrics/lyrics.tsx b/src/renderer/features/lyrics/lyrics.tsx index 26841c79..ba5cb312 100644 --- a/src/renderer/features/lyrics/lyrics.tsx +++ b/src/renderer/features/lyrics/lyrics.tsx @@ -9,7 +9,7 @@ import { SynchronizedLyrics } from './synchronized-lyrics'; import { ScrollArea, Spinner, TextTitle } from '/@/renderer/components'; import { ErrorFallback } from '/@/renderer/features/action-required'; import { UnsynchronizedLyrics } from '/@/renderer/features/lyrics/unsynchronized-lyrics'; -import { getServerById, useCurrentSong } from '/@/renderer/store'; +import { getServerById, useCurrentSong, usePlayerStore } from '/@/renderer/store'; import { FullLyricsMetadata, LyricsOverride, @@ -20,7 +20,7 @@ import { LyricsActions } from '/@/renderer/features/lyrics/lyrics-actions'; const ActionsContainer = styled.div` position: absolute; - bottom: 4rem; + bottom: 0; left: 0; z-index: 50; display: flex; @@ -42,6 +42,7 @@ const ActionsContainer = styled.div` const LyricsContainer = styled.div` position: relative; + display: flex; width: 100%; height: 100%; @@ -67,6 +68,7 @@ const ScrollContainer = styled(motion(ScrollArea))` ); &.mantine-ScrollArea-root { + width: 100%; height: 100%; } @@ -154,16 +156,16 @@ export const Lyrics = () => { return ( - {isLoadingLyrics ? ( - - ) : ( - - + + {isLoadingLyrics ? ( + + ) : ( + {!data?.lyrics || clear ? ( -
+
{ transition={{ duration: 0.5 }} > {isSynchronizedLyrics ? ( - setClear(true)} - /> + ) : ( - setClear(true)} - /> + )} )} - - - - - - - )} + + )} + + setClear(true)} + onSearchOverride={handleOnSearchOverride} + /> + + ); }; diff --git a/src/renderer/features/lyrics/synchronized-lyrics.tsx b/src/renderer/features/lyrics/synchronized-lyrics.tsx index 56275a21..5857be73 100644 --- a/src/renderer/features/lyrics/synchronized-lyrics.tsx +++ b/src/renderer/features/lyrics/synchronized-lyrics.tsx @@ -12,7 +12,6 @@ import isElectron from 'is-electron'; import { PlayersRef } from '/@/renderer/features/player/ref/players-ref'; import { FullLyricsMetadata, SynchronizedLyricsArray } from '/@/renderer/api/types'; import styled from 'styled-components'; -import { LyricSkip } from '/@/renderer/features/lyrics/lyric-skip'; const mpvPlayer = isElectron() ? window.electron.mpvPlayer : null; @@ -22,14 +21,12 @@ const SynchronizedLyricsContainer = styled.div` interface SynchronizedLyricsProps extends Omit { lyrics: SynchronizedLyricsArray; - onRemoveLyric: () => void; } export const SynchronizedLyrics = ({ artist, lyrics, name, - onRemoveLyric, remote, source, }: SynchronizedLyricsProps) => { @@ -146,16 +143,6 @@ export const SynchronizedLyrics = ({ } }, []); - const removeLyric = useCallback(() => { - onRemoveLyric(); - - if (lyricTimer.current) { - clearTimeout(lyricTimer.current); - } - - timerEpoch.current += 1; - }, [onRemoveLyric]); - useEffect(() => { // Copy the follow settings into a ref that can be accessed in the timeout followRef.current = settings.follow; @@ -276,13 +263,10 @@ export const SynchronizedLyrics = ({ /> )} {remote && ( - <> - - - + )} {lyrics.map(([, text], idx) => ( { lyrics: string; - onRemoveLyric: () => void; } const UnsynchronizedLyricsContainer = styled.div` @@ -17,7 +15,6 @@ export const UnsynchronizedLyrics = ({ artist, lyrics, name, - onRemoveLyric, remote, source, }: UnsynchronizedLyricsProps) => { @@ -34,13 +31,10 @@ export const UnsynchronizedLyrics = ({ /> )} {remote && ( - <> - - - + )} {lines.map((text, idx) => (