Отчет по проекту GSoC 2017: ReactOS Apps Manager

в 4:36, , рубрики: gsoc, gsoc 2017, open source, rapps, reactos, windows, Блог компании Фонд ReactOS, разработка под windows

Reactos x GSoC

Привет! Меня зовут Александр Шапошников, я студент Google Summer of Code. Этим летом я работал над проектом "ReactOS App Manager".

ReactOS уже второй год подряд получил слоты для студентов GSoC. Я следил за проектом достаточно давно и подал свою заявку, как только увидел его в списке организайци. К слову, этот проект был чуть ли не единственным, который не требовал пулл реквест, так что я смог сфокусироваться на самой заявке. Мне повезло — я стал одним из четырех студентов GSoC в ReactOS! Это был мой первый опыт в программе, и он был весьма интересным.

Менеджер приложений ReactOS (ReactOS App Manager, RAPPS) это приложение ReactOS для загрузки программ, что были протестированы командой ReactOS и сообществом. Оно так же может использоваться для изменения или деинсталяции любых установленных в системе программ. Цель этого проекта улучшение RAPPS и добавление новых полезных функций. Это — финальный отчет по проекту.

Сборка

Сборка RAPPS не отличается от сборки других компонентов ReactOS. Для сборки рекомендуется использовать среду сборки RosBE:

  1. Клонируйте SVN репозиторий reactos/branches/GSoC_2017/rapps/reactos любым доступным клиентом. Также можно использовать утилиту ssvn из RosBE. Для этого нужно сперва установить ветку переменной среды ROS_BRANCH=GSOC_2017/rapps и выполнить ssvn create в выбраной директории.
  2. Создать папку доя вывода компилятора и перейти в нее.
  3. Выполнить скрипт <source path>/configure
  4. Выполнить ninja rapps
  5. Перейти в папку <output folder>/base/applications/rapps за EXE.

Детальнее процесс сборки ReactOS описан в официальной инструкции на Wiki.

Использование

RAPPS достаточно интуитивное приложение. Просто скачайте и установите приложение двойным кликом по нему или выберите несколько приложений чекбоксами. Также можно вызвать контекстное меню для дополнительных опций.

Так же RAPPS без проблем работает на Windows.

Проделанная работа

RAPPS Overview: ReactOS

Улучшение списка приложений

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

New Application Info: ReactOS Look

Одно из добавленых полей — статус установки приложения. Статус показывает, установлено ли приложение и есть ли обновления. Это сделано с помощью проверки ключей в реестре в ключе ...Uninstall. До этого в базе приложений существовало специальное поле для поиска в, но оно не было задано в самих файлах, потому я расширил проверку на имя и имя с версией (что оказалось довольно распостаненной вещью). Здесь версия берется из файла базы.

Если приложение установлено, RAPPS пытается взять версию из вышеупомянутого ключа. Если эта версия будет меньше, чем версия из базы, RAPPS покажет статус "Есть обновление". Если версию достать не удастся, то поле отображаться не будет, а статус будет "Установлено".

New Application Info: Windows Look

Также было добавлено поле Языки. Оно показывает переведено ли выбраное приложение на язык системы или на английский плюс показывает сколько еще языков доступно. Это поле требует наличия списка языков для конкретного приложения в файле базы. Список должен быть представлен языковыми кодами, разделенными |. Пример: Languages=0C09|0813|0422 \Английский|Датский|Украинский Этот параметр является многострочным.

И последнее поле это изменения поля лицензии. В файлы базы добавил еще один параметр LicenseInfo. Это поле определяет категорию лицензии приложения, и, если оно присутствует, меняет вид строки лицензии. Число 1 значит "Свободное ПО", 2 — "Бесплатное ПО", а 3 — "Пробная версия". Это поможет выделить свободное ПО среди другого доступного.

New Icons Overview: ReactOS

В этом превью были использованы иконки Faenza и некоторые другие из Интернета.

