feat(slint): offline cache manager + remove/redownload + Settings Offline page
Slices 3 + 4 of the offline-cache port. Slice 3 (controller, offline_cache.rs): - remove_album (maintenance::remove_album_cached_tracks + library rows + live row update), redownload_track / redownload_album(failed_only) (via select_redownload_targets + reset_track_for_redownload + spawn), clear_all (purge), open_folder (xdg-open / open the cache dir). Slice 4 (manager + Settings): - OfflineManagerView.slint: a standalone route (NavEntry::OfflineManager -> ContentView.offline-manager, mounted in AppShell, mirrors PlaylistManager). Stats bar (tracks count / size / limit / usage bar + edit-limit GB input + open-folder + clear-all) over a scrolling album-header + track-row list with a spinning/check/alert status glyph and per-row re-download / remove. - offline_manager.rs: builds the album->track rollup + stats from index.db (get_all_tracks), pushes [OfflineRow] + stats to OfflineManagerState; set_limit (in-memory, session-scoped) + reload_soon (refresh after a mutation). - OfflineManagerActions wired in main.rs (open/refresh/remove/redownload/ set-limit/clear-all/open-folder/play). - Settings gains an "Offline" section (OfflineSettings.slint): Manage offline cache (-> the manager), Open cache folder, Clear all. The Local-Library rows (show-in-library, repair) arrive with the Local Library port. qbz-slint compiles clean. cc
This commit is contained in:
10 files changed
+922
-2
No files matched your search
@@ -31,6 +31,7 @@ import { FavoritesView } from "../favorites/FavoritesView.slint";
|
||||
import { MixView } from "../mix/MixView.slint";
|
||||
import { PlaylistView } from "../playlist/PlaylistView.slint";
|
||||
import { PlaylistManagerView } from "../playlist/PlaylistManagerView.slint";
|
||||
import { OfflineManagerView } from "../offline/OfflineManagerView.slint";
|
||||
import { SettingsView } from "../settings/SettingsView.slint";
|
||||
import { SearchResultsView } from "../search/SearchResultsView.slint";
|
||||
|
||||
@@ -169,6 +170,7 @@ export component AppShell inherits Rectangle {
|
||||
}
|
||||
}
|
||||
if NavState.view == ContentView.playlist-manager: PlaylistManagerView { }
|
||||
if NavState.view == ContentView.offline-manager: OfflineManagerView { }
|
||||
if NavState.view == ContentView.mix: MixView {
|
||||
play-track(id) => {
|
||||
root.media-action("mix-track", id, "play");
|
||||
|
||||
Reference in new issue
Block a user