README IN RUSSIAN
Программа для скачивания другого приложения и поддержания его в актуальном состоянии.
Это приложение уважает чувства ленивых людей и понимает, как сложно обновлять DeskChan после выхода каждого релиза. Реально, сейчас по сути есть два способа делать это вручную:
- Закрыть приложение.
- Скачать архив.
- Удалить все файлы и папки в директории DC (с некоторыми исключениями):
- кроме папки
data
; - и плагинов в папке
plugins
, которые не входят в состав официального дистрибутива.
- кроме папки
- Распаковать содержимое архива в неё.
- Запустить новую версию приложения.
- Точно...
- ...такие же.
- Извлечь архив с перезаписью всех файлов.
- Вручную удалить все устаревшие файлы, которые больше не нужны.
- Тот же самый шаг.
И все эти шаги приходится выполнять раз за разом, снова и снова для каждого нового билда DeskChan. Весьма муторно, не так ли?
Возможно, вам уже интересно, что я предлагаю и как это должно работать? ОК, давайте посмотрим:
- Вы запускаете приложение с помощью специального загрузчика. Или даже оно запускается при загрузке компьютера.
- Невероятно! Оно обновляется автоматически! Офигеть!
- Готово! Оно просто запускается и всё.
К сожалению, пока загрузчик не умеет работать так, как описано выше. На данный момент он умеет только:
- проверять, является ли текущая версия последней;
- если нет, то:
- скачивать дистрибутив,
- распаковывать файлы из него и удалять архив;
- если нет, то:
- запускать DeskChan;
- завершаться.
Это довольно грубое обобщение функционала, хоть и даёт общее представление о нём. Например, загрузчик также умеет добавлять себя в автозагрузку, к чему мы ещё вернёмся немного позже.
Замечу, что функционал будет постепенно наращиваться в будущих релизах.
С v0.1.1-dev загрузчик состоит из трёх частей:
Модуль | Файлы | Описание |
---|---|---|
Основная библиотека (core library) | DCL-CORE.jar | Содержит всю логику, ответственную за разрешение версий и установку. |
Модуль командной строки (CLI) | dcl.exe, dcl | Отвечает за текстовое взаимодействие с юзером посредством командной строки. |
Графический модуль (GUI) |
DeskChan-Launcher.exe, DeskChan-Launcher |
Предоставляет графический интерфейс с помощью библиотеки JavaFX. |
Как видно из диаграммы выше, и модуль интерфейса командной строки, и графический модуль зависят от основной библиотеки (очевидно, не правда ли?), но полностью независимы друг от друга.
Я сознательно собираюсь поддерживать оба модуля. Может когда-нибудь это изменится, но пока каждый из них имеет свои особенности и эксклюзивные возможности, которые мы рассмотрим ниже.
На самом деле этот модуль можно назвать основным, потому что, по крайней мере сейчас, он поддерживает гораздо больше функций и опций, чем "конкурент".
По умолчанию он:
- использует язык системы;
- устанавливает DeskChan в ту же папку, где находится сам, если там уже не находится актуальная версия;
- запускает приложение.
Но ему можно передать ряд параметров, приведённых в таблице ниже (вероятно, в следующих релизах она будет расширена). Некоторые из них лишь задают какие-либо настройки, но другие полностью меняют поведение программы.
Аргумент | Описание |
---|---|
--deskchan-update-required |
Если Вы передадите этот параметр, загрузчик напишет "true" или "false" (в зависимости от того, есть ли более новая версия DeskChan на GitHub) и завершится. |
--launcher-update-required |
Аналогично предыдущему, но для самого загрузчика. |
--deskchan-version |
Печатает текущую версию DeskChan, которая установлена под контролем этого загрузчика, и завершается. |
--launcher-version |
Печатает свою версию и завершается. |
--path |
Используя этот аргумент, можно переопределить директорию, в которую будет установлено приложение. При этом загрузчик самостоятельно создаст свою копию в этой папке. |
--locale |
Вы можете вручную задать желаемую локаль, если не хотите использовать системную. Этот аргумент принимает строки вида ru или ru_RU . На данный момент поддерживаются только русский и английский языки. |
--delay |
Определяет задержку в секундах между тем, как приложение завершит свою работу и окончательно закроется. Бесполнезно при запуске из терминала, но очень удобно при запуске из графической среды. |
--autorun |
По умолчанию загрузчик спросит о том, следует ли ему стартовать при запуске компьютера во время процесса установки, но вы можете заранее установить этот или следующий флаг. Также они позволяют изменять параметр автозагрузки при обычном запуске, без установки. |
--no-autorun |
См. описание предыдущего аргумента. Этот является обратным ему. |
--preserve-distribution |
По умолчанию загрузчик удаляет дистрибутив после установки. Такое поведение может быть отключено этим флагом. |
С v0.1.1-dev загрузчик может быть запущен в графическом режиме, как обычное окно. Этот режим не принимает аргументов
командной строки, но самые важные параметры перенесены в графический формат в виде элементов управления. Хотя, в принципе,
это только эквиваленты --path
и --autorun
/--no-autorun
. При этом их ещё и задать можно только исключительно во время
первой установки приложения. То есть сейчас даже отключить автозагрузку в любое время через этот режим нельзя. Однако я
собираюсь доработать его в будущем и решить эту проблему.
Один из любимых "баззвордов" CORRUPTOR2037'а.
- Поддержка дистрибутивов, состоящих из отдельных файлов и индекса. Сейчас используются обычные дистрибутивы
в виде ZIP-архивов, из-за чего при каждом обновлении приходится скачивать весь 20+ мегабайтный архив. Даже
если изменения произошли буквально в нескольких небольших файлах (честно говоря, в нынешних условиях такой случай
едва ли возможен; весь код DeskChan со всеми зависимостями пакуется в один единственный файл (
bin/DeskChan.exe
); однако этот файл всё равно занимает лишь половину итогового дистрибутива). Решение данной проблемы потребует много работы и на стороне сервера (возможно, первое время мне даже придётся хранить копии дистрибутивов в особом формате у себя на сервере) и займёт большую часть времени работы над релизом вместе со следующей фичей. - Поддержка обновлений с обеспечением консистентности. Это значит, что загрузчик будет не только добавлять и заменять файлы, но и удалять устаревшие.
- Плагин для самого приложения DeskChan, который возьмёт на себя некоторые возможности загрузчика и позволит изменять его конфигурацию. Например, он будет управлять параметром автозагрузки (особенно полезно для запуска через графический модуль) и будет использоваться для уведомления пользователя о выходе новой версии DC, если она была запущена не через загрузчик.
- Возможность выбора и установки конкретной версии DeskChan.
- Поддержка других репозиториев, кроме стандартного. Это позволит разбить релизы на различные ветки (например, стабильную (stable), с бета-версиями (beta), с самыми свежими билдами для разработчиков (dev) и т. п.).
- Управление остальными плагинами через тот специальный плагин. Я думаю, что он не должен быть простым посредником
между загрузчиком и DeskChan'ом. Он вполне может быть отдельным сложным артефактом со своим собственным функционалом,
основанном на уже написанной инфраструктуре. Ведь, например, система управления плагинами весьма похожа по
возможностям на загрузчик. Оба компонента занимаются разрешением версий, скачиванием дистрибутивов, "умным"
обновлением файлов и т. д. Однако у системы должны быть и дополнительные возможности: разрешение зависимостей,
поиск по каталогу плагинов и т. п.
Возможно я когда-нибудь передумаю, и этим будет заниматься полностью отделённый и независимый плагин, который будет располагаться в другом репозитории, но пока я думаю так.
Для проекта сконфигурирован Gradle Wrapper, так что можно сразу использовать следующие шаблоны команд:
- на Windows:
gradlew <задача>
- на Linux:
./gradlew <задача>
Список основных задач, которые могут быть интересны:
Задача | Описание |
---|---|
buildDistZip |
Собирает проект и создаёт дистрибутив в виде zip-архива. |
wrapFilesWithDir |
Делает то же самое, что и предыдущая, но без создания архива. Собранную сборку можно найти в папке build/DeskChan-Launcher <версия> . |
run |
Компилирует все классы с ресурсами и запускает приложение. Рабочая директория будет задана как папка build/classes . |
Прошу обратить внимание, что данное приложение сейчас находится в стадии очень медленной разработки, так что отсутствие новых коммитов в течение нескольких месяцев — норма для этого репозитория.
Если возникнут какие-либо вопросы, связаться со мной (или кем-нибудь ещё из DeskChan Project), кроме обычных средств GitHub'а и электронной почты, можно через мессенджер Telegram. Пожалуй, это даже более предпочтительный вариант.