Skip to content

README IN RUSSIAN

Leonid Kozarin edited this page Oct 3, 2017 · 1 revision

DeskChan Launcher

Программа для скачивания другого приложения и поддержания его в актуальном состоянии.

Суть

Проблема

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

Первый:

  1. Закрыть приложение.
  2. Скачать архив.
  3. Удалить все файлы и папки в директории DC (с некоторыми исключениями):
    • кроме папки data;
    • и плагинов в папке plugins, которые не входят в состав официального дистрибутива.
  4. Распаковать содержимое архива в неё.
  5. Запустить новую версию приложения.

Второй:

  1. Точно...
  2. ...такие же.
  3. Извлечь архив с перезаписью всех файлов.
  4. Вручную удалить все устаревшие файлы, которые больше не нужны.
  5. Тот же самый шаг.

И все эти шаги приходится выполнять раз за разом, снова и снова для каждого нового билда DeskChan. Весьма муторно, не так ли?

Решение

Возможно, вам уже интересно, что я предлагаю и как это должно работать? ОК, давайте посмотрим:

  1. Вы запускаете приложение с помощью специального загрузчика. Или даже оно запускается при загрузке компьютера.
  2. Невероятно! Оно обновляется автоматически! Офигеть!
  3. Готово! Оно просто запускается и всё.

Реальность

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

  • проверять, является ли текущая версия последней;
    • если нет, то:
      • скачивать дистрибутив,
      • распаковывать файлы из него и удалять архив;
  • запускать 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. При этом их ещё и задать можно только исключительно во время первой установки приложения. То есть сейчас даже отключить автозагрузку в любое время через этот режим нельзя. Однако я собираюсь доработать его в будущем и решить эту проблему.

FUTURE

Один из любимых "баззвордов" CORRUPTOR2037'а.

Что будет в v0.1.2-dev:

  • Поддержка дистрибутивов, состоящих из отдельных файлов и индекса. Сейчас используются обычные дистрибутивы в виде ZIP-архивов, из-за чего при каждом обновлении приходится скачивать весь 20+ мегабайтный архив. Даже если изменения произошли буквально в нескольких небольших файлах (честно говоря, в нынешних условиях такой случай едва ли возможен; весь код DeskChan со всеми зависимостями пакуется в один единственный файл (bin/DeskChan.exe); однако этот файл всё равно занимает лишь половину итогового дистрибутива). Решение данной проблемы потребует много работы и на стороне сервера (возможно, первое время мне даже придётся хранить копии дистрибутивов в особом формате у себя на сервере) и займёт большую часть времени работы над релизом вместе со следующей фичей.
  • Поддержка обновлений с обеспечением консистентности. Это значит, что загрузчик будет не только добавлять и заменять файлы, но и удалять устаревшие.

Что, скорее всего, будет в v0.1.2-dev (или точно будет в v0.1.3-dev):

  • Плагин для самого приложения DeskChan, который возьмёт на себя некоторые возможности загрузчика и позволит изменять его конфигурацию. Например, он будет управлять параметром автозагрузки (особенно полезно для запуска через графический модуль) и будет использоваться для уведомления пользователя о выходе новой версии DC, если она была запущена не через загрузчик.

Что будет в v0.1.3-dev:

  • Возможность выбора и установки конкретной версии DeskChan.
  • Поддержка других репозиториев, кроме стандартного. Это позволит разбить релизы на различные ветки (например, стабильную (stable), с бета-версиями (beta), с самыми свежими билдами для разработчиков (dev) и т. п.).

Что, возможно, будет в v0.1.3-dev:

  • Управление остальными плагинами через тот специальный плагин. Я думаю, что он не должен быть простым посредником между загрузчиком и DeskChan'ом. Он вполне может быть отдельным сложным артефактом со своим собственным функционалом, основанном на уже написанной инфраструктуре. Ведь, например, система управления плагинами весьма похожа по возможностям на загрузчик. Оба компонента занимаются разрешением версий, скачиванием дистрибутивов, "умным" обновлением файлов и т. д. Однако у системы должны быть и дополнительные возможности: разрешение зависимостей, поиск по каталогу плагинов и т. п.
    Возможно я когда-нибудь передумаю, и этим будет заниматься полностью отделённый и независимый плагин, который будет располагаться в другом репозитории, но пока я думаю так.

Сборка

Для проекта сконфигурирован Gradle Wrapper, так что можно сразу использовать следующие шаблоны команд:

  • на Windows: gradlew <задача>
  • на Linux: ./gradlew <задача>

Список основных задач, которые могут быть интересны:

Задача Описание
buildDistZip Собирает проект и создаёт дистрибутив в виде zip-архива.
wrapFilesWithDir Делает то же самое, что и предыдущая, но без создания архива. Собранную сборку можно найти в папке build/DeskChan-Launcher <версия>.
run Компилирует все классы с ресурсами и запускает приложение. Рабочая директория будет задана как папка build/classes.

Послесловие

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

Если возникнут какие-либо вопросы, связаться со мной (или кем-нибудь ещё из DeskChan Project), кроме обычных средств GitHub'а и электронной почты, можно через мессенджер Telegram. Пожалуй, это даже более предпочтительный вариант.