rpi: books-sync — без обложек, предисловий, указателя и прочей обвязки книги
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
4eacb09f8e
commit
e38ca91cff
@@ -13,6 +13,7 @@
|
||||
- **Односторонняя:** всё выше `## Мои мысли` перезаписывается из читалки; сам раздел и всё ниже — не трогается
|
||||
(свои мысли писать туда). Правки заметок — в читалке. Книгу переименовали — файл переименовывается вместе с «Моими мыслями».
|
||||
- Диалоги с ИИ целиком не выгружаются (владелец 2026-10-18): нужное — кнопкой «В заметки» в окне объяснения, приходит обычной заметкой.
|
||||
- Обвязка книги (обложка, копирайт, предисловия, благодарности, оглавление, указатель, «об авторе», колофон…) в файлы не попадает (владелец 2026-10-18), приложения — попадают.
|
||||
- Файлы — только для книг, где есть заметки/рекапы. Длинные цитаты обрезаются до 1500 знаков.
|
||||
Удалённая из читалки книга — файл остаётся.
|
||||
|
||||
|
||||
@@ -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 # уже был файл, а заметок не осталось — перепишем шапкой, «Мои мысли» сохранятся
|
||||
|
||||
Reference in New Issue
Block a user