From 99eb7d311d66443db88b9a2bbf0a07c438cd32c5 Mon Sep 17 00:00:00 2001
From: NTFSvolume <172021377+NTFSvolume@users.noreply.github.com>
Date: Wed, 29 Jan 2025 07:13:15 -0500
Subject: [PATCH] fix: delete invalid database rows on startup (#531)

Previously downloaded media files will never be updated so it better to just delete them
---
 cyberdrop_dl/managers/db_manager.py                 | 6 ++++++
 cyberdrop_dl/utils/database/tables/history_table.py | 6 ++++++
 2 files changed, 12 insertions(+)

diff --git a/cyberdrop_dl/managers/db_manager.py b/cyberdrop_dl/managers/db_manager.py
index 5eb64a8f0..53f5f72e0 100644
--- a/cyberdrop_dl/managers/db_manager.py
+++ b/cyberdrop_dl/managers/db_manager.py
@@ -45,6 +45,12 @@ async def startup(self) -> None:
         await self.history_table.startup()
         await self.hash_table.startup()
         await self.temp_referer_table.startup()
+        await self.run_fixes()
+
+    async def run_fixes(self):
+        if not self.manager.cache_manager.get("fixed_empty_download_filenames"):
+            await self.history_table.delete_invalid_rows()
+            self.manager.cache_manager.save("fixed_empty_download_filenames", True)
 
     async def close(self) -> None:
         """Close the DBManager."""
diff --git a/cyberdrop_dl/utils/database/tables/history_table.py b/cyberdrop_dl/utils/database/tables/history_table.py
index 502d35ea3..5b3d93fbf 100644
--- a/cyberdrop_dl/utils/database/tables/history_table.py
+++ b/cyberdrop_dl/utils/database/tables/history_table.py
@@ -50,6 +50,12 @@ async def fix_chevereto_domains(self) -> None:
         await cursor.execute(query)
         await self.db_conn.commit()
 
+    async def delete_invalid_rows(self) -> None:
+        query = """DELETE FROM media WHERE download_filename = '' """
+        cursor = await self.db_conn.cursor()
+        await cursor.execute(query)
+        await self.db_conn.commit()
+
     async def check_complete(self, domain: str, url: URL, referer: URL) -> bool:
         """Checks whether an individual file has completed given its domain and url path."""
         if self.ignore_history: