[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: [kstars/ekoslive] kstars: The workflow is now more event driven
From: Jasem Mutlaq <null () kde ! org>
Date: 2018-06-06 16:51:39
Message-ID: E1fQbet-0001mr-6e () code ! kde ! org
[Download RAW message or body]
Git commit b3c1b0d670c259f732587587e8c8dd1c267cc614 by Jasem Mutlaq.
Committed on 06/06/2018 at 16:51.
Pushed by mutlaqja into branch 'ekoslive'.
The workflow is now more event driven
M +63 -56 kstars/ekos/ekoslive/ekosliveclient.cpp
M +9 -7 kstars/ekos/ekoslive/ekosliveclient.h
M +21 -2 kstars/ekos/ekosmanager.cpp
M +3 -0 kstars/indi/drivermanager.cpp
https://commits.kde.org/kstars/b3c1b0d670c259f732587587e8c8dd1c267cc614
diff --git a/kstars/ekos/ekoslive/ekosliveclient.cpp \
b/kstars/ekos/ekoslive/ekosliveclient.cpp index 3436703d0..6fab1b109 100644
--- a/kstars/ekos/ekoslive/ekosliveclient.cpp
+++ b/kstars/ekos/ekoslive/ekosliveclient.cpp
@@ -271,6 +271,9 @@ void EkosLiveClient::onMessageConnected()
delete (localWallet);
}
}
+
+ sendConnection();
+ sendProfiles();
}
void EkosLiveClient::onMessageDisconnected()
@@ -354,13 +357,13 @@ void EkosLiveClient::onMessageTextReceived(const QString \
&message)
// TODO add check to verify token!
-// const QString serverToken = serverMessage.object().value("token").toString();
+ // const QString serverToken = \
serverMessage.object().value("token").toString();
-// if (serverToken != token)
-// {
-// qCWarning(KSTARS_EKOS) << "Invalid token received from server!" << \
serverToken;
-// return;
-// }
+ // if (serverToken != token)
+ // {
+ // qCWarning(KSTARS_EKOS) << "Invalid token received from server!" << \
serverToken; + // return;
+ // }
const QJsonObject msgObj = serverMessage.object();
const QString command = msgObj["type"].toString();
@@ -378,14 +381,14 @@ void EkosLiveClient::onMessageTextReceived(const QString \
&message)
if (command == commands[GET_STATES])
sendStates();
- else if (command == commands[GET_CAMERAS])
- sendCameras();
- else if (command == commands[GET_MOUNTS])
- sendMounts();
- else if (command == commands[GET_SCOPES])
- sendScopes();
- else if (command == commands[GET_FILTER_WHEELS])
- sendFilterWheels();
+ else if (command == commands[GET_CAMERAS])
+ sendCameras();
+ else if (command == commands[GET_MOUNTS])
+ sendMounts();
+ else if (command == commands[GET_SCOPES])
+ sendScopes();
+ else if (command == commands[GET_FILTER_WHEELS])
+ sendFilterWheels();
else if (command.startsWith("capture_"))
processCaptureCommands(command, payload);
else if (command.startsWith("mount_"))
@@ -500,7 +503,7 @@ void EkosLiveClient::updateMountStatus(const QJsonObject &status)
void EkosLiveClient::updateCaptureStatus(const QJsonObject &status)
{
if (m_isConnected == false)
- return;
+ return;
sendResponse(EkosLiveClient::commands[EkosLiveClient::NEW_CAPTURE_STATE], \
status); }
@@ -511,16 +514,16 @@ void EkosLiveClient::sendPreviewImage(FITSView *view)
return;
// TODO 640 should be configurable later on
-// QImage scaledImage = view->getDisplayImage()->scaledToWidth(640);
-// QTemporaryFile jpegFile;
-// jpegFile.open();
-// jpegFile.close();
+ // QImage scaledImage = view->getDisplayImage()->scaledToWidth(640);
+ // QTemporaryFile jpegFile;
+ // jpegFile.open();
+ // jpegFile.close();
-// scaledImage.save(jpegFile.fileName(), "jpg");
+ // scaledImage.save(jpegFile.fileName(), "jpg");
-// jpegFile.open();
+ // jpegFile.open();
-// QByteArray jpegData = jpegFile.readAll();
+ // QByteArray jpegData = jpegFile.readAll();
QByteArray jpegData;
QBuffer buffer(&jpegData);
@@ -539,11 +542,11 @@ void EkosLiveClient::sendPreviewImage(FITSView *view)
QString bitDepth = QString::number(imageData->getBPP());
QJsonObject metadata = {
- {"resolution",resolution},
- {"size",sizeBytes},
- {"bin",binning},
- {"bpp",bitDepth},
- };
+ {"resolution",resolution},
+ {"size",sizeBytes},
+ {"bin",binning},
+ {"bpp",bitDepth},
+ };
m_mediaWebSocket.sendTextMessage(QJsonDocument(metadata).toJson());
m_mediaWebSocket.sendBinaryMessage(jpegData);
@@ -578,7 +581,7 @@ void EkosLiveClient::sendVideoFrame(std::unique_ptr<QImage> & \
frame) // TODO Quality should be configurable
scaledImage.save(jpegFile.fileName(), "jpg", 50);
- jpegFile.open();
+ jpegFile.open();
m_mediaWebSocket.sendBinaryMessage(jpegFile.readAll());
}
@@ -601,7 +604,13 @@ void EkosLiveClient::updateGuideStatus(const QJsonObject \
&status)
void EkosLiveClient::sendConnection()
{
- QJsonObject connectionState = {{"online", m_Manager->getEkosStartingStatus() == \
EkosManager::EKOS_STATUS_SUCCESS}}; + if (m_isConnected == false)
+ return;
+
+ QJsonObject connectionState = {
+ {"connected", true},
+ {"online", m_Manager->getEkosStartingStatus() == \
EkosManager::EKOS_STATUS_SUCCESS} + };
sendResponse(EkosLiveClient::commands[EkosLiveClient::NEW_CONNECTION_STATE], \
connectionState); }
@@ -676,12 +685,12 @@ void EkosLiveClient::sendCameras()
oneCCD->getTemperature(&temperature);
QJsonObject oneCamera = {
- {"name", oneCCD->getDeviceName()},
- {"canBin", primaryChip->canBin()},
- {"hasTemperature", oneCCD->hasCooler()},
- {"temperature", temperature},
- {"canCool", oneCCD->canCool()},
- {"hasVideo", oneCCD->hasVideoStream()}
+ {"name", oneCCD->getDeviceName()},
+ {"canBin", primaryChip->canBin()},
+ {"hasTemperature", oneCCD->hasCooler()},
+ {"temperature", temperature},
+ {"canCool", oneCCD->canCool()},
+ {"hasVideo", oneCCD->hasVideoStream()}
};
cameraList.append(oneCamera);
@@ -692,7 +701,7 @@ void EkosLiveClient::sendCameras()
void EkosLiveClient::sendMounts()
{
- if (m_isConnected == false)
+ if (m_isConnected == false || m_Manager->getEkosStartingStatus() != \
EkosManager::EKOS_STATUS_SUCCESS) return;
QJsonArray mountList;
@@ -702,12 +711,12 @@ void EkosLiveClient::sendMounts()
ISD::Telescope *oneTelescope = dynamic_cast<ISD::Telescope*>(gd);
QJsonObject oneMount = {
- {"name", oneTelescope->getDeviceName()},
- {"canPark", oneTelescope->canPark()},
- {"canSync", oneTelescope->canSync()},
- {"canControlTrack", oneTelescope->canControlTrack()},
- {"hasSlewRates", oneTelescope->hasSlewRates()},
- {"slewRates", QJsonArray::fromStringList(oneTelescope->slewRates())},
+ {"name", oneTelescope->getDeviceName()},
+ {"canPark", oneTelescope->canPark()},
+ {"canSync", oneTelescope->canSync()},
+ {"canControlTrack", oneTelescope->canControlTrack()},
+ {"hasSlewRates", oneTelescope->hasSlewRates()},
+ {"slewRates", QJsonArray::fromStringList(oneTelescope->slewRates())},
};
mountList.append(oneMount);
@@ -728,18 +737,13 @@ void EkosLiveClient::sendMounts()
void EkosLiveClient::sendScopes()
{
- if (m_isConnected == false || m_Manager->getEkosStartingStatus() != \
EkosManager::EKOS_STATUS_SUCCESS ) + if (m_isConnected == false ||
+ m_Manager->getEkosStartingStatus() != EkosManager::EKOS_STATUS_SUCCESS ||
+ m_Manager->mountModule() == nullptr)
return;
- // If not initilized yet, return empty array
- if (m_Manager->mountModule() == nullptr)
- sendResponse(EkosLiveClient::commands[EkosLiveClient::GET_SCOPES], \
QJsonArray());
- else
- {
- QJsonArray scopeList = m_Manager->mountModule()->getScopes();
- sendResponse(EkosLiveClient::commands[EkosLiveClient::GET_SCOPES], \
scopeList);
- }
-
+ QJsonArray scopeList = m_Manager->mountModule()->getScopes();
+ sendResponse(EkosLiveClient::commands[EkosLiveClient::GET_SCOPES], scopeList);
}
void EkosLiveClient::sendTemperature(double value)
@@ -776,8 +780,8 @@ void EkosLiveClient::sendFilterWheels()
filters.append(filterNames->tp[i].text);
QJsonObject oneFilter = {
- {"name", gd->getDeviceName()},
- {"filters", filters}
+ {"name", gd->getDeviceName()},
+ {"filters", filters}
};
filterList.append(oneFilter);
@@ -1064,7 +1068,7 @@ void EkosLiveClient::processProfileCommands(const QString \
&command, const QJsonO m_Manager->setProfile(payload["name"].toString());
m_Manager->start();
}
- else if (command == commands[START_PROFILE])
+ else if (command == commands[STOP_PROFILE])
{
m_Manager->stop();
}
@@ -1075,6 +1079,9 @@ void \
EkosLiveClient::setEkosStatingStatus(EkosManager::CommunicationStatus statu if \
(status == EkosManager::EKOS_STATUS_PENDING) return;
- QJsonObject connectionState = {{"online", status == \
EkosManager::EKOS_STATUS_SUCCESS}}; + QJsonObject connectionState = {
+ {"connected", true},
+ {"online", status == EkosManager::EKOS_STATUS_SUCCESS}
+ };
sendResponse(EkosLiveClient::commands[EkosLiveClient::NEW_CONNECTION_STATE], \
connectionState); }
diff --git a/kstars/ekos/ekoslive/ekosliveclient.h \
b/kstars/ekos/ekoslive/ekosliveclient.h index 1d114eae2..13c86f9f0 100644
--- a/kstars/ekos/ekoslive/ekosliveclient.h
+++ b/kstars/ekos/ekoslive/ekosliveclient.h
@@ -44,10 +44,16 @@ public:
void sendUpdatedFrame(FITSView *view);
void sendEvent(const QString &message, KSNotification::EventType event);
+ // Send devices as they come
+ void sendCameras();
+ void sendMounts();
+ void sendScopes();
+ void sendFilterWheels();
+
enum COMMANDS
- {
+ {
GET_CONNECTION,
- GET_STATES,
+ GET_STATES,
GET_CAMERAS,
GET_MOUNTS,
GET_SCOPES,
@@ -191,11 +197,7 @@ private:
// Profiles
void sendProfiles();
- void sendStates();
- void sendCameras();
- void sendMounts();
- void sendScopes();
- void sendFilterWheels();
+ void sendStates();
QWebSocket m_messageWebSocket, m_mediaWebSocket;
diff --git a/kstars/ekos/ekosmanager.cpp b/kstars/ekos/ekosmanager.cpp
index a81e64cad..5dec51b8f 100644
--- a/kstars/ekos/ekosmanager.cpp
+++ b/kstars/ekos/ekosmanager.cpp
@@ -1094,6 +1094,9 @@ void EkosManager::setTelescope(ISD::GDInterface *scopeDevice)
if (domeProcess.get() != nullptr)
domeProcess->setTelescope(scopeDevice);
+
+ ekosLiveClient->sendMounts();
+ ekosLiveClient->sendScopes();
}
void EkosManager::setCCD(ISD::GDInterface *ccdDevice)
@@ -1193,7 +1196,7 @@ void EkosManager::setFilter(ISD::GDInterface *filterDevice)
alignProcess->addFilter(filterDevice);
if (Options::defaultAlignFW().isEmpty() == false)
- alignProcess->setFilter(Options::defaultAlignFW(), -1);
+ alignProcess->setFilter(Options::defaultAlignFW(), -1);
}
void EkosManager::setFocuser(ISD::GDInterface *focuserDevice)
@@ -1334,6 +1337,8 @@ void EkosManager::processNewText(ITextVectorProperty *tvp)
if (alignProcess.get() != nullptr)
alignProcess->checkFilter();*/
+
+ ekosLiveClient.get()->sendFilterWheels();
}
}
@@ -1357,7 +1362,7 @@ void EkosManager::processNewNumber(INumberVectorProperty *nvp)
{
mountProcess->setTelescope(managedDevices[KSTARS_TELESCOPE]);
//mountProcess->syncTelescopeInfo();
- }
+ }
return;
}
@@ -1433,6 +1438,20 @@ void EkosManager::processNewProperty(INDI::Property *prop)
}
}
+ if (!strcmp(prop->getName(), "TELESCOPE_INFO") || !strcmp(prop->getName(), \
"TELESCOPE_SLEW_RATE")) + {
+ ekosLiveClient.get()->sendMounts();
+ ekosLiveClient.get()->sendScopes();
+ }
+
+ if (!strcmp(prop->getName(), "CCD_INFO") || !strcmp(prop->getName(), \
"CCD_TEMPERATURE")) + {
+ ekosLiveClient.get()->sendCameras();
+ }
+
+ if (!strcmp(prop->getName(), "FILTER_SLOT"))
+ ekosLiveClient.get()->sendFilterWheels();
+
if (!strcmp(prop->getName(), "CCD_INFO") || !strcmp(prop->getName(), \
"GUIDER_INFO")) {
if (focusProcess.get() != nullptr)
diff --git a/kstars/indi/drivermanager.cpp b/kstars/indi/drivermanager.cpp
index 1f07e3e50..a03d1bdeb 100644
--- a/kstars/indi/drivermanager.cpp
+++ b/kstars/indi/drivermanager.cpp
@@ -729,6 +729,8 @@ bool DriverManager::connectRemoteHost(DriverInfo *dv)
{
clients.append(clientManager);
updateMenuActions();
+
+ KSNotification::event(QLatin1String("ConnectionSuccessful"), i18n("Connected \
to INDI server"), KSNotification::EVENT_ALERT); }
else
{
@@ -742,6 +744,7 @@ bool DriverManager::connectRemoteHost(DriverInfo *dv)
msgBox->setWindowTitle(i18n("Error"));
msgBox->setText(
i18n("Connection to INDI server at host %1 with port %2 failed.", \
dv->getHost(), dv->getPort())); + \
KSNotification::event(QLatin1String("ConnectionFailed"), msgBox->text(), \
KSNotification::EVENT_ALERT); msgBox->setModal(false);
msgBox->setIcon(QMessageBox::Critical);
msgBox->show();
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic