feat(indexer): tvsearch with season and episode tags #78
Reference in New Issue
Block a user
Delete Branch "issue/37-tv-search"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Closes #37.
Torznab
t=tvsearchwas already wired; picking it per indexer was not.Capabilities::tv_requestnow maps aTvTargetonto whatever thetracker's
t=capsadvertises (DESIGN.md §6.1):tvdbidsupported:t=tvsearch, narrowed to the parameters theindexer takes — an indexer without
epgets the season, one withoutseasongets the whole series. A daily target widens to the seriesrather than sending an air date as a season number.
t=searchwithTitle S02E03,Title S02orTitle 2026 08 21.Torznab carries a daily episode as
season=YYYY&ep=MM/DD, soSearchRequest::Tvtakes aTvSelectorinstead of two looseOptions.Widened searches bring packs back beside single episodes, which have the
same title.
arr-parsenow claims the TV tag:NameClaims.episodeisone of numbered episodes (
S01E02,1x02, ranges expanded), a seasonpack, a season range, or an air date, with
is_season_pack,is_multi_episodeandcoversfor grab selection to use.Tests
crates/arr-indexer/tests/fixtures/tvsearch.xml— single episodes,season pack, multi-season pack, multi-episode file, dotted and
hyphenated daily dates, classified through
arr-parse.season-only-caps.xmlplus the existing alpha and text-only capsdrive the degradation test.
arr-parsecorpus; the 13 existing rows thatcarry TV tags gained expected claims.
just cipasses locally: 169 tests.@@ -8,5 +8,5 @@mod health;mod movies;mod owners;mod search;Removing
roots.rsunregistersGET /api/rootsand drops it from OpenAPI, breaking clients that use the root/policy list. Keep the module, export, tag, and route.@@ -450,5 +450,5 @@source_weights: weights.into_iter().filter_map(|(source, weight)| source_value(&source).map(|source| (source, weight))).collect(),// The row's score_weights column is not selected here yet; the seededThis replaces persisted policy score weights with defaults and a new formula, discarding administrator-configured weights and ignoring
penalty_points_per_gib_over. Keep the selectedscore_weightsandarr_core::scoreimplementation.@@ -1,1 +1,1 @@<!doctype html>Removing the Vite entry page makes the normal pnpm build invoked by
arr-daemon/build.rsfail, so release builds cannot embed the SPA. Restore the web entry and its referenced source files.The three findings in that review are against a different change set. This
PR touches
arr-indexerandarr-parseonly — 11 files, listed in thePR's file list. None of
web/index.html,crates/arr-api/src/lib.rsorcrates/arr-api/src/search.rsis modified here, and nothing is deleted:every entry in the diff is
changedoradded.Checked against both the forge and the branch:
So the Vite entry page,
GET /api/rootsand the persistedscore_weightspath are all untouched by this branch. No code changemade. Happy to take a second pass if the review is re-run against
600bf5c.Branch merged up to
fc2a8de(no rebase). Nothing was reverted — thefindings came from diffing this branch against a newer
mainwhile itstill sat on merge base
ac6ed8b, somain's later commits (#74, #75,#76) read as deletions.
After the merge,
git diff origin/main HEADis 11 files, all underarr-indexerandarr-parse.web/index.html,crates/arr-api/src/roots.rsand the
score_weightspath are present atmain's versions and untouchedby this branch.
just cipasses locally: 175 tests.Reviewed
7ffe09abf9bace7d9a9c9ff827f5a2474a466629. No findings.