Commit Graph
209 Commits
Author SHA1 Message Date
zarzet 5b3a2b9575 refactor(queue): move the completion bridge into CompletionBridgeTracker
The completion bridge maps, the precache set, the History row matcher and the
bodies of the queue lookup and History index listeners lived on the Library
tab State. CompletionBridgeTracker in lib/controllers now owns them. The two
ref.listen registrations stay in build at the same positions and call into
the tracker; the State forwards the old field names as getters so the part
files read the same collections.

Guards, the setState that drops removed items, the file check refresh order
(file cache, then playable probe), the offset reset and the mounted rebuild
after a History index change are unchanged.
2026-10-19 01:12:21 +07:00
zarzet 830dee31ed refactor(queue): move library paging state into QueueLibraryPager
The Library tab State held the page offsets, the load-more guard, the count
and page snapshot caches, the blank-library repair throttle and their trim
and scope rules inline. QueueLibraryPager in lib/controllers now owns that
state and logic; the State keeps one _pager field and forwards, passing
setState, mounted and the provider reloads as callbacks.

The page request and page data types implement two small interfaces so the
pager can compare scopes and test emptiness without seeing the private
types. Provider reads, page size, trim limits, the repair throttle and the
order of cache writes and setState calls are unchanged.
2026-10-19 01:12:21 +07:00
zarzet fe29f304aa refactor(playlists): share the playlist name prompt and dispose its controller
The create, picker and rename dialogs were three copies of one form. They
now call promptPlaylistName, whose controller lives in a dialog state and is
disposed with it.
2026-10-19 00:48:31 +07:00
zarzet 4598773cd3 refactor(storage): share the SAF download tree pick
Three screens repeated the pick, parse and store sequence. The helper keeps
each site's call order; the SAF migration prompt skips the storage mode
switch as before.
2026-10-19 00:47:55 +07:00
zarzet 78799e1bbc refactor(layout): share responsiveScale and effectiveTextScale
The same clamp helpers were copied into four screens. They now live in
adaptive_layout.dart with identical bodies and clamp values.
2026-10-19 00:47:54 +07:00
zarzet 99ccc8826f refactor(layering): move logic files out of screens
Search bucketing, refresh policy, folder data, history snapshot and the
selection and collapsing-header mixins hold no widgets, so they move to
controllers; the settings search catalog is pure presentation metadata and
moves to utils. Files with many importers keep a re-export in screens.
2026-10-19 00:37:42 +07:00
zarzet 4009855ba5 refactor(library): build the filter sheet from the sort-mode table
The filter sheet moves into its own part. The sort chips now iterate
_librarySortModes with _sortLabel (same modes, labels and order), and the
source, quality and metadata groups use value/label tables since their chips
differ only in value and label.
2026-10-18 22:26:54 +07:00
zarzet 96568f720a refactor(library): move queue download labels, dialogs and sliver grid out of queue_tab.dart
Pure moves: download label helpers and the download dialogs become parts of
the queue_tab library, and the animated sliver grid becomes a public widget
in lib/widgets since it uses no private state.
2026-10-18 22:26:54 +07:00
zarzet 0810ee7847 refactor(library): drop unread QueueTab page parameters and fast-scroller callbacks
Nothing read parentPageController, parentPageIndex or nextPageIndex, and the
Library tab root watched showExtensionStore only to compute them, so toggling
that setting rebuilt the tab for nothing. No caller passed the fast scroller
onDragStart/onDragEnd callbacks.
2026-10-18 21:54:05 +07:00
zarzet 080df889d0 fix(library): recover missing local album artwork from audio 2026-10-18 04:09:15 +07:00
zarzet 02e67cf3d3 feat(library): add adaptive icons to collection tabs 2026-10-18 03:11:54 +07:00
zarzet 759079517c fix(library): restore bit depth as the default quality badge 2026-10-18 03:11:54 +07:00
zarzet befcd2adec feat(a11y): label controls and improve settings contrast and targets 2026-10-17 16:18:25 +07:00
zarzet 1d53bf9301 feat(rewind): add yearly highlights and seasonal library banners 2026-10-15 17:15:32 +07:00
zarzet bf8ae854dd feat(forms): adopt expressive inputs with consistent form state 2026-10-15 16:00:15 +07:00
zarzet 33dca89f28 feat(ui): unify content cards and preserve press behavior 2026-10-15 15:59:38 +07:00
zarzet bd0b4a50c3 feat(layout): adapt tablet navigation and center wide content 2026-10-15 02:51:53 +07:00
zarzet 3fd1588154 fix(library): align filter and sort sheet sizing and dismissal 2026-10-15 00:28:16 +07:00
zarzet 83a55fb80b feat(library): add sectioned browsing and adaptive fast scrolling 2026-10-14 23:04:46 +07:00
zarzet 62ce404390 feat(ui): extend Material Expressive surfaces and playback controls 2026-10-13 22:58:00 +07:00
zarzet e56d59c798 feat(theme): adopt Material Symbols and expressive components
The Material theme now draws its main surfaces with rounded Material
Symbols: navigation, player, mini player, queue, settings, sheets,
dialogs and shared controls. AppIcon maps legacy Icons to their symbol
and keeps outlined glyphs unfilled. Mornye keeps its original icons.

