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",
]
_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:
def __init__(self, db_path: Path = DB_PATH):
@@ -673,21 +690,3 @@ class StateDB:
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
db = StateDB()
db_lock = asyncio.Lock()
async def db_call(fn, *args, **kwargs):
async with db_lock:
return fn(*args, **kwargs)
try:
db.set_last_checked(url)
db.add_history(manga_url=url, event_type="check_started")
await db_call(db.set_last_checked, url)
await db_call(db.add_history, manga_url=url, event_type="check_started")
await emit({"type": "check_started", "url": url})
# Резолвим источник
source = get_source_for_url(url, db)
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"):
source = registry.get_by_db_id(manga_row["source_id"], db)
if source is None:
@@ -355,7 +361,8 @@ async def check_for_updates(
return []
# Обновляем pub_status и количество глав
db.update_manga_info(
await db_call(
db.update_manga_info,
url,
title=manga.title_ru or manga.title,
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]
for ch in new_chapters:
db.upsert_chapter(url, ch.url, ch.title, ch.number, ch.volume)
db.add_history(
await db_call(db.upsert_chapter, url, ch.url, ch.title, ch.number, ch.volume)
await db_call(
db.add_history,
manga_url=url,
event_type="new_chapter_found",
chapter_url=ch.url,
@@ -386,7 +394,8 @@ async def check_for_updates(
"chapter_number": ch.number,
})
db.add_history(
await db_call(
db.add_history,
manga_url=url,
event_type="check_done",
details=f"Найдено новых: {len(new_chapters)}",