fixes: debugs for 422 and delete option
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:
@@ -294,6 +294,123 @@ class NFOGuardDatabase:
|
||||
"database_type": "postgresql"
|
||||
}
|
||||
|
||||
def delete_episode(self, imdb_id: str, season: int, episode: int) -> bool:
|
||||
"""
|
||||
Delete a specific episode from the database
|
||||
|
||||
Args:
|
||||
imdb_id: Series IMDb ID
|
||||
season: Season number
|
||||
episode: Episode number
|
||||
|
||||
Returns:
|
||||
True if episode was deleted, False if not found
|
||||
"""
|
||||
with self.get_connection() as conn:
|
||||
cursor = conn.cursor()
|
||||
|
||||
cursor.execute("""
|
||||
DELETE FROM episodes
|
||||
WHERE imdb_id = %s AND season = %s AND episode = %s
|
||||
""", (imdb_id, season, episode))
|
||||
|
||||
deleted_count = cursor.rowcount
|
||||
conn.commit()
|
||||
|
||||
return deleted_count > 0
|
||||
|
||||
def delete_series_episodes(self, imdb_id: str) -> int:
|
||||
"""
|
||||
Delete all episodes for a series from the database
|
||||
|
||||
Args:
|
||||
imdb_id: Series IMDb ID
|
||||
|
||||
Returns:
|
||||
Number of episodes deleted
|
||||
"""
|
||||
with self.get_connection() as conn:
|
||||
cursor = conn.cursor()
|
||||
|
||||
cursor.execute("""
|
||||
DELETE FROM episodes
|
||||
WHERE imdb_id = %s
|
||||
""", (imdb_id,))
|
||||
|
||||
deleted_count = cursor.rowcount
|
||||
conn.commit()
|
||||
|
||||
return deleted_count
|
||||
|
||||
def delete_orphaned_episodes(self) -> List[Dict]:
|
||||
"""
|
||||
Find and delete episodes that don't have corresponding video files on disk
|
||||
This requires checking filesystem for each episode, so use carefully
|
||||
|
||||
Returns:
|
||||
List of deleted episodes with their details
|
||||
"""
|
||||
from utils.file_utils import find_episodes_on_disk
|
||||
from pathlib import Path
|
||||
|
||||
deleted_episodes = []
|
||||
|
||||
with self.get_connection() as conn:
|
||||
cursor = conn.cursor()
|
||||
|
||||
# Get all series with their paths
|
||||
cursor.execute("""
|
||||
SELECT DISTINCT imdb_id, path FROM series
|
||||
""")
|
||||
|
||||
series_list = cursor.fetchall()
|
||||
|
||||
for series in series_list:
|
||||
imdb_id = series['imdb_id']
|
||||
series_path = Path(series['path'])
|
||||
|
||||
if not series_path.exists():
|
||||
continue
|
||||
|
||||
# Get episodes on disk
|
||||
disk_episodes = find_episodes_on_disk(series_path)
|
||||
disk_episode_keys = set(disk_episodes.keys())
|
||||
|
||||
# Get episodes in database
|
||||
cursor.execute("""
|
||||
SELECT season, episode, dateadded, source
|
||||
FROM episodes
|
||||
WHERE imdb_id = %s
|
||||
""", (imdb_id,))
|
||||
|
||||
db_episodes = cursor.fetchall()
|
||||
|
||||
# Find orphaned episodes (in DB but not on disk)
|
||||
for db_episode in db_episodes:
|
||||
season = db_episode['season']
|
||||
episode = db_episode['episode']
|
||||
episode_key = (season, episode)
|
||||
|
||||
if episode_key not in disk_episode_keys:
|
||||
# Episode is orphaned - delete it
|
||||
cursor.execute("""
|
||||
DELETE FROM episodes
|
||||
WHERE imdb_id = %s AND season = %s AND episode = %s
|
||||
""", (imdb_id, season, episode))
|
||||
|
||||
deleted_episodes.append({
|
||||
'imdb_id': imdb_id,
|
||||
'season': season,
|
||||
'episode': episode,
|
||||
'dateadded': db_episode['dateadded'],
|
||||
'source': db_episode['source'],
|
||||
'series_path': str(series_path)
|
||||
})
|
||||
|
||||
conn.commit()
|
||||
|
||||
return deleted_episodes
|
||||
|
||||
def close(self):
|
||||
"""Close all database connections"""
|
||||
if hasattr(self._local, 'connection'):
|
||||
|
||||
Reference in New Issue
Block a user