Упаковка дополнений для NVDA

(По материалам NVDA 2012.2 Developer Guide)
Дата публикации:04.06.2012
Поделиться в Twitter Поделиться в F******k Поделиться в VKontakte Поделиться в Telegram Поделиться в Mastodon

Для облегчения процесса установки и обмена плагинами и драйверами в программе экранного доступа NVDA версии 2012.2 реализована новая функция — «дополнения» (Add-ons). Теперь, вместо того, чтобы вручную копировать файлы расширений в системные директории Windows, достаточно запустить процесс установки специального пакета в менеджере дополнений (Add-ons Manager), и NVDA сделает всё остальное самостоятельно.

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

В конце приводится ссылка на загрузку дополнения, разобрав которое, любой желающий сможет на реальном примере увидеть реализацию описанного в данной статье.

В сущности, дополнение NVDA — это стандартный ZIP-архив, но с расширением «.nvda-addon». Его создание состоит из нескольких этапов:

  1. Составление manifest-файла
  2. Добавление плагинов или драйверов
  3. Написание кода, отрабатывающего при установки или удалении дополнения
  4. Локализация дополнения
  5. Итоговая упаковка

Этапы 3 и 4 являются не обязательными и могут быть пропущены.

Manifest-файл

Каждый пакет дополнения должен содержать manifest-файл, который должен называться «manifest.ini». В нём указываются базовые сведенья о дополнении и его авторе.

Он должен иметь кодировку UTF-8, причём обязательно с BOM, и содержать в себе пары из названия поля и через знак равно его значение, записанные на отдельных строках. Не смотря на расширение .ini, название секции в нём не указывается.

Доступны следующие поля, одни из которых являются обязательными, а другие могут быть пропущены:

  1. name: — название дополнения (обязательно).
  2. summary — краткое, в несколько слов, описание дополнения, показываемое пользователю в Add-ons Manager (обязательно).
  3. version — версия дополнения (обязательно).
  4. author — информация об авторе дополнения, желательно в форме «Полное имя <E-mail-адрес>« (без кавычек) (обязательно).
  5. description — более подробное описание дополнения несколькими предложениями.
  6. url — Интернет-адрес, где может быть найдено это дополнение, более полная информация о нём, а также его возможные обновления.

То есть первые четыре поля являются обязательными, а два последних могут быть отброшены, однако рекомендуется всё-таки заполнять manifest-файл полностью.

Добавление плагинов и драйверов

На этом этапе следует добавить как раз те файлы, ради автоматической установки которых всё и затевалось, а именно плагины или драйверы для NVDA.

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

  • Модули приложений: файлы в папке «appModules».
  • Драйверы брайлевских дисплеев: файлы в папке «brailleDisplayDrivers».
  • Глобальные плагины: файлы в папке «globalPlugins».
  • Драйверы голосовых синтезаторов: файлы в папке «synthDrivers».

При установки дополнения все его файлы будут скопированы в директорию «addons\имя_дополнения» в каталоге пользовательских настроек программы NVDA.

Добавочный код установки/удаления

Данный этап является не обязательным и предназначен лишь для тех случаев, когда разработчику дополнения требуется встроить в него некоторую добавочную логику, например, проверку лицензии или нестандартные процедуры перемещения файлов.

Для этого требуется в формируемый пакет поместить файл «installTasks.py», в котором и будут находиться функции, отрабатывающие при установке и удалении дополнения. В данном файле следует избегать загрузки любых модулей, которые не являются абсолютно необходимыми, особенно Python C расширений и библиотек из самого дополнения, так как в конечном итоге это может привести к вылету с ошибкой. Если это всё же произойдёт, то при следующей загрузке NVDA директория будет переименована и удалена. Кроме того, в идеале, результат функций installTasks.py не должен зависеть от наличия или отсутствия других сторонних плагинов или драйверов, так как выполнение этих условий не гарантировано.

За добавочный код при установки отвечает функция onInstall, а при удалении — onUninstall.

NVDA осуществляет поиск и попытку выполнения функции onInstall из файла installTasks.py уже после его извлечения из пакета. Следует отметить, что хотя к этому моменту все файлы из дополнения уже будут извлечены, они будут находиться в директории с названием дополнения и служебным префиксом «.pendingInstall», который будет удалён лишь после перезагрузки NVDA, тогда же дополнение и вступит в силу. Если же функция осуществит недопустимый вызов, то установка не удастся и директория с дополнением будет удалена.

NVDA осуществляет поиск и попытку выполнения функции onUninstall из файла installTasks.py, когда screenreader перезапускается после удаления дополнения. Данная операция проходит вместе со всеми первичными инициализациями при загрузки программы, после чего директория с дополнением удаляется. Следует отметить, что onUninstall не может запрашивать данные у пользователя.

Локализация

Данный этап также не обязателен и предназначен для тех случаев, когда разработчик желает реализовать в своём дополнении поддержку нескольких языков.

Файлы локализации, к которым могут относиться сведенья о дополнении и используемые плагином сообщения, должны располагаться в отдельной директории с названием «locale», а в ней должны быть созданы поддиректории с названиями в виде двухбуквенного кода языка, например, en для английского, ru для русского, uk для украинского и так далее.

В каждой из языковых поддиректорий может находиться файл manifest.ini с переведёнными полями summary и description (остальные игнорируются и их данные в любом случае берутся из основного manifest.ini), а также ещё одна вложенная папка с названием «LC_MESSAGES», где может находиться gettext-файл «nvda.mo» с переводом сообщений.

Чтобы использовать возможность gettext-локализации, в начале плагинов следует вызвать addonHandler.initTranslations().

Для получения более подробной информации о принципах локализации, используемых в NVDA, имеет смысл обратиться к соответствующей статье NVDA wiki — «NVDA Translation and Localization».

Упаковка

Как уже было сказано, пакет дополнения NVDA представляет собой стандартный ZIP-архив, просто с изменённым расширением файла.

Таким образом, для финальной сборки дополнения, следует заархивировать все файлы и папки, входящие в его состав, в формат ZIP любым архиватором, например, бесплатным 7-Zip. После этого расширение файла следует изменить с «.zip» на «.nvda-addon», и дополнение будет готово к распространению.

Пример дополнения

По нижеследующей ссылке можно загрузить пример дополнения NVDA, которое по нажатию NVDA+Shift+C проигрывает куплет песенки «Чижик-пыжик», используя функционал тональных сигналов программы экранного доступа.

Кроме того, в нём продемонстрированы возможности по локализации: в качестве основного языка используется традиционный английский, плюс в пакет также входят русская и украинская локализации.

Любой желающий может обратно изменить расширение .nvda-addon на .zip, разархивировать получившийся файл и изучить внутреннюю структуру и содержимое файлов дополнения.

[Скачать файл дополнения]



Распространение материалов сайта означает, что распространитель принял условия лицензионного соглашения.
Идея и реализация: © Владимир Довыденков и Анатолий Камынин,  2004-2024