Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 34 additions & 0 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
name: Build Project

on:
push:
branches: [ "main" ]
pull_request:
branches: [ "main" ]

jobs:
build:
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v3

- name: Install Qt
uses: jurplel/install-qt-action@v3
with:
version: '6.5.*'
host: 'linux'
target: 'desktop'
modules: 'qtcore qtwidgets'

- name: Configure CMake
run: cmake -B ${{github.workspace}}/build -DCMAKE_BUILD_TYPE=Release

- name: Build
run: cmake --build ${{github.workspace}}/build --config Release

- name: Upload artifacts
uses: actions/upload-artifact@v3
with:
name: MyCppPlanner
path: ${{github.workspace}}/build/MyCppPlanner
38 changes: 26 additions & 12 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -7,30 +7,44 @@ endif()

project ("MyCppPlanner")

set(CMAKE_PREFIX_PATH "C:/Program Files/6.5.2/msvc2019_64")
set(CMAKE_PREFIX_PATH "C:\\Cpp\\6.8.2\\mingw_64")

find_package(Qt6 REQUIRED COMPONENTS Core Widgets)

# Добавляем поддержку UI файлов

set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_AUTOUIC ON)

add_executable (MyCppPlanner
"src/main.cpp"


"include/main_window.h"
"src/main_window.cpp"
"include/register_window.h")

# Добавляем линковку с Qt
"main.cpp"

"include/managers/app_state_manager.h"
"include/managers/notification_manager.h"
"include/managers/password_manager.h"
"include/managers/settings_manager.h"
"include/managers/tasks_manager.h"
"include/managers/window_manager.h"




"src/managers/app_state_manager.cpp"
"src/managers/notification_manager.cpp"
"src/managers/password_manager.cpp"
"src/managers/settings_manager.cpp"
"src/managers/tasks_manager.cpp"
"src/managers/window_manager.cpp"



"include/windows/register_window.h" "src/windows/register_window.cpp" "src/windows/main_window.cpp" "src/windows/settings_window.cpp")

#Qt lib
target_link_libraries(MyCppPlanner PRIVATE
Qt6::Core
Qt6::Widgets
)

# Добавляем пути к заголовочным файлам
target_include_directories(MyCppPlanner PRIVATE
${CMAKE_CURRENT_SOURCE_DIR}/include
)
Expand Down
15 changes: 0 additions & 15 deletions include/main_window.h

This file was deleted.

44 changes: 44 additions & 0 deletions include/managers/app_state_manager.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
#pragma once

#include <QString>
#include <QList>

class StateManager {
public:
static StateManager& instance();

enum class AppState {
Unauthorized,
Authorized,
Loading,
Error,
Banned
};

void setAppState(AppState state);
AppState getCurrentState() const;

void setError(const QString& error);
QString getLastError() const;
void clearErrors();

bool isAuthorized() const;
void setAuthorized(bool auth);

private:
static const QString SETTINGS_ORG;
static const QString SETTINGS_APP;
static const QString KEY_APP_STATE;

StateManager() = default;
~StateManager() = default;

void saveState();
void loadState();

AppState currentState;
QList<QString> lastError;

StateManager(const StateManager&) = delete;
StateManager& operator=(const StateManager&) = delete;
};
49 changes: 49 additions & 0 deletions include/managers/notification_manager.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
#pragma once

#include <QString>
#include <QDateTime>
#include <QList>
#include <QSettings>

struct Notification {
QString id;
QString taskId;
QDateTime time;
bool isRead;
QString message;
};

class NotificationManager {
public:
static NotificationManager& instance();

void addNotification(const QString& taskId, const QDateTime& time, const QString& message);
void markAsRead(const QString& notificationId);
void deleteNotification(const QString& notificationId);

QList<Notification> getPendingNotifications() const;
QList<Notification> getNotificationsForTask(const QString& taskId) const;
bool numberOfUnreadNotifications() const;

void clearOldNotifications(const QDateTime& before);
void clearAllNotifications();

private:
static const QString SETTINGS_ORG;
static const QString SETTINGS_APP;
static const QString KEY_NOTIFICATIONS;
static const QString KEY_LAST_CHECK;

NotificationManager() = default;
~NotificationManager() = default;

void deleteAllData();
QString generateNotificationId() const;
void saveNotifications() const;
void loadNotifications();

QList<Notification> notifications;

NotificationManager(const NotificationManager&) = delete;
NotificationManager& operator=(const NotificationManager&) = delete;
};
45 changes: 45 additions & 0 deletions include/managers/password_manager.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
#pragma once

