mirror of
https://github.com/jeffvli/feishin.git
synced 2026-05-07 12:30:12 +02:00
Compare commits
7 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 7d29a692ef | |||
| 3f9eb446f7 | |||
| d8f7b49ab6 | |||
| 35e70a3eff | |||
| ef9c16e940 | |||
| 0b39c35132 | |||
| 9f5b4e5410 |
@@ -24,11 +24,9 @@ jobs:
|
||||
password: ${{ secrets.GITHUB_TOKEN }}
|
||||
- name: Extract metadata (tags, labels) for Docker
|
||||
id: meta
|
||||
uses: docker/metadata-action@9ec57ed1fcdbf14dcef7dfbe97b2010124a938b7
|
||||
uses: docker/metadata-action@v5
|
||||
with:
|
||||
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
|
||||
tags: |
|
||||
type=raw,value=latest,enable={{is_default_branch}}
|
||||
- name: Set up QEMU
|
||||
uses: docker/setup-qemu-action@v3
|
||||
- name: Setup Docker buildx
|
||||
@@ -41,6 +39,6 @@ jobs:
|
||||
tags: ${{ steps.meta.outputs.tags }}
|
||||
labels: ${{ steps.meta.outputs.labels }}
|
||||
platforms: |
|
||||
linux/amd64
|
||||
linux/arm/v7
|
||||
linux/arm64/v8
|
||||
linux/amd64
|
||||
linux/arm/v7
|
||||
linux/arm64/v8
|
||||
|
||||
+1
-3
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "feishin",
|
||||
"version": "0.15.0",
|
||||
"version": "0.15.1",
|
||||
"description": "A modern self-hosted music player.",
|
||||
"keywords": [
|
||||
"subsonic",
|
||||
@@ -170,9 +170,7 @@
|
||||
},
|
||||
"pnpm": {
|
||||
"onlyBuiltDependencies": [
|
||||
"abstract-socket",
|
||||
"electron",
|
||||
"electron-winstaller",
|
||||
"esbuild"
|
||||
]
|
||||
},
|
||||
|
||||
@@ -66,7 +66,7 @@ const formatArtists = (artists: null | RelatedArtist[] | undefined) =>
|
||||
{artist.id ? (
|
||||
<Text
|
||||
component={Link}
|
||||
fw={500}
|
||||
fw={700}
|
||||
isLink
|
||||
overflow="visible"
|
||||
size="md"
|
||||
@@ -106,7 +106,7 @@ const FormatGenre = (item: Album | AlbumArtist | Playlist | Song) => {
|
||||
{index > 0 && <Separator />}
|
||||
<Text
|
||||
component={Link}
|
||||
fw={500}
|
||||
fw={700}
|
||||
isLink
|
||||
overflow="visible"
|
||||
size="md"
|
||||
@@ -260,7 +260,7 @@ const SongPropertyMapping: ItemDetailRow<Song>[] = [
|
||||
song.album && (
|
||||
<Text
|
||||
component={Link}
|
||||
fw={500}
|
||||
fw={700}
|
||||
isLink
|
||||
overflow="visible"
|
||||
size="md"
|
||||
|
||||
@@ -6,16 +6,16 @@
|
||||
transition:
|
||||
opacity 0.3s ease-in-out,
|
||||
transform 0.3s ease-in-out;
|
||||
|
||||
&.active {
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
&.unsynchronized {
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
&.synchronized {
|
||||
cursor: pointer;
|
||||
}
|
||||
}
|
||||
|
||||
.lyric-line:global(.active) {
|
||||
opacity: 1 !important;
|
||||
}
|
||||
|
||||
.lyric-line:global(.unsynchronized) {
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
.lyric-line:global(.synchronized) {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
@@ -1,3 +0,0 @@
|
||||
.active {
|
||||
opacity: 1;
|
||||
}
|
||||
@@ -3,7 +3,6 @@ import isElectron from 'is-electron';
|
||||
import { useCallback, useEffect, useRef } from 'react';
|
||||
|
||||
import styles from './synchronized-lyrics.module.css';
|
||||
import './synchronized-lyrics.css';
|
||||
|
||||
import { LyricLine } from '/@/renderer/features/lyrics/lyric-line';
|
||||
import { useScrobble } from '/@/renderer/features/player/hooks/use-scrobble';
|
||||
|
||||
@@ -63,6 +63,9 @@ export const PlayButton = ({ isPaused, ...props }: PlayButtonProps) => {
|
||||
<ActionIcon
|
||||
className={styles.main}
|
||||
icon={isPaused ? 'mediaPlay' : 'mediaPause'}
|
||||
iconProps={{
|
||||
size: 'lg',
|
||||
}}
|
||||
tooltip={
|
||||
isPaused
|
||||
? t('player.play', { postProcess: 'sentenceCase' })
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import AudioMotionAnalyzer from 'audiomotion-analyzer';
|
||||
import { createRef, useCallback, useEffect, useState } from 'react';
|
||||
import { createRef, useEffect, useState } from 'react';
|
||||
|
||||
import styles from './visualizer.module.css';
|
||||
|
||||
@@ -12,8 +12,6 @@ export const Visualizer = () => {
|
||||
const accent = useSettingsStore((store) => store.general.accent);
|
||||
const [motion, setMotion] = useState<AudioMotionAnalyzer>();
|
||||
|
||||
const [, setLength] = useState(500);
|
||||
|
||||
useEffect(() => {
|
||||
const { context, gain } = webAudio || {};
|
||||
if (gain && context && canvasRef.current && !motion) {
|
||||
@@ -35,28 +33,6 @@ export const Visualizer = () => {
|
||||
return () => {};
|
||||
}, [accent, canvasRef, motion, webAudio]);
|
||||
|
||||
const resize = useCallback(() => {
|
||||
const body = document.querySelector('.full-screen-player-queue-container');
|
||||
const header = document.querySelector('.full-screen-player-queue-header');
|
||||
|
||||
if (body && header) {
|
||||
const width = body.clientWidth - 30;
|
||||
const height = body.clientHeight - header.clientHeight - 30;
|
||||
|
||||
setLength(Math.min(width, height));
|
||||
}
|
||||
}, []);
|
||||
|
||||
useEffect(() => {
|
||||
resize();
|
||||
|
||||
window.addEventListener('resize', resize);
|
||||
|
||||
return () => {
|
||||
window.removeEventListener('resize', resize);
|
||||
};
|
||||
}, [resize]);
|
||||
|
||||
return (
|
||||
<div
|
||||
className={styles.container}
|
||||
|
||||
Reference in New Issue
Block a user