rpi: books-sync — без обложек, предисловий, указателя и прочей обвязки книги

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
gilfanovr
2026-10-18 00:48:06 +03:00
co-authored by Claude Opus 5.5
parent 4eacb09f8e
commit e38ca91cff
2 changed files with 9 additions and 1 deletions
+1
View File
@@ -13,6 +13,7 @@
- **Односторонняя:** всё выше `## Мои мысли` перезаписывается из читалки; сам раздел и всё ниже — не трогается
(свои мысли писать туда). Правки заметок — в читалке. Книгу переименовали — файл переименовывается вместе с «Моими мыслями».
- Диалоги с ИИ целиком не выгружаются (владелец 2026-10-18): нужное — кнопкой «В заметки» в окне объяснения, приходит обычной заметкой.
- Обвязка книги (обложка, копирайт, предисловия, благодарности, оглавление, указатель, «об авторе», колофон…) в файлы не попадает (владелец 2026-10-18), приложения — попадают.
- Файлы — только для книг, где есть заметки/рекапы. Длинные цитаты обрезаются до 1500 знаков.
Удалённая из читалки книга — файл остаётся.
+8 -1
View File
@@ -28,6 +28,11 @@ MINE = "## Мои мысли"
QUOTE_MAX = 1500
TZ = ZoneInfo("Asia/Nicosia")
KIND = {"note": "📝 Заметка", "mine": "✎ Стикер", "later": "⏳ Разобрать позже"}
# обвязка книги — в Obsidian не нужна (владелец 2026-10-18): обложка, выходные данные, предисловия, указатель…
FRONT_BACK = re.compile(r"(?i)^\s*(cover|copyright|table of contents|contents|preface|foreword|acknowledg\w*|index|"
r"about the authors?|about this book|colophon|dedication|начало книги|обложка|титул|предисловие|"
r"благодарност\w*|об этой книге|об автор\w*|иллюстрация на обложке|от издательства|оглавление|"
r"содержание|предметный указатель|указатель|выходные данные|посвящение)\b")
def fetch(version):
@@ -133,7 +138,9 @@ def main():
files = state.get("files", {})
changed = []
for b in data["books"]:
sel = lambda xs: [x for x in xs if x["book_id"] == b["id"]]
chs = chapters.get(b["id"], {})
sel = lambda xs: [x for x in xs if x["book_id"] == b["id"]
and not FRONT_BACK.match(chs.get(x["chapter_idx"], {}).get("title", ""))]
notes, recaps, dialogs = sel(data["notes"]), sel(data["recaps"]), [] # диалоги — только через «В заметки»
if not (notes or recaps or dialogs) and str(b["id"]) not in files:
continue # уже был файл, а заметок не осталось — перепишем шапкой, «Мои мысли» сохранятся