Всем здравия и хорошего настроения!
Есть толковый опенсорц проект, PIM менеджер MyTetra, написанный на Qt, подробности на официальном сайте
Его нужно немного доработать за оплату, идея вот какая.
Сейчас программа заточена для работы в одиночку.
Хочется модифицировать её движок, чтобы было возможно работать группой.
Сейчас база данных программы хранится в домашнем каталоге программы, в папке Data, из которой в интерфейсе формируется древовидная структура веток. Программа обслуживает только 1 папку за 1 раз, то есть она не может читать БД сразу из двух папок, но можно с каждой БД работать по очереди, переключаясь через настройки пути.
Для коллективной работы нужна "многобазовость".
То есть чтобы программа могла отображать содержимое одновременно нескольких таких папок с БД.
И чтобы человек мог через drag-n-drop обмениваться записями между несколькими БД.
Идея в том, чтобы в интерфейсе разделить отображение БД на условно:
1) локальную" (local)
2) и общедоступные (shared).
Локальная БД, будет вычитываться как и прежде, из папки Data (нужно для обратной совместимости),
а другие БД, находящиеся внутри папки shared, будут читаться оттуда, и отображаться в интерфейсе другими деревьями (с каким-то названием, допустим именем человека, раз уж это групповая работа).
Смысл отдельной папки вот в чём.
Если какой-то сторонней программой между несколькими людьми синхронизировать основную БД (локальную папку Data), то возможен случай, когда кто-то у себя нечаянно удалит данные, и они удалятся у всех. И даже если эту папку пропустить через GIT и центральное хранилище (тот же github), всё равно случайное удаление информации будет сложно обнаружить, особенно когда информации много.
Поэтому предлагаю основную папку Data не трогать, а допилить функционал, когда можно делать импорт ветки в другую папку (shared), и синхронизировать между всеми уже эту папку. Но на данный момент, программа не умеет отображать в интерфейсе содержимое других папок, это нужно допилить.
Получается, что даже если этот импорт потеряется/удалится (в синхронизируемой папке shared), ничего страшного не произойдёт - в локальной БД остались копии. Ну а как делать слияние, если скажем ветка уже существует, или есть правки одного и того же файла - для простоты предлагаю оставить на выбор пользователя, нужно лишь подсветить в чём разница (в стиле того же git-diff)
Итого по ТЗ:
1) Переделать отображение в интерфейсе основного (локального) дерева, добавив как корневую ветку слово local. При этом, слово local не должно восприниматься как ветка, а должно быть как отдельный неизменяемый и не удаляемый элемент, ниже которого уже собственно пойдёт дерево, просто он визуально должен выглядеть как ветка (возможно с каким-то фоновым цветом, для различия).
Точно такой же элемент сделать сделать для публикуемых веток (shared)
2) Модифицировать движок программы так, чтобы одновременно отображались ветки из папки Data, и ветки каждой экспортированной БД в папке shared
3) Создать функционал обмена ветками/заметками (копирование) через drag-n-drop.
В закрепе прилагаю файл со скриншотом, где набросан приблизительный дизайн.
Буду рад вашим предложениям и оценкам трудозатрат.
Сумму плюс-минус можем обсудить.