fix(crossseed): drop resolution token from TV search queries - #2017
Conversation
TV cross-seed searches appended a bare resolution token to the free-text Torznab query (e.g. "<title> S01E01 1080"). Indexers whose q matches only the series name (BTN, IPT) return zero results for such queries, so cross-seeding to them silently failed while other trackers worked. Sonarr works because it uses structured tvsearch (ids + season/ep, no resolution in q); RSS automation works because it matches the full feed title. Resolution was injected at two sites, both added in #1871: - the cross-seed query builder (IncludeResolution for TV) - the jackett Prowlarr ID-driven path (idDrivenTVQuery re-adding it from the release name) Remove resolution from the TV query at both sites. The season/episode narrowing and the 100-result/ReturnAllResults behavior from #1871 are unchanged, and resolution is still enforced post-search in releasesMatch, so match correctness is unaffected.
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Repository UI Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (2)
🚧 Files skipped from review as they are similar to previous changes (1)
WalkthroughThe PR removes resolution-token handling from CrossSeed and Jackett search query generation. ChangesResolution token removal from search query builders
Sequence Diagram(s)sequenceDiagram
participant Caller
participant buildSafeSearchQuery
participant SearchQuery
Caller->>buildSafeSearchQuery: name, release, baseQuery
alt baseQuery not empty
buildSafeSearchQuery->>SearchQuery: Query = TrimSpace(baseQuery)
else is movie
buildSafeSearchQuery->>SearchQuery: Query = cleanedTitle
else other
alt cleanedTitle empty
buildSafeSearchQuery->>SearchQuery: Query = TrimSpace(baseQuery) or TrimSpace(name)
else
buildSafeSearchQuery->>SearchQuery: Query = cleanedTitle
end
end
buildSafeSearchQuery-->>Caller: SearchQuery (no resolution token)
sequenceDiagram
participant Workaround
participant applyProwlarrTVTokenWorkaround
participant Request
Workaround->>applyProwlarrTVTokenWorkaround: ID params present (imdbid/tvdbid/tmdbid/tvmazeid)
applyProwlarrTVTokenWorkaround->>Request: Set q = TV token only (SxxExx)
applyProwlarrTVTokenWorkaround->>Request: Remove season and ep params
applyProwlarrTVTokenWorkaround-->>Workaround: Updated request (no resolution appended)
Estimated code review effort🎯 2 (Simple) | ⏱️ ~12 minutes Suggested labels
Suggested reviewers
Poem
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@internal/services/crossseed/search_query.go`:
- Around line 67-69: The current fallback for cleanedTitle only reassigns from
baseQuery which is already empty in this branch; change the fallback logic in
the cleanedTitle handling so that if cleanedTitle is empty after
cleanAnimeTitle(baseQuery) you fall back to the original name (trimmed) — e.g.,
in the block referencing cleanedTitle, baseQuery and name ensure you first try
baseQuery, and if that yields an empty string then set cleanedTitle =
strings.TrimSpace(name) so you return a conservative non-empty Torznab query.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Repository UI
Review profile: CHILL
Plan: Pro
Run ID: d466ee21-a990-4d0c-9ae4-3076a1c9cf15
📒 Files selected for processing (6)
internal/services/crossseed/search_query.gointernal/services/crossseed/search_query_test.gointernal/services/crossseed/service.gointernal/services/crossseed/source_release_inference_test.gointernal/services/jackett/service.gointernal/services/jackett/service_test.go
The TV/anime fallback path is only reached when baseQuery is empty, so the prior `cleanedTitle = strings.TrimSpace(baseQuery)` fallback always reassigned an empty string. When cleanAnimeTitle stripped the name to nothing this yielded an empty query. Fall back to the trimmed torrent name instead, matching the movie branch, so a conservative non-empty query is always returned.
|
Bah, I always have that as a source, so never noticed that resolution was a blocker. We're trading better matching at poorly curated sites, and probably the occasional super long running shows, against working capacity for the listed indexers, a no brainier. Ran the bot over this, and it's only concern, funnily enough, was the risk of missing content because of the underlying constraints of jackett/prowlarr. LGTM |
…#160) This PR contains the following updates: | Package | Update | Change | |---|---|---| | [ghcr.io/autobrr/qui](https://github.com/autobrr/qui) | minor | `v1.20.0` → `v1.21.0` | --- >⚠️ **Warning** > > Some dependencies could not be looked up. Check the [Dependency Dashboard](issues/7) for more information. --- ### Release Notes <details> <summary>autobrr/qui (ghcr.io/autobrr/qui)</summary> ### [`v1.21.0`](https://github.com/autobrr/qui/releases/tag/v1.21.0) [Compare Source](autobrr/qui@v1.20.0...v1.21.0) ##### Changelog ##### New Features - [`51b29a1`](autobrr/qui@51b29a1): feat(api): add GET /api/version reporting the running version ([#​2060](autobrr/qui#2060)) ([@​s0up4200](https://github.com/s0up4200)) - [`98348f1`](autobrr/qui@98348f1): feat(automations): add RLS\_YEAR release-year condition ([#​2003](autobrr/qui#2003)) ([@​nitrobass24](https://github.com/nitrobass24)) - [`58cc7cb`](autobrr/qui@58cc7cb): feat(automations): add tracker status and message conditions ([#​2006](autobrr/qui#2006)) ([@​luckylittle](https://github.com/luckylittle)) - [`2176a92`](autobrr/qui@2176a92): feat(automations): list configured indexer trackers in workflow selector ([#​2005](autobrr/qui#2005)) ([@​nitrobass24](https://github.com/nitrobass24)) - [`2de926e`](autobrr/qui@2de926e): feat(i18n): add Italian (it) translation ([#​2011](autobrr/qui#2011)) ([@​s0up4200](https://github.com/s0up4200)) - [`7b66655`](autobrr/qui@7b66655): feat(i18n): add Korean (ko) translation ([#​2042](autobrr/qui#2042)) ([@​jussaw](https://github.com/jussaw)) - [`2c06a3d`](autobrr/qui@2c06a3d): feat(i18n): add Ukrainian (uk) translation ([#​2032](autobrr/qui#2032)) ([@​rodion981](https://github.com/rodion981)) - [`ef8da0b`](autobrr/qui@ef8da0b): feat(sse): keep cached torrents with a staleness badge when qBittorrent is slow ([#​2057](autobrr/qui#2057)) ([@​s0up4200](https://github.com/s0up4200)) - [`38ebb6e`](autobrr/qui@38ebb6e): feat(web): add file priority controls to torrent file views ([#​2062](autobrr/qui#2062)) ([@​jussaw](https://github.com/jussaw)) ##### Bug Fixes - [`12ac536`](autobrr/qui@12ac536): fix(ci): skip release binary build on main pushes ([#​2008](autobrr/qui#2008)) ([@​s0up4200](https://github.com/s0up4200)) - [`57210a3`](autobrr/qui@57210a3): fix(crossseed): drop resolution token from TV search queries ([#​2017](autobrr/qui#2017)) ([@​nitrobass24](https://github.com/nitrobass24)) - [`791bc7d`](autobrr/qui@791bc7d): fix(crossseed): inject rootless single-file adds into matched folder ([#​2029](autobrr/qui#2029)) ([@​nitrobass24](https://github.com/nitrobass24)) - [`3da437f`](autobrr/qui@3da437f): fix(crossseed): re-query indexers with no usable hit in the alternate connector pass ([#​2002](autobrr/qui#2002)) ([@​nitrobass24](https://github.com/nitrobass24)) - [`8e8b6d9`](autobrr/qui@8e8b6d9): fix(database): prevent int4 sequence exhaustion in Postgres string interning ([#​2015](autobrr/qui#2015)) ([@​s0up4200](https://github.com/s0up4200)) - [`c7e08b9`](autobrr/qui@c7e08b9): fix(db): index string\_pool FK columns so GC stops timing out ([#​2051](autobrr/qui#2051)) ([@​s0up4200](https://github.com/s0up4200)) - [`2553f75`](autobrr/qui@2553f75): fix(docs): use relative file paths for markdown links ([#​2013](autobrr/qui#2013)) ([@​nasenov](https://github.com/nasenov)) - [`8a9c2fc`](autobrr/qui@8a9c2fc): fix(i18n): improve French translation, fix hardcoded UI statuses, and update agent rules ([#​2014](autobrr/qui#2014)) ([@​OlziYT](https://github.com/OlziYT)) - [`190d936`](autobrr/qui@190d936): fix(jackett): decouple cache persistence from SkipHistory ([#​2056](autobrr/qui#2056)) ([@​jussaw](https://github.com/jussaw)) - [`91ad7e4`](autobrr/qui@91ad7e4): fix(pprof): bind to configurable loopback address instead of :6060 ([#​2044](autobrr/qui#2044)) ([@​s0up4200](https://github.com/s0up4200)) - [`10e2d02`](autobrr/qui@10e2d02): fix(qbittorrent): serve stale app info/preferences when refresh fails ([#​2054](autobrr/qui#2054)) ([@​s0up4200](https://github.com/s0up4200)) - [`6d3b04c`](autobrr/qui@6d3b04c): fix(sse): resolve sync-error staleness stamp off the sync-loop callback ([#​2065](autobrr/qui#2065)) ([@​s0up4200](https://github.com/s0up4200)) - [`677e8f4`](autobrr/qui@677e8f4): fix(sse): send torrent page deltas instead of full snapshots ([#​2047](autobrr/qui#2047)) ([@​s0up4200](https://github.com/s0up4200)) - [`a4d252b`](autobrr/qui@a4d252b): fix(sse): size full-sync timeout to prevent permanent disconnect on large instances ([#​2037](autobrr/qui#2037)) ([@​nitrobass24](https://github.com/nitrobass24)) - [`4f375c6`](autobrr/qui@4f375c6): fix(torrents): route unified view exports to the owning instance ([#​2018](autobrr/qui#2018)) ([@​s0up4200](https://github.com/s0up4200)) - [`d49e168`](autobrr/qui@d49e168): fix(web): move instance status bar back to bottom of screen ([#​2024](autobrr/qui#2024)) ([@​OlziYT](https://github.com/OlziYT)) - [`a69ae69`](autobrr/qui@a69ae69): fix(web): prevent framer-motion tab indicator from triggering layout shifts ([#​2025](autobrr/qui#2025)) ([@​OlziYT](https://github.com/OlziYT)) ##### Other Changes - [`860b5bb`](autobrr/qui@860b5bb): chore(deps): bump anthropics/claude-code-action from 1.0.140 to 1.0.148 in the github group ([#​2045](autobrr/qui#2045)) ([@​dependabot](https://github.com/dependabot)\[bot]) - [`0b23a7d`](autobrr/qui@0b23a7d): chore(deps): bump the github group with 2 updates ([#​2031](autobrr/qui#2031)) ([@​dependabot](https://github.com/dependabot)\[bot]) - [`1fea36b`](autobrr/qui@1fea36b): docs: document frontend testing conventions ([#​1984](autobrr/qui#1984)) ([@​nitrobass24](https://github.com/nitrobass24)) - [`f3443ec`](autobrr/qui@f3443ec): docs: promote multi-language support ([#​2009](autobrr/qui#2009)) ([@​s0up4200](https://github.com/s0up4200)) - [`df88e63`](autobrr/qui@df88e63): test(web): add coverage for hooks and lib/api.ts contract layer ([#​1931](autobrr/qui#1931)) ([#​1998](autobrr/qui#1998)) ([@​nitrobass24](https://github.com/nitrobass24)) **Full Changelog**: <autobrr/qui@v1.20.0...v1.21.0> ##### Docker images - `docker pull ghcr.io/autobrr/qui:v1.21.0` - `docker pull ghcr.io/autobrr/qui:latest` ##### What to do next? - Join our [Discord server](https://discord.autobrr.com/qui) Thank you for using qui! </details> --- ### Configuration 📅 **Schedule**: (in timezone Europe/Warsaw) - Branch creation - At any time (no schedule defined) - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about these updates again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Mend Renovate](https://github.com/renovatebot/renovate). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4yNDMuMSIsInVwZGF0ZWRJblZlciI6IjQzLjI0My4xIiwidGFyZ2V0QnJhbmNoIjoibWFzdGVyIiwibGFiZWxzIjpbInJlbm92YXRlL2NvbnRhaW5lciIsInR5cGUvbWlub3IiXX0=--> Reviewed-on: https://git.ajgon.casa/deedee/mark13/pulls/160
… (#200) This PR contains the following updates: | Package | Update | Change | |---|---|---| | [ghcr.io/autobrr/qui](https://github.com/autobrr/qui) | minor | `v1.20.0` → `v1.22.0` | --- ### Release Notes <details> <summary>autobrr/qui (ghcr.io/autobrr/qui)</summary> ### [`v1.22.0`](https://github.com/autobrr/qui/releases/tag/v1.22.0) [Compare Source](autobrr/qui@v1.21.0...v1.22.0) ##### Changelog ##### New Features - [`5b9326e`](autobrr/qui@5b9326e): feat(web): add copy path option to content tab context menu ([#​933](autobrr/qui#933)) ([@​lenisko](https://github.com/lenisko)) - [`3a4383d`](autobrr/qui@3a4383d): feat(web): add kanagawa themes ([#​2069](autobrr/qui#2069)) ([@​notmarek](https://github.com/notmarek)) - [`db77a17`](autobrr/qui@db77a17): feat(web): shift+click range select in torrent content tab ([#​2081](autobrr/qui#2081)) ([@​jussaw](https://github.com/jussaw)) ##### Bug Fixes - [`b563d4b`](autobrr/qui@b563d4b): fix(sync): keep SSE aggregates fresh without tracker hydration ([#​2072](autobrr/qui#2072)) ([@​Audionut](https://github.com/Audionut)) ##### Other Changes - [`d428313`](autobrr/qui@d428313): chore(deps): bump the github group with 5 updates ([#​2073](autobrr/qui#2073)) ([@​dependabot](https://github.com/dependabot)\[bot]) **Full Changelog**: <autobrr/qui@v1.21.0...v1.22.0> ##### Docker images - `docker pull ghcr.io/autobrr/qui:v1.22.0` - `docker pull ghcr.io/autobrr/qui:latest` ##### What to do next? - Join our [Discord server](https://discord.autobrr.com/qui) Thank you for using qui! ### [`v1.21.0`](https://github.com/autobrr/qui/releases/tag/v1.21.0) [Compare Source](autobrr/qui@v1.20.0...v1.21.0) ##### Changelog ##### New Features - [`51b29a1`](autobrr/qui@51b29a1): feat(api): add GET /api/version reporting the running version ([#​2060](autobrr/qui#2060)) ([@​s0up4200](https://github.com/s0up4200)) - [`98348f1`](autobrr/qui@98348f1): feat(automations): add RLS\_YEAR release-year condition ([#​2003](autobrr/qui#2003)) ([@​nitrobass24](https://github.com/nitrobass24)) - [`58cc7cb`](autobrr/qui@58cc7cb): feat(automations): add tracker status and message conditions ([#​2006](autobrr/qui#2006)) ([@​luckylittle](https://github.com/luckylittle)) - [`2176a92`](autobrr/qui@2176a92): feat(automations): list configured indexer trackers in workflow selector ([#​2005](autobrr/qui#2005)) ([@​nitrobass24](https://github.com/nitrobass24)) - [`2de926e`](autobrr/qui@2de926e): feat(i18n): add Italian (it) translation ([#​2011](autobrr/qui#2011)) ([@​s0up4200](https://github.com/s0up4200)) - [`7b66655`](autobrr/qui@7b66655): feat(i18n): add Korean (ko) translation ([#​2042](autobrr/qui#2042)) ([@​jussaw](https://github.com/jussaw)) - [`2c06a3d`](autobrr/qui@2c06a3d): feat(i18n): add Ukrainian (uk) translation ([#​2032](autobrr/qui#2032)) ([@​rodion981](https://github.com/rodion981)) - [`ef8da0b`](autobrr/qui@ef8da0b): feat(sse): keep cached torrents with a staleness badge when qBittorrent is slow ([#​2057](autobrr/qui#2057)) ([@​s0up4200](https://github.com/s0up4200)) - [`38ebb6e`](autobrr/qui@38ebb6e): feat(web): add file priority controls to torrent file views ([#​2062](autobrr/qui#2062)) ([@​jussaw](https://github.com/jussaw)) ##### Bug Fixes - [`12ac536`](autobrr/qui@12ac536): fix(ci): skip release binary build on main pushes ([#​2008](autobrr/qui#2008)) ([@​s0up4200](https://github.com/s0up4200)) - [`57210a3`](autobrr/qui@57210a3): fix(crossseed): drop resolution token from TV search queries ([#​2017](autobrr/qui#2017)) ([@​nitrobass24](https://github.com/nitrobass24)) - [`791bc7d`](autobrr/qui@791bc7d): fix(crossseed): inject rootless single-file adds into matched folder ([#​2029](autobrr/qui#2029)) ([@​nitrobass24](https://github.com/nitrobass24)) - [`3da437f`](autobrr/qui@3da437f): fix(crossseed): re-query indexers with no usable hit in the alternate connector pass ([#​2002](autobrr/qui#2002)) ([@​nitrobass24](https://github.com/nitrobass24)) - [`8e8b6d9`](autobrr/qui@8e8b6d9): fix(database): prevent int4 sequence exhaustion in Postgres string interning ([#​2015](autobrr/qui#2015)) ([@​s0up4200](https://github.com/s0up4200)) - [`c7e08b9`](autobrr/qui@c7e08b9): fix(db): index string\_pool FK columns so GC stops timing out ([#​2051](autobrr/qui#2051)) ([@​s0up4200](https://github.com/s0up4200)) - [`2553f75`](autobrr/qui@2553f75): fix(docs): use relative file paths for markdown links ([#​2013](autobrr/qui#2013)) ([@​nasenov](https://github.com/nasenov)) - [`8a9c2fc`](autobrr/qui@8a9c2fc): fix(i18n): improve French translation, fix hardcoded UI statuses, and update agent rules ([#​2014](autobrr/qui#2014)) ([@​OlziYT](https://github.com/OlziYT)) - [`190d936`](autobrr/qui@190d936): fix(jackett): decouple cache persistence from SkipHistory ([#​2056](autobrr/qui#2056)) ([@​jussaw](https://github.com/jussaw)) - [`91ad7e4`](autobrr/qui@91ad7e4): fix(pprof): bind to configurable loopback address instead of :6060 ([#​2044](autobrr/qui#2044)) ([@​s0up4200](https://github.com/s0up4200)) - [`10e2d02`](autobrr/qui@10e2d02): fix(qbittorrent): serve stale app info/preferences when refresh fails ([#​2054](autobrr/qui#2054)) ([@​s0up4200](https://github.com/s0up4200)) - [`6d3b04c`](autobrr/qui@6d3b04c): fix(sse): resolve sync-error staleness stamp off the sync-loop callback ([#​2065](autobrr/qui#2065)) ([@​s0up4200](https://github.com/s0up4200)) - [`677e8f4`](autobrr/qui@677e8f4): fix(sse): send torrent page deltas instead of full snapshots ([#​2047](autobrr/qui#2047)) ([@​s0up4200](https://github.com/s0up4200)) - [`a4d252b`](autobrr/qui@a4d252b): fix(sse): size full-sync timeout to prevent permanent disconnect on large instances ([#​2037](autobrr/qui#2037)) ([@​nitrobass24](https://github.com/nitrobass24)) - [`4f375c6`](autobrr/qui@4f375c6): fix(torrents): route unified view exports to the owning instance ([#​2018](autobrr/qui#2018)) ([@​s0up4200](https://github.com/s0up4200)) - [`d49e168`](autobrr/qui@d49e168): fix(web): move instance status bar back to bottom of screen ([#​2024](autobrr/qui#2024)) ([@​OlziYT](https://github.com/OlziYT)) - [`a69ae69`](autobrr/qui@a69ae69): fix(web): prevent framer-motion tab indicator from triggering layout shifts ([#​2025](autobrr/qui#2025)) ([@​OlziYT](https://github.com/OlziYT)) ##### Other Changes - [`860b5bb`](autobrr/qui@860b5bb): chore(deps): bump anthropics/claude-code-action from 1.0.140 to 1.0.148 in the github group ([#​2045](autobrr/qui#2045)) ([@​dependabot](https://github.com/dependabot)\[bot]) - [`0b23a7d`](autobrr/qui@0b23a7d): chore(deps): bump the github group with 2 updates ([#​2031](autobrr/qui#2031)) ([@​dependabot](https://github.com/dependabot)\[bot]) - [`1fea36b`](autobrr/qui@1fea36b): docs: document frontend testing conventions ([#​1984](autobrr/qui#1984)) ([@​nitrobass24](https://github.com/nitrobass24)) - [`f3443ec`](autobrr/qui@f3443ec): docs: promote multi-language support ([#​2009](autobrr/qui#2009)) ([@​s0up4200](https://github.com/s0up4200)) - [`df88e63`](autobrr/qui@df88e63): test(web): add coverage for hooks and lib/api.ts contract layer ([#​1931](autobrr/qui#1931)) ([#​1998](autobrr/qui#1998)) ([@​nitrobass24](https://github.com/nitrobass24)) **Full Changelog**: <autobrr/qui@v1.20.0...v1.21.0> ##### Docker images - `docker pull ghcr.io/autobrr/qui:v1.21.0` - `docker pull ghcr.io/autobrr/qui:latest` ##### What to do next? - Join our [Discord server](https://discord.autobrr.com/qui) Thank you for using qui! </details> --- ### Configuration 📅 **Schedule**: (in timezone Europe/London) - Branch creation - At any time (no schedule defined) - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about these updates again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Mend Renovate](https://github.com/renovatebot/renovate). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4yNDIuMSIsInVwZGF0ZWRJblZlciI6IjQzLjI0Mi4xIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJyZW5vdmF0ZS9jb250YWluZXIiLCJ0eXBlL21pbm9yIl19--> Reviewed-on: https://forgejo.hayden.moe/hayden/phoebe/pulls/200
…#160) This PR contains the following updates: | Package | Update | Change | |---|---|---| | [ghcr.io/autobrr/qui](https://github.com/autobrr/qui) | minor | `v1.20.0` → `v1.21.0` | --- >⚠️ **Warning** > > Some dependencies could not be looked up. Check the [Dependency Dashboard](issues/7) for more information. --- ### Release Notes <details> <summary>autobrr/qui (ghcr.io/autobrr/qui)</summary> ### [`v1.21.0`](https://github.com/autobrr/qui/releases/tag/v1.21.0) [Compare Source](autobrr/qui@v1.20.0...v1.21.0) ##### Changelog ##### New Features - [`51b29a1`](autobrr/qui@51b29a1): feat(api): add GET /api/version reporting the running version ([#​2060](autobrr/qui#2060)) ([@​s0up4200](https://github.com/s0up4200)) - [`98348f1`](autobrr/qui@98348f1): feat(automations): add RLS\_YEAR release-year condition ([#​2003](autobrr/qui#2003)) ([@​nitrobass24](https://github.com/nitrobass24)) - [`58cc7cb`](autobrr/qui@58cc7cb): feat(automations): add tracker status and message conditions ([#​2006](autobrr/qui#2006)) ([@​luckylittle](https://github.com/luckylittle)) - [`2176a92`](autobrr/qui@2176a92): feat(automations): list configured indexer trackers in workflow selector ([#​2005](autobrr/qui#2005)) ([@​nitrobass24](https://github.com/nitrobass24)) - [`2de926e`](autobrr/qui@2de926e): feat(i18n): add Italian (it) translation ([#​2011](autobrr/qui#2011)) ([@​s0up4200](https://github.com/s0up4200)) - [`7b66655`](autobrr/qui@7b66655): feat(i18n): add Korean (ko) translation ([#​2042](autobrr/qui#2042)) ([@​jussaw](https://github.com/jussaw)) - [`2c06a3d`](autobrr/qui@2c06a3d): feat(i18n): add Ukrainian (uk) translation ([#​2032](autobrr/qui#2032)) ([@​rodion981](https://github.com/rodion981)) - [`ef8da0b`](autobrr/qui@ef8da0b): feat(sse): keep cached torrents with a staleness badge when qBittorrent is slow ([#​2057](autobrr/qui#2057)) ([@​s0up4200](https://github.com/s0up4200)) - [`38ebb6e`](autobrr/qui@38ebb6e): feat(web): add file priority controls to torrent file views ([#​2062](autobrr/qui#2062)) ([@​jussaw](https://github.com/jussaw)) ##### Bug Fixes - [`12ac536`](autobrr/qui@12ac536): fix(ci): skip release binary build on main pushes ([#​2008](autobrr/qui#2008)) ([@​s0up4200](https://github.com/s0up4200)) - [`57210a3`](autobrr/qui@57210a3): fix(crossseed): drop resolution token from TV search queries ([#​2017](autobrr/qui#2017)) ([@​nitrobass24](https://github.com/nitrobass24)) - [`791bc7d`](autobrr/qui@791bc7d): fix(crossseed): inject rootless single-file adds into matched folder ([#​2029](autobrr/qui#2029)) ([@​nitrobass24](https://github.com/nitrobass24)) - [`3da437f`](autobrr/qui@3da437f): fix(crossseed): re-query indexers with no usable hit in the alternate connector pass ([#​2002](autobrr/qui#2002)) ([@​nitrobass24](https://github.com/nitrobass24)) - [`8e8b6d9`](autobrr/qui@8e8b6d9): fix(database): prevent int4 sequence exhaustion in Postgres string interning ([#​2015](autobrr/qui#2015)) ([@​s0up4200](https://github.com/s0up4200)) - [`c7e08b9`](autobrr/qui@c7e08b9): fix(db): index string\_pool FK columns so GC stops timing out ([#​2051](autobrr/qui#2051)) ([@​s0up4200](https://github.com/s0up4200)) - [`2553f75`](autobrr/qui@2553f75): fix(docs): use relative file paths for markdown links ([#​2013](autobrr/qui#2013)) ([@​nasenov](https://github.com/nasenov)) - [`8a9c2fc`](autobrr/qui@8a9c2fc): fix(i18n): improve French translation, fix hardcoded UI statuses, and update agent rules ([#​2014](autobrr/qui#2014)) ([@​OlziYT](https://github.com/OlziYT)) - [`190d936`](autobrr/qui@190d936): fix(jackett): decouple cache persistence from SkipHistory ([#​2056](autobrr/qui#2056)) ([@​jussaw](https://github.com/jussaw)) - [`91ad7e4`](autobrr/qui@91ad7e4): fix(pprof): bind to configurable loopback address instead of :6060 ([#​2044](autobrr/qui#2044)) ([@​s0up4200](https://github.com/s0up4200)) - [`10e2d02`](autobrr/qui@10e2d02): fix(qbittorrent): serve stale app info/preferences when refresh fails ([#​2054](autobrr/qui#2054)) ([@​s0up4200](https://github.com/s0up4200)) - [`6d3b04c`](autobrr/qui@6d3b04c): fix(sse): resolve sync-error staleness stamp off the sync-loop callback ([#​2065](autobrr/qui#2065)) ([@​s0up4200](https://github.com/s0up4200)) - [`677e8f4`](autobrr/qui@677e8f4): fix(sse): send torrent page deltas instead of full snapshots ([#​2047](autobrr/qui#2047)) ([@​s0up4200](https://github.com/s0up4200)) - [`a4d252b`](autobrr/qui@a4d252b): fix(sse): size full-sync timeout to prevent permanent disconnect on large instances ([#​2037](autobrr/qui#2037)) ([@​nitrobass24](https://github.com/nitrobass24)) - [`4f375c6`](autobrr/qui@4f375c6): fix(torrents): route unified view exports to the owning instance ([#​2018](autobrr/qui#2018)) ([@​s0up4200](https://github.com/s0up4200)) - [`d49e168`](autobrr/qui@d49e168): fix(web): move instance status bar back to bottom of screen ([#​2024](autobrr/qui#2024)) ([@​OlziYT](https://github.com/OlziYT)) - [`a69ae69`](autobrr/qui@a69ae69): fix(web): prevent framer-motion tab indicator from triggering layout shifts ([#​2025](autobrr/qui#2025)) ([@​OlziYT](https://github.com/OlziYT)) ##### Other Changes - [`860b5bb`](autobrr/qui@860b5bb): chore(deps): bump anthropics/claude-code-action from 1.0.140 to 1.0.148 in the github group ([#​2045](autobrr/qui#2045)) ([@​dependabot](https://github.com/dependabot)\[bot]) - [`0b23a7d`](autobrr/qui@0b23a7d): chore(deps): bump the github group with 2 updates ([#​2031](autobrr/qui#2031)) ([@​dependabot](https://github.com/dependabot)\[bot]) - [`1fea36b`](autobrr/qui@1fea36b): docs: document frontend testing conventions ([#​1984](autobrr/qui#1984)) ([@​nitrobass24](https://github.com/nitrobass24)) - [`f3443ec`](autobrr/qui@f3443ec): docs: promote multi-language support ([#​2009](autobrr/qui#2009)) ([@​s0up4200](https://github.com/s0up4200)) - [`df88e63`](autobrr/qui@df88e63): test(web): add coverage for hooks and lib/api.ts contract layer ([#​1931](autobrr/qui#1931)) ([#​1998](autobrr/qui#1998)) ([@​nitrobass24](https://github.com/nitrobass24)) **Full Changelog**: <autobrr/qui@v1.20.0...v1.21.0> ##### Docker images - `docker pull ghcr.io/autobrr/qui:v1.21.0` - `docker pull ghcr.io/autobrr/qui:latest` ##### What to do next? - Join our [Discord server](https://discord.autobrr.com/qui) Thank you for using qui! </details> --- ### Configuration 📅 **Schedule**: (in timezone Europe/Warsaw) - Branch creation - At any time (no schedule defined) - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about these updates again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Mend Renovate](https://github.com/renovatebot/renovate). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4yNDMuMSIsInVwZGF0ZWRJblZlciI6IjQzLjI0My4xIiwidGFyZ2V0QnJhbmNoIjoibWFzdGVyIiwibGFiZWxzIjpbInJlbm92YXRlL2NvbnRhaW5lciIsInR5cGUvbWlub3IiXX0=--> Reviewed-on: https://git.ajgon.casa/deedee/mark13/pulls/160
…#160) This PR contains the following updates: | Package | Update | Change | |---|---|---| | [ghcr.io/autobrr/qui](https://github.com/autobrr/qui) | minor | `v1.20.0` → `v1.21.0` | --- >⚠️ **Warning** > > Some dependencies could not be looked up. Check the [Dependency Dashboard](issues/7) for more information. --- ### Release Notes <details> <summary>autobrr/qui (ghcr.io/autobrr/qui)</summary> ### [`v1.21.0`](https://github.com/autobrr/qui/releases/tag/v1.21.0) [Compare Source](autobrr/qui@v1.20.0...v1.21.0) ##### Changelog ##### New Features - [`51b29a1`](autobrr/qui@51b29a1): feat(api): add GET /api/version reporting the running version ([#​2060](autobrr/qui#2060)) ([@​s0up4200](https://github.com/s0up4200)) - [`98348f1`](autobrr/qui@98348f1): feat(automations): add RLS\_YEAR release-year condition ([#​2003](autobrr/qui#2003)) ([@​nitrobass24](https://github.com/nitrobass24)) - [`58cc7cb`](autobrr/qui@58cc7cb): feat(automations): add tracker status and message conditions ([#​2006](autobrr/qui#2006)) ([@​luckylittle](https://github.com/luckylittle)) - [`2176a92`](autobrr/qui@2176a92): feat(automations): list configured indexer trackers in workflow selector ([#​2005](autobrr/qui#2005)) ([@​nitrobass24](https://github.com/nitrobass24)) - [`2de926e`](autobrr/qui@2de926e): feat(i18n): add Italian (it) translation ([#​2011](autobrr/qui#2011)) ([@​s0up4200](https://github.com/s0up4200)) - [`7b66655`](autobrr/qui@7b66655): feat(i18n): add Korean (ko) translation ([#​2042](autobrr/qui#2042)) ([@​jussaw](https://github.com/jussaw)) - [`2c06a3d`](autobrr/qui@2c06a3d): feat(i18n): add Ukrainian (uk) translation ([#​2032](autobrr/qui#2032)) ([@​rodion981](https://github.com/rodion981)) - [`ef8da0b`](autobrr/qui@ef8da0b): feat(sse): keep cached torrents with a staleness badge when qBittorrent is slow ([#​2057](autobrr/qui#2057)) ([@​s0up4200](https://github.com/s0up4200)) - [`38ebb6e`](autobrr/qui@38ebb6e): feat(web): add file priority controls to torrent file views ([#​2062](autobrr/qui#2062)) ([@​jussaw](https://github.com/jussaw)) ##### Bug Fixes - [`12ac536`](autobrr/qui@12ac536): fix(ci): skip release binary build on main pushes ([#​2008](autobrr/qui#2008)) ([@​s0up4200](https://github.com/s0up4200)) - [`57210a3`](autobrr/qui@57210a3): fix(crossseed): drop resolution token from TV search queries ([#​2017](autobrr/qui#2017)) ([@​nitrobass24](https://github.com/nitrobass24)) - [`791bc7d`](autobrr/qui@791bc7d): fix(crossseed): inject rootless single-file adds into matched folder ([#​2029](autobrr/qui#2029)) ([@​nitrobass24](https://github.com/nitrobass24)) - [`3da437f`](autobrr/qui@3da437f): fix(crossseed): re-query indexers with no usable hit in the alternate connector pass ([#​2002](autobrr/qui#2002)) ([@​nitrobass24](https://github.com/nitrobass24)) - [`8e8b6d9`](autobrr/qui@8e8b6d9): fix(database): prevent int4 sequence exhaustion in Postgres string interning ([#​2015](autobrr/qui#2015)) ([@​s0up4200](https://github.com/s0up4200)) - [`c7e08b9`](autobrr/qui@c7e08b9): fix(db): index string\_pool FK columns so GC stops timing out ([#​2051](autobrr/qui#2051)) ([@​s0up4200](https://github.com/s0up4200)) - [`2553f75`](autobrr/qui@2553f75): fix(docs): use relative file paths for markdown links ([#​2013](autobrr/qui#2013)) ([@​nasenov](https://github.com/nasenov)) - [`8a9c2fc`](autobrr/qui@8a9c2fc): fix(i18n): improve French translation, fix hardcoded UI statuses, and update agent rules ([#​2014](autobrr/qui#2014)) ([@​OlziYT](https://github.com/OlziYT)) - [`190d936`](autobrr/qui@190d936): fix(jackett): decouple cache persistence from SkipHistory ([#​2056](autobrr/qui#2056)) ([@​jussaw](https://github.com/jussaw)) - [`91ad7e4`](autobrr/qui@91ad7e4): fix(pprof): bind to configurable loopback address instead of :6060 ([#​2044](autobrr/qui#2044)) ([@​s0up4200](https://github.com/s0up4200)) - [`10e2d02`](autobrr/qui@10e2d02): fix(qbittorrent): serve stale app info/preferences when refresh fails ([#​2054](autobrr/qui#2054)) ([@​s0up4200](https://github.com/s0up4200)) - [`6d3b04c`](autobrr/qui@6d3b04c): fix(sse): resolve sync-error staleness stamp off the sync-loop callback ([#​2065](autobrr/qui#2065)) ([@​s0up4200](https://github.com/s0up4200)) - [`677e8f4`](autobrr/qui@677e8f4): fix(sse): send torrent page deltas instead of full snapshots ([#​2047](autobrr/qui#2047)) ([@​s0up4200](https://github.com/s0up4200)) - [`a4d252b`](autobrr/qui@a4d252b): fix(sse): size full-sync timeout to prevent permanent disconnect on large instances ([#​2037](autobrr/qui#2037)) ([@​nitrobass24](https://github.com/nitrobass24)) - [`4f375c6`](autobrr/qui@4f375c6): fix(torrents): route unified view exports to the owning instance ([#​2018](autobrr/qui#2018)) ([@​s0up4200](https://github.com/s0up4200)) - [`d49e168`](autobrr/qui@d49e168): fix(web): move instance status bar back to bottom of screen ([#​2024](autobrr/qui#2024)) ([@​OlziYT](https://github.com/OlziYT)) - [`a69ae69`](autobrr/qui@a69ae69): fix(web): prevent framer-motion tab indicator from triggering layout shifts ([#​2025](autobrr/qui#2025)) ([@​OlziYT](https://github.com/OlziYT)) ##### Other Changes - [`860b5bb`](autobrr/qui@860b5bb): chore(deps): bump anthropics/claude-code-action from 1.0.140 to 1.0.148 in the github group ([#​2045](autobrr/qui#2045)) ([@​dependabot](https://github.com/dependabot)\[bot]) - [`0b23a7d`](autobrr/qui@0b23a7d): chore(deps): bump the github group with 2 updates ([#​2031](autobrr/qui#2031)) ([@​dependabot](https://github.com/dependabot)\[bot]) - [`1fea36b`](autobrr/qui@1fea36b): docs: document frontend testing conventions ([#​1984](autobrr/qui#1984)) ([@​nitrobass24](https://github.com/nitrobass24)) - [`f3443ec`](autobrr/qui@f3443ec): docs: promote multi-language support ([#​2009](autobrr/qui#2009)) ([@​s0up4200](https://github.com/s0up4200)) - [`df88e63`](autobrr/qui@df88e63): test(web): add coverage for hooks and lib/api.ts contract layer ([#​1931](autobrr/qui#1931)) ([#​1998](autobrr/qui#1998)) ([@​nitrobass24](https://github.com/nitrobass24)) **Full Changelog**: <autobrr/qui@v1.20.0...v1.21.0> ##### Docker images - `docker pull ghcr.io/autobrr/qui:v1.21.0` - `docker pull ghcr.io/autobrr/qui:latest` ##### What to do next? - Join our [Discord server](https://discord.autobrr.com/qui) Thank you for using qui! </details> --- ### Configuration 📅 **Schedule**: (in timezone Europe/Warsaw) - Branch creation - At any time (no schedule defined) - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about these updates again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Mend Renovate](https://github.com/renovatebot/renovate). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4yNDMuMSIsInVwZGF0ZWRJblZlciI6IjQzLjI0My4xIiwidGFyZ2V0QnJhbmNoIjoibWFzdGVyIiwibGFiZWxzIjpbInJlbm92YXRlL2NvbnRhaW5lciIsInR5cGUvbWlub3IiXX0=--> Reviewed-on: https://git.ajgon.casa/deedee/mark13/pulls/160
Summary
TV cross-seed searches were silently failing on indexers whose free-text search matches only the series name (notably BTN and IPT): the search returned 0 results, so cross-seeds to those trackers were never created — while the same release cross-seeded fine elsewhere.
Reported on Discord by multiple users. The tell-tale: a manual Prowlarr search for
tvshow S01E01returns results on BTN, buttvshow S01E01 1080returns zero.Root cause
For TV content, qui appended a bare resolution token to the free-text Torznab query, producing
q = "<title> S01E01 1080". Indexers that matchqagainst the series name find nothing for the1080token and return zero results. (Sonarr works because it issues a structuredtvsearchwith IDs +season/epand no resolution inq; RSS automation works because it matches the full feed title with noqsearch at all.)The resolution was injected at two sites, both added in #1871 ("refine TV based searching", which also raised the result limit to 100 +
ReturnAllResults):IncludeResolutionfor TV (internal/services/crossseed/search_query.go).idDrivenTVQueryre-extracted the resolution from the release name even when the query itself was clean (internal/services/jackett/service.go).Fix
Drop the resolution token from the TV
qat both sites:SearchQueryOptions{IncludeResolution}apparatus from the cross-seed query builder.S01E01token; removed the now-deadidDrivenTVQuery/firstResolutionToken/searchResolutionTokenhelpers.Kept unchanged: the
S01E01season/episode narrowing, the genericappendSearchTokenseason-token repositioning, and the 100-result /ReturnAllResultsbehavior.Resulting query:
"<title> S01E01"(non-ID) /"S01E01"(ID-driven) — the form confirmed to return results on BTN.Why this is safe
Resolution in
qwas only ever a result-narrowing heuristic, never required for correctness:internal/services/crossseed/matching.gostill strictly rejects resolution mismatches after the search (1080p≠2160pare different files). Dropping the token changes which candidates an indexer returns, not which ones we accept.Testing
make test— full-race -count=1 ./...: pass (0 failures / 0 races).internal/services/crossseed+internal/services/jackettpass; updated the unit tests that asserted the old… 1080/S17 1080p/S22 720queries.make precommit(lint): 0 errors.make build: frontend + Go binary compile.Notes
Net −75 lines. One residual tradeoff (what #1871 was guarding against): without resolution narrowing, a very popular single episode could return more candidates and, worst case, risk truncation at the 100-result cap — small for episode-level searches. If it ever bites, a 0-result fallback retry (search with resolution, retry the indexer without it) would recover the narrowing without breaking series-name-only indexers; deliberately left out here to keep the change minimal.
Summary by CodeRabbit