[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