Replaces `src/lib/utils/podcastFilter.ts` — a shipped personal workaround that dropped any item whose name, album, album artist or artist was literally "Podcasts" — with a real user setting applied in Rust. The old filter was wrong twice over: it hardcoded one user's folder layout keyed on an English literal, and it put a domain rule (what a query should return) in the presentation layer. It slipped past `check:boundary` only because it matched on names rather than on an item-type array. - `repository::exclusions` owns the rule and the process-wide id set, the same shape as `online::STREAMING_QUALITY` so it survives a repository being rebuilt on re-login. - `HybridRepository` applies it where the cache and server legs of every cache-first query converge (`parallel_race` / `race_with_refresh`), plus the bespoke `get_items` path and the server-only reads. Filtering before the "has content" check is what makes a cache page of nothing but hidden items fall through to the server. - Exclusion is by stable item id, never by name, and matches an item's own id or any container link it carries (parent, album, library, series, season, artist). - A direct `get_item` lookup and the Downloads surface are deliberately unfiltered: hiding those would break playback and file management of anything inside a hidden folder. - `LibrarySettings` persists to `app_settings` and is restored in the setup hook, alongside the streaming-quality cap. Default is an empty list — nobody inherits the old "Podcasts" behaviour. - New commands `library_get_settings`, `library_set_settings` and `library_get_exclusion_candidates`; the candidates read goes through `get_items_unfiltered` so an already-hidden folder still appears in the picker and the setting can be undone. - Settings page gains a "Hidden Folders" section that renders the backend's candidate list and sends back ticked ids; it decides nothing. TRACES: UR-076 | DR-209 | UT-203
41 lines
999 B
Rust
41 lines
999 B
Rust
// Tauri commands exposed to frontend
|
|
// TRACES: UR-002, UR-003, UR-004, UR-005, UR-009, UR-011, UR-012, UR-017, UR-019, UR-025 |
|
|
// DR-015, DR-017, DR-021, DR-028
|
|
pub mod auth;
|
|
pub mod catalog;
|
|
pub mod connectivity;
|
|
pub mod conversions;
|
|
pub mod device;
|
|
pub mod download;
|
|
pub mod favorites;
|
|
pub mod library;
|
|
pub mod offline;
|
|
pub mod playback_mode;
|
|
pub mod playback_reporting;
|
|
pub mod player;
|
|
pub mod playlist;
|
|
pub mod repository;
|
|
pub mod sessions;
|
|
pub mod storage;
|
|
pub mod sync;
|
|
pub mod sync_drain;
|
|
|
|
pub use auth::*;
|
|
pub use catalog::*;
|
|
pub use connectivity::*;
|
|
pub use conversions::*;
|
|
pub use device::*;
|
|
pub use download::*;
|
|
pub use library::*;
|
|
pub use offline::*;
|
|
pub use playback_mode::*;
|
|
#[allow(unused_imports)] // Used when playback_reporting is fully integrated
|
|
pub use playback_reporting::*;
|
|
pub use player::*;
|
|
pub use playlist::*;
|
|
pub use repository::{RepositoryManager, RepositoryManagerWrapper, *};
|
|
pub use sessions::*;
|
|
pub use storage::*;
|
|
pub use sync::*;
|
|
pub use sync_drain::*;
|