Старый RAPPS использовал одинаковую иконку для всех приложений в списке. Я добавил поддержу пользовательских иконок для каждого приложения, которые загружаются из папки AppData/rapps/rapps/icons по его названию (в папке rapps, где лежат файлы базы).

Множественная установка

New Download Dialog: ReactOS

Раньше можно было установить лишь одно приложение за раз, и при этом нельзя было выбрать второе приложение, пока не установится первое. Это нововведение являет собой немодальный диалог, который последовательно загружает сразу несколько приложений. Так как диалог немодальный, его можно свернуть и продолжить работу с RAPPS, пока идет загрузка и установка. Диалог показывает список приложений и статус загрузки (Загружается/Загружено/Установка.../Установлено).

Download Dialog Animation: Windows

Чтобы загрузить несколько приложений необходимо выбрать их при помощи чекбоксов или кнопки "Выбрать все" и нажать кнопку 'Установить'. После этого сразу же начнется процесс загрузки.

Checkbox Selection Animation: Windows

Эта анимация старая, и имеет визуальный баг, который был починен в процессе тестирования.

В статусбаре теперь также отображается количество выбраных приложений. Пока что выбраные приложения сбрасываются при переходе в другую категорию. Чекбоксы также скрываются в категории "Установленные".

Установка скриптом

Command Line Install: ReactOS

Долгожданная функция — установка с командной строки и скриптом! Теперь можно установить любое приложение из RAPPS всего лишь одной командой в командной строке. Я добавил два ключа:

  • /INSTALL — установка одного или нескольких приложений по имени.

    Пример: rapps /INSTALL 7-Zip AkelPad

  • /SETUP — принимает полный путь к скрипту .inf, в котором в секции [RAPPS] есть перечисление приложений для установки, используя по одному параметру Install=на одно приложение.

    Пример:

    [Version]
    Signature = $Windows NT$
    ClassGUID = {00000000-0000-0000-0000-000000000000}
    
    [RAPPS]
    Install=7-Zip
    Install=AkelPad 

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

Другие изменения

Помимо этого в процессе работы я пофиксил некоторые баги RAPPS, среди них:

  • Множественное обновление списка приложений при выборе категории
  • Неработающий пункт меню "Обновить базу данных"
  • Неработающий пункт настроек "Обновлять при каждом запуске"
  • Установка стандартной директории загрузок на С: вне зависимости от местонахождения системы. (теперь устанавливается в <user>My DocumentsRAPPS Downloads)
  • И другие.

Дальнейшая работа

Обновленный менеджер приложений совсем скоро будет включен в trunk. Еще остались вещи, которые хотелось бы зашлифовать дальнейшем, такие как:

  • Сделать множественный выбор приложений стойким к смене категорий
  • Улучшение категории "Установленные" — в этом проекте не затрагивалась
  • Добавить опциональный диалог подтверждения перед множественной загрузкой
  • Добавление параллельных загрузок
  • И прочие улучшения архитектуры приложения.

Так же есть цели, которые изначально были в проекте, но были вычтены из него. Это, например, режим "Установки", где RAPPS бы запускался на втором этапе установки для загрузки приложений. Команда сочла это ненужным сейчас и потому мы теперь имеем запуск с командной строки. Возможно, он вернется в дальнейшем.

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

Заключение

Команда ReactOS очень классная! Мне понравилось работать над проектом со всей помощью менторов и других разработчиков. Он дал мне ощущение того, что такое сообщество FOSS, общий опыт, а так же Хакфест и FrOSCon, в рамках которого мне повезло встретить некоторых из них. 

Для себя я решил, что точно останусь в проекте и буду помогать развивать проект в дальнейшем. Спасибо Google за программу GSoC которая дала мне возможность работать над чем-то увлекательным!

Ссылки

Автор: Александр Шапошников

Источник

Поделиться

* - обязательные к заполнению поля