Per-tracker seeding rules and torrent reaper (#88)
ci / web (push) Successful in 43s
e2e / e2e (push) Successful in 54s
ci / rust (push) Failing after 2m0s

This commit was merged in pull request #88.
This commit is contained in:
2026-08-23 00:03:30 +01:00
parent 22024d4be2
commit 0585811a0c
6 changed files with 319 additions and 21 deletions
+24 -6
View File
@@ -3,6 +3,7 @@
mod config;
mod grab;
mod import;
mod reaper;
pub mod reconcile;
mod web;
@@ -14,8 +15,9 @@ use arr_compat::CompatState;
use arr_db::Db;
use arr_meta::TmdbClient;
use config::Config;
use grab::{GrabAction, SeedingLimits};
use grab::{GrabAction, SeedingLimits, SeedingRules};
use import::ImportAction;
use reaper::ReaperAction;
use reconcile::{ReconcileLoop, Tick};
use tower_http::trace::TraceLayer;
@@ -103,10 +105,25 @@ async fn run() -> Result<(), Error> {
prowlarr,
transmission.clone(),
config.download_dir.clone(),
SeedingLimits {
ratio: config.seed_ratio_limit,
idle_minutes: config.seed_idle_limit_minutes,
},
SeedingRules::new(
SeedingLimits {
ratio: config.seed_ratio_limit,
idle_minutes: config.seed_idle_limit_minutes,
},
config
.tracker_seeding
.iter()
.map(|(&id, rule)| {
(
id,
SeedingLimits {
ratio: rule.ratio,
idle_minutes: rule.min_seed_time,
},
)
})
.collect(),
),
),
);
} else {
@@ -116,8 +133,9 @@ async fn run() -> Result<(), Error> {
// imported on this tick.
reconcile = reconcile.register(
Tick::Reconcile,
ImportAction::new(transmission, arr_probe::Prober::new()),
ImportAction::new(transmission.clone(), arr_probe::Prober::new()),
);
reconcile = reconcile.register(Tick::Reaper, ReaperAction::new(transmission));
// Jellyseerr's Radarr shim (DESIGN.md §9.4) reads the same database and
// needs its own TMDB client for `movie/lookup`.