6.1 KiB
BookFusion Back Sync — Calibre Plugin
Calibre-плагин для обратной синхронизации: читает даты последнего чтения из BookFusion и записывает их в выбранную custom-колонку Calibre.
Работает параллельно со штатным плагином BookFusion (они не конфликтуют).
Что делает
- Авторизуется в BookFusion через email и пароль (Private API).
- Загружает список всех книг из библиотеки BookFusion.
- Сопоставляет книги с Calibre по идентификатору
bookfusion(который штатный плагин прописывает в поле Identifiers при загрузке книги). - Для каждой совпавшей книги записывает дату последнего чтения в выбранную custom-колонку типа Date.
Источник даты — в порядке приоритета:
last_read_atиз BookFusion API (если не пустое)reading_position.updated_at— дата последнего обновления позиции чтения (используется чаще всего, потому чтоlast_read_atзаполняется только в мобильном приложении)
Лог в диалоге показывает для каждой книги: какая дата записана и из какого поля взята.
Требования
- Calibre 6.2.1 или новее
- Штатный плагин BookFusion уже установлен и хотя бы один раз синхронизирован
(чтобы в книгах был прописан идентификатор
bookfusion) - Аккаунт BookFusion с email и паролем (не OAuth через Facebook/Twitter)
- Кастомная колонка типа Date в Calibre (например
#dateread)
Установка
-
Скачать
BookfusionBackSync.zipиз корня репозитория. -
В Calibre: Preferences → Plugins → Load plugin from file → выбрать ZIP.
-
Перезапустить Calibre.
-
Кнопка BookFusion Back Sync появится на панели инструментов.
Настройка
Открыть настройки: кнопка Settings в диалоге плагина, или Preferences → Plugins → BookFusion Back Sync → Customize.
| Поле | Описание |
|---|---|
| BookFusion Email | Email аккаунта BookFusion |
| Password | Пароль аккаунта |
| Last Read Column | Custom-колонка Calibre типа Date, куда писать дату |
Пароль хранится в открытом виде в файле конфигурации Calibre
(plugins/bookfusionbacksync.json) — аналогично тому, как штатный плагин
хранит API-ключ.
Device ID генерируется автоматически при первом синке и сохраняется навсегда.
Использование
- Нажать кнопку BookFusion Back Sync на панели инструментов.
- Нажать Sync Now.
- Наблюдать прогресс в лог-окне. После завершения Calibre автоматически обновит список книг.
Как устроен
API
Плагин использует Private API BookFusion (https://bookfusion.com/api) — тот же,
что использует мобильное приложение. Официальной документации нет; API восстановлен
методом реверс-инжиниринга из исходников Android-клиента (2014) и fusionfixer (2018).
Авторизация: POST /v1/auth.json с полями device, login, password → возвращает token.
Токен используется как query-параметр (?device=...&token=...) во всех последующих GET-запросах.
Библиотека: GET /v3/library/books.json?page=N&per_page=100 — постраничная выгрузка.
Каждая книга (BookV3) содержит:
id— числовой ID книги; совпадает с тем, что штатный плагин сохраняет вidentifiers['bookfusion']last_read_at— дата последнего чтения (частоnull)reading_position.updated_at— дата последнего обновления позиции чтения
HTTP-запросы делаются через стандартную библиотеку Python (urllib.request) —
без внешних зависимостей.
Сопоставление книг
Штатный BookFusion плагин при загрузке книги сохраняет её ID в поле Calibre:
Identifiers → bookfusion: 66816
Плагин Back Sync читает это значение и сравнивает с BookV3.id из API.
Совпадение — запись даты в выбранную колонку.
Запись в Calibre
Все обновления записываются одним вызовом Calibre new_api:
db.set_field('#dateread', {calibre_book_id: datetime_object, ...})
Структура файлов
| Файл | Назначение |
|---|---|
__init__.py |
Регистрация плагина, метаданные, точка входа |
plugin-import-name-bookfusionbacksync.txt |
Import-name для Calibre plugin loader |
config.py |
JSONConfig с настройками; ConfigWidget (форма настроек) |
ui.py |
InterfacePlugin — пункт меню и кнопка в Calibre |
main.py |
MainDialog — диалог с прогресс-баром и логом |
sync_worker.py |
SyncWorker (QThread) — вся логика синка |