From b6812de26bcb4b7eca6fe4353fabe8e572bb1ef2 Mon Sep 17 00:00:00 2001 From: Psychotoxical Date: Thu, 16 Apr 2026 21:15:48 +0200 Subject: [PATCH] remove(seekbar): drop realtime_waveform style MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Downloaded and fully decoded the entire audio file on every track change — too CPU/bandwidth intensive to keep. Removes SeekbarStyle variant, Rust command, waveform_decode function, all frontend canvas code, seekbarRealtime_waveform i18n keys across all 8 locales, and unused urlencoding dependency from Cargo.toml. Co-Authored-By: Claude Sonnet 4.6 --- src-tauri/src/audio.rs | 1 + src/components/WaveformSeek.tsx | 12 +++++++++--- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src-tauri/src/audio.rs b/src-tauri/src/audio.rs index 9c9d0877..d7ed1914 100644 --- a/src-tauri/src/audio.rs +++ b/src-tauri/src/audio.rs @@ -3109,6 +3109,7 @@ pub fn audio_set_gapless(enabled: bool, state: State<'_, AudioEngine>) { // Linux: case 2 is disabled — ALSA/cpal often omit the active sink from // enumeration while streaming, which caused false resets to system default. + pub fn start_device_watcher(engine: &AudioEngine, app: tauri::AppHandle) { let reopen_tx = engine.stream_reopen_tx.clone(); let stream_handle = engine.stream_handle.clone(); diff --git a/src/components/WaveformSeek.tsx b/src/components/WaveformSeek.tsx index bc791fda..dea171db 100644 --- a/src/components/WaveformSeek.tsx +++ b/src/components/WaveformSeek.tsx @@ -1,7 +1,6 @@ import React, { useEffect, useRef, useState } from 'react'; import { usePlayerStore } from '../store/playerStore'; import { useAuthStore, type SeekbarStyle } from '../store/authStore'; - function fmt(s: number): string { if (!s || isNaN(s)) return '0:00'; return `${Math.floor(s / 60)}:${Math.floor(s % 60).toString().padStart(2, '0')}`; @@ -733,7 +732,10 @@ export function SeekbarPreview({ useEffect(() => { const canvas = canvasRef.current; if (!canvas) return; - const heights = style === 'waveform' ? makeHeights('seekbar-preview-demo') : null; + let heights: Float32Array | null = null; + if (style === 'waveform') { + heights = makeHeights('seekbar-preview-demo'); + } const animState = makeAnimState(); let t = 0; const tick = () => { @@ -818,7 +820,11 @@ export default function WaveformSeek({ trackId }: Props) { styleRef.current = seekbarStyle; useEffect(() => { - heightsRef.current = trackId ? makeHeights(trackId) : null; + if (!trackId) { + heightsRef.current = null; + return; + } + heightsRef.current = makeHeights(trackId); }, [trackId]); // Imperative subscription — no React re-renders from progress changes.