Radarr v3 shim for Jellyseerr (#62)
ci / web (push) Successful in 12s
ci / rust (push) Successful in 1m44s
e2e / e2e (push) Successful in 1m21s

This commit was merged in pull request #62.
This commit is contained in:
2026-08-22 21:00:35 +01:00
parent a0c2717549
commit 94c334ffe9
15 changed files with 1577 additions and 2 deletions
+15 -1
View File
@@ -3,9 +3,12 @@
mod config;
use std::process::ExitCode;
use std::sync::Arc;
use arr_api::{AppState, Upstreams};
use arr_compat::CompatState;
use arr_db::Db;
use arr_meta::TmdbClient;
use config::Config;
use tower_http::trace::TraceLayer;
@@ -59,6 +62,8 @@ enum Error {
Database(#[from] sqlx::Error),
#[error("database migration: {0}")]
Migration(#[from] sqlx::migrate::MigrateError),
#[error("tmdb client: {0}")]
Tmdb(#[from] arr_meta::Error),
#[error("bind {addr}: {source}")]
Bind {
addr: std::net::SocketAddr,
@@ -73,6 +78,13 @@ async fn run() -> Result<(), Error> {
let database = Db::connect(&config.database_path).await?;
database.migrate().await?;
// Jellyseerr's Radarr shim (DESIGN.md §9.4) reads the same database and
// needs its own TMDB client for `movie/lookup`.
let mut compat = CompatState::new(database.clone());
if let Some(key) = &config.tmdb_api_key {
compat = compat.with_tmdb(Arc::new(TmdbClient::new(key)?));
}
let state = AppState::new(
Upstreams::new(config.prowlarr_url, config.transmission_url)
.with_prowlarr_api_key(config.prowlarr_api_key)
@@ -80,7 +92,9 @@ async fn run() -> Result<(), Error> {
)?
.with_database(database);
let app = arr_api::router(state).layer(TraceLayer::new_for_http());
let app = arr_api::router(state)
.merge(arr_compat::router(compat))
.layer(TraceLayer::new_for_http());
let listener = tokio::net::TcpListener::bind(config.bind_addr)
.await