Icon buttons, text and filled buttons, dialog actions, sliders, the setup
FAB and indeterminate spinners use the Material 3 Expressive components.
Each wrapper falls back to the standard Flutter widget for Mornye, reduced
motion and custom sizing, so existing layouts and hit areas stay intact.
2026-10-13 18:27:38 +07:00
zarzet 3ff143f4be fix(library): retire deleted downloads and stale completion cards 2026-10-11 15:38:20 +07:00
zarzet c84fc335ac fix(ios): preserve folder grants and surface picker failures 2026-10-11 14:34:35 +07:00
zarzet e975cae99f feat(library): expand audio format and ReplayGain filters
Keep format choices available independently of loaded pages, match codec and extension aliases, and add a filter for indexed ReplayGain tags. Preserve source, quality, search, paging, and existing missing-ReplayGain behavior.

Validation: 13 targeted database and widget tests; Flutter localization generation and targeted analysis.
2026-10-08 22:30:04 +07:00
zarzet a8712a44b1 perf(library): defer local providers while the feature is disabled 2026-10-05 17:53:18 +07:00
zarzet 6a4054d75e fix(library): preserve album view when returning from detail screens 2026-10-03 17:57:26 +07:00
zarzet a93e552b3e feat(library): add batch playlist and queue actions
Expose playlist, play-next and queue actions across Library search and album selections, including selected artist albums. Sort playlists, keep long selection toolbars scrollable, separate file operations in metadata menus, and show related local songs without online playback.
2026-10-02 18:11:37 +07:00
zarzet 9ea2647c39 feat(library): filter albums with missing tracks
Assess album completeness from the full local inventory, deduplicate track positions, and retain unknown status for ambiguous tags or disconnected sources. Add filters and count badges to Material and Mornye, including single-track albums and filtered search.
2026-10-02 17:03:07 +07:00
zarzet 26d713915f fix(library): restore Material playlist drag and drop 2026-10-02 13:57:18 +07:00
zarzet 718e13f24e feat(library): filter tracks missing verified ReplayGain tags 2026-10-02 01:24:26 +07:00
zarzet 86cf860288 refactor(library): share the track selection bar and delete action
The Library list's multi-select toolbar (FLAC upgrade, re-enrich, convert, ReplayGain add/remove, delete) becomes LibraryTrackSelectionBar, and its delete flow becomes deleteLibraryTracks. The Library list renders and behaves as before; other screens can now offer the same actions.
2026-10-01 18:46:21 +07:00
zarzet fa491356d8 fix(library): spread filters across the search field width 2026-10-01 00:16:38 +07:00
zarzet cef57af562 fix(library): offer re-enrichment for downloaded selections 2026-10-01 00:16:25 +07:00
zarzet 1e246138c8 perf(download): avoid repeated progress decoding and queue regrouping 2026-09-30 23:39:22 +07:00
zarzet 377710ec22 refactor(ui): consolidate file feedback and shared display helpers 2026-09-30 21:43:39 +07:00
zarzet 892911c825 feat(material): unify search filters and extension actions 2026-09-28 11:58:49 +07:00
zarzet 369afa550b feat(library): search songs albums artists and playlists by relevance 2026-09-27 00:00:01 +07:00
zarzet c87c9ff848 feat(library): add Mornye browsing and contextual compact navigation
Add category browsing, a two-column Recently Added grid, and a dedicated download queue. Keep compact navigation icons and their animations aligned with the active tab.

Keep profile avatars circular and report lyric enrichment outcomes accurately, preserving existing lyrics and supporting instrumental markers.
2026-09-21 23:02:52 +07:00
zarzet 63e1a9b9c8 feat(ui): add Mornye glass theme and adaptive music player
Add a selectable Mornye theme with shared glass controls, dialogs, sheets, notifications, and collection headers while retaining Material components.

Update player artwork, lyrics transitions and highlighting, synchronized rolling time labels, volume controls, and compact navigation. Unify metadata, Library, search, and extension surfaces; preserve restored artwork and report extension load failures.

Validation: full Flutter analyzer clean; 713 tests passed and 4 skipped; pinned Dart formatting and diff checks passed; signed ARM64 and ARM32 release APKs built and verified.
2026-09-19 12:10:10 +07:00
zarzet 174852b056 fix(download): estimate sizes from track quality metadata 2026-09-06 22:11:37 +07:00
zarzet c6195bcd10 feat(download): estimate file sizes in quality picker 2026-09-06 21:40:25 +07:00
zarzet 09c31d9dba refactor(batch): share local track actions and phase settings
Use shared coordinators for queueing FLAC replacements and batch metadata enrichment from album and queue screens. Keep selection lifecycle handling in each screen and synchronize a settings snapshot once per phase.

Cover cancellation, partial failure, screen disposal, and settings changes between preview and apply.
2026-09-06 14:04:05 +07:00
zarzet 686cc25395 fix(library): prevent pinch gesture blocking scroll 2026-08-28 19:57:40 +07:00
zarzet 433f8ed685 perf: reduce queue and extension runtime overhead 2026-08-28 01:47:51 +07:00
zarzet a744514e10 fix(library): recover transient file availability 2026-08-28 01:04:04 +07:00
zarzet 933a3c49e2 fix(library): persist artwork previews and stabilize completion 2026-08-27 21:42:38 +07:00
zarzet 1a7c20111a feat(library): add lyrics filtering and metadata actions 2026-08-27 01:44:06 +07:00
zarzet 7fc27e8314 perf(library): stream scans and optimize queue queries 2026-08-18 11:03:05 +07:00
zarzet bec9e33c94 feat(metadata): review batch tag enrichment #511 2026-08-11 16:40:06 +07:00
zarzet 40034d184f refactor(library): unify track cards 2026-07-29 17:10:57 +07:00