Video quality: recognize plain WEB + accept resolution-only releases

Two over-rejections that filtered out legit releases as "unknown quality":
- the source parser only matched WEB-DL/WEBDL, not plain "WEB" (very common)
- a release with a known resolution but no recognized source had no tier

Now plain WEB parses as web-dl, and a resolution-only release assumes web so
it lands on a tier instead of being rejected (ffprobe verifies the real quality
after download). Truly quality-less packs still reject. Tests added.
This commit is contained in:
BoulderBadgeDad 2026-06-21 02:11:40 -07:00
parent efa64db04d
commit a52dda6a7f
4 changed files with 32 additions and 1 deletions

View file

@ -109,7 +109,14 @@ def tier_key(source, resolution) -> str:
ladder tier (junk sources like cam/screener have no tier)."""
pre = _SRC_TIER.get(source)
if not pre:
return ""
# A loosely-named release with a known resolution but NO recognised source
# (very common — lots of releases tag '1080p' but not the source) → assume web
# so it still lands on a tier instead of being rejected as 'unknown quality'.
# ffprobe verifies the real quality after download.
if resolution and not source:
pre = "web"
else:
return ""
if pre == "dvd":
return "dvd"
return (pre + "-" + resolution) if resolution else ""

View file

@ -29,6 +29,7 @@ _SOURCE = [
(re.compile(r"\b(blu-?ray|bdrip|brrip|bd25|bd50)\b", re.I), "bluray"),
(re.compile(r"\b(web-?dl|web\.?dl|amzn|nf|dsnp|hmax|atvp)\b", re.I), "web-dl"),
(re.compile(r"\bweb-?rip\b", re.I), "webrip"),
(re.compile(r"\bweb\b", re.I), "web-dl"), # plain "WEB" (very common) — treat as WEB-DL
(re.compile(r"\bhdtv\b", re.I), "hdtv"),
(re.compile(r"\b(dvdrip|dvd)\b", re.I), "dvd"),
(re.compile(r"\b(cam|hdcam|ts|telesync|hdts)\b", re.I), "cam"),

View file

@ -6,10 +6,14 @@ from __future__ import annotations
from core.video.quality_eval import (
evaluate_owned,
evaluate_release,
meets_cutoff,
resolution_label,
resolution_rank,
tier_key,
)
from core.video.quality_profile import default_profile
from core.video.release_parse import parse_release
def test_resolution_rank_agrees_across_formats():
@ -64,3 +68,14 @@ def test_evaluate_owned_always_upgrade_when_cutoff_empty():
def test_evaluate_owned_handles_garbage_inputs():
assert evaluate_owned(None, None)["meets"] in (True, False) # never raises
assert evaluate_owned("nope", 42)["resolution_label"] == ""
def test_resolution_only_release_still_grabbable():
# a known resolution with NO recognised source assumes web → lands on a tier
# (instead of being rejected as 'unknown quality'); ffprobe verifies after.
assert tier_key(None, "1080p") == "web-1080p"
assert tier_key("web-dl", "720p") == "web-720p" # plain WEB now resolves here
assert tier_key(None, None) == "" # no res + no source → still unknown
v = evaluate_release(parse_release("Show S01E01 720p"), default_profile(),
scope="episode", want_season=1, want_episode=1)
assert v["accepted"] is True

View file

@ -63,3 +63,11 @@ def test_garbage_never_raises():
p = parse_release(None)
assert p["resolution"] is None and p["title"] == ""
assert parse_release(12345)["title"] == "12345"
def test_plain_web_is_recognised_as_a_source():
# 'WEB' (not just 'WEB-DL') is extremely common — must parse as web-dl
assert parse_release("Show S01E01 1080p WEB h264-GRP")["source"] == "web-dl"
assert parse_release("Movie.2020.WEB.x265")["source"] == "web-dl"
# but it must NOT mis-grab the WEB inside WEBRip
assert parse_release("Movie 1080p WEBRip x264")["source"] == "webrip"