#pragma once #include "hyprdevices.hpp" #include #include #include namespace caelestia::internal::hypr { class HyprExtras : public QObject { Q_OBJECT QML_ELEMENT Q_PROPERTY(QVariantHash options READ options NOTIFY optionsChanged) Q_PROPERTY(HyprDevices* devices READ devices CONSTANT) public: explicit HyprExtras(QObject* parent = nullptr); [[nodiscard]] QVariantHash options() const; [[nodiscard]] HyprDevices* devices() const; Q_INVOKABLE void message(const QString& message); Q_INVOKABLE void batchMessage(const QStringList& messages); Q_INVOKABLE void applyOptions(const QVariantHash& options); Q_INVOKABLE void refreshOptions(); Q_INVOKABLE void refreshDevices(); signals: void optionsChanged(); private: using SocketPtr = QSharedPointer; QString m_requestSocket; QString m_eventSocket; QLocalSocket* m_socket; bool m_socketValid; QVariantHash m_options; HyprDevices* const m_devices; SocketPtr m_optionsRefresh; SocketPtr m_devicesRefresh; void socketError(QLocalSocket::LocalSocketError error) const; void socketStateChanged(QLocalSocket::LocalSocketState state); void readEvent(); void handleEvent(const QString& event); SocketPtr makeRequestJson(const QString& request, const std::function& callback); SocketPtr makeRequest(const QString& request, const std::function& callback); }; } // namespace caelestia::internal::hypr