Commit Graph
931 Commits
Author SHA1 Message Date
zarzet 97b87472fe feat(metadata): manual MusicBrainz lookup in the tag editor
The Go MusicBrainz genre and album-artist ISRC lookups only ran
automatically at download time. The tag editor's auto-fill section
gains a Fetch from MusicBrainz button that bridges both exports in one
channel call (sparing the 1 req/s budget) and fills the fields as
editable suggestions; nothing is written until Save.
2026-07-26 19:21:32 +07:00
zarzet 11fb4365a2 feat(queue): offer one-tap retry when connectivity returns
The connectivity listener now stays alive while network-failed items
remain and, on reconnect, shows a debounced snackbar counting them
with a Retry action wired to retryAllFailed scoped to network
failures. Also regenerates localizations for the recent feature
strings.
2026-07-26 19:00:49 +07:00
zarzet 04a71d0211 refactor: remove orphaned bridge, database, and queue helpers 2026-07-26 18:43:53 +07:00
zarzet d4f0b84615 feat(track): add Open on... platform links sheet
Track options gain an Open on... entry listing every streaming platform
song.link resolves for the track, served by a new generic
GetTrackPlatformLinks with its own memory cache beside the availability
cache (same request budget). The sheet is data-driven from the platform
map so the app core stays service-agnostic. Completes the bridge
wrappers already landed in 901fa34d; also carries the en strings for
the duplicate review sheet landing next.
2026-07-26 18:42:41 +07:00
zarzet 984beb92e8 feat(l10n): merge Crowdin updates, enable Korean at 98%
Merge origin/l10n_main (PR #428) with a per-key three-way resolution:
Crowdin values win only where main did not change the key since the
last sync, so the unused-key removal, store->repo wording sweep, and
ICU plural fixes survive. Korean is restored at 98% completion and
mapped again in crowdin.yml and both language pickers; ar/hi/nl/zh-CN/
zh-TW stay dropped (37% and below).
2026-07-26 18:12:25 +07:00
zarzet c497449549 feat(library): M3U8 playlist import and export
The playlist import picker now also accepts .m3u/.m3u8; EXTINF entries
feed the same Deezer enrichment pipeline as CSV. Collection screens
(wishlist, loved, playlists) gain an export action that resolves each
track to its local file, writes SAF entries relative to the download
tree root so external players and DAP copies resolve them, skips
tracks without a file, and shares the .m3u8 via the system sheet.
2026-07-26 17:56:38 +07:00
zarzet c9470ef751 feat(queue): add download-next action on queued items
Queued rows get a skip-next button that reinserts the item ahead of all
other queued items, so the next free slot picks it up. During an active
native worker run the current batch keeps its order; the new order
applies from the next run.
2026-07-26 17:39:28 +07:00
Zarz Eleutherius 9b35c6dc42 New translations app_en.arb (Korean)
[ci skip]
2026-07-26 05:38:10 +07:00
Zarz Eleutherius 1c95109b7b New translations app_en.arb (Korean)
[ci skip]
2026-07-26 04:15:24 +07:00
Zarz Eleutherius d4c38b7550 New translations app_en.arb (Korean)
[ci skip]
2026-07-25 18:41:06 +07:00
Zarz Eleutherius c681b891eb New translations app_en.arb (Korean)
[ci skip]
2026-07-25 17:44:57 +07:00
Zarz Eleutherius c19477a4f4 New translations app_en.arb (Korean)
[ci skip]
2026-07-25 16:41:28 +07:00
Zarz Eleutherius a7069a8f91 New translations app_en.arb (Korean)
[ci skip]
2026-07-25 15:34:01 +07:00
Zarz Eleutherius bb127d1cc2 New translations app_en.arb (French)
[ci skip]
2026-07-25 14:00:34 +07:00
Zarz Eleutherius 927ca6e4ca New translations app_en.arb (Korean)
[ci skip]
2026-07-25 14:00:32 +07:00
Zarz Eleutherius 66cf998fb2 New translations app_en.arb (Korean)
[ci skip]
2026-07-25 12:55:14 +07:00
Zarz Eleutherius 37db310157 New translations app_en.arb (Hindi)
[ci skip]
2026-07-25 10:13:00 +07:00
Zarz Eleutherius 13fe8b4593 New translations app_en.arb (Chinese Traditional)
[ci skip]
2026-07-25 10:12:58 +07:00
Zarz Eleutherius a5f96b57e6 New translations app_en.arb (Chinese Simplified)
[ci skip]
2026-07-25 10:12:56 +07:00
Zarz Eleutherius f0a7a043ec New translations app_en.arb (Ukrainian)
[ci skip]
2026-07-25 10:12:55 +07:00
Zarz Eleutherius 58249d6a13 New translations app_en.arb (Turkish)
[ci skip]
2026-07-25 10:12:53 +07:00
Zarz Eleutherius d9dc7ddf3a New translations app_en.arb (Russian)
[ci skip]
2026-07-25 10:12:52 +07:00
Zarz Eleutherius cc1ad1552c New translations app_en.arb (Dutch)
[ci skip]
2026-07-25 10:12:50 +07:00
Zarz Eleutherius a3feb39e20 New translations app_en.arb (Japanese)
[ci skip]
2026-07-25 10:12:49 +07:00
Zarz Eleutherius 7676579659 New translations app_en.arb (German)
[ci skip]
2026-07-25 10:12:47 +07:00
Zarz Eleutherius bcb3729fa9 New translations app_en.arb (Arabic)
[ci skip]
2026-07-25 10:12:46 +07:00
Zarz Eleutherius 49a824c171 New translations app_en.arb (Spanish)
[ci skip]
2026-07-25 10:12:44 +07:00
Zarz Eleutherius 2a050f113b New translations app_en.arb (French)
[ci skip]
2026-07-25 10:12:43 +07:00
Zarz Eleutherius e4b99dd44b New translations app_en.arb (Indonesian)
[ci skip]
2026-07-25 10:12:41 +07:00
Zarz Eleutherius 18584ab81f New translations app_en.arb (Portuguese)
[ci skip]
2026-07-25 10:12:39 +07:00
Zarz Eleutherius a4f7360336 New translations app_en.arb (Korean)
[ci skip]
2026-07-25 10:12:38 +07:00
zarzet 4713be02de chore(settings): graduate native download worker 2026-07-24 12:23:36 +07:00
zarzet 480a96bd0e fix(queue): clarify and coalesce verification progress 2026-07-23 09:57:02 +07:00
Zarz Eleutherius 16b44d2d3a New translations app_en.arb (Indonesian)
[ci skip]
2026-07-20 16:58:51 +07:00
Zarz Eleutherius 71c08501e7 New translations app_en.arb (Portuguese)
[ci skip]
2026-07-20 04:45:34 +07:00
Zarz Eleutherius 297cddf31d New translations app_en.arb (Portuguese)
[ci skip]
2026-07-20 03:46:10 +07:00
Zarz Eleutherius 57eef4311f New translations app_en.arb (Indonesian)
[ci skip]
2026-07-20 02:32:54 +07:00
Zarz Eleutherius b5e5fb5cd2 New translations app_en.arb (Korean)
[ci skip]
2026-07-18 20:10:22 +07:00
zarzet 0961c09a6d feat(download): preserve quality variants 2026-07-16 08:45:01 +07:00
zarzet 491998e5c5 feat(convert): optionally retain original files 2026-07-16 08:27:24 +07:00
zarzet 9ac10dd6bb feat(player): ReplayGain/R128 volume normalization for the built-in player
Reads REPLAYGAIN_TRACK_GAIN (album gain fallback) from FLAC/MP3/M4A tags
and converts Opus R128_TRACK_GAIN/R128_ALBUM_GAIN (Q7.8, -23 LUFS) to the
same ReplayGain dB representation on the Go side, then attenuates the
internal player's volume per track. Off by default; toggle lives under
Library > Playback. Opus header output gain is left to the decoder, which
already applies it.

Closes #465
2026-07-14 15:18:42 +07:00
zarzet b3cad6e526 feat(settings): toggle to disable Hero animations
A single HeroMode above the router disables shared-element flights
app-wide (mini player expand, track metadata cover) for users who
prefer no motion or want to save the overlay rendering cost. On by
default; persisted in AppSettings.
2026-07-14 09:10:16 +07:00
zarzet 556399d354 feat(ui): surface the audio-analysis cache in cache management 2026-07-14 09:10:05 +07:00
zarzet 34c7b33368 chore(l10n): finish store -> repo wording sweep
The es/pt/zh base locales still shipped the old Store labels, the
backup-restore hint said 'from the store' in every locale (boutique
in fr, store loanword in ko), and the Go store lookup error said
'not found in store'. All user-visible surfaces now say repo;
translator descriptions in the template updated to match.
2026-07-14 09:09:19 +07:00
zarzet 4fc6a6b45d feat(update): force update when 3+ stable releases behind
UpdateChecker now derives the latest release and a releasesBehind
count from one releases-list call. When the installed version is
forceUpdateThreshold (3) or more stable releases behind, the update
dialog becomes mandatory: barrier and back-press are blocked, the
later/don't-remind actions are hidden, backing out of the installer
returns to the dialog, and the check bypasses the user's
check-for-updates opt-out. Prereleases never count toward the
threshold.
2026-07-13 09:44:59 +07:00
zarzet 0f0ebe5565 chore: bump version to 4.8.0-beta.1; fix ICU plural syntax in ar/fr 2026-07-13 08:39:06 +07:00
Zarz Eleutherius 9a9152f7f8 New translations app_en.arb (Korean)
[ci skip]
2026-07-13 00:27:02 +07:00
Zarz Eleutherius d9ceb8ac78 New translations app_en.arb (Korean)
[ci skip]
2026-07-12 22:54:50 +07:00
zarzet e1af1c8dc9 chore(l10n): remove 70 unused localization keys
1,303 stale entries dropped across 19 locales (largest groups:
Spotify credentials flow, collection playlists, notification
channels, backup strings); generated localizations rebuilt.

Crowdin sources need a resync after this lands.
2026-07-12 20:23:19 +07:00
Zarz Eleutherius d6726f976a New translations app_en.arb (Korean)
[ci skip]
2026-07-11 20:36:39 +07:00