mirror of
https://github.com/jeffvli/feishin.git
synced 2026-05-07 12:30:12 +02:00
Compare commits
3 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 6b0c57998b | |||
| 6587e9cac8 | |||
| 2e3c69e61c |
Generated
+2
-2
@@ -1,12 +1,12 @@
|
||||
{
|
||||
"name": "feishin",
|
||||
"version": "0.8.0",
|
||||
"version": "0.8.1",
|
||||
"lockfileVersion": 2,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "feishin",
|
||||
"version": "0.8.0",
|
||||
"version": "0.8.1",
|
||||
"hasInstallScript": true,
|
||||
"license": "GPL-3.0",
|
||||
"dependencies": {
|
||||
|
||||
+1
-1
@@ -2,7 +2,7 @@
|
||||
"name": "feishin",
|
||||
"productName": "Feishin",
|
||||
"description": "Feishin music server",
|
||||
"version": "0.8.0",
|
||||
"version": "0.8.1",
|
||||
"scripts": {
|
||||
"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",
|
||||
|
||||
Generated
+2
-2
@@ -1,12 +1,12 @@
|
||||
{
|
||||
"name": "feishin",
|
||||
"version": "0.8.0",
|
||||
"version": "0.8.1",
|
||||
"lockfileVersion": 2,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "feishin",
|
||||
"version": "0.8.0",
|
||||
"version": "0.8.1",
|
||||
"hasInstallScript": true,
|
||||
"license": "GPL-3.0",
|
||||
"dependencies": {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "feishin",
|
||||
"version": "0.8.0",
|
||||
"version": "0.8.1",
|
||||
"description": "",
|
||||
"main": "./dist/main/main.js",
|
||||
"author": {
|
||||
|
||||
@@ -1,11 +1,13 @@
|
||||
import { useCallback, useEffect, useRef } from 'react';
|
||||
import {
|
||||
useCurrentPlayer,
|
||||
useCurrentStatus,
|
||||
useCurrentTime,
|
||||
useLyricsSettings,
|
||||
usePlaybackType,
|
||||
usePlayerData,
|
||||
useSeeked,
|
||||
useSetCurrentTime,
|
||||
} from '/@/renderer/store';
|
||||
import { PlaybackType, PlayerStatus } from '/@/renderer/types';
|
||||
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 { FullLyricsMetadata, SynchronizedLyricsArray } from '/@/renderer/api/types';
|
||||
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 utils = isElectron() ? window.electron.utils : null;
|
||||
const mpris = isElectron() && utils?.isLinux() ? window.electron.mpris : null;
|
||||
|
||||
const SynchronizedLyricsContainer = styled.div<{ $gap: number }>`
|
||||
display: flex;
|
||||
@@ -66,7 +70,25 @@ export const SynchronizedLyrics = ({
|
||||
const playerData = usePlayerData();
|
||||
const now = useCurrentTime();
|
||||
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();
|
||||
|
||||
@@ -349,7 +371,7 @@ export const SynchronizedLyrics = ({
|
||||
fontSize={settings.fontSize}
|
||||
id={`lyric-${idx}`}
|
||||
text={text}
|
||||
onClick={() => centerControls.handleSeekSlider(time / 1000)}
|
||||
onClick={() => handleSeek(time / 1000)}
|
||||
/>
|
||||
))}
|
||||
</SynchronizedLyricsContainer>
|
||||
|
||||
@@ -3,7 +3,7 @@ import { Playerbar } from '/@/renderer/features/player';
|
||||
import { useGeneralSettings } from '/@/renderer/store/settings.store';
|
||||
|
||||
interface PlayerbarContainerProps {
|
||||
drawerEffect: boolean;
|
||||
$drawerEffect: boolean;
|
||||
}
|
||||
|
||||
const PlayerbarContainer = styled.footer<PlayerbarContainerProps>`
|
||||
@@ -13,7 +13,7 @@ const PlayerbarContainer = styled.footer<PlayerbarContainerProps>`
|
||||
transition: background 0.5s;
|
||||
|
||||
${(props) =>
|
||||
props.drawerEffect &&
|
||||
props.$drawerEffect &&
|
||||
`
|
||||
&:hover {
|
||||
background: var(--playerbar-bg-active);
|
||||
@@ -26,7 +26,7 @@ export const PlayerBar = () => {
|
||||
|
||||
return (
|
||||
<PlayerbarContainer
|
||||
drawerEffect={playerbarOpenDrawer}
|
||||
$drawerEffect={playerbarOpenDrawer}
|
||||
id="player-bar"
|
||||
>
|
||||
<Playerbar />
|
||||
|
||||
Reference in New Issue
Block a user