version 0.2
[googlelatitude] / src / glatitude.cpp
diff --git a/src/glatitude.cpp b/src/glatitude.cpp
new file mode 100644 (file)
index 0000000..4627ac5
--- /dev/null
@@ -0,0 +1,84 @@
+#include "glatitude.h"
+
+GoogleLatitude::GoogleLatitude(QObject *parent) : QObject(parent) {
+    user = "";
+    pass = "";
+    latitude = 0.;
+    longitude = 0.;
+    accuracy = 0.;
+
+    worker = new QNetworkAccessManager();
+    connect(worker, SIGNAL(finished(QNetworkReply *)), this, SLOT(finishedreply(QNetworkReply *)));
+
+    urllogin = QUrl::fromEncoded("https://www.google.com/accounts/ServiceLogin?service=friendview");
+    urldologin = QUrl::fromEncoded("https://www.google.com/accounts/ServiceLoginAuth?service=friendview");
+    urlupdate = QUrl::fromEncoded("http://maps.google.com/glm/mmap/mwmfr?hl=en");
+    urlloc = QUrl::fromEncoded("http://www.google.com/loc/json");
+}
+
+void GoogleLatitude::login(QString u, QString p) {
+    if ( !u.contains('@') ) u.append("@gmail.com");
+    user = u;
+    pass = p;
+}
+
+void GoogleLatitude::set(double la, double lo, double ac) {
+    latitude = la;
+    longitude = lo;
+    accuracy = ac;
+    worker->get(QNetworkRequest(urllogin));
+}
+
+void GoogleLatitude::get() {
+    QByteArray postloc = QByteArray("{version:\"1.1.0\"}");
+    worker->post(QNetworkRequest(urlloc),postloc);
+}
+
+void GoogleLatitude::finishedreply(QNetworkReply *r) {
+    if ( r->url() == urllogin ) {
+        QString aidis = r->readAll();
+        QRegExp regexp ("type=\"hidden\".*name=\"GALX\".*value=\"(.*)\"");
+        regexp.setMinimal(1);
+        regexp.indexIn(aidis, 1);
+        QString googleGALX = regexp.capturedTexts().last();
+
+        QByteArray datalogin;
+        datalogin += "&service=friendview";
+        datalogin += "&GALX=" + googleGALX;
+        datalogin += "&Email=" + user;
+        datalogin += "&Passwd=" + pass;
+        worker->post(QNetworkRequest(urldologin), datalogin);
+    } else if ( r->url() == urldologin ) {
+        QByteArray datagps;
+        datagps += "t=ul";
+        datagps += "&lat=" + QString::number(latitude);
+        datagps += "&lng=" + QString::number(longitude);
+        datagps += "&accuracy=" + QString::number(accuracy);
+
+        QNetworkRequest request(urlupdate);
+        request.setRawHeader("X-ManualHeader", QString("true").toAscii() );
+        worker->post(request, datagps);
+    } else if ( r->url() == urlupdate ) {
+        QString output = r->readAll();
+        QRegExp regexp ("Authentication required");
+        if (regexp.indexIn(output, 1) != -1) {
+            emit setERROR();
+        } else {
+            emit setOK();
+        }
+    } else if ( r->url() == urlloc ) {
+        QString loc = r->readAll();
+        QRegExp regexp ("\\{\"latitude\":(.*),\"longitude\":(.*),\"accuracy\":(.*)\\}");
+        regexp.setMinimal(1);
+        regexp.indexIn(loc, 1);
+        latitude = regexp.capturedTexts().at(1).toDouble();
+        longitude = regexp.capturedTexts().at(2).toDouble();
+        accuracy = regexp.capturedTexts().at(3).toDouble();
+        emit getOK();
+    } else {
+        qDebug() << "Error";
+        qDebug() << "url:" << r->url();
+        qDebug() << r->rawHeaderList();
+        qDebug() << r->readAll();
+    }
+}