11#include <QtWebSockets/QWebSocket>
15#include "ekos/align/polaralignmentassistant.h"
16#include "ekos/manager.h"
17#include "catalogsdb.h"
18#include "nodemanager.h"
23class Message :
public QObject
28 explicit Message(Ekos::Manager *manager, QVector<QSharedPointer<NodeManager>> &nodeManagers);
29 virtual ~Message() =
default;
31 bool isConnected()
const;
33 struct PendingProperty
37 bool operator==(
const PendingProperty &other)
const
39 return device == other.device && name == other.name;
44 void updateMountStatus(
const QJsonObject &status,
bool throttle =
false);
45 void updateCaptureStatus(
const QJsonObject &status);
46 void updateFocusStatus(
const QJsonObject &status);
47 void updateGuideStatus(
const QJsonObject &status);
48 void updateDomeStatus(
const QJsonObject &status);
49 void updateCapStatus(
const QJsonObject &status);
50 void updateAlignStatus(
const QJsonObject &status);
53 void sendEvent(
const QString &message, KSNotification::EventSource source, KSNotification::EventType
event);
55 void sendDSLRLenses();
59 void sendTrainProfiles();
62 void sendSchedulerJobs();
63 void sendSchedulerJobList(QJsonArray jobsList);
64 void sendSchedulerStatus(
const QJsonObject &status);
69 void expired(
const QUrl &url);
70 void optionsUpdated();
71 void resetPolarView();
75 void sendConnection();
76 void sendModuleState(
const QString &name);
77 void setPendingPropertiesEnabled(
bool enabled);
80 void setEkosStatingStatus(Ekos::CommunicationStatus status);
83 void setINDIStatus(Ekos::CommunicationStatus status);
87 void setAlignSolution(
const QVariantMap &solution);
88 void sendAlignSettings(
const QVariantMap &settings);
91 void sendGuideSettings(
const QVariantMap &settings);
94 void sendFocusSettings(
const QVariantMap &settings);
97 void sendMountSettings(
const QVariantMap &settings);
100 void sendDarkLibrarySettings(
const QVariantMap &settings);
103 void sendSchedulerSettings(
const QVariantMap &settings);
106 void setPAHStage(Ekos::PolarAlignmentAssistant::Stage stage);
107 void setPAHMessage(
const QString &message);
108 void setPolarResults(QLineF correctionVector,
double polarError,
double azError,
double altError);
109 void setUpdatedErrors(
double total,
double az,
double alt);
110 void setPAHEnabled(
bool enabled);
111 void setBoundingRect(QRect rect, QSize view,
double currentZoom);
114 void sendCaptureSequence(
const QJsonArray &sequenceArray);
115 void sendPreviewLabel(
const QString &preview);
116 void sendCaptureSettings(
const QVariantMap &settings);
119 void autofocusAborted();
122 void requestDSLRInfo(
const QString &cameraName);
125 void requestPortSelection(
bool show);
128 void requestOpticalTrains(
bool show);
131 void sendDialog(
const QJsonObject &message);
132 void processDialogResponse(
const QJsonObject &payload);
135 void processNewProperty(INDI::Property prop);
136 void processDeleteProperty(INDI::Property prop);
137 void processUpdateProperty(INDI::Property prop);
140 void processMessage(
const QSharedPointer<ISD::GenericDevice> &device,
int id);
143 void sendStellarSolverProfiles();
145 void sendManualRotatorStatus(
double currentPA,
double targetPA,
double threshold);
151 void onDisconnected();
154 void onTextReceived(
const QString &);
159 void setProfileMapping(
const QJsonObject &payload);
163 void processCaptureCommands(
const QString &command,
const QJsonObject &payload);
164 void sendTemperature(
double value);
167 void processMountCommands(
const QString &command,
const QJsonObject &payload);
170 void processFocusCommands(
const QString &command,
const QJsonObject &payload);
173 void processGuideCommands(
const QString &command,
const QJsonObject &payload);
176 void processAlignCommands(
const QString &command,
const QJsonObject &payload);
179 void processSchedulerCommands(
const QString &command,
const QJsonObject &payload);
182 void processPolarCommands(
const QString &command,
const QJsonObject &payload);
185 void processProfileCommands(
const QString &command,
const QJsonObject &payload);
188 void processOptionsCommands(
const QString &command,
const QJsonObject &payload);
191 void processScopeCommands(
const QString &command,
const QJsonObject &payload);
194 void processDSLRCommands(
const QString &command,
const QJsonObject &payload);
197 void processTrainCommands(
const QString &command,
const QJsonObject &payload);
200 void processFilterManagerCommands(
const QString &command,
const QJsonObject &payload);
203 void processDarkLibraryCommands(
const QString &command,
const QJsonObject &payload);
206 void processDeviceCommands(
const QString &command,
const QJsonObject &payload);
209 void processAstronomyCommands(
const QString &command,
const QJsonObject &payload);
212 void processFileCommands(
const QString &command,
const QJsonObject &payload);
214 void dispatchDebounceQueue();
216 KStarsDateTime getNextDawn();
218 void sendResponse(
const QString &command,
const QJsonObject &payload);
219 void sendResponse(
const QString &command,
const QJsonArray &payload);
220 void sendResponse(
const QString &command,
const QString &payload);
221 void sendResponse(
const QString &command,
bool payload);
223 void sendPendingProperties();
228 uint number_unsigned_integer;
229 double number_double;
235 QObject *findObject(
const QString &name);
236 void invokeMethod(
QObject *context,
const QJsonObject &payload);
237#if QT_VERSION >= QT_VERSION_CHECK(6, 2, 0)
238 bool parseArgument(
QVariant::Type type,
const QVariant &arg, QMetaMethodArgument &genericArg, SimpleTypes &types);
240 bool parseArgument(
QVariant::Type type,
const QVariant &arg, QGenericArgument &genericArg, SimpleTypes &types);
242 Ekos::Manager *m_Manager {
nullptr };
243 QVector<QSharedPointer<NodeManager>> m_NodeManagers;
245 bool m_sendBlobs {
true};
247 QMap<QString, QSet<QString>> m_PropertySubscriptions;
248 QLineF correctionVector;
249 QRect m_BoundingRect;
251 double m_CurrentZoom {100};
253 QSet<PendingProperty> m_PendingProperties;
254 QTimer m_PendingPropertiesTimer;
255 QTimer m_DebouncedSend;
256 QMap<QString, QVariantMap> m_DebouncedMap;
258 QDateTime m_ThrottleTS;
259 CatalogsDB::DBManager m_DSOManager;
271 static const uint16_t THROTTLE_INTERVAL = 1000;
274inline uint qHash(
const Message::PendingProperty &key, uint seed = 0) noexcept
276 return qHash(key.device, seed) ^ qHash(key.name, seed);
Generic record interfaces and implementations.
virtual bool event(QEvent *e)