Skip to content

Conversation

@makss
Copy link

@makss makss commented Oct 27, 2024

Запускам любые команды указанные в конфиге. Все, что может быть сделано с командной строки, будет сделано.. или не сделано, если в командной строке есть ошибки. :)

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

Вопрос к обсуждению: какие еще параметры могут понадобиться для интеграции внешнего софта?
Подозреваю, что полезным было бы показывать/скрывать пункты в зависимости от типа исходного файла.

Описание функционала из обновленного README.md:

Подключение внешних программ (конвертеры, читалки, экспорт)

Можно подключать любые внешние программы, конвертеры, читалки, экспорты, отсылку на почту и прочее. Будут запущены команды указанные в конфиге external_tools.json в параметре cmd.

Пример минимально конфига (под Linux, для других OS - немного другие команды, но принцип тот же):

{
  "mobi": {
    "active": true,
    "cmd": "cp '${HASHFILE}.raw' '${HASHFILE}.fb2'; ${EXTDIR}/fb2c/fb2c convert --to mobi --nodirs --overwrite '${HASHFILE}.fb2'; rm -f '${HASHFILE}.fb2'",
    "type": "download"
  },
  "pdf": {
    "active": true,
    "cmd": "cp '${HASHFILE}.raw' '${HASHFILE}.fb2'; java -jar '${EXTDIR}/fb2pdf/lib/fb2pdf.jar' -o -e UTF-8 '${HASHFILE}.fb2'; rm -f '${HASHFILE}.fb2'",
    "type": "download"
  },
  "webReader": {
    "active": true,
    "link": "http://127.0.0.1:44080/#/reader?url=http://127.0.0.1:12382${DOWNLOAD_URI}",
    "type": "link"
  },
  "fbReader": {
    "active": true,
    "cmd": "fbreader '${BOOKFILE}.raw'",
    "type": "gui"
  }
}

Возможные действия:

  • "type": "download" // будет запущена команда cmd и результат будет загружен в браузере.
  • "type": "cmd" // будет просто запущена команда cmd, полезно для экспорта или отсылку куда-то.
  • "type": "link" // можно добавить свою ссылку.
  • "type": "gui" // запуск чего-то в GUI, например, свою десктопную читалку.

Полный перечень доступных параметров (в реальном конфиге комментарии не допустимы, их нужно удалить):

{
  "mobiDownload": {
    "active": true, // включен/выключен
    "title": "(mobi)", // Название
    "hint": "Скачать mobi файл", // Подсказка при наведении мышки на ссылку
    "ext": "mobi", // расширение файла (для одного и того же типа файла можно выполнять разные действия)
    "cmd": "...", // первая cmd команда, например конвертация
    "cmdExport": "...", // вторая cmd команда, если хотим после конвертации выполнить еще действия: экспорт, отправка на почту
    "debug": true, // в логе покажет, что запускалось
    "type": "download"
  },
  "mobiExport": {
    "active": true,
    "title": "(mobi export)",
    "hint": "Экспортировать mobi файл",
    "ext": "mobi",
    "cmd": "...",
    "cmdExport": "...",
    "debug": true,
    "type": "cmd"
  },
  "webReader": {
    "active": true,
    "title": "(web)",
    "hint": "Веб читалка",
    "link": "http://127.0.0.1:44080/#/reader?url=http://127.0.0.1:12382${DOWNLOAD_URI}",
    "type": "link"
  },
  "fbReader": {
    "active": true,
    "title": "(fbreader)",
    "hint": "Десктопная читалка",
    "cmd": "fbreader '${BOOKFILE}.raw'", // для типа `gui` нет запуска второй команды `cmdExport`
    "debug": true,
    "type": "gui"
}

Доступные переменные при запуске cmd или cmdExport:

Переменные Описание
${BOOKFILE} полный путь к исходному файлу
${HASHFILE} хеш имени
${RESULTFILE} полный путь к выходному файлу
${FILENAME} культурное имя файла, то которое "download", не забываем заключать его в кавычки, т.к. там могут быть пробелы
${EXTDIR} директория в которой лежит конфиг external_tools.json, в этой директории удобно размещать свои конвертеры и утилиты
${LIBFOLDER} имя архива в котором находится книга
${LIBFILE} имя файла книги в архиве

@makss makss force-pushed the feature_external branch 3 times, most recently from 006fc0e to 7e2c4a5 Compare October 27, 2024 21:33
@leaf-avf
Copy link

leaf-avf commented Mar 1, 2025

@makss Отличная работа, спасибо!
@bookpauk - есть надежда увидеть этот ПР в вашем продукте?

@codinv
Copy link

codinv commented Apr 22, 2025

@makss Просто супер!!
Именно этого и не хватало.
Собрал приложеньку с вашими правками, закинул в докер на Synology, все работает шикарно!

Пару моментов только хотелось бы уточнить..
1 - параметр "ext": "mobi", я так понимаю что при использовании ${FILENAME} это расширение будет автоматически добавляться к имени, даже если изначально книга в fb2, мы получим все равно файл mobi ?
если так делать:
"cmd": "ср '${HASHFILE}.raw' '${FILENAME}'; ${EXTDIR}/fb2c/fb2c ********
выставил параметру fb2, что бы всегда файлик с этим расширением создавался, но на сколько это правильно…

2 - может не до конца изначально разобрался, но показалось что не заработала команда "cmdExport": "..."
В принципе не критично, вписал все команды через точку с запятой в параметр "cmd"
Все последовательно выполняется, файлик скачивается, конвертируется, отправляется на почту ридера, после чего удаляется и подчищается временная папка.

@JanisV
Copy link

JanisV commented Nov 24, 2025

Обратите внимание, что если изменено значение значение server.root в config.json, например на /library, то должен существовать каталог /app/data/public-files/library/book, но в нем не будет исходных файлов, они остаются в /app/data/public-files/book. (Видимо проблема в config.bookPathStatic и config.bookDir)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants