feat(qbzd): login subcommand, library scan, service files (68 endpoints)

qbzd login: interactive OAuth via system browser. Opens browser,
captures callback, exchanges code, saves token to keyring. Same
flow as desktop app. Daemon auto-logins on next start.

Library scan endpoint (POST /api/library/scan): discovers audio
files in registered folders. Full metadata extraction deferred
until MetadataExtractor moves to qbz-library crate.

Service files: systemd, OpenRC, runit + example qbzd.toml config.

cc
This commit is contained in:
vicrodh committed 2026-04-09 04:52:58 -06:00
1 parent 42a8ff5665
commit aacdeabe07
9 files changed
+284 -3

No files matched your search

+1
View File
@@ -413,6 +413,7 @@ fn build_router(daemon: Arc<DaemonCore>) -> axum::Router {
.route("/api/library/folders", get(with_daemon!(daemon, library::get_folders)))
.route("/api/library/folders", post(with_daemon!(daemon, library::add_folder, json)))
.route("/api/library/folders", delete(with_daemon!(daemon, library::remove_folder, json)))
.route("/api/library/scan", post(with_daemon!(daemon, library::start_scan)))
// Integrations
.route("/api/integrations/listenbrainz", get(with_daemon!(daemon, integrations::get_listenbrainz_status)))
.route("/api/integrations/listenbrainz/connect", post(with_daemon!(daemon, integrations::connect_listenbrainz, json)))