вторник, 6 сентября 2016 г.

Раскладывание книжек по полкам в Kobo



Version 0.9 build 2016-09-06

Наверное самая глупая фишка в ридерах от Kobo - это так называемые книжные полки. Единственное преимущество перед хранением книг в директориях - возможность поместить книгу сразу в две и более полок. Довольно сомнительная возможность.

Я не использую Caliber и просто закидываю книги в ридер. Иногда раскладывал по полкам. Но после того, как полки несколько раз слетели, перестал это делать. Как то мне ночью не спалось и я написал скрип на python, который раскладывает книги по полкам.


Как это работает.

В основной памяти и на карточке я создал корневую директорию /Books. Внутри - отдельные директории для серий, в которые я копирую книги.


Потом запускаю скрипт.
Скрипт сначала очищает две таблицы: Shelf и ShelfContent. Потом сканирует папку Books и записывает названия вложенных папок в Shelf и собственно книги в ShelfContent.

Внутренние алгоритмы ридера работают по другому.
Они ничего из базы не удаляют, а ставят пометку, что книга удалена. Вероятно это делается для сбора статистики и передается на сайт производителя, чтоб лучше нам впаривать книжки.
Но это мои догадки.
Мне это было делать лениво и я по простому очищаю указанные таблицы. Извините, если что не так.
Вложенные директории не проверял. К тому же, считаю смысла в них нет. Название полки не поместится на экран ридера. Собственно и все.


Установка Python

Для работы скрипта необходимо, что бы на вашем компьютере был установлен Pyton 3.

Если у Вас Ubuntu, nо Python 3.5 уже скорее всего установлен. В противном случае выполните команду:

sudo add-apt-repository ppa:fkrull/deadsnakes
sudo apt-get update
sudo apt-get install python3.5

Если у Вас Windows, то установите Python 3.5.2 - 2016-06-27 отсюда:
https://www.python.org/downloads/windows/


Как использовать.
  1. Сохраните скрипт в файл KoboShelf.py и дайте ему права на исполнение:
    chmod +x KoboShelf.py
    
  2. В каталоге .kobo в разделе KOBOeReader сделайте резервную копию базы данных.
    cp KoboReader.sqlite KoboReader.sqlite.origin
    
  3. Создайте папку /Books на карточке, в ней папки с сериями, в них скопируйте ваши книги.
  4. Запустите из терминала вышеуказанный скрипт. В терминале будут показаны найденные полки и книги, которые в них добавлены.
    Скрипт отрабатывает очень быстро, около секунды.
  5. Безопасно извлеките ридер.

Командная Строка

В Linux и в Windows скрипт автоматически определяет точки монтирования Kobo и SD карты. Поэтому для создания полок никакие аргументы в команде запуска не нужны.

./KoboShelf.py -h
usage: KoboShelf.py [-h] [--onboard ONBOARD] [--sd SD] [--onboard_sw {on,off}]
                    [--sd_sw {on,off}] [-s] [-v]

optional arguments:
  -h, --help            show this help message and exit
  --onboard ONBOARD     eReaders mount point
  --sd SD               SD cards mount point
  --onboard_sw {on,off}
                        Enabling/disabling adding book from eReader onboard
                        memory. Enabled by default
  --sd_sw {on,off}      Enabling/disabling adding book from SD card memory.
                        Enabled if SD card present
  -s, --showsettings    Display settings and exit. Reader must be connected.
  -v, --version         show program's version number and exit


Какие могут быть траблы.

Скрипт в стадии экспериментальной, поэтому возможно все. Если по какой то причине испортилась база данных KoboReader.sqlite, то восстанавливаем ее из сохраненной копии.
Как всегда, все вы выполняете на свой страх и риск. Я ни за что не отвечаю.

Исходный код можно посмотреть в Git репозитории:

https://github.com/Axa-Ru/KoboShelfes/blob/master/KoboShelf.py

В скрипте меняйте, что хотите, хоть автора, хоть код. :P

Всем удачи.