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

    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 Documents\RAPPS Downloads)
    • И другие.

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


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


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

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


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


    Заключение


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


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


    Ссылки


    • +25
    • 4,8k
    • 8
    Фонд ReactOS 200,11
    Операционная система
    Поделиться публикацией
    Ой, у вас баннер убежал!

    Ну. И что?
    Реклама
    Комментарии 8
      +3

      Как вы думаете какие ключевые вещи нужно сделать чтобы ReactOS стала полноценной десктопной ОС ???

        0
        Автоматизированый регистратор ошибок (ABRT)
        ABRT является инструментом для создания автоматических отчетов об ошибках. ABRT состоит из демона, который большую часть времени работает в фоновом режиме. Когда происходит сбой приложения, то демон активируется. Затем он собирает дополнительные необходимые данные. Наконец, ABRT способна создать отчет об аварии и послать в систему отслеживания проблем. ABRT можно настроить на автоматическую отсылку ошибок при каждом обнаруженом сбое, или аварийные дампы могут храниться локально и сообщаться или удаляться пользователем вручную.
          0
          Как вы думаете какие ключевые вещи нужно сделать чтобы ReactOS стала полноценной десктопной ОС ???

          Для полноценного десктопа — возможность запускать все игры, chrome, и мультимедиа.
          Ну, и сделать тему — с дизайном не из начала 2000х )
          А так — просто замечательно, что ОС развивается. Но имхо, на полноценную замену win ориентироваться рано, более предпочтителен корпоративный сектор — программы для видеонаблюдения, 1С, торговое оборудование, а там и обычные пользователи подтянутся.
            +1

            К слову про темы: ReactOS уже поддерживает msstyles и имеет встроенную тему Lautus.

            0

            Свопинг в менеджере памяти

              0
              Как минимум, что бы тестирование данной ОС можно было проводить на живом железе, а не на виртуалке.
              0
              А чем этот RAPPS лучше Chocolatey? Какой был смысл в разработке своего собственного менеджера приложений?
                +1

                Chocolatey работает в PowerShell и написан на С#. Кроме того RAPPS появился раньше и с другим назначением — это место, где собраны протестированые именно на ReactOS программы.

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

              Самое читаемое