Skip to content

Latest commit

 

History

History
297 lines (221 loc) · 9.48 KB

File metadata and controls

297 lines (221 loc) · 9.48 KB

Contributing to Mirage Desktop

Спасибо за ваш интерес к развитию Mirage Desktop! Мы приветствуем вклад сообщества и ценим время, которое вы тратите на улучшение проекта.

Содержание

Кодекс поведения

Участвуя в этом проекте, вы соглашаетесь соблюдать профессиональную этику и уважительное отношение ко всем участникам сообщества.

Как внести вклад

Сообщение об ошибках

  1. Проверьте, не была ли уже создана похожая issue
  2. Используйте шаблон issue для багрепортов
  3. Предоставьте максимально подробную информацию:
    • Версию ОС и Qt
    • Шаги для воспроизведения
    • Ожидаемое и фактическое поведение
    • Скриншоты или логи (если применимо)

Предложение новых функций

  1. Создайте issue с описанием функции
  2. Обсудите реализацию с мейнтейнерами
  3. После одобрения можно приступать к разработке

Pull Requests

  1. Форкните репозиторий
  2. Создайте ветку для вашей функции (git checkout -b feature/amazing-feature)
  3. Внесите изменения
  4. Закоммитьте изменения (git commit -m 'Add amazing feature')
  5. Запушьте в ветку (git push origin feature/amazing-feature)
  6. Откройте Pull Request

Процесс разработки

Настройка окружения

Windows

# Установите зависимости:
# - Visual Studio 2022/2025 с MSVC
# - Qt 6.8.3 или выше
# - OpenSSL 3.6.0 или выше
# - CMake 3.31 или выше
# - Ninja

# Клонируйте репозиторий
git clone https://github.com/yourusername/mirage-desktop.git
cd mirage-desktop

# Соберите проект
build-ninja.bat

Linux/macOS

# Установите зависимости
# Для Ubuntu/Debian:
sudo apt install qt6-base-dev qt6-declarative-dev libssl-dev cmake ninja-build

# Для macOS:
brew install qt@6 openssl@3 cmake ninja

# Клонируйте и соберите
git clone https://github.com/yourusername/mirage-desktop.git
cd mirage-desktop
mkdir build && cd build
cmake -G Ninja ..
ninja

Структура проекта

Mirage Desktop/
├── src/
│   ├── admin/          # GUI приложение администратора
│   ├── client/         # Клиентская служба
│   └── common/         # Общие компоненты
│       ├── network/    # Сетевой слой
│       ├── crypto/     # Криптография
│       ├── protocol/   # Протокол связи
│       ├── capture/    # Захват экрана
│       ├── input/      # Инъекция ввода
│       └── utils/      # Утилиты
├── qml/                # QML интерфейсы
├── resources/          # Ресурсы (иконки, шрифты)
└── installers/         # Скрипты установщиков

Стиль кода

C++

Мы следуем Qt Coding Conventions:

  • Используйте camelCase для переменных и функций
  • Используйте PascalCase для классов
  • Используйте UPPER_CASE для констант
  • Префикс m_ для членов класса
  • Префикс s_ для статических членов
  • Всегда используйте explicit для конструкторов с одним параметром
class ExampleClass {
public:
    explicit ExampleClass(int value);

    void doSomething();
    int getValue() const { return m_value; }

private:
    int m_value;
    static int s_instanceCount;
};

QML

// Используйте 4 пробела для отступов
Item {
    id: root
    width: 200
    height: 100

    // Группируйте свойства логически
    property string title: "Example"
    property int count: 0

    // Сигналы
    signal clicked()

    // Дочерние элементы
    Rectangle {
        anchors.fill: parent
        color: "lightblue"
    }
}

Комментарии

  • Используйте // для однострочных комментариев
  • Используйте /** */ для документации классов и функций
  • Пишите комментарии на английском языке
  • Комментируйте "почему", а не "что"
/**
 * @brief Encrypts data using AES-256-GCM
 * @param data The data to encrypt
 * @param key The encryption key (must be 32 bytes)
 * @return Encrypted data with authentication tag
 */
QByteArray encrypt(const QByteArray& data, const QByteArray& key);

Структура коммитов

Используйте Conventional Commits:

<type>(<scope>): <subject>

<body>

<footer>

Типы коммитов:

  • feat: Новая функция
  • fix: Исправление бага
  • docs: Изменения в документации
  • style: Форматирование, отсутствие изменений в коде
  • refactor: Рефакторинг кода
  • perf: Улучшение производительности
  • test: Добавление тестов
  • chore: Изменения в сборке, CI/CD

Примеры:

feat(admin): add dark mode support

- Add theme switcher in settings
- Implement dark color scheme
- Save theme preference

Closes #123
fix(capture): resolve memory leak in screen capture

The DirectX texture was not being properly released
after each frame capture.

Fixes #456

Тестирование

Перед отправкой PR:

  1. Убедитесь, что проект собирается без ошибок
  2. Проверьте, что не добавлены предупреждения компилятора
  3. Протестируйте изменения вручную
  4. Запустите автоматические тесты (если есть)
# Сборка в режиме отладки
cmake -G Ninja -DCMAKE_BUILD_TYPE=Debug ..
ninja

# Сборка в режиме релиза
cmake -G Ninja -DCMAKE_BUILD_TYPE=Release ..
ninja

Сообщение об ошибках

Хороший багрепорт включает:

  1. Краткое описание - одно предложение, описывающее проблему
  2. Шаги воспроизведения - пошаговая инструкция
  3. Ожидаемое поведение - что должно было произойти
  4. Фактическое поведение - что произошло на самом деле
  5. Окружение:
    • ОС и версия
    • Версия Qt
    • Версия Mirage Desktop
    • Версия компилятора
  6. Логи и скриншоты - если применимо

Шаблон issue:

**Описание проблемы**
Краткое описание бага.

**Шаги воспроизведения**
1. Откройте приложение
2. Нажмите на '...'
3. Наблюдайте ошибку

**Ожидаемое поведение**
Описание того, что должно было произойти.

**Фактическое поведение**
Описание того, что произошло.

**Окружение**
- ОС: Windows 11 64-bit
- Qt версия: 6.8.3
- Mirage версия: 1.0.0
- Компилятор: MSVC 19.50

**Логи**

[Вставьте логи здесь]


**Скриншоты**
[Приложите скриншоты, если нужно]

Права на код

Внося вклад в проект, вы соглашаетесь с тем, что ваш код будет распространяться под той же лицензией, что и сам проект (см. LICENSE).

Все права на внесенный код переходят к правообладателю проекта Mirage Desktop, но авторство сохраняется за вами.

Вопросы?

Если у вас есть вопросы о процессе разработки:

  • Откройте issue с меткой question
  • Используйте раздел GitHub Discussions
  • Свяжитесь с мейнтейнерами

Спасибо за ваш вклад! 🎉