IscanderChe
IscanderChe9 июля 2019 г. 7:31

Проект Simple Tracker. Часть 1: требования к проекту

Проект реализует простой трекер задач, в первую очередь, для программных проектов, хранящихся в Subversion. Рассчитываю использовать его только у себя. Если возникнет интерес у читателей данного ресурса, постараюсь доработать код до возможности более универсального использования и выложу проект на GitHub.

Использование Subversion (далее – SVN) для хранения кода продиктовано тем, что кроме исходных текстов программ под SVN заточен самописный набор скриптов для архивации прочих документов.

Проект появился из необходимости отслеживать собственные работы. Анализ аналогов показал, что для использования имеющихся бесплатных трекеров требуется установка и настройка дополнительного программного обеспечения, как то: полноценный веб-сервер и сервер баз данных; Python и некоторое количество дополнительных скриптов. Поскольку мне трекер необходим только для локального контроля собственных работ, такие затраты показались излишними. Кроме того, это необходимая мне практика по программированию.


Для реализации проекта выбрана клиент-серверная архитектура на основе QLocalSocket, т.к. необходимо связать два независимо работающих компонента – SVN и собственно трекер.

Трекер должен:

  • запускаться при старте системы;
  • иметь серверную часть и визуальный интерфейс.

Клиент трекера должен запускаться при коммите в SVN изменений проекта по pre-commit-хуку. Клиент трекера должен передать серверу наименование проекта, номер закрываемой задачи и номер ревизии. В свою очередь, сервер должен принять эти данные и перевести задачу в состояние «закрыта».

Данные по закрытию задачи вводит пользователь в комментарий к коммиту в следующем формате:

<произвольный текст> #{номер закрываемой задачи} <произвольный текст>

Остальные данные присваивает клиент.

Интерфейс трекера

Интерфейс трекера должен иметь имеет следующий вид.

В левой части находится группа «Управление проектами». Она состоит из следующих элементов:

  • список проектов;
  • кнопки «Новый проект», «Архивировать проект», «Открыть архив».

В правой части находится группа «Управление задачами». Она состоит из следующих элементов:

  • список задач;
  • выпадающий список «Состояние задачи», имеет три значения: «не активна», «в работе», «закрыта»;
  • кнопки «Новая задача», «Редактировать задачу», «Удалить задачу».

Управление проектами

Выделение мышью одного из проектов инициирует загрузку списка задач для соответствующего проекта.

Нажатие кнопки «Новый проект» открывает диалоговое окно создания проекта.

В текстовое поле ввода пользователь должен ввести название проекта. В зависимости от положения радиопереключателя «СКВ» (Система Контроля Версий) вводимое название может содержать следующие символы:

  • «без системы контроля версий» - любые символы;
  • «под системой контроля версий» - только символы латинского алфавита без пробелов, включая символ подчёркивания.

Проект без СКВ в списке проектов помечается буквой «М» в скобках (от англ. manual – вручную) перед наименованием проекта.

Кнопка «Архивировать проект» позволяет архивировать проект, у которого закрыты все задачи. Если у проекта закрыты не все задачи, трекер выдаёт соответствующее предупреждение и прерывает архивирование проекта. Если у проекта закрыты все задачи и нажата кнопка «Архивировать проект», то наименование проекта исключается из списка проектов в основном интерфейсе трекера после согласия пользователя с соответствующим предупреждением.

Кнопка «Открыть архив» позволяет открыть архивированный проект и загрузить связанный с ним список задач.

По нажатию кнопки «ОК» отмеченные проекты должны появиться в списке проектов основного окна трекера. Архивированные ранее проекты отмечаются в списке проектов буквой «А» в скобках перед наименованием проекта.

Управление задачами

Если не выделено ни одной задачи, выпадающий список «Состояние задачи», кнопки «Редактировать задачу» и «Удалить задачу» заблокированы. Если выделена задача, то эти элементы доступны. Кроме того, выпадающий список «Состояние задачи» устанавливается на значение, указанное в таблице. Если выделена задача в состоянии «закрыта», выпадающий список «Состояние задачи», кнопки «Редактировать задачу» и «Удалить задачу» также заблокированы.

В зависимости от состояния задачи строка в таблице задач окрашивается в соответствующий цвет:

  • не активна – белый цвет (254, 254, 254);
  • в работе – жёлтый цвет (255, 254, 4);
  • закрыта – зелёный цвет (143, 210, 68).

При изменении значения выпадающего списка «Состояние задачи» меняется состояние задачи в таблице и цвет строки таблицы. При установке значения «закрыта» запрашивается подтверждение о закрытии задачи, так как в дальнейшем изменить её состояние будет нельзя. Если закрыты все задачи проекта, трекер автоматически предлагает архивировать проект.

По нажатию кнопки «Новая задача» открывается диалоговое окно ввода / редактирования задачи.

В текстовое поле ввода пользователь должен ввести описание задачи, из выпадающего списка выбрать тип задачи. Всего предопределено четыре типа задач:

  • bug – исправление ошибки;
  • feature – разработка новой функции;
  • issue – отработка внешнего запроса;
  • milestone – плановый выпуск новой версии.

При выделенной строке в таблице задач и состоянии задачи «не активна» или «в работе» доступны кнопки «Редактировать задачу» и «Удалить задачу».
По нажатию кнопки «Редактировать задачу» открывается диалоговое окно ввода / редактирования задачи, показанное выше.
По нажатию кнопки «Удалить задачу» пользователь должен подтвердить удаление задачи.

