This commit is contained in:
2026-05-02 20:03:21 +03:00
parent bc7b5bfe37
commit fcd1dfb74c
2 changed files with 34 additions and 26 deletions

View File

@@ -20,6 +20,23 @@ _DEFAULT_READMANGA_DOMAINS = [
"3.readmanga.ru", "3.readmanga.ru",
] ]
_ALLOWED_FMTS = frozenset({"cbz", "pdf", "epub"})
def _now() -> str:
return datetime.now(timezone.utc).replace(tzinfo=None).isoformat()
def _extract_domain(url: str) -> str:
"""Извлекает домен без www."""
try:
domain = urlparse(url).netloc.lower()
if domain.startswith("www."):
domain = domain[4:]
return domain
except Exception:
return ""
class StateDB: class StateDB:
def __init__(self, db_path: Path = DB_PATH): def __init__(self, db_path: Path = DB_PATH):
@@ -673,21 +690,3 @@ class StateDB:
self.conn.close() self.conn.close()
_ALLOWED_FMTS = frozenset({"cbz", "pdf", "epub"})
def _now() -> str:
return datetime.now(timezone.utc).replace(tzinfo=None).isoformat()
def _extract_domain(url: str) -> str:
"""Извлекает домен без www."""
try:
domain = urlparse(url).netloc.lower()
if domain.startswith("www."):
domain = domain[4:]
return domain
except Exception:
return ""

View File

@@ -332,15 +332,21 @@ async def check_for_updates(
pass pass
db = StateDB() db = StateDB()
db_lock = asyncio.Lock()
async def db_call(fn, *args, **kwargs):
async with db_lock:
return fn(*args, **kwargs)
try: try:
db.set_last_checked(url) await db_call(db.set_last_checked, url)
db.add_history(manga_url=url, event_type="check_started") await db_call(db.add_history, manga_url=url, event_type="check_started")
await emit({"type": "check_started", "url": url}) await emit({"type": "check_started", "url": url})
# Резолвим источник # Резолвим источник
source = get_source_for_url(url, db) source = get_source_for_url(url, db)
if source is None: if source is None:
manga_row = db.get_manga(url) manga_row = await db_call(db.get_manga, url)
if manga_row and manga_row.get("source_id"): if manga_row and manga_row.get("source_id"):
source = registry.get_by_db_id(manga_row["source_id"], db) source = registry.get_by_db_id(manga_row["source_id"], db)
if source is None: if source is None:
@@ -355,7 +361,8 @@ async def check_for_updates(
return [] return []
# Обновляем pub_status и количество глав # Обновляем pub_status и количество глав
db.update_manga_info( await db_call(
db.update_manga_info,
url, url,
title=manga.title_ru or manga.title, title=manga.title_ru or manga.title,
chapters_total=len(manga.chapters), chapters_total=len(manga.chapters),
@@ -365,12 +372,13 @@ async def check_for_updates(
) )
# Находим главы которых ещё нет в БД # Находим главы которых ещё нет в БД
known = {ch["chapter_url"] for ch in db.get_all_chapters(url)} known = {ch["chapter_url"] for ch in await db_call(db.get_all_chapters, url)}
new_chapters = [ch for ch in manga.chapters if ch.url not in known] new_chapters = [ch for ch in manga.chapters if ch.url not in known]
for ch in new_chapters: for ch in new_chapters:
db.upsert_chapter(url, ch.url, ch.title, ch.number, ch.volume) await db_call(db.upsert_chapter, url, ch.url, ch.title, ch.number, ch.volume)
db.add_history( await db_call(
db.add_history,
manga_url=url, manga_url=url,
event_type="new_chapter_found", event_type="new_chapter_found",
chapter_url=ch.url, chapter_url=ch.url,
@@ -386,7 +394,8 @@ async def check_for_updates(
"chapter_number": ch.number, "chapter_number": ch.number,
}) })
db.add_history( await db_call(
db.add_history,
manga_url=url, manga_url=url,
event_type="check_done", event_type="check_done",
details=f"Найдено новых: {len(new_chapters)}", details=f"Найдено новых: {len(new_chapters)}",