9#include "ekosliveclient.h"
10#include "ekos/manager.h"
14#include "ekos_debug.h"
15#include "QProgressIndicator.h"
17#include <config-kstars.h>
20#include <qt5keychain/keychain.h>
23#include <QJsonDocument>
25#include <QNetworkAccessManager>
26#include <QNetworkReply>
30Client::Client(Ekos::Manager *manager) :
QDialog(manager), m_Manager(manager)
45 username->setText(Options::ekosLiveUsername());
48 Options::setEkosLiveUsername(username->text());
55 onlineLabel->setToolTip(message);
62 offlineLabel->setToolTip(message);
81 oneManager->setCredentials(username->text(), password->text());
93 oneManager->setCredentials(username->text(), password->text());
102 Options::setRememberCredentials(toggled);
107 Options::setAutoStartEkosLive(toggled);
112 job->setAutoDelete(
false);
114 connect(job, &QKeychain::Job::finished,
this, [&](QKeychain::Job * job)
116 if (job->error() ==
false)
118 const auto passwordText = dynamic_cast<QKeychain::ReadPasswordJob*>(job)->textData().toLatin1();
121 if (passwordText.isEmpty() == false && username->text().isEmpty() == false)
123 password->setText(passwordText);
124 if (autoStartCheck->isChecked())
126 for (auto &oneManager : m_NodeManagers)
128 oneManager->setCredentials(username->text(), password->text());
129 oneManager->authenticate();
137 qCWarning(
KSTARS_EKOS) <<
"Failed to automatically connect due to missing EkosLive credentials:" << job->errorString();
144 m_Message =
new Message(m_Manager, m_NodeManagers);
145 connect(m_Message, &Message::connected,
this, &Client::onConnected);
146 connect(m_Message, &Message::disconnected,
this, &Client::onDisconnected);
147 connect(m_Message, &Message::expired,
this, [&](
const QUrl & url)
152 if (
oneManager->property(
"websocketURL").toUrl() == url)
155 oneManager->setCredentials(username->text(), password->text());
161 m_Media =
new Media(m_Manager, m_NodeManagers);
162 connect(m_Media, &Media::connected,
this, &Client::onConnected);
163 m_Cloud =
new Cloud(m_Manager, m_NodeManagers);
164 connect(m_Cloud, &Cloud::connected,
this, &Client::onConnected);
173void Client::onConnected()
177 m_isConnected =
true;
182 auto disconnected =
QIcon(
":/icons/AlignFailure.svg").
pixmap(
QSize(32, 32));
185 onlineLabel->setStyleSheet(m_NodeManagers[0]->isConnected() ?
"color:white" :
"color:gray");
186 onlineIcon->setPixmap(m_NodeManagers[0]->isConnected() ? connected : disconnected);
187 if (m_NodeManagers[0]->isConnected())
191 offlineLabel->setStyleSheet(m_NodeManagers[1]->isConnected() ?
"color:white" :
"color:gray");
192 offlineIcon->setPixmap(m_NodeManagers[1]->isConnected() ? connected : disconnected);
193 if (m_NodeManagers[1]->isConnected())
200 job->setAutoDelete(
true);
202 job->setTextData(password->text());
208void Client::onDisconnected()
211 m_isConnected =
false;
214 auto disconnected =
QIcon(
":/icons/AlignFailure.svg").
pixmap(
QSize(32, 32));
217 onlineLabel->setStyleSheet(m_NodeManagers[0]->isConnected() ?
"color:white" :
"color:gray");
218 onlineIcon->setPixmap(m_NodeManagers[0]->isConnected() ? connected : disconnected);
220 offlineLabel->setStyleSheet(m_NodeManagers[1]->isConnected() ?
"color:white" :
"color:gray");
221 offlineIcon->setPixmap(m_NodeManagers[1]->isConnected() ? connected : disconnected);
226void Client::setConnected(
bool enabled)
229 if (enabled == m_isConnected)
243 username->setText(user);
244 Options::setEkosLiveUsername(user);
246 password->setText(pass);
249void Client::showSelectServersDialog()
252 dialog.setMinimumWidth(300);
253 dialog.setWindowTitle(
i18nc(
"@title:window",
"Select EkosLive Servers"));
260 offlineEdit.setText(Options::ekosLiveOfflineServer());
261 onlineEdit.setText(Options::ekosLiveOnlineServer());
266 dialog.setLayout(layout);
269 Options::setEkosLiveOfflineServer(
offlineEdit.text());
270 Options::setEkosLiveOnlineServer(
onlineEdit.text());
275void Client::syncURLs()
The QProgressIndicator class lets an application display a progress indicator to show that a long tas...
QString i18nc(const char *context, const char *text, const TYPE &arg...)
QString i18n(const char *text, const TYPE &arg...)
Generic record interfaces and implementations.
QPixmap pixmap(QWindow *window, const QSize &size, Mode mode, State state) const const
QIcon fromTheme(const QString &name)
QFuture< ArgsType< Signal > > connect(Sender *sender, Signal signal)
QString scheme() const const
QString url(FormattingOptions options) const const