From 3340aa0ef68eb735c36185959c8dbd11178575bf Mon Sep 17 00:00:00 2001 From: Javier Date: Sun, 13 Dec 2015 03:18:09 +0100 Subject: Bump min Qt requirement to 5.2, bump libwatchfish version --- hostmanagerconn.cc | 110 ++++++++++++++++++++++++++++++++--------------------- 1 file changed, 67 insertions(+), 43 deletions(-) (limited to 'hostmanagerconn.cc') diff --git a/hostmanagerconn.cc b/hostmanagerconn.cc index de1c61a..e4f5edc 100644 --- a/hostmanagerconn.cc +++ b/hostmanagerconn.cc @@ -1,8 +1,13 @@ -#include #include +#include +#include #include +#include -#include "qtjson/json.h" +#if SAILFISH +#include +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(); } } -- cgit v1.2.3