Описание
Пакет дополнения в системе MajorDoMo представляет собой tgz-архив с папкой, в которой лежит некая структура файлов, необходимых для функционерования устанавливаемого дополнения. В большинстве случаев, в пакете находится некий функциональный модуль, устанавливаемый в систему при установке пакета, но это не обязательно, т.к. пакет может представлять собой просто набор дополнительных файлов.
При установке пакета, система распаковывает его содержимое во временную папку и переписывает все файлы и папки в корневую папку системы. Соответственно, разработчик должен ответственно подходить к содержанию архива, чтобы не включать в него файлы, которые, будучи переписанными поверх имеющихся, нарушат целостность системы.
Пример
Разберём состав архива на примере установочного пакета для модуля xiaomihome.
Файл дополнения: https://github.com/sergejey/majordomo-xiaomihome/archive/master.tar.gz -- при установке пакета из Маркета, система скачивает данный файл и распаковывает его. При распаковке архива мы имеем папку ./majordomo-xiaomihome-master/ (имя общей папки внутри архива не имеет значение), внутри которой уже находится копируемая структура файлов. В данном случае имеются под-папки ./modules/xiaomihome/, ./scripts/ и ./templates/xiaomihome, которые при установке будут добавлены в нашу систему.
В общем случае, любые другие папки и файлы, имеющиеся в архиве, будут так же скопированы в корневую папку системы, за исключением ряда специальных сущностей, копирование которых не производится и которые вместо копирования обрабатываются специальным образом в процессе установки пакета.
Состав пакета
Папка ./import/
Данная папка служит для автоматического импорта данных при установке пакета. Данные для импорта должны располагаться в под-папках ./import/scripts, ./import/scenes, ./import/classes -- т.е. каждая подпапка может включать внутри себя файлы, которые будут автоматически импортированы в соответствующий раздел системы. Обратите внимание, что процедура импорта будет проиходить при каждой установке/обновлении пакета, поэтому импортируемые данные будут заменять имеющиеся (за исключением "сцен" -- при повторном импорте уже импортированная ранее сцена не будет заменена).
Файл ./install.php
Данный файл не будет скопирован, но, при его наличии, будет исполнен в процессе установки пакета. Внутри файла могут быть любые инструкции и операции на усмотрение разработчика.
Ни один из элементов пакета дополнения не является обязательным.
Если пакет дополнения включает в себя функциональный модуль, то ниже представлены дополнительные рекомендации по наличию специальных файлов для модуля:
./modules/<name>/<name>.class.php -- основной класс модуля
./modules/<name>/app -- файл признак того, что модуль является пользовательским приложением
./modules/<name>/<name>_widgets.js.php -- файл виджетов для dashboard-а
./templates/<name>/ -- шаблоны модуля
./scripts/cycle_<name>.php -- отдельный цикл (процесс) модуля
./img/modules/<name>.png -- иконка модуля для меню
./languages/<name>_default.php -- словарь терминов модуля для локализации (по-умолчанию -- английский)
./languages/<name>_<lang>.php -- словарь терминов для языка <lang>
Специальные дополнения
Плееры
Перечень поддерживаемых системой плееров можно расширить разместив файлы вида *.addon.php в папке /modules/app_player/addons
Простые Устройства
Дополнительные Простые Устройства могут быть добавлены рамещение файлов в папке /modules/devices/addons . В данной папке создатся файлы вида:
mydevice_structure.php -- описание структуры устройства
mydevice_commands.php -- обработчик команд устройства (голосовых или текстовых)
mydevice_links.php -- структура возможных связей устройства с другими устройстами
mydevice_links_actions.php -- реализация описанных связей
Кроме этого, новые устройства скорее всего потребуют новых шаблонов представления (папка /templates/classes/views) и кода методов (папка /modules/devices).
Стили элементов
В папке /cms/scenes/styles/папка/ находятся файлы изображений и стилей, которые могут быть использованы при выборе стиля элемента сцены или Простого Устойства.