-
-
Notifications
You must be signed in to change notification settings - Fork 0
feat: Replace Python/Tkinter with Tauri/Rust implementation #17
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
…ge (task-152) Replace manual localStorage read/write patterns across ui.js, sidebar.js, and library-browser.js with Alpine.js's official $persist plugin. Changes: - Install and register @alpinejs/persist plugin - Refactor ui.js: sidebarOpen, sidebarWidth, libraryViewMode, theme now use $persist - Refactor sidebar.js: activeSection, isCollapsed now use $persist - Refactor library-browser.js: columnVisibility, columnOrder, _persistedWidths use $persist - Add migration helpers to preserve existing user preferences - Update Playwright tests with helper functions for new localStorage keys - Add task npm:test:e2e and npm:test:e2e:ui commands to taskfiles/npm.yml Note: queue.js loop/shuffle state remains session-only (not persisted). Net reduction: ~64 lines of boilerplate code removed.
Supports: task npm:test:e2e -- webkit|chromium|firefox Uses case statement to detect browser name and pass --project flag
- Playwright E2E tests with artifact upload - Python backend tests with pytest - Deno and Python linting - Rust build verification with caching
…s (task-160) - Tag playback.spec.js (3 suites) and queue.spec.js (7 suites) with @tauri - Add E2E_MODE env var to playwright.config.js: - fast (default): WebKit only, skip @tauri tests (~53s) - full: All browsers, skip @tauri tests - tauri: All browsers, include @tauri tests - Simplify taskfiles/npm.yml test:e2e to use E2E_MODE Test counts by mode: - fast: 144 tests (webkit) - full: 432 tests (all browsers) - tauri: 552 tests (all browsers + @tauri)
…tors and API mocking - Add data-testid attributes to sidebar: section buttons, search input/clear, collapse toggle - Refactor sidebar.spec.js to use data-testid selectors instead of brittle 'aside button' positional selectors - Replace waitForTimeout() with expect.poll() for deterministic store state assertions - Mock api.queue.get() in stores.spec.js to prevent race condition with async queue.init() Fixes tests: - should navigate between sections - should highlight active section - should show only icons when collapsed - should add items to queue
- Create tests/fixtures/mock-playlists.js with shared state management
- Refactor library.spec.js and sidebar.spec.js task-150 tests
- Replace direct Alpine store injection with API route mocking
- Update index.html data-testid to use sidebar-playlist-{id} prefix
- All 115 WebKit tests pass (24s)
…task-161) - Add selectedPlaylistIds Set and selectionAnchorIndex state - Cmd/Ctrl-click toggles selection without navigating - Shift-click selects contiguous range from anchor - Delete/Backspace triggers confirmation dialog when list focused - Batch delete with Tauri dialog fallback to browser confirm - Ignore Delete/Backspace while inline rename input focused - Add 10 Playwright tests covering all acceptance criteria
- Change selectedPlaylistIds from Set to array for Alpine reactivity - Context menu delete now respects existing multi-selection - Selection highlight uses #DFDFDF background instead of ring outline - Broaden Delete/Backspace detection for macOS compatibility - Guard click handlers to only respond to left mouse button
- Add themePreset to ui.js store with Alpine $persist - Add setThemePreset() and applyThemePreset() methods - Create Metro Teal CSS variable overrides in styles.css - Metro Teal forces dark mode + custom color palette - Add 4 Playwright tests for preset switching - Colors based on docs/images/mt_repeat_once.png reference
- Add dependency on task-162 (Metro Teal theme) - Document implementation phases and section content - Define user-exposed vs internal settings keys for reset
- Sidebar: adjust collapsed width to 70px, center library icons, enlarge icons 20% when collapsed - Footer: increase height to 71px, enlarge transport controls 15%, enlarge action buttons 15% - Footer: make track info always reserve space so progress bar stays static - Icons: add accent color (primary) hover state for sidebar icons, settings cog, collapse button - Metro Teal: additional CSS refinements for footer, borders, and row styling - Settings menu: complete implementation with all sections and Tauri commands
- Add toggleSettings() method to ui store that returns to previous view - Track _previousView to restore correct view when exiting settings - Cmd-, now toggles settings (open if closed, close if open) - Escape key closes settings and returns to previous view
- Install vitest, fast-check, @fast-check/vitest as dev dependencies - Create vitest.config.js for property test configuration - Add npm test/test:watch scripts and task npm:test/test:watch commands - Create 10 property-based tests for queue store invariants: - Index bounds (4 tests) - Permutation preservation under shuffle/unshuffle (4 tests) - Operation sequence invariants (2 tests) - Fix bug in toggleShuffle(): currentIndex was set to 0 on empty queue instead of -1 (discovered by fast-check counterexample) Closes task-163
- Fix white underline on selected tracks by matching border color to selection bg - Fix horizontal scrollbar on track click by using box-shadow instead of border-l - Change transition-all to transition-colors to avoid layout transitions - Add teal progress bar fill and tracking ball for metro-teal theme - Set consistent #1E1E1E background for all panels (sidebar, header, queue) - Remove active column header background overlay in metro-teal - Restore alternating row colors for track list
- Configure titleBarStyle: Overlay and hiddenTitle in tauri.conf.json - Add fixed drag region div with data-tauri-drag-region attribute - Implement manual drag handler using appWindow.startDragging() API - Add required permissions: core:window:allow-start-dragging, allow-toggle-maximize - Style drag region with theme-aware background colors (#1E1E1E for dark, white for light) - Add padding-left for macOS traffic light buttons - Support double-click to toggle maximize
- Create task-164 for implementing benchmark suite with targets: - Initial import ~41k tracks: <5 min (stretch <60s) - No-op rescan: <10s - Incremental rescan: proportional to changes - Update task-012 to depend on task-164 (benchmark before optimize) - Add comprehensive docs/benchmark.md covering: - Current architecture analysis and bottlenecks - Required 2-phase scanning with fingerprint storage - Synthetic dataset strategies (shape-only, clone-based, pathological) - Benchmark scenarios and tooling design - Taskfile integration plan - Safety guarantees and result interpretation
Adds cross-platform file revelation functionality to the library context menu. When users right-click a track and select "Show in Finder" (or "Show in Explorer" on Windows), the system file manager opens with the track's file selected. Changes: - Create new fs.rs module with show_in_folder Tauri command - Support macOS (Finder), Windows (Explorer), and Linux (various file managers) - Verify file exists before attempting to reveal it - Frontend already had the correct implementation, now wired to working backend Resolves the non-functional "Show in Finder" context menu option that previously did nothing when clicked. Co-Authored-By: Claude Sonnet 4.5 <[email protected]>
Switches based on theme
Installing cargo-tarpaulin takes ~2+ minutes each run. By caching ~/.cargo/bin/ and checking if the binary exists, we skip reinstallation on subsequent runs. Expected improvement: ~2m savings on cache hits (from 4m5s -> ~2m)
Reduce Playwright test execution time from ~10m to target ~3-5m: Performance optimizations: - Increase workers from 1 (default 50% of 2 cores) to 4 in CI - Reduce test timeout from 60s to 30s - Reduce retries from 2 to 1 (maxFailures: 5 provides early exit) - Reduce action timeout from 10s to 5s - Reduce navigation timeout from 30s to 15s Expected improvements: - 4 workers = ~4x parallelization vs 1 worker - Fewer retries = less redundant test execution - Tighter timeouts = faster failure detection Local tests unaffected (workers: undefined uses default, retries: 0)
Increase actionTimeout from 5s to 8s and navigationTimeout from 15s to 20s to prevent timeout failures in slower CI environment while still maintaining performance gains from other optimizations (4 workers, reduced retries). Test results (job 61443621446): - 417 passed, 1 failed (pre-existing flaky test), 1 flaky (timeout on first run, passed on retry) - Total time: 9.7m (down from ~10m7s) - One test needed >5s for click action in CI environment Balance between speed and reliability achieved with 8s actionTimeout.
Add compile-time optimizations for faster local development: - Enable split-debuginfo=unpacked for 30-70% faster macOS debug builds - Optimize proc-macros at level 3 for 5-15% build time improvement - Trim tokio features from "full" to only used features, reducing compilation of unused net, process, signal, and other subsystems Tokio features reduced to actual usage: - rt-multi-thread (runtime with threading) - macros (select!, #[tokio::test]) - sync (mpsc, oneshot, Mutex) - time (sleep, interval) - fs (async file operations) - io-util (AsyncWriteExt traits) Expected impact: 30-70% faster incremental builds on macOS, 2-5% reduction in compilation time from tokio optimization. See src-tauri/dependency-audit.md for detailed analysis. Co-Authored-By: Claude Sonnet 4.5 <[email protected]>
Add CARGO_INCREMENTAL=0 to CI Rust jobs (rust-tests, build). Incremental compilation adds overhead to clean builds in CI where caching makes it unnecessary. Disabling it results in 5-10% faster clean build times. Also adds CARGO_TERM_COLOR=always for better log readability. Co-Authored-By: Claude Sonnet 4.5 <[email protected]>
Add two performance-related task improvements: 1. cargo-nextest integration: - Update test task to use cargo-nextest if available - Falls back to cargo test if nextest not installed - nextest provides 30-60% faster test execution via parallelism 2. build:timings task: - Runs cargo build --timings to analyze bottlenecks - Auto-opens HTML report on macOS/Linux - Helps identify slow dependencies and compilation units Usage: task test # Uses nextest if available task build:timings # Analyze build performance Co-Authored-By: Claude Sonnet 4.5 <[email protected]>
Document new development workflows for faster iteration: 1. cargo check command: - 2-3x faster than cargo build for quick validation - Checks syntax/types without generating binary - Useful during active development 2. build:timings task: - Analyzes build performance bottlenecks - Opens HTML report showing compilation timeline These additions support the Rust build performance optimizations implemented in task-210. Co-Authored-By: Claude Sonnet 4.5 <[email protected]>
Document findings from Phase 3 dependency optimization audit: - Tokio features analysis and justification for trimming - Duplicate dependency report (35+ duplicates identified) - Most duplicates are transitive and expected during ecosystem transitions - Provides baseline for future dependency cleanup This audit supports the optimization decisions made in task-210 and serves as reference for future maintenance work. Co-Authored-By: Claude Sonnet 4.5 <[email protected]>
Add comprehensive path filters to only trigger CI when files that affect functionality change: Included paths: - Rust source (*.rs) and config (Cargo.toml/lock, build.rs) - JavaScript/TypeScript (*.js, *.ts, *.jsx, *.tsx, *.mjs) - Frontend assets (*.html, *.css) - Node.js config (package.json/lock, tsconfig, vite/vitest/playwright) - Tauri config (tauri.conf.json) - Task runner (taskfile.yml, taskfiles/**/*.yml) - Test files (tests/**/* and **/tests/**/*) - CI workflow itself (.github/workflows/test.yml) Excluded (won't trigger CI): - Documentation files (*.md, AGENTS.md, CLAUDE.md) - Backlog tasks (backlog/**/*.md) - Dependency audit reports - Other non-functional changes This saves CI compute resources by skipping test runs when only documentation or project management files change. Co-Authored-By: Claude Sonnet 4.5 <[email protected]>
Blacksmith Account SuspendedThis Blacksmith account requires additional verification. Jobs targeting Blacksmith runners will not be picked up and will remain queued until they timeout. Please contact Blacksmith Support for assistance. |
4 similar comments
Blacksmith Account SuspendedThis Blacksmith account requires additional verification. Jobs targeting Blacksmith runners will not be picked up and will remain queued until they timeout. Please contact Blacksmith Support for assistance. |
Blacksmith Account SuspendedThis Blacksmith account requires additional verification. Jobs targeting Blacksmith runners will not be picked up and will remain queued until they timeout. Please contact Blacksmith Support for assistance. |
Blacksmith Account SuspendedThis Blacksmith account requires additional verification. Jobs targeting Blacksmith runners will not be picked up and will remain queued until they timeout. Please contact Blacksmith Support for assistance. |
Blacksmith Account SuspendedThis Blacksmith account requires additional verification. Jobs targeting Blacksmith runners will not be picked up and will remain queued until they timeout. Please contact Blacksmith Support for assistance. |
Remove rust-cache from rust-tests and build jobs running on self-hosted runners. Cache restoration (~1 min) was slower than the actual test execution (~30s), causing net slowdown. Self-hosted runners maintain persistent target/ directories between runs, making Cargo's incremental compilation naturally fast without needing GitHub's cache infrastructure. Co-Authored-By: Claude Sonnet 4.5 <[email protected]>
Remove npm cache from playwright-tests and build jobs running on self-hosted runners. Cache restoration (~45s for 550MB) adds overhead without benefit since node_modules persists between runs. Keep npm cache in vitest-tests (ubuntu-latest) where it's beneficial. Co-Authored-By: Claude Sonnet 4.5 <[email protected]>
- Reorder jobs: build now runs before rust-tests - Add needs: build to rust-tests to enforce dependency - Reduce rust-tests timeout from 20m to 5m (finishes in ~45s) - Build already runs cargo check, so tests can reuse compiled artifacts Co-Authored-By: Claude Sonnet 4.5 <[email protected]>
Change CARGO_INCREMENTAL from 0 to 1 for build and rust-tests jobs. Self-hosted runners have persistent target/ directories, so incremental compilation can reuse artifacts from previous runs for faster builds. Co-Authored-By: Claude Sonnet 4.5 <[email protected]>
Remove tauri-migration from push triggers to prevent double execution. Now workflow runs once per PR via pull_request event only, not both push and pull_request. - push: only triggers on main branch - pull_request: triggers for PRs targeting main Co-Authored-By: Claude Sonnet 4.5 <[email protected]>
Summary
Complete rewrite of the mt music player from Python/Tkinter to a modern Tauri architecture:
Key Benefits
Test Coverage
Known Issues (Non-blocking)
Test plan
task test- All Rust + Vitest tests passtask test:e2e- All Playwright E2E tests passtask build- Application builds successfully🤖 Generated with Claude Code