|
5 | 5 | """ |
6 | 6 |
|
7 | 7 | import requests |
| 8 | +import time |
| 9 | +import datetime |
8 | 10 | from typing import List, Dict, Any, Optional, Union |
9 | 11 | from utils.logger import logger, debug_log |
10 | | -from config import API_KEY, API_URL, API_TIMEOUT |
| 12 | +from config import API_KEY, API_URL, API_TIMEOUT, MONITORED_ONLY, SKIP_FUTURE_RELEASES |
11 | 13 |
|
12 | 14 | # Create a session for reuse |
13 | 15 | session = requests.Session() |
@@ -62,17 +64,52 @@ def get_cutoff_unmet() -> List[Dict]: |
62 | 64 | def get_missing_movies() -> List[Dict]: |
63 | 65 | """ |
64 | 66 | Get a list of movies that are missing files. |
65 | | - Filters based on MONITORED_ONLY setting. |
| 67 | + Filters based on MONITORED_ONLY setting and optionally |
| 68 | + excludes future releases. |
66 | 69 | """ |
67 | 70 | movies = get_movies() |
68 | 71 |
|
69 | 72 | if not movies: |
70 | 73 | return [] |
71 | 74 |
|
72 | | - if MONITORED_ONLY: |
73 | | - return [m for m in movies if m.get('monitored') and not m.get('hasFile')] |
74 | | - else: |
75 | | - return [m for m in movies if not m.get('hasFile')] |
| 75 | + missing_movies = [] |
| 76 | + |
| 77 | + # Get current date in ISO format (YYYY-MM-DD) for date comparison |
| 78 | + current_date = datetime.datetime.now().strftime("%Y-%m-%d") |
| 79 | + |
| 80 | + for movie in movies: |
| 81 | + # Skip if not missing a file |
| 82 | + if movie.get('hasFile'): |
| 83 | + continue |
| 84 | + |
| 85 | + # Apply monitored filter if needed |
| 86 | + if MONITORED_ONLY and not movie.get('monitored'): |
| 87 | + continue |
| 88 | + |
| 89 | + # Skip future releases if enabled |
| 90 | + if SKIP_FUTURE_RELEASES: |
| 91 | + # Check physical, digital, and cinema release dates |
| 92 | + physical_release = movie.get('physicalRelease') |
| 93 | + digital_release = movie.get('digitalRelease') |
| 94 | + in_cinemas = movie.get('inCinemas') |
| 95 | + |
| 96 | + # Use the earliest available release date for comparison |
| 97 | + release_date = None |
| 98 | + if physical_release: |
| 99 | + release_date = physical_release |
| 100 | + elif digital_release: |
| 101 | + release_date = digital_release |
| 102 | + elif in_cinemas: |
| 103 | + release_date = in_cinemas |
| 104 | + |
| 105 | + # Skip if release date exists and is in the future |
| 106 | + if release_date and release_date > current_date: |
| 107 | + logger.debug(f"Skipping future release '{movie.get('title')}' with date {release_date}") |
| 108 | + continue |
| 109 | + |
| 110 | + missing_movies.append(movie) |
| 111 | + |
| 112 | + return missing_movies |
76 | 113 |
|
77 | 114 | def refresh_movie(movie_id: int) -> Optional[Dict]: |
78 | 115 | """Refresh a movie by ID""" |
|
0 commit comments