updates: web scan
Local Docker Build (Dev) / build-dev (push) Successful in 5s

This commit is contained in:
2025-10-26 13:16:05 -04:00
parent 63ab35b24c
commit a68f7ee4bb
2 changed files with 105 additions and 76 deletions
+103 -75
View File
@@ -2317,33 +2317,49 @@ def register_routes(app, dependencies: dict):
for episode in episodes: for episode in episodes:
# Build NFO path using series path # Build NFO path using series path
series_name = os.path.basename(episode["series_path"]) series_name = os.path.basename(episode["series_path"])
nfo_path = os.path.join(
episode["series_path"],
f"Season {episode['season']:02d}",
f"S{episode['season']:02d}E{episode['episode']:02d}.nfo"
)
# Check if NFO file exists and has dateadded # Try multiple NFO file naming patterns that might exist
if os.path.exists(nfo_path): season_dir = os.path.join(episode["series_path"], f"Season {episode['season']:02d}")
try:
tree = ET.parse(nfo_path) # Handle Season 0 (Specials) naming
root = tree.getroot() if episode['season'] == 0:
dateadded_elem = root.find("dateadded") season_dir = os.path.join(episode["series_path"], "Specials")
# NFO file is missing dateadded element nfo_patterns = [
if dateadded_elem is None or not dateadded_elem.text or not dateadded_elem.text.strip(): f"S{episode['season']:02d}E{episode['episode']:02d}.nfo",
missing_items["episodes"].append({ f"{series_name}-S{episode['season']:02d}E{episode['episode']:02d}*.nfo"
"imdb_id": episode["imdb_id"], ]
"season": episode["season"],
"episode": episode["episode"], nfo_path = None
"series_name": series_name, # Find the actual NFO file that exists
"series_path": episode["series_path"], if os.path.exists(season_dir):
"dateadded": episode["dateadded"], for pattern in nfo_patterns:
"nfo_path": nfo_path, if '*' in pattern:
"reason": "NFO missing dateadded element" # Use glob for wildcard patterns
}) import glob
except ET.ParseError as e: matches = glob.glob(os.path.join(season_dir, pattern))
print(f"⚠️ Could not parse NFO file {nfo_path}: {e}") if matches:
nfo_path = matches[0] # Use first match
break
else:
# Direct file check
test_path = os.path.join(season_dir, pattern)
if os.path.exists(test_path):
nfo_path = test_path
break
# Skip if no NFO file found (already checked above)
if not nfo_path:
continue
# Check if NFO file has dateadded element
try:
tree = ET.parse(nfo_path)
root = tree.getroot()
dateadded_elem = root.find("dateadded")
# NFO file is missing dateadded element
if dateadded_elem is None or not dateadded_elem.text or not dateadded_elem.text.strip():
missing_items["episodes"].append({ missing_items["episodes"].append({
"imdb_id": episode["imdb_id"], "imdb_id": episode["imdb_id"],
"season": episode["season"], "season": episode["season"],
@@ -2352,21 +2368,20 @@ def register_routes(app, dependencies: dict):
"series_path": episode["series_path"], "series_path": episode["series_path"],
"dateadded": episode["dateadded"], "dateadded": episode["dateadded"],
"nfo_path": nfo_path, "nfo_path": nfo_path,
"error": f"Parse error: {str(e)}" "reason": "NFO missing dateadded element"
})
else:
# NFO file doesn't exist at all
if episode["has_video_file"]:
missing_items["episodes"].append({
"imdb_id": episode["imdb_id"],
"season": episode["season"],
"episode": episode["episode"],
"series_name": series_name,
"series_path": episode["series_path"],
"dateadded": episode["dateadded"],
"nfo_path": nfo_path,
"reason": "NFO file does not exist"
}) })
except ET.ParseError as e:
print(f"⚠️ Could not parse NFO file {nfo_path}: {e}")
missing_items["episodes"].append({
"imdb_id": episode["imdb_id"],
"season": episode["season"],
"episode": episode["episode"],
"series_name": series_name,
"series_path": episode["series_path"],
"dateadded": episode["dateadded"],
"nfo_path": nfo_path,
"error": f"Parse error: {str(e)}"
})
# Scan movies # Scan movies
print("🎬 Scanning movies for missing dateadded elements") print("🎬 Scanning movies for missing dateadded elements")
@@ -2387,49 +2402,62 @@ def register_routes(app, dependencies: dict):
for movie in movies: for movie in movies:
# Build NFO path using movie path # Build NFO path using movie path
movie_title = os.path.basename(movie["path"]) movie_title = os.path.basename(movie["path"])
nfo_path = os.path.join(
movie["path"],
f"{movie_title}.nfo"
)
# Check if NFO file exists and has dateadded # Try multiple NFO file naming patterns that might exist
if os.path.exists(nfo_path): nfo_patterns = [
try: f"{movie_title}.nfo",
tree = ET.parse(nfo_path) "movie.nfo",
root = tree.getroot() f"{movie_title}*.nfo"
dateadded_elem = root.find("dateadded") ]
# NFO file is missing dateadded element nfo_path = None
if dateadded_elem is None or not dateadded_elem.text or not dateadded_elem.text.strip(): # Find the actual NFO file that exists
missing_items["movies"].append({ if os.path.exists(movie["path"]):
"imdb_id": movie["imdb_id"], for pattern in nfo_patterns:
"title": movie_title, if '*' in pattern:
"path": movie["path"], # Use glob for wildcard patterns
"dateadded": movie["dateadded"], import glob
"nfo_path": nfo_path, matches = glob.glob(os.path.join(movie["path"], pattern))
"reason": "NFO missing dateadded element" if matches:
}) nfo_path = matches[0] # Use first match
except ET.ParseError as e: break
print(f"⚠️ Could not parse NFO file {nfo_path}: {e}") else:
# Direct file check
test_path = os.path.join(movie["path"], pattern)
if os.path.exists(test_path):
nfo_path = test_path
break
# Skip if no NFO file found
if not nfo_path:
continue
# Check if NFO file has dateadded element
try:
tree = ET.parse(nfo_path)
root = tree.getroot()
dateadded_elem = root.find("dateadded")
# NFO file is missing dateadded element
if dateadded_elem is None or not dateadded_elem.text or not dateadded_elem.text.strip():
missing_items["movies"].append({ missing_items["movies"].append({
"imdb_id": movie["imdb_id"], "imdb_id": movie["imdb_id"],
"title": movie_title, "title": movie_title,
"path": movie["path"], "path": movie["path"],
"dateadded": movie["dateadded"], "dateadded": movie["dateadded"],
"nfo_path": nfo_path, "nfo_path": nfo_path,
"error": f"Parse error: {str(e)}" "reason": "NFO missing dateadded element"
})
else:
# NFO file doesn't exist at all
if movie["has_video_file"]:
missing_items["movies"].append({
"imdb_id": movie["imdb_id"],
"title": movie_title,
"path": movie["path"],
"dateadded": movie["dateadded"],
"nfo_path": nfo_path,
"reason": "NFO file does not exist"
}) })
except ET.ParseError as e:
print(f"⚠️ Could not parse NFO file {nfo_path}: {e}")
missing_items["movies"].append({
"imdb_id": movie["imdb_id"],
"title": movie_title,
"path": movie["path"],
"dateadded": movie["dateadded"],
"nfo_path": nfo_path,
"error": f"Parse error: {str(e)}"
})
total_missing = len(missing_items["episodes"]) + len(missing_items["movies"]) total_missing = len(missing_items["episodes"]) + len(missing_items["movies"])
print(f"✅ NFO repair scan complete: {total_missing} items missing dateadded elements") print(f"✅ NFO repair scan complete: {total_missing} items missing dateadded elements")
+2 -1
View File
@@ -1570,9 +1570,10 @@ async def get_episodes_missing_nfo_dateadded(dependencies: dict):
"season": episode["season"], "season": episode["season"],
"episode": episode["episode"], "episode": episode["episode"],
"series_name": episode["series_name"], "series_name": episode["series_name"],
"episode_name": episode["episode_name"], "series_path": episode.get("series_path"),
"dateadded": episode["dateadded"], "dateadded": episode["dateadded"],
"nfo_path": episode["nfo_path"], "nfo_path": episode["nfo_path"],
"reason": episode.get("reason", "NFO missing dateadded element"),
"media_type": "episode", "media_type": "episode",
"nfo_exists": True, "nfo_exists": True,
"dateadded_in_nfo": False, "dateadded_in_nfo": False,