This commit is contained in:
ArabCoders 2023-11-29 12:46:58 +03:00
parent 6e05c78664
commit d533ef3a5a
2 changed files with 15 additions and 5 deletions

View file

@ -3,7 +3,6 @@ import copy
from datetime import datetime, timezone from datetime import datetime, timezone
from email.utils import formatdate from email.utils import formatdate
import json import json
import logging
import sqlite3 import sqlite3
from src.Utils import calcDownloadPath from src.Utils import calcDownloadPath
from src.Config import Config from src.Config import Config
@ -13,7 +12,7 @@ from src.DTO.ItemDTO import ItemDTO
class DataStore: class DataStore:
""" """
Persistent queue using shelve. Persistent queue.
""" """
type: str = None type: str = None
db_file: str = None db_file: str = None
@ -119,7 +118,7 @@ class DataStore:
sqlStatement = """ sqlStatement = """
INSERT INTO "history" ("id", "type", "url", "data") INSERT INTO "history" ("id", "type", "url", "data")
VALUES (?, ?, ?, ?) VALUES (?, ?, ?, ?)
ON CONFLICT DO UPDATE SET "type" = ?, "url" = ?, "data" = ? ON CONFLICT DO UPDATE SET "type" = ?, "url" = ?, "data" = ?, created_at = ?
""" """
stored = copy.deepcopy(item) stored = copy.deepcopy(item)
@ -139,6 +138,7 @@ class DataStore:
type, type,
stored.url, stored.url,
stored.json(), stored.json(),
datetime.now(timezone.utc).strftime('%Y-%m-%d %H:%M:%S')
)) ))
def _deleteStoreItem(self, key: str) -> None: def _deleteStoreItem(self, key: str) -> None:

View file

@ -95,12 +95,21 @@ class DownloadQueue:
return {'status': 'ok'} return {'status': 'ok'}
elif (etype == 'video' or etype.startswith('url')) and 'id' in entry and 'title' in entry: 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']): 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( item = self.done.get(key=entry['id'], url=entry.get(
'webpage_url') or entry['url']) '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']): 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.'} return {'status': 'error', 'msg': 'Link already queued for downloading.'}
dl = ItemDTO( dl = ItemDTO(
@ -265,7 +274,8 @@ class DownloadQueue:
self.event.clear() self.event.clear()
id, entry = self.queue.next() 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) await entry.start(self.notifier)