Fix NFO extraction to handle lockdata+aired but no dateadded
Local Docker Build (Dev) / build-dev (push) Successful in 3s
Local Docker Build (Dev) / build-dev (push) Successful in 3s
The root issue was that NFO extraction methods required both dateadded AND lockdata=true to return any data. But "The Chosen" NFOs have lockdata=true and aired dates but no dateadded field, so extraction returned None and TIER 2 fallback logic never triggered. Changes: - Modified extract_nfoguard_dates_from_nfo() to accept lockdata=true NFOs - Added support for extracting aired dates from episode NFOs - Updated logic to return data when lockdata=true regardless of dateadded - Now TIER 2 will properly apply aired->dateadded fallback logic - Updated version to 2.0.24 This ensures episodes with incomplete NFO metadata get proper fallback processing instead of being ignored by the three-tier system. 🤖 Generated with [Claude Code](https://claude.ai/code)
This commit is contained in:
+16
-12
@@ -138,21 +138,25 @@ class NFOManager:
|
|||||||
# Look for NFOGuard fields
|
# Look for NFOGuard fields
|
||||||
dateadded_elem = root.find('.//dateadded')
|
dateadded_elem = root.find('.//dateadded')
|
||||||
premiered_elem = root.find('.//premiered')
|
premiered_elem = root.find('.//premiered')
|
||||||
|
aired_elem = root.find('.//aired') # For TV episodes
|
||||||
lockdata_elem = root.find('.//lockdata')
|
lockdata_elem = root.find('.//lockdata')
|
||||||
|
|
||||||
# Only consider it NFOGuard-managed if it has dateadded and lockdata
|
# Consider it NFOGuard-managed if it has lockdata=true (with or without dateadded)
|
||||||
if (dateadded_elem is not None and dateadded_elem.text and
|
if lockdata_elem is not None and lockdata_elem.text == "true":
|
||||||
lockdata_elem is not None and lockdata_elem.text == "true"):
|
|
||||||
|
|
||||||
result = {
|
result = {
|
||||||
"dateadded": dateadded_elem.text.strip(),
|
|
||||||
"source": "nfo_file_existing"
|
"source": "nfo_file_existing"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if dateadded_elem is not None and dateadded_elem.text:
|
||||||
|
result["dateadded"] = dateadded_elem.text.strip()
|
||||||
|
|
||||||
if premiered_elem is not None and premiered_elem.text:
|
if premiered_elem is not None and premiered_elem.text:
|
||||||
result["released"] = premiered_elem.text.strip()
|
result["released"] = premiered_elem.text.strip()
|
||||||
|
|
||||||
|
if aired_elem is not None and aired_elem.text:
|
||||||
|
result["aired"] = aired_elem.text.strip()
|
||||||
|
|
||||||
print(f"✅ Found NFOGuard data in NFO: dateadded={result['dateadded']}, released={result.get('released', 'None')}")
|
print(f"✅ Found NFOGuard data in NFO: dateadded={result.get('dateadded', 'None')}, released={result.get('released', 'None')}, aired={result.get('aired', 'None')}")
|
||||||
return result
|
return result
|
||||||
|
|
||||||
except (ET.ParseError, Exception) as e:
|
except (ET.ParseError, Exception) as e:
|
||||||
@@ -178,19 +182,19 @@ class NFOManager:
|
|||||||
aired_elem = root.find('.//aired')
|
aired_elem = root.find('.//aired')
|
||||||
lockdata_elem = root.find('.//lockdata')
|
lockdata_elem = root.find('.//lockdata')
|
||||||
|
|
||||||
# Only consider it NFOGuard-managed if it has dateadded and lockdata
|
# Consider it NFOGuard-managed if it has lockdata=true (with or without dateadded)
|
||||||
if (dateadded_elem is not None and dateadded_elem.text and
|
if lockdata_elem is not None and lockdata_elem.text == "true":
|
||||||
lockdata_elem is not None and lockdata_elem.text == "true"):
|
|
||||||
|
|
||||||
result = {
|
result = {
|
||||||
"dateadded": dateadded_elem.text.strip(),
|
|
||||||
"source": "episode_nfo_existing"
|
"source": "episode_nfo_existing"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if dateadded_elem is not None and dateadded_elem.text:
|
||||||
|
result["dateadded"] = dateadded_elem.text.strip()
|
||||||
|
|
||||||
if aired_elem is not None and aired_elem.text:
|
if aired_elem is not None and aired_elem.text:
|
||||||
result["aired"] = aired_elem.text.strip()
|
result["aired"] = aired_elem.text.strip()
|
||||||
|
|
||||||
print(f"✅ Found NFOGuard data in episode NFO S{season_num:02d}E{episode_num:02d}: dateadded={result['dateadded']}, aired={result.get('aired', 'None')}")
|
print(f"✅ Found NFOGuard data in episode NFO S{season_num:02d}E{episode_num:02d}: dateadded={result.get('dateadded', 'None')}, aired={result.get('aired', 'None')}")
|
||||||
return result
|
return result
|
||||||
|
|
||||||
except (ET.ParseError, Exception) as e:
|
except (ET.ParseError, Exception) as e:
|
||||||
|
|||||||
Reference in New Issue
Block a user