Files
z-bar-qt/Plugins/ZShell/Services/nightlightmanager.hpp
T

123 lines
3.5 KiB
C++

#pragma once
#include <QByteArray>
#include <QLocalSocket>
#include <QObject>
#include <QProcess>
#include <QTime>
#include <QTimer>
#include <qqmlintegration.h>
#include <qtmetamacros.h>
namespace ZShell::services {
class NightlightManager : 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(
double fadeDuration READ fadeDuration WRITE setFadeDuration NOTIFY
fadeDurationChanged)
Q_PROPERTY(
bool useNativeNightlight READ useNativeNightlight WRITE
setUseNativeNightlight NOTIFY useNativeNightlightChanged)
Q_PROPERTY(
QString pluginPath READ pluginPath WRITE setPluginPath NOTIFY
pluginPathChanged)
Q_PROPERTY(
bool activeAuto READ activeAuto WRITE setActiveAuto NOTIFY
activeAutoChanged)
Q_PROPERTY(
bool manualToggle READ manualToggle WRITE setManualToggle NOTIFY
manualToggleChanged)
Q_PROPERTY(bool animating READ animating NOTIFY animatingChanged)
Q_PROPERTY(int lastTemp READ lastTemp NOTIFY lastTempChanged)
Q_PROPERTY(int currentTemp READ currentTemp NOTIFY currentTempChanged)
public:
explicit NightlightManager(QObject* parent = nullptr);
[[nodiscard]] int startTime() const;
[[nodiscard]] int endTime() const;
[[nodiscard]] bool enabled() const;
[[nodiscard]] int temp() const;
[[nodiscard]] double fadeDuration() const;
[[nodiscard]] bool useNativeNightlight() const;
[[nodiscard]] QString pluginPath() const;
[[nodiscard]] bool activeAuto() const;
[[nodiscard]] bool manualToggle() const;
[[nodiscard]] bool animating() const;
[[nodiscard]] int lastTemp() const;
[[nodiscard]] int currentTemp() 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 setFadeDuration(double duration);
void setUseNativeNightlight(bool native);
void setPluginPath(const QString& path);
void setActiveAuto(bool activeAuto);
void setManualToggle(bool toggle);
signals:
void enabledChanged();
void startTimeChanged();
void activeAutoChanged();
void endTimeChanged();
void tempChanged();
void fadeDurationChanged();
void useNativeNightlightChanged();
void pluginPathChanged();
void manualToggleChanged();
void animatingChanged();
void lastTempChanged();
void currentTempChanged();
private:
int m_startTime;
int m_endTime;
bool m_enabled = false;
bool m_manualToggle = false;
bool m_activeAuto;
bool m_startAllowed = false;
bool m_initialized = false;
QTimer m_startCooldown;
int m_temp;
double m_fadeDuration = 0.4;
bool m_useNativeNightlight = false;
QString m_pluginPath;
bool m_pluginLoadAttempted = false;
bool m_pluginLoadedByUs = false;
bool m_animating = false;
int m_lastTemp = 6500;
int m_currentTemp = 6500;
QProcess m_process;
QTimer m_timer;
QTimer m_manualTimer;
QLocalSocket m_eventSocket;
QByteArray m_socketBuffer;
QTimer m_reconnectTimer;
void start();
void end();
[[nodiscard]] QString hyprlandDir() const;
[[nodiscard]] QString eventSocketPath() const;
[[nodiscard]] QString resolvePluginPath() const;
void tryLoadPlugin();
void bootstrapState();
void connectEventSocket();
void scheduleReconnect();
void handleEventLines();
void handleEventLine(const QByteArray& line);
void updateState(bool enabled, bool animating, int last, int current);
};
}; // namespace ZShell::services