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:
parent
efa64db04d
commit
a52dda6a7f
4 changed files with 32 additions and 1 deletions
|
|
@ -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 ""
|
||||
|
|
|
|||
|
|
@ -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"),
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
Loading…
Reference in a new issue