update
This commit is contained in:
@@ -3,7 +3,7 @@ import logging
|
||||
from datetime import datetime, timezone
|
||||
from urllib.parse import quote_plus
|
||||
|
||||
from . import canon, db, imagehash, netflix, teaser, tmdb
|
||||
from . import canon, db, imagehash, netflix, search, teaser, tmdb
|
||||
|
||||
log = logging.getLogger("sync")
|
||||
|
||||
@@ -144,6 +144,40 @@ async def resolve_canon():
|
||||
return places
|
||||
|
||||
|
||||
async def katalog_nachtragen():
|
||||
"""Filme in den Katalog holen, die jemand gemerkt hat, die aber weder
|
||||
auf Netflix laufen noch im Kanon stehen.
|
||||
|
||||
Ohne sie bleiben die Karten in Sammlung, Rad und Gesehen leer: kein
|
||||
Teaser, keine Note, keine Bilder. Die Detailansicht holt sich das
|
||||
jedes Mal neu von TMDB — hier landet es einmal in der Datenbank.
|
||||
"""
|
||||
with db.connect() as conn:
|
||||
fehlen = sorted(
|
||||
db.benutzte_ids(conn)
|
||||
- {r["id"] for r in conn.execute("SELECT id FROM movies")}
|
||||
)
|
||||
if not fehlen:
|
||||
return 0
|
||||
|
||||
bremse = asyncio.Semaphore(TMDB_CONCURRENCY)
|
||||
|
||||
async def hole(movie_id):
|
||||
async with bremse:
|
||||
try:
|
||||
return await search.detail(movie_id)
|
||||
except Exception:
|
||||
# Ein gelöschter TMDB-Eintrag soll den Rest nicht aufhalten
|
||||
return None
|
||||
|
||||
filme = [f for f in await asyncio.gather(*map(hole, fehlen)) if f]
|
||||
with db.connect() as conn:
|
||||
for film in filme:
|
||||
db.upsert(conn, film)
|
||||
log.info("%s Filme aus Sammlungen in den Katalog geholt", len(filme))
|
||||
return len(filme)
|
||||
|
||||
|
||||
async def run():
|
||||
log.info("Sync startet")
|
||||
canon_places = await resolve_canon()
|
||||
@@ -180,15 +214,18 @@ async def run():
|
||||
db.set_meta(conn, "movie_count", len(on_netflix))
|
||||
db.set_meta(conn, "canon_count", sum(1 for m in movies if m["canon_group"] is not None))
|
||||
|
||||
nachgetragen = await katalog_nachtragen()
|
||||
|
||||
log.info(
|
||||
"Sync fertig: %s Filme (%s Netflix, %s Kanon), "
|
||||
"%s Netflix-Links, %s neue Teaser, %s entfernt",
|
||||
"%s Netflix-Links, %s neue Teaser, %s entfernt, %s nachgetragen",
|
||||
len(movies),
|
||||
len(on_netflix),
|
||||
sum(1 for m in movies if m["canon_group"] is not None),
|
||||
linked,
|
||||
new_teasers,
|
||||
removed,
|
||||
nachgetragen,
|
||||
)
|
||||
return {
|
||||
"movies": len(movies),
|
||||
@@ -196,6 +233,7 @@ async def run():
|
||||
"netflix_links": linked,
|
||||
"new_teasers": new_teasers,
|
||||
"removed": removed,
|
||||
"nachgetragen": nachgetragen,
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user