Дата и ревизия присваиваются автоматически при закрытии задачи. В случае закрытия задачи вручную (для обоих видов проектов, с СКВ и без СКВ) в поле «Ревизия» указывается «manual».

Настройки трекера

При первом запуске трекер предлагает пользователю настроить путь к папке проектов.

В случае нажатия кнопки «Отмена» пользователю будут доступны для создания только проекты без СКВ.

По нажатию кнопки «…» открывается стандартное диалоговое окно выбора папки.

По нажатию кнопки закрытия окна основного интерфейса трекер сворачивается в трей.

Из трея доступно контекстное меню со следующими командами:

  • «Открыть трекер»;
  • «Путь к проектам»
  • «Выход».

По команде «Открыть трекер» открывается основной интерфейс трекера.
По команде «Путь к проектам» открывается диалоговое окно настройки пути к проектам. В случае, если:

  • путь ещё не настроен (при первом запуске трекера была нажата кнопка «Отмена»), пользователь может воспользоваться всеми элементами диалогового окна;
  • путь настроен, заблокированы все элементы, кроме кнопки «ОК»; при наведении курсора на текстовое поле ввода выводится всплывающая подсказка с полным путём к папке проектов.

По команде «Выход» приложение полностью закрывается.

Заключение

  • Описаны основные требования к проекту.
  • Разработаны прототипы интерфейсов.
  • Определена основная логика работы приложения.
Рекомендуем хостинг TIMEWEB
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.

Вам это нравится? Поделитесь в социальных сетях!

Evgenii Legotckoi
  • 9 июля 2019 г. 7:42

Прикольно. Это такая локальная Jira получается?

А если добавить функционал по редактированию коммитов и веток, то получится базовая реализация TortoiseSVN. Только кроссплатформенная...

IscanderChe
  • 9 июля 2019 г. 8:58

Редактирование веток и коммитов - чересчур. Это надо подключать API самого SVN. Я заглянул туда и понял, что пока рановато...
Да, похоже на Jira, только я её не рассматривал. Ориентировался на Mantiss, Bugzilla и Trac.

Evgenii Legotckoi
  • 9 июля 2019 г. 9:11

Ясно)) А можно ещё переписать на QML и используя Web Assembly показывать прямо в браузере. Тогда может быть многопользовательский вариант системы.

Комментарии

Только авторизованные пользователи могут публиковать комментарии.
Пожалуйста, авторизуйтесь или зарегистрируйтесь
г
  • ги
  • 24 апреля 2024 г. 1:51

C++ - Тест 005. Структуры и Классы

  • Результат:41баллов,
  • Очки рейтинга-8
l
  • laei
  • 23 апреля 2024 г. 19:19

C++ - Тест 004. Указатели, Массивы и Циклы

  • Результат:10баллов,
  • Очки рейтинга-10
l
  • laei
  • 23 апреля 2024 г. 19:17

C++ - Тест 003. Условия и циклы

  • Результат:50баллов,
  • Очки рейтинга-4
Последние комментарии
k
kmssr9 февраля 2024 г. 5:43
Qt Linux - Урок 001. Автозапуск Qt приложения под Linux как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
АК
Анатолий Кононенко5 февраля 2024 г. 12:50
Qt WinAPI - Урок 007. Работаем с ICMP Ping в Qt Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
EVA
EVA25 декабря 2023 г. 21:30
Boost - статическая линковка в CMake проекте под Windows Ошибка LNK1104 часто возникает, когда компоновщик не может найти или открыть файл библиотеки. В вашем случае, это файл libboost_locale-vc142-mt-gd-x64-1_74.lib из библиотеки Boost для C+…
J
JonnyJo25 декабря 2023 г. 19:38
Boost - статическая линковка в CMake проекте под Windows Сделал всё по-как у вас, но выдаёт ошибку [build] LINK : fatal error LNK1104: не удается открыть файл "libboost_locale-vc142-mt-gd-x64-1_74.lib" Хоть убей, не могу понять в чём дел…
G
Gvozdik19 декабря 2023 г. 8:01
Qt/C++ - Урок 056. Подключение библиотеки Boost в Qt для компиляторов MinGW и MSVC Для решения твой проблемы добавь в файл .pro строчку "LIBS += -lws2_32" она решит проблему , лично мне помогло.
Сейчас обсуждают на форуме
G
Gar22 апреля 2024 г. 15:46
Clipboard Как скопировать окно целиком в clipb?
DA
Dr Gangil Academics20 апреля 2024 г. 17:45
Unlock Your Aesthetic Potential: Explore MSC in Facial Aesthetics and Cosmetology in India Embark on a transformative journey with an msc in facial aesthetics and cosmetology in india . Delve into the intricate world of beauty and rejuvenation, guided by expert faculty and …
a
a_vlasov14 апреля 2024 г. 16:41
Мобильное приложение на C++Qt и бэкенд к нему на Django Rest Framework Евгений, добрый день! Такой вопрос. Верно ли следующее утверждение: Любое Android-приложение, написанное на Java/Kotlin чисто теоретически (пусть и с большими трудностями) можно написать и на C+…
Павел Дорофеев
Павел Дорофеев14 апреля 2024 г. 12:35
QTableWidget с 2 заголовками Вот тут есть кастомный QTableView с многорядностью проект поддерживается, обращайтесь
f
fastrex4 апреля 2024 г. 14:47
Вернуть старое поведение QComboBox, не менять индекс при resetModel Добрый день! У нас много проектов в которых используется QComboBox, в версии 5.5.1, когда модель испускает сигнал resetModel, currentIndex не менялся. В версии 5.15 при resetModel происходит try…

Следите за нами в социальных сетях