1e03873209
An empty season deck was three truths wearing one message, and the one
it chose to blame was wrong: a season on the per-episode lane sat on
"sweeping indexers…" for the full wait and then blamed a backoff for a
pack search that was never going to run.
`GET /api/series/{id}/seasons/{n}/pack-state` says which lane the
season takes and why, from `season_grab_reason` in arr-core, plus the
failed-pack tally and when #181's window reopens. Seasons gain
`last_pack_search_at`, written only by a season-scoped sweep, so a
pack search that ran and found nothing is a settled answer rather than
a pending one.
The deck then says the true thing in each case, and a season held off
the pack lane by a failure offers the retry that waives its window.
Refs #182
29 lines
750 B
JSON
29 lines
750 B
JSON
{
|
|
"db_name": "SQLite",
|
|
"query": "SELECT count(*) AS \"failures!: i64\",\n max(grabbed_at) AS \"last_failed_at?: String\"\n FROM grabs\n WHERE target_kind = 'season' AND target_id = ? AND state = 'failed'",
|
|
"describe": {
|
|
"columns": [
|
|
{
|
|
"name": "failures!: i64",
|
|
"ordinal": 0,
|
|
"type_info": "Integer",
|
|
"origin": "Expression"
|
|
},
|
|
{
|
|
"name": "last_failed_at?: String",
|
|
"ordinal": 1,
|
|
"type_info": "Text",
|
|
"origin": "Expression"
|
|
}
|
|
],
|
|
"parameters": {
|
|
"Right": 1
|
|
},
|
|
"nullable": [
|
|
false,
|
|
true
|
|
]
|
|
},
|
|
"hash": "0ca521a8dcb979cc90f5823eb3311d6a3ec1613976c52a8a7f8225e1dc06d162"
|
|
}
|