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

Qt, Iscander Che, C++, Simple Tracker

Проект реализует простой трекер задач, в первую очередь, для программных проектов, хранящихся в 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».

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

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

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

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

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

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

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

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

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

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

Заключение

  • Описаны основные требования к проекту.
  • Разработаны прототипы интерфейсов.
  • Определена основная логика работы приложения.
We recommend hosting TIMEWEB
We recommend hosting TIMEWEB
Stable hosting, on which the social network EVILEG is located. For projects on Django we recommend VDS hosting.

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

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

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

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

Comments

Only authorized users can post comments.
Please, Log in or Sign up
Looking for a Job?
25,000.00 руб. - 30,000.00 руб.
Разработчик Qt/C++
Barnaul, Altai Krai, Russia

For registered users on the site there is a minimum amount of advertising

s
Sept. 18, 2019, 5:19 p.m.
sanyalitv

C++ - Test 002. Constants

  • Result:33points,
  • Rating points-10
s
Sept. 18, 2019, 5:12 p.m.
sanyalitv

C++ - Test 001. The first program and data types

  • Result:80points,
  • Rating points4
d
Sept. 18, 2019, 7:34 a.m.
dbuzin

C++ - Test 001. The first program and data types

  • Result:33points,
  • Rating points-10
Last comments
M
Sept. 20, 2019, 11:25 a.m.
Mark

вызываю метод get у m_downloader в другом методе и приложение начинает вылетать. В чем ошибка?
M
Sept. 19, 2019, 5:45 a.m.
Mark

А вот как выгрузить файл на сервер по http протоколу? Допустим на regRu. И как получить путь файла, которой отображается в файловом менеджере regRu, чтобы загрузить его.
Sept. 17, 2019, 6:07 a.m.
Misha Lebedev

Кстати интересные темы нашёл тут https://emacsway.github.io/ru/django-framework/#django-models Может что полезного тоже Евгений найдёте
Sept. 17, 2019, 4:50 a.m.
Misha Lebedev

Доброго времени суток. Спасибо за хороший ответ, У меня ситуация така что в галлереи будет несколько миллионов фотографий с фильтрами и тегами , и я опасаюсь за производительност . Это ос…
Sept. 17, 2019, 3:23 a.m.
Evgenij Legotskoj

Добрый день. Да, я тоже читал ту статью в своё время и согласен с тем, что внешние ключи гораздо лучше, чем GenericForeignKey. Выборки в ряде случае работают быстрее. Но лично мне про…
Now discuss on the forum
Sept. 20, 2019, 4:56 a.m.
Pavel K.

Привет , подскажите кто-нибудь , как сделать драг н дроп , не нарушая при этом логику работы зума? import QtQuick 2.6 import QtGraphicalEffects 1.0 Page { id:win property string fi…
Sept. 19, 2019, 8:03 a.m.
Mihailll

Скопировал базу в папку пользователей и тогда получилось записывать в нее
Sept. 19, 2019, 5:32 a.m.
Mihailll

Но мне же нужно еще получить этот id и вернуть его пользователю, а при таком запросе ничего не вернется.
M
Sept. 18, 2019, 5:35 p.m.
Mark

Понятно Тогда можно ли достать только параметры файла? Например только дату его изменения
p
Sept. 17, 2019, 5:02 a.m.
pstMem

Да, действительно нужно дебажить, по другому не словить исключение. Уже решил проблему, был выход за предел массива, не правильные входные данные, так что всегда проверяйте размер массива.
EVILEG
About
Services
© EVILEG 2015-2019
Recommend hosting TIMEWEB