From 75aa410f9896c92def1cbcc383f53ee67ec736df Mon Sep 17 00:00:00 2001 From: Lukas Date: Sun, 26 Oct 2025 19:14:11 +0100 Subject: [PATCH] fixed: recan issues --- data/analytics.json | 16 - data/config.json | 4 +- .../config_backup_20251025_171511.json | 24 - .../config_backup_20251025_171530.json | 24 - .../config_backup_20251025_171647.json | 24 - .../config_backup_20251025_171912.json | 24 - .../config_backup_20251025_171937.json | 24 - .../config_backup_20251025_172020.json | 24 - .../config_backup_20251025_172138.json | 24 - .../config_backup_20251025_172359.json | 24 - .../config_backup_20251025_172550.json | 24 - data/download_queue.json | 425 ------------------ src/server/api/anime.py | 25 +- src/server/web/static/js/app.js | 17 +- 14 files changed, 37 insertions(+), 666 deletions(-) delete mode 100644 data/analytics.json delete mode 100644 data/config_backups/config_backup_20251025_171511.json delete mode 100644 data/config_backups/config_backup_20251025_171530.json delete mode 100644 data/config_backups/config_backup_20251025_171647.json delete mode 100644 data/config_backups/config_backup_20251025_171912.json delete mode 100644 data/config_backups/config_backup_20251025_171937.json delete mode 100644 data/config_backups/config_backup_20251025_172020.json delete mode 100644 data/config_backups/config_backup_20251025_172138.json delete mode 100644 data/config_backups/config_backup_20251025_172359.json delete mode 100644 data/config_backups/config_backup_20251025_172550.json delete mode 100644 data/download_queue.json diff --git a/data/analytics.json b/data/analytics.json deleted file mode 100644 index 278cac0..0000000 --- a/data/analytics.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "created_at": "2025-10-23T20:54:38.147564", - "last_updated": "2025-10-23T20:54:38.147574", - "download_stats": { - "total_downloads": 0, - "successful_downloads": 0, - "failed_downloads": 0, - "total_bytes_downloaded": 0, - "average_speed_mbps": 0.0, - "success_rate": 0.0, - "average_duration_seconds": 0.0 - }, - "series_popularity": [], - "storage_history": [], - "performance_samples": [] -} \ No newline at end of file diff --git a/data/config.json b/data/config.json index 6a181ea..d4b2998 100644 --- a/data/config.json +++ b/data/config.json @@ -17,8 +17,8 @@ "keep_days": 30 }, "other": { - "anime_directory": "/home/lukas/Volume/serien/", - "master_password_hash": "$pbkdf2-sha256$29000$gdCa897bm/Oec07J2RvDOA$L60V4C1PUEGWC3WtX.32koXvTA12P6J2rYPXTIPFg5g" + "master_password_hash": "$pbkdf2-sha256$29000$pRSCMOZcy1mLUeo951zrXQ$8/lWKoHbJJQDk2j7fM9RYrpLyxu3xwJXSpISYfs7jnM", + "anime_directory": "/home/lukas/Volume/serien/" }, "version": "1.0.0" } \ No newline at end of file diff --git a/data/config_backups/config_backup_20251025_171511.json b/data/config_backups/config_backup_20251025_171511.json deleted file mode 100644 index cc5be5f..0000000 --- a/data/config_backups/config_backup_20251025_171511.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "name": "Aniworld", - "data_dir": "data", - "scheduler": { - "enabled": true, - "interval_minutes": 60 - }, - "logging": { - "level": "INFO", - "file": null, - "max_bytes": null, - "backup_count": 3 - }, - "backup": { - "enabled": false, - "path": "data/backups", - "keep_days": 30 - }, - "other": { - "anime_directory": "/home/lukas/Volume/serien/", - "master_password_hash": "$pbkdf2-sha256$29000$w3jPmfM.B8DY2xsjJCQkZA$BT52/04WG0hpMP/4uRnJUgBjYyrLxEwQodBoa6mKVOQ" - }, - "version": "1.0.0" -} \ No newline at end of file diff --git a/data/config_backups/config_backup_20251025_171530.json b/data/config_backups/config_backup_20251025_171530.json deleted file mode 100644 index 54deccb..0000000 --- a/data/config_backups/config_backup_20251025_171530.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "name": "Aniworld", - "data_dir": "data", - "scheduler": { - "enabled": true, - "interval_minutes": 60 - }, - "logging": { - "level": "INFO", - "file": null, - "max_bytes": null, - "backup_count": 3 - }, - "backup": { - "enabled": false, - "path": "data/backups", - "keep_days": 30 - }, - "other": { - "anime_directory": "/home/lukas/Volume/serien/", - "master_password_hash": "$pbkdf2-sha256$29000$fw.hFMI4JyRkrHXufU/J2Q$Lu.CArOq.fQ32HPX8IeiH/dNX1NOjOqVQl1uXuoTP4k" - }, - "version": "1.0.0" -} \ No newline at end of file diff --git a/data/config_backups/config_backup_20251025_171647.json b/data/config_backups/config_backup_20251025_171647.json deleted file mode 100644 index fd37f90..0000000 --- a/data/config_backups/config_backup_20251025_171647.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "name": "Aniworld", - "data_dir": "data", - "scheduler": { - "enabled": true, - "interval_minutes": 60 - }, - "logging": { - "level": "INFO", - "file": null, - "max_bytes": null, - "backup_count": 3 - }, - "backup": { - "enabled": false, - "path": "data/backups", - "keep_days": 30 - }, - "other": { - "anime_directory": "/home/lukas/Volume/serien/", - "master_password_hash": "$pbkdf2-sha256$29000$d.7dG8N4r/V.zzknxHiv9Q$pL5O6lAj4YhG1VNJYQKyojEti1yhvfxkjmP.O3OMXMk" - }, - "version": "1.0.0" -} \ No newline at end of file diff --git a/data/config_backups/config_backup_20251025_171912.json b/data/config_backups/config_backup_20251025_171912.json deleted file mode 100644 index a070eb1..0000000 --- a/data/config_backups/config_backup_20251025_171912.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "name": "Aniworld", - "data_dir": "data", - "scheduler": { - "enabled": true, - "interval_minutes": 60 - }, - "logging": { - "level": "INFO", - "file": null, - "max_bytes": null, - "backup_count": 3 - }, - "backup": { - "enabled": false, - "path": "data/backups", - "keep_days": 30 - }, - "other": { - "anime_directory": "/home/lukas/Volume/serien/", - "master_password_hash": "$pbkdf2-sha256$29000$aS1l7H3vnbM2JqT03jun1A$ZDIgiVSD5j6Gj/WrOJObZzhB/UBTDzjg3KebQj62ae0" - }, - "version": "1.0.0" -} \ No newline at end of file diff --git a/data/config_backups/config_backup_20251025_171937.json b/data/config_backups/config_backup_20251025_171937.json deleted file mode 100644 index 648b6ff..0000000 --- a/data/config_backups/config_backup_20251025_171937.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "name": "Aniworld", - "data_dir": "data", - "scheduler": { - "enabled": true, - "interval_minutes": 60 - }, - "logging": { - "level": "INFO", - "file": null, - "max_bytes": null, - "backup_count": 3 - }, - "backup": { - "enabled": false, - "path": "data/backups", - "keep_days": 30 - }, - "other": { - "anime_directory": "/home/lukas/Volume/serien/", - "master_password_hash": "$pbkdf2-sha256$29000$s3YOYUyplRJiDOGcs3autQ$/Uxgp3nQSzYwKYB1tt7H230PL.zR7DQrB4Dp/8Y0xBI" - }, - "version": "1.0.0" -} \ No newline at end of file diff --git a/data/config_backups/config_backup_20251025_172020.json b/data/config_backups/config_backup_20251025_172020.json deleted file mode 100644 index 8310997..0000000 --- a/data/config_backups/config_backup_20251025_172020.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "name": "Aniworld", - "data_dir": "data", - "scheduler": { - "enabled": true, - "interval_minutes": 60 - }, - "logging": { - "level": "INFO", - "file": null, - "max_bytes": null, - "backup_count": 3 - }, - "backup": { - "enabled": false, - "path": "data/backups", - "keep_days": 30 - }, - "other": { - "anime_directory": "/home/lukas/Volume/serien/", - "master_password_hash": "$pbkdf2-sha256$29000$RigFgPD.n9O69/5fq9Xauw$Vy2ak.30Y89iiSq9NOWKNxTp49ZyuZcIUCyzmyMgiCc" - }, - "version": "1.0.0" -} \ No newline at end of file diff --git a/data/config_backups/config_backup_20251025_172138.json b/data/config_backups/config_backup_20251025_172138.json deleted file mode 100644 index 65e68a5..0000000 --- a/data/config_backups/config_backup_20251025_172138.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "name": "Aniworld", - "data_dir": "data", - "scheduler": { - "enabled": true, - "interval_minutes": 60 - }, - "logging": { - "level": "INFO", - "file": null, - "max_bytes": null, - "backup_count": 3 - }, - "backup": { - "enabled": false, - "path": "data/backups", - "keep_days": 30 - }, - "other": { - "anime_directory": "/home/lukas/Volume/serien/", - "master_password_hash": "$pbkdf2-sha256$29000$VQohxNhb6x0j5Lz3XqsVIg$yNJHqC7RxzhwScZVDmOY60CrCQG5RQbzCBGVz8FZrf0" - }, - "version": "1.0.0" -} \ No newline at end of file diff --git a/data/config_backups/config_backup_20251025_172359.json b/data/config_backups/config_backup_20251025_172359.json deleted file mode 100644 index 232edb6..0000000 --- a/data/config_backups/config_backup_20251025_172359.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "name": "Aniworld", - "data_dir": "data", - "scheduler": { - "enabled": true, - "interval_minutes": 60 - }, - "logging": { - "level": "INFO", - "file": null, - "max_bytes": null, - "backup_count": 3 - }, - "backup": { - "enabled": false, - "path": "data/backups", - "keep_days": 30 - }, - "other": { - "anime_directory": "/home/lukas/Volume/serien/", - "master_password_hash": "$pbkdf2-sha256$29000$I8S41/p/D2HsXYsxhvCeUw$0MEEWNZA3RJlxKtqZ8TDqahhDlueTvHWE100uo115R4" - }, - "version": "1.0.0" -} \ No newline at end of file diff --git a/data/config_backups/config_backup_20251025_172550.json b/data/config_backups/config_backup_20251025_172550.json deleted file mode 100644 index 5f0d8c8..0000000 --- a/data/config_backups/config_backup_20251025_172550.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "name": "Aniworld", - "data_dir": "data", - "scheduler": { - "enabled": true, - "interval_minutes": 60 - }, - "logging": { - "level": "INFO", - "file": null, - "max_bytes": null, - "backup_count": 3 - }, - "backup": { - "enabled": false, - "path": "data/backups", - "keep_days": 30 - }, - "other": { - "anime_directory": "/home/lukas/Volume/serien/", - "master_password_hash": "$pbkdf2-sha256$29000$YoyRkvIeg/D.H8NYKwWgdA$AWAYrJO3h7vDZJ3IZCc1men8OrroAzRXlJWvXcBpBDA" - }, - "version": "1.0.0" -} \ No newline at end of file diff --git a/data/download_queue.json b/data/download_queue.json deleted file mode 100644 index 1f9c3b0..0000000 --- a/data/download_queue.json +++ /dev/null @@ -1,425 +0,0 @@ -{ - "pending": [ - { - "id": "fb90e232-52cc-4315-a994-725d132df69a", - "serie_id": "workflow-series", - "serie_name": "Workflow Test Series", - "episode": { - "season": 1, - "episode": 1, - "title": null - }, - "status": "pending", - "priority": "high", - "added_at": "2025-10-25T15:25:53.734312Z", - "started_at": null, - "completed_at": null, - "progress": null, - "error": null, - "retry_count": 0, - "source_url": null - }, - { - "id": "37ab9885-cf61-4417-96b7-383490ce2fca", - "serie_id": "series-2", - "serie_name": "Series 2", - "episode": { - "season": 1, - "episode": 1, - "title": null - }, - "status": "pending", - "priority": "normal", - "added_at": "2025-10-25T15:25:53.327912Z", - "started_at": null, - "completed_at": null, - "progress": null, - "error": null, - "retry_count": 0, - "source_url": null - }, - { - "id": "ede47aa4-4533-4a86-90e6-81126ff1189a", - "serie_id": "series-1", - "serie_name": "Series 1", - "episode": { - "season": 1, - "episode": 1, - "title": null - }, - "status": "pending", - "priority": "normal", - "added_at": "2025-10-25T15:25:53.324487Z", - "started_at": null, - "completed_at": null, - "progress": null, - "error": null, - "retry_count": 0, - "source_url": null - }, - { - "id": "33af9d7b-4787-4d54-af2a-6b9af4f2b061", - "serie_id": "series-0", - "serie_name": "Series 0", - "episode": { - "season": 1, - "episode": 1, - "title": null - }, - "status": "pending", - "priority": "normal", - "added_at": "2025-10-25T15:25:53.322230Z", - "started_at": null, - "completed_at": null, - "progress": null, - "error": null, - "retry_count": 0, - "source_url": null - }, - { - "id": "c04610c9-fa71-43fc-9cbf-2f8934b097bd", - "serie_id": "series-high", - "serie_name": "Series High", - "episode": { - "season": 1, - "episode": 1, - "title": null - }, - "status": "pending", - "priority": "high", - "added_at": "2025-10-25T15:25:53.022054Z", - "started_at": null, - "completed_at": null, - "progress": null, - "error": null, - "retry_count": 0, - "source_url": null - }, - { - "id": "1da55781-81dd-43bc-89a7-b4f9149c0cfe", - "serie_id": "test-series-2", - "serie_name": "Another Series", - "episode": { - "season": 1, - "episode": 1, - "title": null - }, - "status": "pending", - "priority": "high", - "added_at": "2025-10-25T15:25:52.986476Z", - "started_at": null, - "completed_at": null, - "progress": null, - "error": null, - "retry_count": 0, - "source_url": null - }, - { - "id": "155cef74-9b1d-4582-b836-d13c48290c80", - "serie_id": "test-series-1", - "serie_name": "Test Anime Series", - "episode": { - "season": 1, - "episode": 1, - "title": "Episode 1" - }, - "status": "pending", - "priority": "normal", - "added_at": "2025-10-25T15:25:52.952839Z", - "started_at": null, - "completed_at": null, - "progress": null, - "error": null, - "retry_count": 0, - "source_url": null - }, - { - "id": "682399d3-6b56-4bc2-b3a6-8aa0f30d91ba", - "serie_id": "test-series-1", - "serie_name": "Test Anime Series", - "episode": { - "season": 1, - "episode": 2, - "title": "Episode 2" - }, - "status": "pending", - "priority": "normal", - "added_at": "2025-10-25T15:25:52.952940Z", - "started_at": null, - "completed_at": null, - "progress": null, - "error": null, - "retry_count": 0, - "source_url": null - }, - { - "id": "b12de848-efcd-4e4d-838e-992f48dca631", - "serie_id": "series-normal", - "serie_name": "Series Normal", - "episode": { - "season": 1, - "episode": 1, - "title": null - }, - "status": "pending", - "priority": "normal", - "added_at": "2025-10-25T15:25:53.024208Z", - "started_at": null, - "completed_at": null, - "progress": null, - "error": null, - "retry_count": 0, - "source_url": null - }, - { - "id": "901ea5d2-1491-492f-8f7b-62db605d6bb4", - "serie_id": "series-low", - "serie_name": "Series Low", - "episode": { - "season": 1, - "episode": 1, - "title": null - }, - "status": "pending", - "priority": "low", - "added_at": "2025-10-25T15:25:53.026631Z", - "started_at": null, - "completed_at": null, - "progress": null, - "error": null, - "retry_count": 0, - "source_url": null - }, - { - "id": "6cddccb4-14cd-43e7-9425-5c4b20dd34f2", - "serie_id": "test-series", - "serie_name": "Test Series", - "episode": { - "season": 1, - "episode": 1, - "title": null - }, - "status": "pending", - "priority": "normal", - "added_at": "2025-10-25T15:25:53.257343Z", - "started_at": null, - "completed_at": null, - "progress": null, - "error": null, - "retry_count": 0, - "source_url": null - }, - { - "id": "2b6e4d96-70e9-4d71-806f-ffd6348ef205", - "serie_id": "test-series", - "serie_name": "Test Series", - "episode": { - "season": 1, - "episode": 1, - "title": null - }, - "status": "pending", - "priority": "normal", - "added_at": "2025-10-25T15:25:53.364247Z", - "started_at": null, - "completed_at": null, - "progress": null, - "error": null, - "retry_count": 0, - "source_url": null - }, - { - "id": "1ac25804-5be3-420a-93df-1ca7b70a40e2", - "serie_id": "invalid-series", - "serie_name": "Invalid Series", - "episode": { - "season": 99, - "episode": 99, - "title": null - }, - "status": "pending", - "priority": "normal", - "added_at": "2025-10-25T15:25:53.430806Z", - "started_at": null, - "completed_at": null, - "progress": null, - "error": null, - "retry_count": 0, - "source_url": null - }, - { - "id": "4e568aec-ac73-444a-aeb3-d8c6c27cf630", - "serie_id": "test-series", - "serie_name": "Test Series", - "episode": { - "season": 1, - "episode": 1, - "title": null - }, - "status": "pending", - "priority": "normal", - "added_at": "2025-10-25T15:25:53.464054Z", - "started_at": null, - "completed_at": null, - "progress": null, - "error": null, - "retry_count": 0, - "source_url": null - }, - { - "id": "1e387ffb-c029-4fa6-9e48-93244c9b91fc", - "serie_id": "series-4", - "serie_name": "Series 4", - "episode": { - "season": 1, - "episode": 1, - "title": null - }, - "status": "pending", - "priority": "normal", - "added_at": "2025-10-25T15:25:53.550292Z", - "started_at": null, - "completed_at": null, - "progress": null, - "error": null, - "retry_count": 0, - "source_url": null - }, - { - "id": "73c2af3f-784c-4351-9bac-ddefa11e5e18", - "serie_id": "series-2", - "serie_name": "Series 2", - "episode": { - "season": 1, - "episode": 1, - "title": null - }, - "status": "pending", - "priority": "normal", - "added_at": "2025-10-25T15:25:53.552089Z", - "started_at": null, - "completed_at": null, - "progress": null, - "error": null, - "retry_count": 0, - "source_url": null - }, - { - "id": "d6a798ce-be87-42d9-847a-39e3ae1bc704", - "serie_id": "series-3", - "serie_name": "Series 3", - "episode": { - "season": 1, - "episode": 1, - "title": null - }, - "status": "pending", - "priority": "normal", - "added_at": "2025-10-25T15:25:53.552805Z", - "started_at": null, - "completed_at": null, - "progress": null, - "error": null, - "retry_count": 0, - "source_url": null - }, - { - "id": "1c34959e-bcdb-4dce-812b-32fe278f5a42", - "serie_id": "series-0", - "serie_name": "Series 0", - "episode": { - "season": 1, - "episode": 1, - "title": null - }, - "status": "pending", - "priority": "normal", - "added_at": "2025-10-25T15:25:53.553458Z", - "started_at": null, - "completed_at": null, - "progress": null, - "error": null, - "retry_count": 0, - "source_url": null - }, - { - "id": "9a02ae1f-c264-4a72-98e0-a2120dc625ea", - "serie_id": "series-1", - "serie_name": "Series 1", - "episode": { - "season": 1, - "episode": 1, - "title": null - }, - "status": "pending", - "priority": "normal", - "added_at": "2025-10-25T15:25:53.554161Z", - "started_at": null, - "completed_at": null, - "progress": null, - "error": null, - "retry_count": 0, - "source_url": null - }, - { - "id": "3080213e-4a0f-4b62-8dd5-871640e4379d", - "serie_id": "persistent-series", - "serie_name": "Persistent Series", - "episode": { - "season": 1, - "episode": 1, - "title": null - }, - "status": "pending", - "priority": "normal", - "added_at": "2025-10-25T15:25:53.636324Z", - "started_at": null, - "completed_at": null, - "progress": null, - "error": null, - "retry_count": 0, - "source_url": null - }, - { - "id": "6bd8762b-9800-4306-9143-8277b7d23611", - "serie_id": "ws-series", - "serie_name": "WebSocket Series", - "episode": { - "season": 1, - "episode": 1, - "title": null - }, - "status": "pending", - "priority": "normal", - "added_at": "2025-10-25T15:25:53.700590Z", - "started_at": null, - "completed_at": null, - "progress": null, - "error": null, - "retry_count": 0, - "source_url": null - }, - { - "id": "b0f208df-9fa1-4952-a65b-97d39696ee72", - "serie_id": "pause-test", - "serie_name": "Pause Test Series", - "episode": { - "season": 1, - "episode": 1, - "title": null - }, - "status": "pending", - "priority": "normal", - "added_at": "2025-10-25T15:25:53.876408Z", - "started_at": null, - "completed_at": null, - "progress": null, - "error": null, - "retry_count": 0, - "source_url": null - } - ], - "active": [], - "failed": [], - "timestamp": "2025-10-25T15:25:53.876987+00:00" -} \ No newline at end of file diff --git a/src/server/api/anime.py b/src/server/api/anime.py index 5720d3f..8e0e2df 100644 --- a/src/server/api/anime.py +++ b/src/server/api/anime.py @@ -239,15 +239,15 @@ async def trigger_rescan( _auth: dict = Depends(require_auth), series_app: Any = Depends(get_series_app), ) -> dict: - """Kick off a background rescan of the local library. + """Kick off a rescan of the local library. Args: _auth: Ensures the caller is authenticated (value unused) series_app: Core `SeriesApp` instance provided via dependency. Returns: - Dict[str, Any]: Status payload communicating whether the rescan - launched successfully. + Dict[str, Any]: Status payload with scan results including + number of series found. Raises: HTTPException: If the rescan command is unsupported or fails. @@ -255,8 +255,23 @@ async def trigger_rescan( try: # SeriesApp.ReScan expects a callback; pass a no-op if hasattr(series_app, "ReScan"): - series_app.ReScan(lambda *args, **kwargs: None) - return {"success": True, "message": "Rescan started"} + result = series_app.ReScan(lambda *args, **kwargs: None) + + if result.success: + series_count = ( + result.data.get("series_count", 0) + if result.data else 0 + ) + return { + "success": True, + "message": result.message, + "series_count": series_count + } + else: + return { + "success": False, + "message": result.message + } raise HTTPException( status_code=status.HTTP_501_NOT_IMPLEMENTED, diff --git a/src/server/web/static/js/app.js b/src/server/web/static/js/app.js index 711585d..fa3bfec 100644 --- a/src/server/web/static/js/app.js +++ b/src/server/web/static/js/app.js @@ -924,15 +924,28 @@ class AniWorldApp { async rescanSeries() { try { + this.showToast('Scanning directory...', 'info'); + const response = await this.makeAuthenticatedRequest('/api/anime/rescan', { method: 'POST' }); if (!response) return; const data = await response.json(); + + // Debug logging + console.log('Rescan response:', data); + console.log('Success value:', data.success, 'Type:', typeof data.success); - if (data.status === 'success') { - this.showToast('Rescan started', 'success'); + if (data.success === true) { + const seriesCount = data.series_count || 0; + this.showToast( + `Rescan complete! Found ${seriesCount} series with missing episodes.`, + 'success' + ); + + // Reload the series list to show the updated data + await this.loadSeries(); } else { this.showToast(`Rescan error: ${data.message}`, 'error'); }