store: обновлять тело записи при повторной отдаче того же url (панели теряли актуальный free_count); tools/push_top.py — топ находок в бота

This commit is contained in:
Vlad Gothbreach
2026-10-27 14:21:02 +03:00
parent 81382e91b9
commit d16994d45c
2 changed files with 113 additions and 1 deletions

View File

@@ -110,7 +110,15 @@ def add(items):
dup += 1
continue
u = (getattr(it, "url", "") or "").strip()
if u and c.execute("SELECT 1 FROM items WHERE url = ? LIMIT 1", (u,)).fetchone():
row = c.execute("SELECT id FROM items WHERE url = ? LIMIT 1", (u,)).fetchone() if u else None
if row:
# Источник переотдал тот же url с новым телом (пост отредактировали,
# у панели изменилось число бесплатных моделей) — обновляем текст,
# иначе в выдаче висят устаревшие цифры. FTS правим вручную:
# триггеров на UPDATE в схеме нет.
c.execute("UPDATE items SET title=?, text=?, extra=?, score=?, seen=? WHERE id=?", (
it.title, it.text, json.dumps(it.extra, ensure_ascii=False)[:2000], it.score, ts, row[0]))
c.execute("UPDATE items_fts SET title=?, text=? WHERE rowid=?", (it.title, it.text, row[0]))
dup += 1
continue
try: