Compare commits

...

3 Commits

Author SHA1 Message Date
jeffvli 6b0c57998b Update to v0.8.1 2024-09-03 21:53:19 -07:00
jeffvli 6587e9cac8 Fix invalid DOM prop on playerbar 2024-09-03 21:51:50 -07:00
jeffvli 2e3c69e61c Fix song index skip when viewing synchronized lyrics 2024-09-03 21:51:18 -07:00
6 changed files with 34 additions and 12 deletions
+2 -2
View File
@@ -1,12 +1,12 @@
{ {
"name": "feishin", "name": "feishin",
"version": "0.8.0", "version": "0.8.1",
"lockfileVersion": 2, "lockfileVersion": 2,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "feishin", "name": "feishin",
"version": "0.8.0", "version": "0.8.1",
"hasInstallScript": true, "hasInstallScript": true,
"license": "GPL-3.0", "license": "GPL-3.0",
"dependencies": { "dependencies": {
+1 -1
View File
@@ -2,7 +2,7 @@
"name": "feishin", "name": "feishin",
"productName": "Feishin", "productName": "Feishin",
"description": "Feishin music server", "description": "Feishin music server",
"version": "0.8.0", "version": "0.8.1",
"scripts": { "scripts": {
"build": "concurrently \"npm run build:main\" \"npm run build:renderer\" \"npm run build:remote\"", "build": "concurrently \"npm run build:main\" \"npm run build:renderer\" \"npm run build:remote\"",
"build:main": "cross-env NODE_ENV=production TS_NODE_TRANSPILE_ONLY=true webpack --config ./.erb/configs/webpack.config.main.prod.ts", "build:main": "cross-env NODE_ENV=production TS_NODE_TRANSPILE_ONLY=true webpack --config ./.erb/configs/webpack.config.main.prod.ts",
+2 -2
View File
@@ -1,12 +1,12 @@
{ {
"name": "feishin", "name": "feishin",
"version": "0.8.0", "version": "0.8.1",
"lockfileVersion": 2, "lockfileVersion": 2,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "feishin", "name": "feishin",
"version": "0.8.0", "version": "0.8.1",
"hasInstallScript": true, "hasInstallScript": true,
"license": "GPL-3.0", "license": "GPL-3.0",
"dependencies": { "dependencies": {
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "feishin", "name": "feishin",
"version": "0.8.0", "version": "0.8.1",
"description": "", "description": "",
"main": "./dist/main/main.js", "main": "./dist/main/main.js",
"author": { "author": {
@@ -1,11 +1,13 @@
import { useCallback, useEffect, useRef } from 'react'; import { useCallback, useEffect, useRef } from 'react';
import { import {
useCurrentPlayer,
useCurrentStatus, useCurrentStatus,
useCurrentTime, useCurrentTime,
useLyricsSettings, useLyricsSettings,
usePlaybackType, usePlaybackType,
usePlayerData, usePlayerData,
useSeeked, useSeeked,
useSetCurrentTime,
} from '/@/renderer/store'; } from '/@/renderer/store';
import { PlaybackType, PlayerStatus } from '/@/renderer/types'; import { PlaybackType, PlayerStatus } from '/@/renderer/types';
import { LyricLine } from '/@/renderer/features/lyrics/lyric-line'; import { LyricLine } from '/@/renderer/features/lyrics/lyric-line';
@@ -13,9 +15,11 @@ import isElectron from 'is-electron';
import { PlayersRef } from '/@/renderer/features/player/ref/players-ref'; import { PlayersRef } from '/@/renderer/features/player/ref/players-ref';
import { FullLyricsMetadata, SynchronizedLyricsArray } from '/@/renderer/api/types'; import { FullLyricsMetadata, SynchronizedLyricsArray } from '/@/renderer/api/types';
import styled from 'styled-components'; import styled from 'styled-components';
import { useCenterControls } from '/@/renderer/features/player/hooks/use-center-controls'; import { useScrobble } from '/@/renderer/features/player/hooks/use-scrobble';
const mpvPlayer = isElectron() ? window.electron.mpvPlayer : null; const mpvPlayer = isElectron() ? window.electron.mpvPlayer : null;
const utils = isElectron() ? window.electron.utils : null;
const mpris = isElectron() && utils?.isLinux() ? window.electron.mpris : null;
const SynchronizedLyricsContainer = styled.div<{ $gap: number }>` const SynchronizedLyricsContainer = styled.div<{ $gap: number }>`
display: flex; display: flex;
@@ -66,7 +70,25 @@ export const SynchronizedLyrics = ({
const playerData = usePlayerData(); const playerData = usePlayerData();
const now = useCurrentTime(); const now = useCurrentTime();
const settings = useLyricsSettings(); const settings = useLyricsSettings();
const centerControls = useCenterControls({ playersRef }); const currentPlayer = useCurrentPlayer();
const currentPlayerRef =
currentPlayer === 1 ? playersRef.current?.player1 : playersRef.current?.player2;
const setCurrentTime = useSetCurrentTime();
const { handleScrobbleFromSeek } = useScrobble();
const handleSeek = useCallback(
(time: number) => {
if (playbackType === PlaybackType.LOCAL && mpvPlayer) {
mpvPlayer.seekTo(time);
} else {
setCurrentTime(time, true);
handleScrobbleFromSeek(time);
mpris?.updateSeek(time);
currentPlayerRef?.seekTo(time);
}
},
[currentPlayerRef, handleScrobbleFromSeek, playbackType, setCurrentTime],
);
const seeked = useSeeked(); const seeked = useSeeked();
@@ -349,7 +371,7 @@ export const SynchronizedLyrics = ({
fontSize={settings.fontSize} fontSize={settings.fontSize}
id={`lyric-${idx}`} id={`lyric-${idx}`}
text={text} text={text}
onClick={() => centerControls.handleSeekSlider(time / 1000)} onClick={() => handleSeek(time / 1000)}
/> />
))} ))}
</SynchronizedLyricsContainer> </SynchronizedLyricsContainer>
@@ -3,7 +3,7 @@ import { Playerbar } from '/@/renderer/features/player';
import { useGeneralSettings } from '/@/renderer/store/settings.store'; import { useGeneralSettings } from '/@/renderer/store/settings.store';
interface PlayerbarContainerProps { interface PlayerbarContainerProps {
drawerEffect: boolean; $drawerEffect: boolean;
} }
const PlayerbarContainer = styled.footer<PlayerbarContainerProps>` const PlayerbarContainer = styled.footer<PlayerbarContainerProps>`
@@ -13,7 +13,7 @@ const PlayerbarContainer = styled.footer<PlayerbarContainerProps>`
transition: background 0.5s; transition: background 0.5s;
${(props) => ${(props) =>
props.drawerEffect && props.$drawerEffect &&
` `
&:hover { &:hover {
background: var(--playerbar-bg-active); background: var(--playerbar-bg-active);
@@ -26,7 +26,7 @@ export const PlayerBar = () => {
return ( return (
<PlayerbarContainer <PlayerbarContainer
drawerEffect={playerbarOpenDrawer} $drawerEffect={playerbarOpenDrawer}
id="player-bar" id="player-bar"
> >
<Playerbar /> <Playerbar />