feat(indexer): tvsearch with season and episode tags #78
Merged
naps62-yolo
merged 3 commits from 2026-08-22 22:34:04 +01:00
issue/37-tv-search into main
Labels
Clear labels
area/api
area/ci
area/compat
area/core
area/daemon
area/db
area/dl
area/indexer
area/infra
area/meta
area/parse
area/probe
area/subs
area/web
difficulty/easy
difficulty/hard
difficulty/moderate
difficulty/trivial
phase/1-skeleton
phase/2-logic
phase/3-sourcing
phase/4-movies
phase/5-ui
phase/6-tv
phase/7-people
phase/8-compat
phase/9-subtitles
type/bug
type/chore
type/feature
type/test
arr-api
CI and test harness
arr-compat
arr-core
arr-daemon
arr-db
arr-dl
arr-indexer
workspace and tooling
arr-meta
arr-parse
arr-probe
arr-subs crate: providers, extraction, translation, sync
web/
bounded, obvious approach, few files
subtle correctness or cross-cutting
multiple files, judgement, an interface to design
one file, mechanical, no design decisions
workspace, CI, config, database, empty API and SPA
parsing and policy engine, pure, no network
TMDB and Prowlarr, read-only
movies end to end
search, buckets, library views, queues
seasons, episodes, tracking, derived status
owner tags and notifications
Jellyseerr shim
build order: subtitles, DESIGN.md §15
No labels
Milestone
No items
No Milestone
Projects
Clear projects
No projects
No Assignees
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: yolo/arr#78
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
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.