2.8 KiB
Notes
Плагин для синхронизации last read date в Calibre
Вопрос: можно ли сделать Calibre-плагин, который обновляет дату последнего чтения для синхронизированных книг?
Вывод: API недостаточно.
POST /obsidian-api/sync — единственный endpoint, возвращающий данные обратно. Ответ:
{
"pages": [...],
"cursor": "...",
"next_sync_cursor": "..."
}
BookPage содержит поля: id, frontmatter, content, highlights, atomic_highlights, directory, filename, update_strategy — структура заметок Obsidian, ничего про прогресс чтения.
Calibre API (PUT /uploads/{id}, POST /uploads/finalize) принимает metadata: title, authors, bookshelves, cover, isbn, issued_on, language, series, summary, tags. Поля last_read_date и reading_progress отсутствуют.
BookFusion не отдаёт данные о прогрессе чтения ни через Calibre API, ни через Obsidian API. Через эти API плагин построить невозможно.
Обновление: через Private API (GET /v3/library/books.json) данные есть. Плагин реализован — см. BookfusionBackSync/.
BookfusionBackSync — плагин обратной синхронизации
Расположение: BookfusionBackSync/
Как работает:
- Авторизация через Private API:
POST /api/v1/auth.json(email + password) - Загрузка всех книг:
GET /api/v3/library/books.json(постраничная, 100 за раз) - Сопоставление по идентификатору:
identifiers['bookfusion']в Calibre =BookV3.idиз Private API - Запись даты в выбранную custom column Calibre одним вызовом
db.set_field()
Источник даты: BookV3.last_read_at (если не null), иначе BookV3.reading_position.updated_at. В тестовых данных last_read_at всегда null, reading_position.updated_at имеет реальные значения.
Настройки (через Calibre Preferences → Plugins):
- Email и пароль от аккаунта BookFusion
- Целевое поле Calibre (dropdown по datetime-колонкам, по умолчанию
#dateread) - Device ID генерируется один раз при первом синке и сохраняется навсегда
Важно: плагин читает только Books из Private API. Запись обратно в BookFusion не производится.