Используя различные конфиг файлы можно реализовать различные схемы коллекций, как описано тут. Предопределённые схемы описаны тут
Програма обладает рядом достоинств, которые иногда являются недостатками:
Для работы программы Вам необходим интерпретатор Python версии 2.6.6. С другими версиями не проверялось, но возможно будет работать.
Порядок работы:
documents/Айзек Азимов/det/Убийство а АйБиЭй.mobi documents/Айзек Азимов/sf_fi/Я Робот.mobi documents/Агата Кристи/det/Убийство в восточном экспрессе.mobiбудут созданы следующие коллекции:
det sf_fi det
documents/Айзек Азимов/det/Убийство а АйБиЭй.mobi documents/Айзек Азимов/sf_fi/Я Робот.mobi documents/Агата Кристи/det/Убийство в восточном экспрессе.mobiбудут созданы следующие коллекции:
Айзек Азимов - det Айзек Азимов - sf_fi Агата Кристи - det
documents/Айзек Азимов/det/Убийство а АйБиЭй.mobi documents/Айзек Азимов/sf_fi/Я Робот.mobi documents/1/Агата Кристи/det/Убийство в восточном экспрессе.mobiбудут созданы такие коллекции:
Айзек Азимов Агата Кристи det sf_fi det 1
documents/a=Айзек Азимов/t=det, sc_fi/s=/Убийство а АйБиЭй.mobi documents/a=Айзек Азимов/t=sc_fi/s=/Я робот.mobi documents/a=Гарри Гаррисон/t=sf_humor/s=Стальная крыса/Стальная крыса идёт на войну.mobi documents/a=Терри Пратчетт & Нил Гейман/t=sf_humor/s=Плоский мир/Добрые предзнаменования.mobiБудут сгенерированы коллекции:
Айзек Азимов det sc_fi sf_humor Гарри Гаррисон Терри Пратчетт Нил Гейман Стальная крыса Плоский мирПричём, книга Добрые предзнаменования.mobi будет одновременно в 4-х коллекциях: sf_humor, Терри Пратчетт, Нил Гейман, Плоский мир. Эту схему я использовал довольно долго, пока не перешёл к следующей.
documents/a=Айзек Азимов/t=det, sc_fi/s=/Убийство а АйБиЭй.mobi documents/a=Айзек Азимов/t=sc_fi/s=/Я робот.mobi documents/a=Гарри Гаррисон/t=sf_humor/s=Стальная крыса/Стальная крыса идёт на войну.mobi documents/a=Терри Пратчетт & Нил Гейман/t=sf_humor/s=Плоский мир/Добрые предзнаменования.mobi documents/a=Терри Пратчетт/t=sf_humor/s=Мир номов/Номы.mobiБудут сгенерированы коллекции:
Гарри Гаррисон * Стальная крыса Терри Пратчетт * Плоский мир Терри Пратчетт * Номы Айзек АзимовКак видно в примере, путь к файлам должен быть отформатирован определённым образом. Так же имена коллекций предваряются префиксом, что бы вынести их наверх при фильтрации. В последней версии я так-же добавил сокращение имён в файле postfilter.conf. Гаррисон, Гарри будет сокращаться до Гаррисон, Г.
[general] kindle_mount_point_Linux=/media/Kindle/ kindle_mount_point_Windows=F:\ book_storages=documents book_extensions=pdf;mobi;prc;txt;tpz;azw verbose = 1 pinned_hashes=*e5bf751aa86b6fea49a055d463e97e12d3175182;*9e97434880f115813437c1910b6dba7398c12e52 #orphans_coll=$rest profile=author-seriesОписание опций:
[include] area=documents/for-kcgОбрабатываем только документы в поддиректории for-kcg
[exclude] area=documents/non-for-kcgНе обрабатываем документы в поддиректории non-for-kcg. exclude имеет более выскоий приоритет. rename предназначено для замены в путях некоторых кусков. При этом имя шаблона поиска должно начинаться с from., а шаблон замены с to.:
[rename] from.1=.*/documents/ to.1=Удалит начальную часть пути.
Терри Пратчетт & Нил Гейнман det, sc_fi, humorПути содержащие такие двойные сущности нужно разделить на несколько путей. Т.е.
documents/a=Терри Пратчетт & Нил Гейнман/t=sc_fi, humor/1.mobiпревращается в
documents/Терри Пратчетт/sc_fi/1.mobi documents/Терри Пратчетт/humor/1.mobi documents/Нил Гейнман/sc_fi/1.mobi documents/Нил Гейнман/humor/1.mobiэти пути переходят на следующий этап. Разделение задаётся так:
[split-authors] pattern=/a=([^/]+)/ separator=& template=/a=$$/ only_first=yгде имя секции может быть любым. pattern должен выбирать кусок пути с множественными сущностями. separator задаёт разделитель элементов, а template определяет что вставить в каждый путь вместо найденного куска. Причём \$\$ заменяется на очередную сущность. Параметр only_first опрееляет, что нужно взять только первый путь, поскольку например вторичные авторы могут быть пропущены, а Calibre вставляет всех подряд. Что-бы разделить путь по авторам и тегам, нужно написать 2 соответствующие секции.
[author-series] pattern=/a=([^/]*)/t=[^/]*/s=([^/]+)/ template=.\1 * \2 [author] pattern=/a=([^/]*)/t=([^/]*)/s=/ template=..\1pattern задаёт шаблон поиска, а template - шаблон подстановки. В данном случае мы имеем 2 секции: первая определяет вид коллекции если есть серия, вторая - если серии нет. Секции могут "генерировать" коллекции независимо, и все сгенерированные коллекции будут использованы. В данном примере секции взаимно исключающие, поэтому путь (а их у книги уже может быть несколько после размножения) может попасть или в коллекцию по авторам или авторам-сериям или вообще никуда.
Для начала настроим Calibre на генерацию файловой структуры, удобной для обработки. Пока что удобнее использовать сохранение на диск, вместо отсылки на устройство, так как при отсылке на устройство русские символы преобразуются в английские аналоги. "Сохранить на диск" имеет отпцию для отключения этого поведения. В будущем "Послать на устройство" скорее всего будет иметь такую же функцию. Но вообще, нет препятствий для использования "Послать на устройство", кроме эстетических.
Итак, необходимо снять опцию "конвертировать не английские символы в латинские эквиваленты" и задать следующий шаблон для генерации:
a={author_sort}/t={tags}/s={series}/si={series_index}_{title}или
a={author_sort}/t={tags}/s={series}если не предполагается использовать построение индексов серий.
Теперь сгенерированная структура будет выглядеть как-то так
documents/calibre/a=Борис Акунин documents/calibre/a=Борис Акунин/t=det_history documents/calibre/a=Борис Акунин/t=det_history/s=Провинциальный детектив documents/calibre/a=Борис Акунин/t=det_history/s=Провинциальный детектив/si=1_Pielaghiia1.mobi documents/calibre/a=Борис Акунин/t=det_history/s=Провинциальный детектив/si=2_Pielaghiia2.mobi documents/calibre/a=Борис Акунин/t=det_history/s=Приключения магистра documents/calibre/a=Борис Акунин/t=det_history/s=Приключения магистра/si=2_F. M_.mobi documents/calibre/a=Борис Акунин/t=det_history/s=Приключения магистра/si=3_Vnieklassnoie chtieniie.mobi documents/calibre/a=Борис Акунин/t=det_hard documents/calibre/a=Борис Акунин/t=det_hard/s= documents/calibre/a=Борис Акунин/t=det_hard/s=/Kviest.mobi documents/calibre/a=Борис Акунин/t=sf_horror, sci_history documents/calibre/a=Борис Акунин/t=sf_horror, sci_history/s= documents/calibre/a=Борис Акунин/t=sf_horror, sci_history/s=/Kladbishchienskiie istorii.mobi
Skazki.mobi Skazki.opf Skazki.jpgПосле прочтения книгу можно удалить прямо из Kindle, но дополнительные файлы остаются. Это можно поправить запустив программу с параметром --clean:
kindle-coll-gen.py --cleanпрограмма найдёт все файлы, имеющие не книжное расширение(из конфиг файла) и не имеющее в этой же директории книги с таким-же именем. Список будет выведен и пользователю будет предложено удалить их или оставить. Затем программа ищет все пустые директории и так-же предлагает их удалить.
Затем запускаем
kindle-coll-gen.py --build-indexи в директории documents появляется новая директория _series-index содержащая текстовые файлы, с перечислением книг по порядку.
После построения индекса нужно снова перестроить коллекции, что бы индексы попали в соответствующие коллекции. За построение индексов отвечает файл series_index.conf, который по умолчанию находится только в профиле author-series.
Выглядит это так:
./kindle-coll-gen.py --help Usage: kindle-coll-gen.py [options] Options: -h, --help show this help message and exit -m MOUNT_POINT, --mount-point=MOUNT_POINT Specify point where kindle mounted. Typically /media/Kindle on linux, and one of drive letters on windows (F:\) -v, --verbose Show extra output -s, --silent Be quiet, not bother user with extra information -i CONFIG_PATH, --config=CONFIG_PATH Override config location -d, --dry-run Simulate -r, --reindent Reindent current collections.json file. -z, --skip-old Forget about old collections. Build from scratch. -e ENCODING, --encoding=ENCODING Use specified output encoding instead default. utf-8 for example -p PROFILE_DIR, --profile=PROFILE_DIR Profile for use (directory path with files split.conf, coll.conf) -o ORPHANS_COLL, --orphans-coll=ORPHANS_COLL Collection for orphan elements -y, --yes Answer "yes" to all asks -c, --clean Clean library --warnings-as-errors Threat warnings as errors --build-index Build index for books in seriesTODO: подробное описание
Kindle Collection Generator (с) Azarkevich Sergey 2010