crabidy/plan/fyyd-provider.md

2.5 KiB

Plan — fyyd podcast provider

From architecture/fyyd-provider.md and quality/fyyd-provider.md. Ordered by dependency; each task names how it is verified.

  • HTTP seam (fyyd/src/api.rs): Fyyd trait (search_podcasts, hot_podcasts, podcast_episodes, episode), domain Podcast/Episode, typed FetchError, and the reqwest FyydApi (envelope unwrap, defensive DTOs, per-call timeout, artist backfill via a /podcast lookup). Verify: it compiles; used by the provider tests via a fake.
  • Crate skeleton (fyyd/Cargo.toml, workspace members + dep): new fyyd crate depending on crabidy-core, reqwest, serde, thiserror, tokio, toml, tracing, async-trait. Verify: cargo build -p fyyd.
  • Path model (fyyd/src/lib.rs): FyydPath enum + parse_path covering root/search/term/podcast/episode and hot/podcast/episode; empty segments rejected. Verify: foreign_and_malformed_paths_are_rejected.
  • Provider core (fyyd/src/lib.rs): Client (Box<dyn Fyyd> + settings + in-memory search terms), Settings (fyyd.toml), the ProviderClient impl (root, node dispatch, podcast/episode builders, stream + metadata resolution, create/rename/delete of terms, central download blessing). Verify: the 10 unit tests in fyyd/src/lib.rs.
  • Settings registration (crabidy-server/src/settings.rs): add fyyd to ALL_PROVIDERS, ProviderToggles, all(), and provider_toggles(). Verify: existing settings tests (they iterate ALL_PROVIDERS); cargo test -p crabidy-server.
  • Orchestrator wiring (crabidy-server/src/provider.rs): fyyd_client field, fyyd_owns/fyyd_provider, non-fatal build() block reading fyyd.toml, get_lib_root child, and a routing arm in each of the eight ProviderClient methods. Verify: cargo build, full server suite green.
  • Gates: cargo test -p fyyd -p crabidy-server, cargo clippy, cargo fmt --check all clean; check off quality/fyyd-provider.md.
  • Docs: architecture + quality + plan committed; user docs (docs/src/, README provider list) updated.
  • Live validation: confirmed the real api.fyyd.de field shapes against fyyd/src/api.rs DTOs (2026-07-23) — all four endpoints match, no DTO change needed. A manual audio/W-capture smoke test on the running server remains open in quality/fyyd-provider.md.