90 Commits

Author SHA1 Message Date
3d8df1eb48 fix(spotify): handle possible undefined access and refresh tokens 2025-10-16 13:45:32 -04:00
085f58e40f fix(ui): update device path labels to div elements 2025-10-16 13:45:24 -04:00
72bc53e495 refactor(ui): remove in-library status from spotify collection view 2025-10-16 13:36:16 -04:00
651d87af4c feat(spotify): hook existing download queue 2025-10-16 13:25:03 -04:00
df4967dd55 fix(ui): update track number styling and playlist track mapping 2025-10-16 12:37:00 -04:00
1bffafad44 feat(spotify): library caching 2025-10-16 11:27:08 -04:00
e19c25e94b refactor(auth): style OAuth callback and clean up logic 2025-10-15 13:07:03 -04:00
7f719bec11 feat(wip): add tauri-plugin-oauth and enable Spotify oauth 2025-10-15 12:53:51 -04:00
8d773f8188 feat(device): add device sync button 2025-10-15 11:45:52 -04:00
af4f8ce77f icons: ipod 2025-10-12 20:11:44 -04:00
a4f5bdd7a8 docs: changelog for first release v0.1.0 2025-10-05 16:52:03 -04:00
456f854863 refactor(ui): update albums interaction to double click for consistency 2025-10-05 01:40:50 -04:00
3118d969c6 refctor(ui): make tabs layout consistent with the rest of the app in settings and queue 2025-10-05 01:40:14 -04:00
17b6f7958e fix(queue): reset interrupted downloads and clear current job on load 2025-10-05 01:25:42 -04:00
cba49ce411 feat(library): add ipod-safe emoji encoding for playlist names 2025-10-05 01:07:22 -04:00
369ea9df02 feat(services): improve lyrics fetch progress and status updates 2025-10-05 00:49:51 -04:00
ca5f79b23a feat(settings): add button to open app data folder 2025-10-05 00:17:33 -04:00
8fb27b1acd feat(db): add tracks table and lyric scan caching 2025-10-05 00:17:19 -04:00
25ce2d676e feat(services): add LRCLIB service, scan utility, and context menus 2025-10-04 23:56:58 -04:00
38db835973 feat(ui): add reactive status bar with notifications 2025-10-04 23:36:09 -04:00
c30b205d9c feat(ui): add page decoration component for collection views 2025-10-04 22:25:07 -04:00
7b84bc32df fix(dl): add progress events for tracks from new downloader 2025-10-04 20:58:34 -04:00
96a01bdced refactor: move download/decryption to backend to fix UI freezing
Now implements streaming download+decryption entirely in Rust:
- Added reqwest/tokio/futures-util dependencies
- Created StreamingDecryptor for chunk-by-chunk decryption
- New download_and_decrypt_track command streams to disk directly
- Frontend simplified to single invoke() call
2025-10-04 20:53:59 -04:00
e4586f6497 fix: incorrect license in package 2025-10-04 20:46:01 -04:00
f4ef13ec0d fix(db): playlist username fallback handling 2025-10-04 20:38:59 -04:00
05acc3483c refactor(ui): remove disabled GitHub button from toolbar 2025-10-04 20:26:21 -04:00
efaa9f02b8 fix(tauri): update content security policy to include media sources 2025-10-04 16:23:05 -04:00
e535fdb4bc refactor(ui): housekeeping 2025-10-04 16:21:33 -04:00
8b3989e71f fix: lyrics not saved in new queue 2025-10-04 16:04:46 -04:00
9e75322a43 refactor(np): refactor layout 2025-10-04 15:49:24 -04:00
a602ee4bbd refactor(np): layout 2025-10-04 15:29:30 -04:00
9333e55095 refactor(np): now playing controls and icons 2025-10-04 15:19:24 -04:00
e5c8ce1c30 fix: volume slider 2025-10-04 15:05:06 -04:00
7c64818db1 refactor(np): add triangle volume slider to now playing panel 2025-10-04 15:01:19 -04:00
480aa5859b fix: path sanitization inconsistency in cover art lookup
Cover art lookup was constructing paths from raw metadata without
sanitization, causing "No such file or directory" errors for artists
with special characters (e.g. "Au/Ra" looked for "Au/Ra/" but files
were saved to "Au_Ra/"). Now uses sanitizeFilename() to match the
actual on-disk folder structure created during downloads.
2025-10-04 14:43:54 -04:00
26c465118b fix: missing cover art in playlist downloads
Playlist downloads were not fetching album cover URLs, causing both
embedded cover art and folder cover.jpg files to be skipped. Queue
manager now fetches album data on-demand (only when cover art is
enabled) to get cover URLs, reusing the same logic as individual track
downloads. Fetches track data first if albumId is missing.
2025-10-04 14:43:37 -04:00
fc2b987f63 feat(ui): add now playing panel and context menu for tracks 2025-10-03 20:59:37 -04:00
a7fc6e8d5d feat(ui): sequential playlist track numbering and banner panel 2025-10-03 20:12:03 -04:00
6fff93fe45 fix(dz): implement alternative track fallback for error 2002
("Track token has
no sufficient rights on requested media").

Previous behavior:
- Only tried format fallback (FLAC → MP3_320 → MP3_128)
- Used same track token for all format attempts
- Failed when error 2002 occurred even if alternative tracks existed

New behavior:
- When error 2002 occurs, fetches FALLBACK.SNG_ID and gets fresh token
- Retries with same format but different track ID
- Loops through all alternative track IDs before trying format fallback
- Only after exhausting alternatives does it fall back to lower quality formats
2025-10-03 11:43:11 -04:00
0ef56c3bed refactor(api): make audio tagging and decryption async to avoid UI blocking 2025-10-03 11:09:06 -04:00
14a5b50942 feat(dl): add download progress tracking and reporting 2025-10-03 10:29:34 -04:00
90053b67c5 fix(wip): add fallback format support for unavailable tracks
Add support for selecting a fallback audio format if the requested
track format is unavailable. Users can now choose to fall back
to MP3_320, MP3_128, or the highest available format, or opt to fail
if the requested format is not found. The queue manager and downloader
now fetch fresh track data just-in-time, handle dz fallback
parameters, and ensure the correct track ID is used for decryption.
Settings UI and store are updated to allow configuring the fallback format.
2025-10-03 10:28:56 -04:00
d74bf7e828 ui: update info notes for music and playlists folder settings 2025-10-03 00:36:47 -04:00
820f744b96 fix: app name casing in tauri configuration 2025-10-03 00:21:36 -04:00
0e1837f0f2 fix: csp for bundled svgs in build 2025-10-03 00:18:00 -04:00
1e165e5a7e ci: add workflows 2025-10-02 23:30:31 -04:00
0bc0e70274 feat(playlist): use first album cover art for playlists
Add logic to find and use album cover art as a fallback when playlist
cover art is missing, both for local and online playlists. Update
database schema and upsert logic to store album picture URLs for
online tracks. Improve UI to display fallback cover art when needed.
2025-10-02 22:20:06 -04:00
8e8afb0f66 fix: use rust blowfish instead of node
The JavaScript blowfish-node library had a critical bug where it would
sometimes return 2047 bytes instead of 2048 during decryption, causing
byte alignment issues that corrupted FLAC audio at specific intervals
(~every 32/82 seconds).

Changes:
- Add Rust dependencies: blowfish, md5, byteorder
- Implement new module in Rust with proper Blowfish CBC
- Add decryption Tauri command
- Update frontend to call Rust decryption instead of JavaScript
- Remove buggy JavaScript blowfish implementation
- Update decryption algorithm (6144-byte windows)
2025-10-02 20:26:14 -04:00
e1e7817c71 feat(dz): add playlist download, existence check, and improved queue handling
Add ability to download entire playlists as M3U8 files, with UI
integration and per-track download actions. Implement track existence
checking to avoid duplicate downloads, respecting the overwrite setting.
Improve queue manager to sync downloaded tracks to the library
incrementally. Refactor playlist parsing and metadata reading to use the
Rust backend for better performance and accuracy. Update UI to reflect
track existence and download status in playlist views.

BREAKING CHANGE: Deezer playlist and track download logic now relies on
Rust backend for metadata and new existence checking; some APIs and
internal behaviors have changed.
2025-10-02 19:26:12 -04:00
40e72126aa feat(dz): add playlist caching and playlist view UI
Introduce database schema and types for caching online playlist tracks. Add functions to upsert and retrieve playlist tracks
from the cache. Implement a new Svelte page for viewing individual
playlists, including favorite tracks, with UI for track listing and
playlist info. Update the main service page to support
double-click navigation to playlist details.
2025-10-02 14:12:35 -04:00