upd
This commit is contained in:
35
src/state.py
35
src/state.py
@@ -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 ""
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -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)}",
|
||||||
|
|||||||
Reference in New Issue
Block a user