IscanderChe
IscanderCheШілде 9, 2019, 7:31 Т.Ж.

Қарапайым трекер жобасы. 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 показывать прямо в браузере. Тогда может быть многопользовательский вариант системы.

Пікірлер

Тек рұқсаты бар пайдаланушылар ғана пікір қалдыра алады.
Кіріңіз немесе Тіркеліңіз
Г

C++ - Тест 001. Первая программа и типы данных

  • Нәтиже:66ұпай,
  • Бағалау ұпайлары-1
t

C++ - Тест 001. Первая программа и типы данных

  • Нәтиже:33ұпай,
  • Бағалау ұпайлары-10
t

Qt - Тест 001. Сигналы и слоты

  • Нәтиже:52ұпай,
  • Бағалау ұпайлары-4
Соңғы пікірлер
G
GoattRockҚыр. 3, 2024, 1:50 Т.Қ.
Linux жүйесінде файлдарды қалай көшіруге болады Задумывались когда-нибудь о том, как мы привыкли доверять свои вещи службам грузоперевозок? Сейчас такие услуги стали неотъемлемой частью нашей жизни, особенно когда речь идет о переездах между …
d
dblas5Шілде 5, 2024, 11:02 Т.Ж.
QML - Сабақ 016. SQLite деректер қоры және онымен QML Qt-та жұмыс істеу Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
k
kmssrАқп. 8, 2024, 6:43 Т.Қ.
Qt Linux - Сабақ 001. Linux астында Autorun Qt қолданбасы как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
АК
Анатолий КононенкоАқп. 5, 2024, 1:50 Т.Ж.
Qt WinAPI - Сабақ 007. Qt ішінде ICMP Ping арқылы жұмыс істеу Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
Енді форумда талқылаңыз
Evgenii Legotckoi
Evgenii LegotckoiМаусым 24, 2024, 3:11 Т.Қ.
добавить qlineseries в функции Я тут. Работы оень много. Отправил его в бан.
F
FynjyШілде 22, 2024, 4:15 Т.Ж.
при создании qml проекта Kits есть но недоступны для выбора Поставил Qt Creator 11.0.2. Qt 6.4.3 При создании проекта Qml не могу выбрать Kits, они все недоступны, хотя настроены и при создании обычного Qt Widget приложения их можно выбрать. В чем может …
BlinCT
BlinCTМаусым 25, 2024, 1 Т.Ж.
Нарисовать кривую в qml Всем привет. Имеется Лист листов с тосками, точки получаны интерполяцией Лагранжа. Вопрос, как этими точками нарисовать кривую? ChartView отпадает сразу, в qt6.7 появился новый элемент…
BlinCT
BlinCTМамыр 5, 2024, 5:46 Т.Ж.
Написать свой GraphsView Всем привет. В Qt есть давольно старый обьект дял работы с графиками ChartsView и есть в 6.7 новый но очень сырой и со слабым функционалом GraphsView. По этой причине я хочу написать х…
Evgenii Legotckoi
Evgenii LegotckoiМамыр 2, 2024, 2:07 Т.Қ.
Мобильное приложение на C++Qt и бэкенд к нему на Django Rest Framework Добрый день. По моему мнению - да, но то, что будет касаться вызовов к функционалу Андроида, может создать огромные трудности.

Бізді әлеуметтік желілерде бақылаңыз