Changed the old code to work as a daemon
[googlelatitude] / src / daemon / glatitude.cpp
1 #include "glatitude.h"
2
3 GoogleLatitude::GoogleLatitude(QObject *parent) :
4         QObject(parent)
5 {
6     user = "";
7     pass = "";
8     latitude = 0.;
9     longitude = 0.;
10     accuracy = 0.;
11
12     worker = new QNetworkAccessManager();
13     connect(worker, SIGNAL(finished(QNetworkReply *)), this, SLOT(finishedreply(QNetworkReply *)));
14
15     urllogin = QUrl::fromEncoded("https://www.google.com/accounts/ServiceLogin?service=friendview");
16     urldologin = QUrl::fromEncoded("https://www.google.com/accounts/ServiceLoginAuth?service=friendview");
17     urlupdate = QUrl::fromEncoded("http://maps.google.com/glm/mmap/mwmfr?hl=en");
18     on = true;
19 }
20
21 void GoogleLatitude::login(QString u, QString p) {
22     if ( !u.contains('@') ) u.append("@gmail.com");
23     user = u;
24     pass = p;
25 }
26
27 void GoogleLatitude::set(double la, double lo, double ac) {
28     latitude = la;
29     longitude = lo;
30     accuracy = ac;
31
32     if (la*lo == 0) return;
33     if (!on) return;
34     worker->get(QNetworkRequest(urllogin));
35 }
36
37 void GoogleLatitude::finishedreply(QNetworkReply *r) {
38     if ( r->url() == urllogin ) {
39         QString aidis = r->readAll();
40         QRegExp regexp ("type=\"hidden\".*name=\"GALX\".*value=\"(.*)\"");
41         regexp.setMinimal(1);
42         regexp.indexIn(aidis, 1);
43         QString googleGALX = regexp.capturedTexts().last();
44
45         QByteArray datalogin;
46         datalogin += "&service=friendview";
47         datalogin += "&GALX=" + googleGALX;
48         datalogin += "&Email=" + user;
49         datalogin += "&Passwd=" + pass;
50         worker->post(QNetworkRequest(urldologin), datalogin);
51     } else if ( r->url() == urldologin ) {
52         QByteArray datagps;
53         datagps += "t=ul";
54         datagps += "&lat=" + QString::number(latitude);
55         datagps += "&lng=" + QString::number(longitude);
56         datagps += "&accuracy=" + QString::number(accuracy);
57
58         QNetworkRequest request(urlupdate);
59         request.setRawHeader("X-ManualHeader", QString("true").toAscii() );
60         worker->post(request, datagps);
61     } else if ( r->url() == urlupdate ) {
62         QString output = r->readAll();
63         QRegExp regexp ("Authentication required");
64         if (regexp.indexIn(output, 1) != -1) {
65             emit ERROR();
66         } else {
67             emit OK();
68         }
69         qDebug() << output;
70     } else {
71         qDebug() << "Error";
72         qDebug() << "url:" << r->url();
73         qDebug() << r->rawHeaderList();
74         qDebug() << r->readAll();
75     }
76 }