web: update web interface for tv eps missing date
Local Docker Build (Dev) / build-dev (push) Successful in 4s
Local Docker Build (Dev) / build-dev (push) Successful in 4s
This commit is contained in:
+6
-1
@@ -18,7 +18,7 @@ from api.models import (
|
||||
from api.web_routes import (
|
||||
get_movies_list, get_tv_series_list, get_series_episodes, get_series_sources, get_missing_dates_report,
|
||||
get_dashboard_stats, update_movie_date, update_episode_date, bulk_update_source,
|
||||
get_movie_date_options, get_episode_date_options
|
||||
get_movie_date_options, get_episode_date_options, debug_series_date_distribution
|
||||
)
|
||||
|
||||
|
||||
@@ -1059,6 +1059,11 @@ def register_routes(app, dependencies: dict):
|
||||
"""Get list of available episode sources for filtering"""
|
||||
return await get_series_sources(dependencies)
|
||||
|
||||
@app.get("/api/debug/series-date-distribution")
|
||||
async def _debug_series_dates():
|
||||
"""Debug endpoint showing TV series date distribution"""
|
||||
return await debug_series_date_distribution(dependencies)
|
||||
|
||||
@app.get("/api/reports/missing-dates")
|
||||
async def _missing_dates_report():
|
||||
"""Get report of content missing dateadded"""
|
||||
|
||||
@@ -209,6 +209,65 @@ async def get_series_sources(dependencies: dict):
|
||||
return {"sources": sources}
|
||||
|
||||
|
||||
async def debug_series_date_distribution(dependencies: dict):
|
||||
"""Debug function to show TV series date distribution"""
|
||||
db = dependencies["db"]
|
||||
|
||||
with db.get_connection() as conn:
|
||||
cursor = conn.cursor()
|
||||
|
||||
# Get series with episode date statistics
|
||||
cursor.execute("""
|
||||
SELECT
|
||||
s.imdb_id,
|
||||
s.path,
|
||||
COUNT(e.episode) as total_episodes,
|
||||
COUNT(CASE WHEN e.dateadded IS NOT NULL AND e.dateadded != '' THEN 1 END) as episodes_with_dates,
|
||||
COUNT(CASE WHEN e.dateadded IS NULL OR e.dateadded = '' THEN 1 END) as episodes_without_dates
|
||||
FROM series s
|
||||
LEFT JOIN episodes e ON s.imdb_id = e.imdb_id
|
||||
GROUP BY s.imdb_id, s.path
|
||||
HAVING COUNT(e.episode) > 0
|
||||
ORDER BY total_episodes DESC
|
||||
LIMIT 50
|
||||
""")
|
||||
|
||||
series_stats = []
|
||||
complete_count = 0
|
||||
incomplete_count = 0
|
||||
none_count = 0
|
||||
|
||||
for row in cursor.fetchall():
|
||||
stats = dict(row)
|
||||
total = stats['total_episodes']
|
||||
with_dates = stats['episodes_with_dates']
|
||||
without_dates = stats['episodes_without_dates']
|
||||
|
||||
if without_dates == 0:
|
||||
category = "complete"
|
||||
complete_count += 1
|
||||
elif with_dates == 0:
|
||||
category = "none"
|
||||
none_count += 1
|
||||
else:
|
||||
category = "incomplete"
|
||||
incomplete_count += 1
|
||||
|
||||
stats['category'] = category
|
||||
stats['title'] = stats['path'].split('/')[-1] if stats['path'] else stats['imdb_id']
|
||||
series_stats.append(stats)
|
||||
|
||||
return {
|
||||
"series_sample": series_stats[:20], # First 20 for debugging
|
||||
"distribution": {
|
||||
"complete": complete_count,
|
||||
"incomplete": incomplete_count,
|
||||
"none": none_count,
|
||||
"total": complete_count + incomplete_count + none_count
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
async def get_series_episodes(dependencies: dict, imdb_id: str):
|
||||
"""Get all episodes for a specific TV series"""
|
||||
db = dependencies["db"]
|
||||
|
||||
Reference in New Issue
Block a user