#pragma once #include #include #include #include #include #include namespace ZShell::services { class HyprsunsetManager : public QObject { Q_OBJECT QML_ELEMENT Q_PROPERTY(bool enabled READ enabled NOTIFY enabledChanged) Q_PROPERTY(int startTime READ startTime WRITE setStartTime NOTIFY startTimeChanged) Q_PROPERTY(int endTime READ endTime WRITE setEndTime NOTIFY endTimeChanged) Q_PROPERTY(int temp READ temp WRITE setTemp NOTIFY tempChanged) Q_PROPERTY(bool activeAuto READ activeAuto WRITE setActiveAuto NOTIFY activeAutoChanged) Q_PROPERTY(bool manualToggle READ manualToggle WRITE setManualToggle NOTIFY manualToggleChanged) public: explicit HyprsunsetManager(QObject* parent = nullptr); int startTime() const; int endTime() const; bool enabled() const; int temp() const; bool activeAuto() const; bool manualToggle() const; Q_INVOKABLE void toggle(); Q_INVOKABLE void apply(); void setStartTime(const int& time); void setEndTime(const int& time); void setTemp(const int& temp); void setActiveAuto(bool activeAuto); void setManualToggle(bool toggle); signals: void enabledChanged(); void startTimeChanged(); void activeAutoChanged(); void endTimeChanged(); void tempChanged(); void manualToggleChanged(); private: int m_startTime; int m_endTime; bool m_enabled; bool m_manualToggle = false; bool m_activeAuto; bool m_startAllowed; QTimer m_startCooldown; int m_temp; QProcess m_process; QTimer m_timer; QTimer m_manualTimer; void start(); void end(); }; };