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:
@@ -104,25 +104,53 @@ class TMDBClient:
|
||||
releases = entry.get("release_dates", [])
|
||||
_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:
|
||||
release_type = release.get("type")
|
||||
release_date = release.get("release_date")
|
||||
_log("INFO", f"📅 TMDB: Type {release_type}, Date: {release_date}")
|
||||
|
||||
# Accept any reasonable TMDB release type for better coverage
|
||||
if release_date:
|
||||
parsed_date = _parse_date_to_iso(release_date)
|
||||
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: Found {type_name} release date: {parsed_date}")
|
||||
return parsed_date
|
||||
if parsed_date:
|
||||
available_releases.append((release_type, parsed_date))
|
||||
|
||||
# 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 digital release found for {imdb_id} in {self.primary_country}")
|
||||
_log("WARNING", f"❌ TMDB: No release dates found for {imdb_id} in {self.primary_country}")
|
||||
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]:
|
||||
"""Get theatrical release date for a movie"""
|
||||
movie = self.find_by_imdb(imdb_id)
|
||||
|
||||
Reference in New Issue
Block a user