#include <QCryptographicHash>
#include <QRandomGenerator>
#include <QString>
#include <QByteArray>

class PasswordManager {
public:
static PasswordManager& instance();

void saveUserInfo(const QString& username, const QString& password, bool rememberMe);
void deleteUserInfo(const QString& username, const QString& password);

bool hasStoredInfo() const;

QString getStoredUsername() const; //Don't forget to check via hasStoredInfo()!!!
QString getStoredPassword() const;

bool checkPassword(const QString& inputPassword, const QString& storedPassword);

private:
//Encrypting settings
static constexpr int SALT_LENGTH = 16;
static const QString HASH_SEPARATOR;

// Setting keys
static const QString SETTINGS_ORG;
static const QString SETTINGS_APP;
static const QString KEY_USERNAME;
static const QString KEY_PASSWORD;
static const QString KEY_REMEMBER_ME;

PasswordManager() = default;
~PasswordManager() = default;

void deleteAllData();
QString generateSalt(int length);
QString hashPassword(const QString& password, const QString& salt);
QString encryptPassword(const QString& password);


PasswordManager(const PasswordManager&) = delete;
PasswordManager& operator=(const PasswordManager&) = delete; //Singleton pattern
};
37 changes: 37 additions & 0 deletions include/managers/settings_manager.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
#pragma once

#include <QString>
#include <QTime>
#include <QSettings>

class SettingsManager {
public:
static SettingsManager& instance();

QString getLanguage() const;
void setLanguage(const QString& lang);
QString getTheme() const;
void setTheme(const QString& theme);

bool areNotificationsEnabled() const;
void setNotificationsEnabled(bool enabled);
int getNotificationLeadTime() const;
void setNotificationLeadTime(int minutes);

private:
static const QString SETTINGS_ORG;
static const QString SETTINGS_APP;
static const QString KEY_LANGUAGE;
static const QString KEY_THEME;
static const QString KEY_NOTIFICATIONS_ENABLED;
static const QString KEY_NOTIFICATION_LEAD_TIME;

SettingsManager() = default;
~SettingsManager() = default;

void deleteAllData();
void loadDefaults();

SettingsManager(const SettingsManager&) = delete;
SettingsManager& operator=(const SettingsManager&) = delete;
};
64 changes: 64 additions & 0 deletions include/managers/tasks_manager.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
#pragma once

#include <QString>
#include <QDateTime>
#include <QList>
#include <QSettings>

class Task {
public:
enum class Priority { Low, Medium, High, Incredible };
enum class Status { ToDo, InProgress, Done };

QString id;
QString title;
QString description;
QDateTime startTime;
QDateTime deadline;
Priority priority;
Status status;
QString category;

bool hasNotification;
};

class TasksManager {
public:
static TasksManager& instance();

QString addTask(const Task& task);
bool updateTask(const QString& taskId, const Task& task);
bool deleteTask(const QString& taskId);
Task getTask(const QString& taskId) const;

QList<Task> getAllTasks() const;
QList<Task> getTasksByStatus(Task::Status status) const;
QList<Task> getTasksBeforeDeadline(const QDate& date) const;
QList<Task> getTasksAfterDeadline(const QDate& date) const;

QStringList getCategories() const;
void addCategory(const QString& category);
void removeCategory(const QString& category);

private:
static const QString SETTINGS_ORG;
static const QString SETTINGS_APP;
static const QString KEY_TASKS;
static const QString KEY_CATEGORIES;

TasksManager() = default;
~TasksManager() = default;

QList<Task> getTasksByDeadline(const QDate& date, std::function<bool(const QDate&, const QDate&)> cond) const;

void deleteAllData();
QString generateTaskId() const;
void saveTasks() const;
void loadTasks();

QList<Task> tasks;
QStringList categories;

TasksManager(const TasksManager&) = delete;
TasksManager& operator=(const TasksManager&) = delete;
};
Loading