From d533ef3a5a7806e1078e9e4b49f9f1433eb96301 Mon Sep 17 00:00:00 2001 From: ArabCoders Date: Wed, 29 Nov 2023 12:46:58 +0300 Subject: [PATCH] Fixes. --- app/src/DataStore.py | 6 +++--- app/src/DownloadQueue.py | 14 ++++++++++++-- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/app/src/DataStore.py b/app/src/DataStore.py index 6f2050f8..8dbf7294 100644 --- a/app/src/DataStore.py +++ b/app/src/DataStore.py @@ -3,7 +3,6 @@ import copy from datetime import datetime, timezone from email.utils import formatdate import json -import logging import sqlite3 from src.Utils import calcDownloadPath from src.Config import Config @@ -13,7 +12,7 @@ from src.DTO.ItemDTO import ItemDTO class DataStore: """ - Persistent queue using shelve. + Persistent queue. """ type: str = None db_file: str = None @@ -119,7 +118,7 @@ class DataStore: sqlStatement = """ INSERT INTO "history" ("id", "type", "url", "data") VALUES (?, ?, ?, ?) - ON CONFLICT DO UPDATE SET "type" = ?, "url" = ?, "data" = ? + ON CONFLICT DO UPDATE SET "type" = ?, "url" = ?, "data" = ?, created_at = ? """ stored = copy.deepcopy(item) @@ -139,6 +138,7 @@ class DataStore: type, stored.url, stored.json(), + datetime.now(timezone.utc).strftime('%Y-%m-%d %H:%M:%S') )) def _deleteStoreItem(self, key: str) -> None: diff --git a/app/src/DownloadQueue.py b/app/src/DownloadQueue.py index c4af1ae7..dd6403cc 100644 --- a/app/src/DownloadQueue.py +++ b/app/src/DownloadQueue.py @@ -95,12 +95,21 @@ class DownloadQueue: return {'status': 'ok'} elif (etype == 'video' or etype.startswith('url')) and 'id' in entry and 'title' in entry: + logging.debug( + f"entry: {entry.get('id', None)} - {entry.get('webpage_url', None)} - {entry.get('url', None) }") + if self.done.exists(key=entry['id'], url=entry.get('webpage_url') or entry['url']): item = self.done.get(key=entry['id'], url=entry.get( 'webpage_url') or entry['url']) - self.clear([item.info._id]) + + logging.debug( + f'Item [{item.info.title}] already downloaded. Removing from history.') + + await self.clear([item.info._id]) if self.queue.exists(key=entry['id'], url=entry.get('webpage_url') or entry['url']): + logging.info( + f'Item [{item.info.title}] already in download queue') return {'status': 'error', 'msg': 'Link already queued for downloading.'} dl = ItemDTO( @@ -265,7 +274,8 @@ class DownloadQueue: self.event.clear() id, entry = self.queue.next() - log.info(f'downloading {id=} - {entry.info.title}') + log.info( + f'downloading {id=} - {entry.info.title=} - {entry.info.url=} - {entry.info.folder=}') await entry.start(self.notifier)