#pragma once #include "ReminderParser.h" #include "ReminderStore.h" #include #include #include class ReminderManager { public: using TriggeredCallback = std::function; ReminderManager(); void start(); void setTriggeredCallback(TriggeredCallback callback); QVector allReminders() const; QVector pendingReminders() const; ReminderCommand parseCommand(const QString &text) const; void checkDueRemindersNow(); bool createReminder( const QString &title, const QString &originalText, const QDateTime &remindAt, ReminderItem *createdItem = nullptr, QString *errorMessage = nullptr); bool createReminder( const QString &title, const QString &originalText, const QDateTime &remindAt, const ReminderRecurrence &recurrence, ReminderItem *createdItem = nullptr, QString *errorMessage = nullptr); bool snoozeReminder( const ReminderItem &sourceItem, int minutes, ReminderItem *createdItem = nullptr, QString *errorMessage = nullptr); bool cancelReminder(const QString &id, QString *errorMessage = nullptr); bool cancelReminderByQuery(const QString &query, ReminderItem *canceledItem = nullptr, QString *errorMessage = nullptr); bool clearFinishedReminders(QString *errorMessage = nullptr); bool pruneFinishedReminders(int retentionDays = 20, QString *errorMessage = nullptr); bool updateReminder( const QString &id, const QString &title, const QDateTime &remindAt, const ReminderRecurrence &recurrence, QString *errorMessage = nullptr); QString pendingReminderSummary() const; private: void load(); bool save(QString *errorMessage = nullptr) const; void processDueReminders(); void scheduleNextReminder(); QString nextReminderId() const; ReminderStore m_store; ReminderParser m_parser; QVector m_items; QTimer m_timer; QTimer m_guardTimer; TriggeredCallback m_triggeredCallback; bool m_started = false; };