summaryrefslogtreecommitdiff
path: root/hostmanagerconn.cc
diff options
context:
space:
mode:
authorJavier <dev.git@javispedro.com>2015-12-13 03:18:09 +0100
committerJavier <dev.git@javispedro.com>2015-12-13 03:18:09 +0100
commit3340aa0ef68eb735c36185959c8dbd11178575bf (patch)
treecf424e206eb60b7ca9f99bf135ed8dae54d25259 /hostmanagerconn.cc
parentf45294559f976258831821ada062c73965201150 (diff)
downloadsapd-3340aa0ef68eb735c36185959c8dbd11178575bf.tar.gz
sapd-3340aa0ef68eb735c36185959c8dbd11178575bf.zip
Bump min Qt requirement to 5.2, bump libwatchfish version
Diffstat (limited to 'hostmanagerconn.cc')
-rw-r--r--hostmanagerconn.cc110
1 files changed, 67 insertions, 43 deletions
diff --git a/hostmanagerconn.cc b/hostmanagerconn.cc
index de1c61a..e4f5edc 100644
--- a/hostmanagerconn.cc
+++ b/hostmanagerconn.cc
@@ -1,8 +1,13 @@
-#include <QtCore/QDateTime>
#include <QtCore/QDebug>
+#include <QtCore/QDateTime>
+#include <QtCore/QTimeZone>
#include <QtCore/QXmlStreamWriter>
+#include <QtCore/QJsonDocument>
-#include "qtjson/json.h"
+#if SAILFISH
+#include <libwatchfish/walltimemonitor.h>
+static watchfish::WallTimeMonitor *monitor = 0;
+#endif
#include "sappeer.h"
#include "hostmanagerconn.h"
@@ -16,31 +21,38 @@ HostManagerConn::HostManagerConn(SAPConnection *conn, QObject *parent)
connect(_socket, SIGNAL(messageReceived()), SLOT(handleMessageReceived()));
}
-void HostManagerConn::sendMessage(const QString &json)
-{
- qDebug() << "Send JSON:" << json;
- _socket->send(QByteArray(3,0) + json.toUtf8());
-}
-
-void HostManagerConn::sendMessage(const QVariantMap &msg)
+void HostManagerConn::sendMessage(const QJsonObject &msg)
{
- sendMessage(QtJson::serializeStr(msg));
+ QJsonDocument doc(msg);
+ QByteArray data = doc.toJson(QJsonDocument::Compact);
+ qDebug() << "Send JSON:" << data;
+ _socket->send(QByteArray(3,0) + doc.toJson(QJsonDocument::Compact));
}
-void HostManagerConn::handleMessage(const QVariantMap &msg)
+void HostManagerConn::handleMessage(const QJsonObject &msg)
{
- QString msgId = msg["msgId"].toString();
+ const QString msgId = msg["msgId"].toString();
qDebug() << "Got JSON msg" << msgId;
if (msgId == "mgr_watch_info_res") {
- sendMessage("{\"timestamp\":\"1407542281196=B:L>:<=LAMO\",\"type\":\"connect\",\"msgId\":\"mgr_wearable_status_req\"}");
+ QJsonObject reply;
+ reply["timestamp"] = QLatin1String("1407542281196=B:L>:<=LAMO");
+ reply["type"] = QLatin1String("connect");
+ reply["msgId"] = QLatin1String("mgr_wearable_status_req");
+ sendMessage(reply);
} else if (msgId == "mgr_host_status_req") {
- sendMessage(QString("{\"type\":\"connect\",\"data\":%1,\"msgId\":\"mgr_host_status_res\",\"preinstalled\":\"true\"}")
- .arg(QtJson::sanitizeString(generateHostXml())));
-
+ QJsonObject reply;
+ reply["type"] = QLatin1String("connect");
+ reply["msgId"] = QLatin1String("mgr_host_status_res");
+ reply["preinstalled"] = QLatin1String("true");
+ reply["data"] = generateHostXml();
+ sendMessage(reply);
} else if (msgId == "mgr_status_exchange_done") {
performTimeSync();
- sendMessage(QString("{\"btMac\":\"%1\",\"msgId\":\"mgr_setupwizard_eula_finished_req\",\"isOld\":1}")
- .arg(_conn->peer()->localName()));
+ QJsonObject reply;
+ reply["btMac"] = _conn->peer()->localName();
+ reply["msgId"] = QLatin1String("mgr_setupwizard_eula_finished_req");
+ reply["isOld"] = 1;
+ sendMessage(reply);
}
}
@@ -51,22 +63,27 @@ void HostManagerConn::performTimeSync()
// "isfrominitial":true,"msgId":"mgr_sync_init_setting_req","usingCamera":"false","safety_cam":"0",
// "datetime":"2014 08 29 22 23 48","incomingCall":"false"}
- QVariantMap msg;
- msg["msgId"] = "mgr_sync_init_setting_req";
+ QJsonObject msg;
+ msg["msgId"] = QLatin1String("mgr_sync_init_setting_req");
- msg["safety_declared"] = "0";
- msg["safety_voice"] = "0";
- msg["safetyVersion"] = "0";
- msg["safety"] = "false";
- msg["tablet"] = "true";
- msg["incomingCall"] = "false";
- msg["usingCamera"] = "false";
- msg["safety_cam"] = "0";
+ msg["safety_declared"] = QLatin1String("0");
+ msg["safety_voice"] = QLatin1String("0");
+ msg["safetyVersion"] = QLatin1String("0");
+ msg["safety"] = QLatin1String("false");
+ msg["tablet"] = QLatin1String("true");
+ msg["incomingCall"] = QLatin1String("false");
+ msg["usingCamera"] = QLatin1String("false");
+ msg["safety_cam"] = QLatin1String("0");
msg["locale"] = QLocale::system().name(); // ie es_ES
- msg["data1224"] = "24"; // TODO
+ msg["data1224"] = QLatin1String("24"); // TODO
msg["dateformat"] = QLocale::system().dateFormat(QLocale::ShortFormat);
- msg["timezone"] = "Europe/Madrid";
+
+#if SAILFISH
+ msg["timezone"] = monitor->timezone();
+#else
+ msg["timezone"] = QString::fromLatin1(QTimeZone::systemTimeZoneId());
+#endif
QDateTime dt = QDateTime::currentDateTime();
msg["datetimeepoch"] = QString::number(dt.currentMSecsSinceEpoch());
@@ -124,10 +141,18 @@ QString HostManagerConn::generateHostXml()
void HostManagerConn::handleConnected()
{
qDebug() << "Manager socket now connected!";
- QString msg = QString("{\"btMac\":\"%1\",\"msgId\":\"mgr_watch_info_req\",\"hmVer\":\"2.0.14041404\"}").arg(_conn->peer()->localName());
- qDebug() << msg;
- QByteArray data = QByteArray(3,0) + msg.toUtf8();
- _socket->send(data);
+
+#if SAILFISH
+ if (!monitor) {
+ monitor = new watchfish::WallTimeMonitor;
+ }
+#endif
+
+ QJsonObject obj;
+ obj["btMac"] = _conn->peer()->localName();
+ obj["msgId"] = QLatin1String("mgr_watch_info_req");
+ obj["hmVer"] = QLatin1String("2.0.14041404");
+ sendMessage(obj);
}
void HostManagerConn::handleMessageReceived()
@@ -139,17 +164,16 @@ void HostManagerConn::handleMessageReceived()
return;
}
- data.remove(0, 3); // First two bytes contain something related to ???
+ data.remove(0, 3); // What are those first three bytes??? They seem to be always NUL.
+
+ qDebug() << "Got JSON:" << QString::fromUtf8(data);
- QString str = QString::fromUtf8(data);
- bool success = false;
- QVariant json = QtJson::parse(str, success);
+ QJsonParseError error;
+ QJsonDocument json = QJsonDocument::fromJson(data, &error);
- if (success) {
- qDebug() << "Got JSON:" << str;
- handleMessage(json.toMap());
+ if (json.isObject()) {
+ handleMessage(json.object());
} else {
- qWarning() << "Cannot parse JSON msg:" << str;
- return;
+ qWarning() << "Cannot parse JSON msg:" << error.errorString();
}
}