Add configurable TMDB release type priority system
- Added TMDB_TYPE_PRIORITY environment variable for user-configurable release type preferences - Default priority: 4,5,3,2,6,1 (Digital → Physical → Theatrical → Limited → TV → Premiere) - Replaces random first-available selection with intelligent priority-based selection - Enhanced logging shows selected type and full priority order - Users can customize priority based on their preferences (e.g. theatrical first) Version bumped to 0.2.22
This commit is contained in:
@@ -98,6 +98,14 @@ ENABLE_SMART_DATE_VALIDATION=true
|
|||||||
# If digital/physical is more than this many years after theatrical, prefer theatrical instead
|
# If digital/physical is more than this many years after theatrical, prefer theatrical instead
|
||||||
MAX_RELEASE_DATE_GAP_YEARS=10
|
MAX_RELEASE_DATE_GAP_YEARS=10
|
||||||
|
|
||||||
|
# TMDB country for regional release date preferences
|
||||||
|
TMDB_COUNTRY=US
|
||||||
|
|
||||||
|
# TMDB release type priority (comma-separated numbers)
|
||||||
|
# 1=Premiere, 2=Limited Theatrical, 3=Theatrical, 4=Digital, 5=Physical, 6=TV Premiere
|
||||||
|
# Default: 4,5,3,2,6,1 (Digital → Physical → Theatrical → Limited → TV → Premiere)
|
||||||
|
TMDB_TYPE_PRIORITY=4,5,3,2,6,1
|
||||||
|
|
||||||
# When to query APIs: always, if_missing, never
|
# When to query APIs: always, if_missing, never
|
||||||
MOVIE_POLL_MODE=always
|
MOVIE_POLL_MODE=always
|
||||||
|
|
||||||
|
|||||||
@@ -104,25 +104,53 @@ class TMDBClient:
|
|||||||
releases = entry.get("release_dates", [])
|
releases = entry.get("release_dates", [])
|
||||||
_log("INFO", f"🎬 TMDB: Release types available: {[r.get('type') for r in releases]}")
|
_log("INFO", f"🎬 TMDB: Release types available: {[r.get('type') for r in releases]}")
|
||||||
|
|
||||||
|
# Collect all available releases with their types and dates
|
||||||
|
available_releases = []
|
||||||
for release in releases:
|
for release in releases:
|
||||||
release_type = release.get("type")
|
release_type = release.get("type")
|
||||||
release_date = release.get("release_date")
|
release_date = release.get("release_date")
|
||||||
_log("INFO", f"📅 TMDB: Type {release_type}, Date: {release_date}")
|
_log("INFO", f"📅 TMDB: Type {release_type}, Date: {release_date}")
|
||||||
|
|
||||||
# Accept any reasonable TMDB release type for better coverage
|
|
||||||
if release_date:
|
if release_date:
|
||||||
parsed_date = _parse_date_to_iso(release_date)
|
parsed_date = _parse_date_to_iso(release_date)
|
||||||
release_type_names = {
|
if parsed_date:
|
||||||
1: "Premiere", 2: "Limited Theatrical", 3: "Theatrical",
|
available_releases.append((release_type, parsed_date))
|
||||||
4: "Digital", 5: "Physical", 6: "TV Premiere"
|
|
||||||
}
|
|
||||||
type_name = release_type_names.get(release_type, f"Type {release_type}")
|
|
||||||
_log("INFO", f"✅ TMDB: Found {type_name} release date: {parsed_date}")
|
|
||||||
return parsed_date
|
|
||||||
|
|
||||||
_log("WARNING", f"❌ TMDB: No digital release found for {imdb_id} in {self.primary_country}")
|
# Apply TMDB release type priority order
|
||||||
|
tmdb_priority = self._get_tmdb_type_priority()
|
||||||
|
for preferred_type in tmdb_priority:
|
||||||
|
for release_type, parsed_date in available_releases:
|
||||||
|
if release_type == preferred_type:
|
||||||
|
release_type_names = {
|
||||||
|
1: "Premiere", 2: "Limited Theatrical", 3: "Theatrical",
|
||||||
|
4: "Digital", 5: "Physical", 6: "TV Premiere"
|
||||||
|
}
|
||||||
|
type_name = release_type_names.get(release_type, f"Type {release_type}")
|
||||||
|
_log("INFO", f"✅ TMDB: Selected {type_name} release date: {parsed_date} (priority: {tmdb_priority})")
|
||||||
|
return parsed_date
|
||||||
|
|
||||||
|
_log("WARNING", f"❌ TMDB: No release dates found for {imdb_id} in {self.primary_country}")
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
def _get_tmdb_type_priority(self) -> List[int]:
|
||||||
|
"""Get TMDB release type priority order from environment"""
|
||||||
|
# Default priority: Digital first, then Physical, then Theatrical, then others
|
||||||
|
default_priority = "4,5,3,2,6,1" # digital,physical,theatrical,limited,tv,premiere
|
||||||
|
|
||||||
|
priority_str = os.environ.get("TMDB_TYPE_PRIORITY", default_priority)
|
||||||
|
try:
|
||||||
|
# Parse comma-separated numbers
|
||||||
|
priority_list = [int(x.strip()) for x in priority_str.split(",") if x.strip().isdigit()]
|
||||||
|
if priority_list:
|
||||||
|
_log("DEBUG", f"TMDB type priority: {priority_list}")
|
||||||
|
return priority_list
|
||||||
|
else:
|
||||||
|
_log("WARNING", f"Invalid TMDB_TYPE_PRIORITY '{priority_str}', using default")
|
||||||
|
return [4, 5, 3, 2, 6, 1]
|
||||||
|
except Exception as e:
|
||||||
|
_log("WARNING", f"Error parsing TMDB_TYPE_PRIORITY: {e}, using default")
|
||||||
|
return [4, 5, 3, 2, 6, 1]
|
||||||
|
|
||||||
def get_theatrical_release_date(self, imdb_id: str) -> Optional[str]:
|
def get_theatrical_release_date(self, imdb_id: str) -> Optional[str]:
|
||||||
"""Get theatrical release date for a movie"""
|
"""Get theatrical release date for a movie"""
|
||||||
movie = self.find_by_imdb(imdb_id)
|
movie = self.find_by_imdb(imdb_id)
|
||||||
|
|||||||
Reference in New Issue
Block a user