From b58ae22b7840fd1c5675fcc01971c9181c2e9b29 Mon Sep 17 00:00:00 2001 From: Developer Date: Sun, 11 Sep 2011 23:02:51 +0200 Subject: [PATCH] Separate in library the application --- LatitudeUpdater.pri | 60 ------ LatitudeUpdaterDaemon.pro | 7 - LatitudeUpdaterQML.desktop | 11 -- LatitudeUpdaterQML.png | Bin 3646 -> 0 bytes LatitudeUpdaterQML.pro | 10 - LatitudeUpdaterWidget.desktop | 11 -- LatitudeUpdaterWidget.png | Bin 3646 -> 0 bytes LatitudeUpdaterWidget.pro | 7 - deployment.pri | 27 ++- googlelatitude.cpp | 178 ----------------- googlelatitude.h | 57 ------ gpscontrol.cpp | 131 ------------- gpscontrol.h | 49 ----- latitude.qml/MainPage.qml | 202 ++++++++++++++++++++ latitude.qml/latitude.qml.pro | 26 +++ latitude.qml/main.cpp | 16 ++ latitude.qml/main.qml | 12 ++ latitude.qml/qml.cpp | 18 ++ latitude.qml/qml.h | 55 ++++++ latitude.qml/resouses.qrc | 6 + latitude.qt/latitude.qt.pro | 18 ++ latitude.qt/main.cpp | 16 ++ latitude.qt/widget.cpp | 116 +++++++++++ latitude.qt/widget.h | 149 +++++++++++++++ latituded/daemon.cpp | 17 ++ latituded/daemon.h | 54 ++++++ latituded/latituded.pro | 18 ++ latituded/main.cpp | 16 ++ latitudedaemon.cpp | 17 -- latitudedaemon.h | 54 ------ latitudeqml.cpp | 20 -- latitudeqml.h | 55 ------ latitudeupdater.pro | 58 +++--- latitudeupdater64.png | Bin 0 -> 3646 bytes latitudeupdater80.png | Bin 0 -> 5280 bytes latitudeupdater_fremantle.desktop | 11 ++ latitudeupdater_harmattan.desktop | 11 ++ latitudewidget.cpp | 118 ------------ latitudewidget.h | 149 --------------- libkqoauth/libkqoauth.pro | 26 +++ liblatitudeupdater/googlelatitude.cpp | 178 +++++++++++++++++ liblatitudeupdater/googlelatitude.h | 57 ++++++ liblatitudeupdater/gpscontrol.cpp | 131 +++++++++++++ liblatitudeupdater/gpscontrol.h | 49 +++++ liblatitudeupdater/liblatitudeupdater.pro | 15 ++ liblocationmaemo5/liblocationmaemo5.pro | 24 +++ main-daemon.cpp | 16 -- main-qml.cpp | 16 -- main-widget.cpp | 16 -- qml/MainPage.qml | 202 -------------------- qml/main.qml | 12 -- qtc_packaging/debian_fremantle/control | 3 +- qtc_packaging/debian_fremantle/copyright | 2 +- qtc_packaging/debian_harmattan/README | 2 +- qtc_packaging/debian_harmattan/changelog | 44 ++--- qtc_packaging/debian_harmattan/control | 7 +- qtc_packaging/debian_harmattan/copyright | 2 +- .../debian_harmattan/googlelatitude.aegis | 20 -- qtc_packaging/debian_harmattan/rules | 2 +- qtc_packaging/debian_harmattan/rules.real | 4 +- qtc_packaging/icon-256.png | Bin 0 -> 25671 bytes qtc_packaging/meego-1.jpg | Bin 0 -> 61945 bytes qtc_packaging/screenshot-1.jpg | Bin 0 -> 35923 bytes resouses.qrc | 6 - 64 files changed, 1323 insertions(+), 1291 deletions(-) delete mode 100644 LatitudeUpdater.pri delete mode 100644 LatitudeUpdaterDaemon.pro delete mode 100644 LatitudeUpdaterQML.desktop delete mode 100644 LatitudeUpdaterQML.png delete mode 100644 LatitudeUpdaterQML.pro delete mode 100644 LatitudeUpdaterWidget.desktop delete mode 100644 LatitudeUpdaterWidget.png delete mode 100644 LatitudeUpdaterWidget.pro delete mode 100644 googlelatitude.cpp delete mode 100644 googlelatitude.h delete mode 100644 gpscontrol.cpp delete mode 100644 gpscontrol.h create mode 100644 latitude.qml/MainPage.qml create mode 100644 latitude.qml/latitude.qml.pro create mode 100644 latitude.qml/main.cpp create mode 100644 latitude.qml/main.qml create mode 100644 latitude.qml/qml.cpp create mode 100644 latitude.qml/qml.h create mode 100644 latitude.qml/resouses.qrc create mode 100644 latitude.qt/latitude.qt.pro create mode 100644 latitude.qt/main.cpp create mode 100644 latitude.qt/widget.cpp create mode 100644 latitude.qt/widget.h create mode 100644 latituded/daemon.cpp create mode 100644 latituded/daemon.h create mode 100644 latituded/latituded.pro create mode 100644 latituded/main.cpp delete mode 100644 latitudedaemon.cpp delete mode 100644 latitudedaemon.h delete mode 100644 latitudeqml.cpp delete mode 100644 latitudeqml.h create mode 100644 latitudeupdater64.png create mode 100644 latitudeupdater80.png create mode 100644 latitudeupdater_fremantle.desktop create mode 100644 latitudeupdater_harmattan.desktop delete mode 100644 latitudewidget.cpp delete mode 100644 latitudewidget.h create mode 100644 libkqoauth/libkqoauth.pro create mode 100644 liblatitudeupdater/googlelatitude.cpp create mode 100644 liblatitudeupdater/googlelatitude.h create mode 100644 liblatitudeupdater/gpscontrol.cpp create mode 100644 liblatitudeupdater/gpscontrol.h create mode 100644 liblatitudeupdater/liblatitudeupdater.pro create mode 100644 liblocationmaemo5/liblocationmaemo5.pro delete mode 100644 main-daemon.cpp delete mode 100644 main-qml.cpp delete mode 100644 main-widget.cpp delete mode 100644 qml/MainPage.qml delete mode 100644 qml/main.qml create mode 100644 qtc_packaging/debian_harmattan/manifest.aegis create mode 100644 qtc_packaging/icon-256.png create mode 100644 qtc_packaging/meego-1.jpg create mode 100644 qtc_packaging/screenshot-1.jpg delete mode 100644 resouses.qrc diff --git a/LatitudeUpdater.pri b/LatitudeUpdater.pri deleted file mode 100644 index 469e384..0000000 --- a/LatitudeUpdater.pri +++ /dev/null @@ -1,60 +0,0 @@ -QT += network -CONFIG += mobility -MOBILITY += location - -SOURCES += gpscontrol.cpp googlelatitude.cpp -HEADERS += gpscontrol.h googlelatitude.h - -INCLUDEPATH += libkqoauth -SOURCES += libkqoauth/kqoauthauthreplyserver.cpp \ - libkqoauth/kqoauthrequest.cpp \ - libkqoauth/kqoauthmanager.cpp \ - libkqoauth/kqoauthrequest_xauth.cpp \ - libkqoauth/kqoauthrequest_1.cpp \ - libkqoauth/kqoauthutils.cpp -PUBLIC_HEADERS += libkqoauth/kqoauthmanager.h \ - libkqoauth/kqoauthrequest.h \ - libkqoauth/kqoauthrequest_1.h \ - libkqoauth/kqoauthrequest_xauth.h \ - libkqoauth/kqoauthglobals.h -PRIVATE_HEADERS += libkqoauth/kqoauthrequest_p.h \ - libkqoauth/kqoauthmanager_p.h \ - libkqoauth/kqoauthauthreplyserver.h \ - libkqoauth/kqoauthauthreplyserver_p.h \ - libkqoauth/kqoauthutils.h \ - libkqoauth/kqoauthrequest_xauth_p.h -HEADERS += $$PUBLIC_HEADERS $$PRIVATE_HEADERS - -contains(QT_CONFIG, maemo5): { - QT += maemo5 - CONFIG += link_pkgconfig - PKGCONFIG += glib-2.0 liblocation - SOURCES += liblocationmaemo5/gconfitem.cpp \ - liblocationmaemo5/liblocationwrapper.cpp \ - liblocationmaemo5/qgeopositioninfosource_maemo5.cpp \ - liblocationmaemo5/qgeosatelliteinfosource_maemo5.cpp - HEADERS += liblocationmaemo5/gconfitem_p.h \ - liblocationmaemo5/liblocationwrapper_p.h \ - liblocationmaemo5/qgeopositioninfosource_maemo5_p.h \ - liblocationmaemo5/qgeosatelliteinfosource_maemo5_p.h -} - -# Please do not modify the following two lines. Required for deployment. -include(deployment.pri) -qtcAddDeployment() - -OTHER_FILES += \ - qtc_packaging/debian_harmattan/rules \ - qtc_packaging/debian_harmattan/rules.real \ - qtc_packaging/debian_harmattan/README \ - qtc_packaging/debian_harmattan/copyright \ - qtc_packaging/debian_harmattan/control \ - qtc_packaging/debian_harmattan/compat \ - qtc_packaging/debian_harmattan/changelog \ - qtc_packaging/debian_fremantle/rules \ - qtc_packaging/debian_fremantle/rules.real \ - qtc_packaging/debian_fremantle/README \ - qtc_packaging/debian_fremantle/copyright \ - qtc_packaging/debian_fremantle/control \ - qtc_packaging/debian_fremantle/compat \ - qtc_packaging/debian_fremantle/changelog diff --git a/LatitudeUpdaterDaemon.pro b/LatitudeUpdaterDaemon.pro deleted file mode 100644 index 5c2211a..0000000 --- a/LatitudeUpdaterDaemon.pro +++ /dev/null @@ -1,7 +0,0 @@ -TARGET = LatitudeUpdaterDaemon -QT -= gui - -SOURCES += latitudedaemon.cpp main-daemon.cpp -HEADERS += latitudedaemon.h - -include(LatitudeUpdater.pri) diff --git a/LatitudeUpdaterQML.desktop b/LatitudeUpdaterQML.desktop deleted file mode 100644 index 4648ddc..0000000 --- a/LatitudeUpdaterQML.desktop +++ /dev/null @@ -1,11 +0,0 @@ -[Desktop Entry] -Encoding=UTF-8 -Version=1.0 -Type=Application -Terminal=false -Name=LatitudeQML -Exec=/usr/bin/invoker --single-instance --type=e /opt/linfati.com/bin/LatitudeUpdaterQML -Icon=LatitudeUpdaterQML -X-Window-Icon= -X-HildonDesk-ShowInToolbar=true -X-Osso-Type=application/x-executable diff --git a/LatitudeUpdaterQML.png b/LatitudeUpdaterQML.png deleted file mode 100644 index d98268f31e1c847a9b0e0d3fda477d7079f494d9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3646 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 Qv;Y7A07*qoM6N<$f^%-)0RR91 diff --git a/LatitudeUpdaterQML.pro b/LatitudeUpdaterQML.pro deleted file mode 100644 index 643d411..0000000 --- a/LatitudeUpdaterQML.pro +++ /dev/null @@ -1,10 +0,0 @@ -TARGET = LatitudeUpdaterQML -QT += declarative - -SOURCES += latitudeqml.cpp main-qml.cpp -HEADERS += latitudeqml.h - -RESOURCES += resouses.qrc -OTHER_FILES += qml/main.qml qml/MainPage.qml - -include(LatitudeUpdater.pri) diff --git a/LatitudeUpdaterWidget.desktop b/LatitudeUpdaterWidget.desktop deleted file mode 100644 index 4fe89bb..0000000 --- a/LatitudeUpdaterWidget.desktop +++ /dev/null @@ -1,11 +0,0 @@ -[Desktop Entry] -Encoding=UTF-8 -Version=1.0 -Type=Application -Terminal=false -Name=LatitudeWidget -Exec=/opt/linfati.com/bin/LatitudeUpdaterWidget -Icon=LatitudeUpdaterWidget -X-Window-Icon= -X-HildonDesk-ShowInToolbar=true -X-Osso-Type=application/x-executable diff --git a/LatitudeUpdaterWidget.png b/LatitudeUpdaterWidget.png deleted file mode 100644 index d98268f31e1c847a9b0e0d3fda477d7079f494d9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3646 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 Qv;Y7A07*qoM6N<$f^%-)0RR91 diff --git a/LatitudeUpdaterWidget.pro b/LatitudeUpdaterWidget.pro deleted file mode 100644 index 8dee1bb..0000000 --- a/LatitudeUpdaterWidget.pro +++ /dev/null @@ -1,7 +0,0 @@ -TARGET = LatitudeUpdaterWidget - -SOURCES += latitudewidget.cpp main-widget.cpp -HEADERS += latitudewidget.h - -include(LatitudeUpdater.pri) - diff --git a/deployment.pri b/deployment.pri index 266eed3..d515c67 100644 --- a/deployment.pri +++ b/deployment.pri @@ -51,9 +51,16 @@ symbian { } } else:unix { maemo5 { + desktopfile.files = $${TARGET}_fremantle.desktop desktopfile.path = /usr/share/applications/hildon - } else { + icon.files = $${TARGET}64.png + icon.path = /usr/share/icons/hicolor/64x64/apps + } else:!isEmpty(MEEGO_VERSION_MAJOR) { + desktopfile.files = $${TARGET}_harmattan.desktop desktopfile.path = /usr/share/applications + icon.files = $${TARGET}80.png + icon.path = /usr/share/icons/hicolor/80x80/apps + } else { # Assumed to be a Desktop Unix copyCommand = for(deploymentfolder, DEPLOYMENTFOLDERS) { source = $$MAINPROFILEPWD/$$eval($${deploymentfolder}.source) @@ -92,16 +99,18 @@ symbian { export($$itempath) INSTALLS += $$item } - icon.files = $${TARGET}.png - icon.path = /usr/share/icons/hicolor/64x64/apps - desktopfile.files = $${TARGET}.desktop + + !isEmpty(desktopfile.path) { + export(icon.files) + export(icon.path) + export(desktopfile.files) + export(desktopfile.path) + INSTALLS += icon desktopfile + } + target.path = $${installPrefix}/bin - export(icon.files) - export(icon.path) - export(desktopfile.files) - export(desktopfile.path) export(target.path) - INSTALLS += desktopfile icon target + INSTALLS += target } export (ICON) diff --git a/googlelatitude.cpp b/googlelatitude.cpp deleted file mode 100644 index 47e90c5..0000000 --- a/googlelatitude.cpp +++ /dev/null @@ -1,178 +0,0 @@ -#include "googlelatitude.h" -#include - -GoogleLatitude::GoogleLatitude(QObject *parent) : - QObject(parent), - OauthSettings(this), - OAuthGetRequestToken("https://www.google.com/accounts/OAuthGetRequestToken"), - OAuthAuthorizeToken("https://www.google.com/accounts/OAuthAuthorizeToken"), - OAuthGetAccessToken("https://www.google.com/accounts/OAuthGetAccessToken"), - CurrentLocation("https://www.googleapis.com/latitude/v1/currentLocation"), - UserAuthorization(""), - ConsumerKey("1062862865804.apps.googleusercontent.com"), - ConsumerSecretKey("EYQaRaUJ9Fznw8mPMor660Kx"), - CurrentLatitude(0), - CurrentLongitude(0), - CurrentAccuracy(0) { - qDebug() << "* GoogleLatitude::GoogleLatitude"; - OauthRequest = new KQOAuthRequest(this); - OauthManager = new KQOAuthManager(this); - GoogleOauthAdditional.insert("scope", "https://www.googleapis.com/auth/latitude"); - GoogleOauthAdditional.insert("xoauth_displayname", "LatitudeUpdater"); - - connect(OauthManager, SIGNAL(temporaryTokenReceived(QString,QString)), - this, SLOT(onTemporaryTokenReceived(QString, QString))); - - connect(OauthManager, SIGNAL(authorizationReceived(QString,QString)), - this, SLOT(onAuthorizationReceived(QString, QString))); - - connect(OauthManager, SIGNAL(accessTokenReceived(QString,QString)), - this, SLOT(onAccessTokenReceived(QString,QString))); - - connect(OauthManager, SIGNAL(requestReady(QByteArray)), - this, SLOT(onRequestReady(QByteArray))); - - connect(OauthManager, SIGNAL(authorizedRequestDone()), - this, SLOT(onAuthorizedRequestDone())); - - connect(this, SIGNAL(gotToken()), - this, SLOT(getCurrentLocation())); - - connect(this, SIGNAL(notToken()), - this, SLOT(onNotToken())); - - connect(this, SIGNAL(gotToken()), - this, SLOT(onGotToken())); - - connect(this, SIGNAL(needAuth()), - this, SLOT(onNeedAuth())); -} - -GoogleLatitude::~GoogleLatitude() { - qDebug() << "* GoogleLatitude::~GoogleLatitude"; - delete OauthManager; - delete OauthRequest; -} - -void GoogleLatitude::getAccess() { - qDebug() << "* GoogleLatitude::getAccess"; - if ( OauthSettings.value("oauth_token").isNull() || OauthSettings.value("oauth_token_secret").isNull() ) { - OauthRequest->clearRequest(); - OauthRequest->initRequest(KQOAuthRequest::TemporaryCredentials, OAuthGetRequestToken); - OauthRequest->setConsumerKey(ConsumerKey); - OauthRequest->setConsumerSecretKey(ConsumerSecretKey); - OauthRequest->setAdditionalParameters(GoogleOauthAdditional); - OauthManager->setHandleUserAuthorization(true); - OauthRequest->setHttpMethod(KQOAuthRequest::POST); - OauthManager->executeRequest(OauthRequest); - } else { - emit gotToken(); - } -} - -void GoogleLatitude::getCurrentLocation() { - qDebug() << "* GoogleLatitude::getCurrentLocation"; - if ( OauthSettings.value("oauth_token").isNull() || OauthSettings.value("oauth_token_secret").isNull() ) { - emit notToken(); - } else { - OauthRequest->clearRequest(); - OauthRequest->initRequest(KQOAuthRequest::AuthorizedRequest, CurrentLocation); - OauthRequest->setToken(OauthSettings.value("oauth_token").toString()); - OauthRequest->setTokenSecret(OauthSettings.value("oauth_token_secret").toString()); - OauthRequest->setConsumerKey(ConsumerKey); - OauthRequest->setConsumerSecretKey(ConsumerSecretKey); - OauthRequest->setHttpMethod(KQOAuthRequest::GET); - OauthManager->executeRequest(OauthRequest); - } -} - -void GoogleLatitude::sendCurrentLocation() { - qDebug() << "* GoogleLatitude::sendCurrentLocation"; - if (OauthSettings.value("oauth_token").isNull() || OauthSettings.value("oauth_token_secret").isNull()) { - emit notToken(); - } else { - if (abs(CurrentLatitude) <= 0.01) return; - if (abs(CurrentLongitude) <= 0.01) return; - if (abs(CurrentAccuracy) <= 0.01) return; - - QNetworkConfigurationManager mgr; - if (!OauthSettings.value("net_auto").toBool() && !mgr.isOnline()) { - qDebug() << "* GoogleLatitude::sendCurrentLocation" << "offline"; - return; - } - - QByteArray json_location; - json_location = "{\"data\": {\"kind\":\"latitude#location\","; - json_location += QString("\"latitude\":%1,").arg(CurrentLatitude); - json_location += QString("\"longitude\":%1,").arg(CurrentLongitude); - json_location += QString("\"accuracy\":%1").arg(CurrentAccuracy); - json_location += "}}"; - qDebug() << "json_location" << json_location; - - OauthRequest->clearRequest(); - OauthRequest->initRequest(KQOAuthRequest::AuthorizedRequest, CurrentLocation); - OauthRequest->setToken(OauthSettings.value("oauth_token").toString()); - OauthRequest->setTokenSecret(OauthSettings.value("oauth_token_secret").toString()); - OauthRequest->setConsumerKey(ConsumerKey); - OauthRequest->setConsumerSecretKey(ConsumerSecretKey); - OauthRequest->setHttpMethod(KQOAuthRequest::POST); - OauthRequest->setContentType("application/json"); - OauthRequest->setRawData(json_location); - OauthManager->executeRequest(OauthRequest); - } -} - -void GoogleLatitude::setCurrentLocation(double lat, double lon, double acc) { - qDebug() << "* GoogleLatitude::setCurrentLocation" << lat << lon << acc; - CurrentLatitude = lat; - CurrentLongitude = lon; - CurrentAccuracy = acc; -} - -QUrl GoogleLatitude::getUserAuthorization() { - qDebug() << "* GoogleLatitude::getUserAuthorization"; - return UserAuthorization; -} - -void GoogleLatitude::setAutoConnect(bool status) { - qDebug() << "* GoogleLatitude::setAutoConnect" << status; - OauthSettings.setValue("net_auto", status); -} - -bool GoogleLatitude::getAutoConnect() { - qDebug() << "* GoogleLatitude::getAutoConnect"; - return OauthSettings.value("net_auto").toBool(); -} - -void GoogleLatitude::onTemporaryTokenReceived(QString temporaryToken, QString temporaryTokenSecret) { - qDebug() << "* GoogleLatitude::onTemporaryTokenReceived" << temporaryToken << temporaryTokenSecret; - if( OauthManager->lastError() == KQOAuthManager::NoError) { - UserAuthorization = OauthManager->getUserAuthorization(OAuthAuthorizeToken); - qDebug() << "* GoogleLatitude::onTemporaryTokenReceived" << "UserAuthorization" << UserAuthorization; - emit needAuth(); - } -} - -void GoogleLatitude::onAuthorizationReceived(QString token, QString verifier) { - qDebug() << "* GoogleLatitude::onAuthorizationReceived" << token << verifier; - OauthManager->getUserAccessTokens(OAuthGetAccessToken); - if(OauthManager->lastError() != KQOAuthManager::NoError) { - emit notToken(); - } -} - -void GoogleLatitude::onAccessTokenReceived(QString token, QString tokenSecret) { - qDebug() << "* GoogleLatitude::onAccessTokenReceived" << token << tokenSecret; - OauthSettings.setValue("oauth_token", token); - OauthSettings.setValue("oauth_token_secret", tokenSecret); - emit gotToken(); -} - -void GoogleLatitude::onRequestReady(QByteArray response) { - qDebug() << "* GoogleLatitude::onRequestReady" << response; - if (response.contains("Invalid Credentials") ) { - OauthSettings.remove("oauth_token"); - OauthSettings.remove("oauth_token_secret"); - emit notToken(); - } -} diff --git a/googlelatitude.h b/googlelatitude.h deleted file mode 100644 index 1f99a24..0000000 --- a/googlelatitude.h +++ /dev/null @@ -1,57 +0,0 @@ -#ifndef GOOGLELATITUDE_H -#define GOOGLELATITUDE_H - -#include -#include -#include -#include - -class GoogleLatitude : public QObject { - Q_OBJECT - -public: - GoogleLatitude(QObject *parent = 0); - ~GoogleLatitude(); - -public slots: - void getAccess(); - void getCurrentLocation(); - void sendCurrentLocation(); - void setCurrentLocation(double la, double lo, double ac); - QUrl getUserAuthorization(); - void setAutoConnect(bool status); - bool getAutoConnect(); - -private slots: - void onTemporaryTokenReceived(QString temporaryToken, QString temporaryTokenSecret); - void onAuthorizationReceived(QString token, QString verifier); - void onAccessTokenReceived(QString token, QString tokenSecret); - void onRequestReady(QByteArray response); - void onAuthorizedRequestDone() { qDebug() << "* GoogleLatitude::onAuthorizedRequestDone"; } - void onNotToken() { qDebug() << "* GoogleLatitude::onNotToken"; } - void onGotToken() { qDebug() << "* GoogleLatitude::onGotToken"; } - void onNeedAuth() { qDebug() << "* GoogleLatitude::onNeedAuth"; } - -signals: - void notToken(); - void gotToken(); - void needAuth(); - -private: - QSettings OauthSettings; - QUrl OAuthGetRequestToken; - QUrl OAuthAuthorizeToken; - QUrl OAuthGetAccessToken; - QUrl CurrentLocation; - QUrl UserAuthorization; - KQOAuthParameters GoogleOauthAdditional; - QString ConsumerKey; - QString ConsumerSecretKey; - double CurrentLatitude; - double CurrentLongitude; - double CurrentAccuracy; - KQOAuthManager *OauthManager; - KQOAuthRequest *OauthRequest; -}; - -#endif // GOOGLELATITUDE_H diff --git a/gpscontrol.cpp b/gpscontrol.cpp deleted file mode 100644 index 2b900c9..0000000 --- a/gpscontrol.cpp +++ /dev/null @@ -1,131 +0,0 @@ -#include "gpscontrol.h" -#include - -GpsControl::GpsControl(QObject *parent) : - QObject(parent), - GpsSettings(this), - GpsSource(QGeoPositionInfoSource::createDefaultSource(this)), - GpsPosition(), - GpsTimeout(this), - GpsInterval(this) { - qDebug() << "* GpsControl::GpsControl"; - - GpsTimeout.setSingleShot(true); - GpsInterval.setSingleShot(true); - - setPositioningMethod(GpsSettings.value("gps_method", "cell").toString()); - setTimeOut(GpsSettings.value("gps_timeout", 60).toInt()); - setInterval(GpsSettings.value("gps_interval", 15*60).toInt()); - - if (!GpsSource) qDebug() << "* GpsControl::GpsControl" << "Not GpsSource"; - - if (GpsSource) connect(GpsSource, SIGNAL(positionUpdated(QGeoPositionInfo)), - this, SLOT(setCurrentLocation(QGeoPositionInfo))); - - connect(this, SIGNAL(gotUpdate()), - this, SLOT(onGotUpdate())); - - connect(this, SIGNAL(gotFix()), - this, SLOT(onGotFix())); - -} - -void GpsControl::setTimeOut(int sec) { - qDebug() << "* GpsControl::setTimeOut" << sec; - GpsSettings.setValue("gps_timeout", sec); -} - -int GpsControl::getTimeOut() { - qDebug() << "* GpsControl::getTimeOut"; - return GpsSettings.value("gps_timeout").toInt(); -} - -void GpsControl::setInterval(int sec) { - qDebug() << "* GpsControl::setInterval" << sec; - GpsSettings.setValue("gps_interval", sec); -} - -int GpsControl::getInterval() { - qDebug() << "* GpsControl::getInterval"; - return GpsSettings.value("gps_interval").toInt(); -} - -void GpsControl::setPositioningMethod(QString method) { - qDebug() << "* GpsControl::setPositioningMethod" << method; - if (method == "gps") { - GpsSettings.setValue("gps_method", method); - if (GpsSource) GpsSource->setPreferredPositioningMethods( - QGeoPositionInfoSource::SatellitePositioningMethods); - } - if (method == "cell") { - GpsSettings.setValue("gps_method", method); - if (GpsSource) GpsSource->setPreferredPositioningMethods( - QGeoPositionInfoSource::NonSatellitePositioningMethods); - } - if (method == "all") { - GpsSettings.setValue("gps_method", method); - if (GpsSource) GpsSource->setPreferredPositioningMethods( - QGeoPositionInfoSource::AllPositioningMethods); - } -} - -void GpsControl::startUpdates() { - qDebug() << "* GpsControl::startUpdates"; - - GpsTimeout.singleShot(GpsSettings.value("gps_timeout").toInt()*1000, - this, SLOT(stopUpdates())); - GpsInterval.singleShot(GpsSettings.value("gps_interval").toInt()*1000, - this, SLOT(startUpdates())); - - QNetworkConfigurationManager mgr; - if (!GpsSettings.value("net_auto").toBool() && !mgr.isOnline()) { - qDebug() << "* GpsControl::startUpdates" << "offline"; - return; - } - - if (GpsSource) GpsSource->startUpdates(); -} - -void GpsControl::stopUpdates(bool force) { - qDebug() << "* GpsControl::stopUpdates" << force; - - if (GpsSource) GpsSource->stopUpdates(); - - if (force) { - GpsTimeout.stop(); - GpsInterval.stop(); - } else { - if (GpsSource && GpsSource->lastKnownPosition(GpsSettings.value("gps_method") - == "gps" ? true : false).isValid() ) { - emit gotFix(); - } - } -} - -double GpsControl::getCurrentLatitude() { - qDebug() << "* GpsControl::getCurrentLatitude"; - return GpsPosition.coordinate().latitude(); -} - -double GpsControl::getCurrentLongitude() { - qDebug() << "* GpsControl::getCurrentLongitude"; - return GpsPosition.coordinate().longitude(); -} - -double GpsControl::getCurrentAccuracy() { - qDebug() << "* GpsControl::getCurrentAccuracy"; - return GpsPosition.attribute(QGeoPositionInfo::HorizontalAccuracy); -} - -unsigned int GpsControl::getCurrentTimestamp() { - qDebug() << "* GpsControl::getCurrentTimestamp"; - return GpsPosition.timestamp().toTime_t(); -} - -void GpsControl::setCurrentLocation(QGeoPositionInfo pos) { - qDebug() << "* GpsControl::setCurrentLocation" << pos; - if (pos.isValid()) { - GpsPosition = pos; - emit gotUpdate(); - } -} diff --git a/gpscontrol.h b/gpscontrol.h deleted file mode 100644 index 7a7f6f5..0000000 --- a/gpscontrol.h +++ /dev/null @@ -1,49 +0,0 @@ -#ifndef GPSCONTROL_H -#define GPSCONTROL_H - -#include -#include -#include -#include -#include -#include - -using namespace QtMobility; - -class GpsControl : public QObject { - Q_OBJECT -public: - GpsControl(QObject *parent = 0); - -signals: - void gotUpdate(); - void gotFix(); - -public slots: - void setTimeOut(int sec); - int getTimeOut(); - void setInterval(int sec); - int getInterval(); - void setPositioningMethod(QString method); - QString getPositioningMethod() {return GpsSettings.value("gps_method").toString();} - void startUpdates(); - void stopUpdates(bool force = false); - double getCurrentLatitude(); - double getCurrentLongitude(); - double getCurrentAccuracy(); - unsigned int getCurrentTimestamp(); - -private slots: - void setCurrentLocation(QGeoPositionInfo pos); - void onGotUpdate() { qDebug() << "* GpsControl::ongotUpdate"; } - void onGotFix() { qDebug() << "* GpsControl::ongotFix"; } - -private: - QSettings GpsSettings; - QGeoPositionInfoSource *GpsSource; - QGeoPositionInfo GpsPosition; - QTimer GpsTimeout; - QTimer GpsInterval; -}; - -#endif // GPSCONTROL_H diff --git a/latitude.qml/MainPage.qml b/latitude.qml/MainPage.qml new file mode 100644 index 0000000..caeb84f --- /dev/null +++ b/latitude.qml/MainPage.qml @@ -0,0 +1,202 @@ +import QtQuick 1.0 +import com.meego 1.0 + +Page { + id: mainPage + orientationLock: PageOrientation.LockLandscape + Column { + spacing: 16 + Row { + width: rootWindow.width + Button { + id: do_auth + width: rootWindow.width / 3 + text: "Auth" + enabled: false + onClicked: { + Qt.openUrlExternally(latitude.getUserAuthorization()) + } + } + Button { + id: do_start + width: rootWindow.width / 3 + text: "Start" + enabled: false + onClicked: { + do_start.enabled = false; + do_stop.enabled = true; + if (!demonio.demonio_start()) { + gps.startUpdates() + } + } + } + Button { + id: do_stop + width: rootWindow.width / 3 + text: "Stop" + enabled: false + onClicked: { + do_start.enabled = true; + do_stop.enabled = false; + if (!demonio.demonio_stop()) { + gps.stopUpdates(true) + } + } + } + } + Row { + Label { + id: method_label + text: "Method" + width: rootWindow.width / 4 + anchors.verticalCenter: method_button.verticalCenter + } + ButtonRow { + id: method_button + width: rootWindow.width * 2 / 3 + Button { + id: method_cell + text: "Cell Tower" + checked: gps.getPositioningMethod() == "cell" ? true : false + onClicked: gps.setPositioningMethod("cell") + } + Button { + id: method_all + text: "Both" + checked: gps.getPositioningMethod() == "all" ? true : false + onClicked: gps.setPositioningMethod("all") + } + Button { + id: method_agps + text: "Only GPS" + checked: gps.getPositioningMethod() == "gps" ? true : false + onClicked: gps.setPositioningMethod("gps") + } + } + } + Row { + Label { + id: timeout_label + text: "Time Out" + width: rootWindow.width / 4 + anchors.verticalCenter: timeout_slider.verticalCenter + } + Slider { + id: timeout_slider + width: rootWindow.width / 2 + valueIndicatorVisible: true + minimumValue: 5 + maximumValue: 120 + stepSize: 5 + value: gps.getTimeOut() + } + Label { + id: timeout_value + text: timeout_slider.value + " seg." + width: rootWindow.width / 4 + anchors.verticalCenter: timeout_slider.verticalCenter + } + Connections { + target: timeout_slider + onValueChanged: { + timeout_value.text = timeout_slider.value + " seg." + gps.setTimeOut(timeout_slider.value) + } + } + } + Row { + Label { + id: interval_label + text: "Interval" + width: rootWindow.width / 4 + anchors.verticalCenter: interval_slider.verticalCenter + } + Slider { + id: interval_slider + width: rootWindow.width / 2 + valueIndicatorVisible: true + minimumValue: 5 + maximumValue: 60 + stepSize: 5 + value: gps.getInterval() / 60 + } + Label { + id: interval_value + text: interval_slider.value + " min." + width: rootWindow.width / 4 + anchors.verticalCenter: interval_slider.verticalCenter + } + Connections { + target: interval_slider + onValueChanged: { + interval_value.text = interval_slider.value + " min." + gps.setInterval(interval_slider.value*60) + } + } + } + Row { + Label { + id: connect_label + text: "Auto Connect" + width: rootWindow.width / 4 + anchors.verticalCenter: connect_switch.verticalCenter + } + Switch { + id: connect_switch + width: rootWindow.width / 2 + checked: latitude.getAutoConnect() ? true : false + onCheckedChanged: { + connect_value.text = checked + latitude.setAutoConnect(checked) + } + } + Label { + id: connect_value + text: connect_switch.checked + width: rootWindow.width / 4 + anchors.verticalCenter: connect_switch.verticalCenter + } + } + + Connections { + target: latitude + onGotToken: { + do_auth.enabled = false; + if (demonio.demonio_status()) { + do_start.enabled = false; + do_stop.enabled = true; + } else { + do_start.enabled = true; + do_stop.enabled = false; + } + } + } + Connections { + target: latitude + onNotToken: { + do_auth.enabled = true; + do_start.enabled = false; + do_stop.enabled = false; + if (!demonio.demonio_stop()) { + gps.stopUpdates(true) + } + } + } + Connections { + target: latitude + onNeedAuth: { + do_auth.enabled = true; + } + } + + Connections { + target: gps + onGotFix: { + latitude.setCurrentLocation(gps.getCurrentLatitude(), + gps.getCurrentLongitude(), + gps.getCurrentAccuracy()) + latitude.sendCurrentLocation() + } + } + } +} diff --git a/latitude.qml/latitude.qml.pro b/latitude.qml/latitude.qml.pro new file mode 100644 index 0000000..2635e0d --- /dev/null +++ b/latitude.qml/latitude.qml.pro @@ -0,0 +1,26 @@ +TEMPLATE = app +TARGET = latitude.qml +target.path = /opt/linfati.com/bin/ +INSTALLS += target + +QT += network +CONFIG += mobility +MOBILITY += location + +INCLUDEPATH += ../liblatitudeupdater +INCLUDEPATH += ../libkqoauth + +LIBS += ../liblocationmaemo5/liblocationmaemo5.a +LIBS += ../liblatitudeupdater/liblatitudeupdater.a +LIBS += ../libkqoauth/libkqoauth.a + +QT += declarative +HEADERS += qml.h +SOURCES += qml.cpp main.cpp +RESOURCES += resouses.qrc +OTHER_FILES += main.qml MainPage.qml + +# enable booster +CONFIG += qdeclarative-boostable +QMAKE_CXXFLAGS += -fPIC -fvisibility=hidden -fvisibility-inlines-hidden +QMAKE_LFLAGS += -pie -rdynamic diff --git a/latitude.qml/main.cpp b/latitude.qml/main.cpp new file mode 100644 index 0000000..1614a09 --- /dev/null +++ b/latitude.qml/main.cpp @@ -0,0 +1,16 @@ +#include +#include "qml.h" + +Q_DECL_EXPORT int main(int argc, char *argv[]) { + qDebug() << "* Main QML"; + QCoreApplication::setOrganizationName("linfati.com"); + QCoreApplication::setOrganizationDomain("linfati.com"); + QCoreApplication::setApplicationName("latitudeupdater"); + + QApplication lu(argc, argv); + + LatitudeQML mygui; + mygui.showFullScreen(); + + return lu.exec(); +} diff --git a/latitude.qml/main.qml b/latitude.qml/main.qml new file mode 100644 index 0000000..6655bf5 --- /dev/null +++ b/latitude.qml/main.qml @@ -0,0 +1,12 @@ +import QtQuick 1.0 +import com.meego 1.0 + +PageStackWindow { + id: rootWindow + initialPage: mainPage + MainPage { + id: mainPage + } + showToolBar: false + showStatusBar: true +} diff --git a/latitude.qml/qml.cpp b/latitude.qml/qml.cpp new file mode 100644 index 0000000..95981ec --- /dev/null +++ b/latitude.qml/qml.cpp @@ -0,0 +1,18 @@ +#include "qml.h" +#include + +LatitudeQML::LatitudeQML(QDeclarativeView *parent) : + QDeclarativeView(parent), + latitude(this), + gps(this), + demonio("/opt/linfati.com/bin/latituded"), + cli(this) { + qDebug() << "* LatitudeQML::LatitudeQML"; + + rootContext()->setContextProperty("latitude", &latitude); + rootContext()->setContextProperty("gps", &gps); + rootContext()->setContextProperty("demonio", this); + setSource(QUrl("qrc:/main.qml")); + + latitude.getAccess(); +} diff --git a/latitude.qml/qml.h b/latitude.qml/qml.h new file mode 100644 index 0000000..a23d734 --- /dev/null +++ b/latitude.qml/qml.h @@ -0,0 +1,55 @@ +#ifndef LatitudeQML_H +#define LatitudeQML_H + +#include +#include +#include +#include +#include +#include +#include "googlelatitude.h" +#include "gpscontrol.h" + +class LatitudeQML : public QDeclarativeView { + Q_OBJECT +public: + LatitudeQML(QDeclarativeView *parent = 0); + +signals: + +public slots: + bool demonio_status() { + qDebug() << "LatitudeQML::demonio_status"; + if (system("killall -0 latituded 2> /dev/null" )) { + return false; + } + return true; + } + bool demonio_start() { + qDebug() << "LatitudeQML::demonio_start"; + if (demonio.exists()) { + cli.startDetached(demonio.fileName()); + return true; + } + qDebug() << "LatitudeQML:: demonio none"; + return false; + } + bool demonio_stop() { + qDebug() << "LatitudeQML::demonio_stop"; + if (demonio.exists()) { + qDebug() << "LatitudeQML:: demonio kill" << system("killall latituded 2> /dev/null"); + return true; + } + return false; + } + +private slots: + +private: + GoogleLatitude latitude; + GpsControl gps; + QFile demonio; + QProcess cli; +}; + +#endif // LatitudeQML_H diff --git a/latitude.qml/resouses.qrc b/latitude.qml/resouses.qrc new file mode 100644 index 0000000..44f1eb8 --- /dev/null +++ b/latitude.qml/resouses.qrc @@ -0,0 +1,6 @@ + + + main.qml + MainPage.qml + + diff --git a/latitude.qt/latitude.qt.pro b/latitude.qt/latitude.qt.pro new file mode 100644 index 0000000..ba96b9b --- /dev/null +++ b/latitude.qt/latitude.qt.pro @@ -0,0 +1,18 @@ +TEMPLATE = app +TARGET = latitude.qt +target.path = /opt/linfati.com/bin/ +INSTALLS += target + +QT += network +CONFIG += mobility +MOBILITY += location + +INCLUDEPATH += ../liblatitudeupdater +INCLUDEPATH += ../libkqoauth + +LIBS += ../liblocationmaemo5/liblocationmaemo5.a +LIBS += ../liblatitudeupdater/liblatitudeupdater.a +LIBS += ../libkqoauth/libkqoauth.a + +HEADERS += widget.h +SOURCES += widget.cpp main.cpp diff --git a/latitude.qt/main.cpp b/latitude.qt/main.cpp new file mode 100644 index 0000000..c403fbf --- /dev/null +++ b/latitude.qt/main.cpp @@ -0,0 +1,16 @@ +#include +#include "widget.h" + +int main(int argc, char *argv[]) { + qDebug() << "* Main Widget"; + QCoreApplication::setOrganizationName("linfati.com"); + QCoreApplication::setOrganizationDomain("linfati.com"); + QCoreApplication::setApplicationName("latitudeupdater"); + + QApplication lu(argc, argv); + + LatitudeGUI mygui; + mygui.showMaximized(); + + return lu.exec(); +} diff --git a/latitude.qt/widget.cpp b/latitude.qt/widget.cpp new file mode 100644 index 0000000..86d8e46 --- /dev/null +++ b/latitude.qt/widget.cpp @@ -0,0 +1,116 @@ +#include "widget.h" + +LatitudeGUI::LatitudeGUI(QWidget *parent) : + QWidget(parent), + latitude(this), + gps(this), + demonio("/opt/linfati.com/bin/latituded"), + cli(this) { + qDebug() << "* LatitudeGUI::LatitudeGUI"; + setWindowTitle(tr("LatitudeUpdater")); + + // row 1 + layout_row1 = new QHBoxLayout(); + do_oauth = new QPushButton("Auth"); + do_start = new QPushButton("Start"); + do_stop = new QPushButton("Stop"); + layout_row1->addWidget(do_oauth); + layout_row1->addWidget(do_start); + layout_row1->addWidget(do_stop); + + do_oauth->setDisabled(true); + do_start->setDisabled(true); + do_stop->setDisabled(true); + + connect(do_oauth, SIGNAL(clicked()), this, SLOT(gl_webauth()) ); + connect(do_start, SIGNAL(clicked()), this, SLOT(gps_start()) ); + connect(do_stop, SIGNAL(clicked()), this, SLOT(gps_stop()) ); + + connect(&latitude, SIGNAL(gotToken()), this, SLOT(gl_GotToken()) ); + connect(&latitude, SIGNAL(notToken()), this, SLOT(gl_NotToken()) ); + connect(&latitude, SIGNAL(needAuth()), this, SLOT(gl_needAuth()) ); + + connect(&gps, SIGNAL(gotFix()), this, SLOT(set_latitude()) ); + + // row 2 + layout_row2 = new QHBoxLayout(); + gps_group = new QButtonGroup(); + gps_method = new QLabel("Method"); + gps_cell = new QRadioButton("Cell Tower"); + gps_both = new QRadioButton("Both"); + gps_agps = new QRadioButton("Only Gps"); + gps_group->addButton(gps_cell); + gps_group->addButton(gps_both); + gps_group->addButton(gps_agps); + layout_row2->addWidget(gps_method); + layout_row2->addWidget(gps_cell); + layout_row2->addWidget(gps_both); + layout_row2->addWidget(gps_agps); + + if ( gps.getPositioningMethod() == "gps" ) gps_agps->setChecked(true); + if ( gps.getPositioningMethod() == "cell" ) gps_cell->setChecked(true); + if ( gps.getPositioningMethod() == "all" ) gps_both->setChecked(true); + + connect(gps_cell, SIGNAL(clicked()), this, SLOT(set_method()) ); + connect(gps_both, SIGNAL(clicked()), this, SLOT(set_method()) ); + connect(gps_agps, SIGNAL(clicked()), this, SLOT(set_method()) ); + + // row 3 + layout_row3 = new QHBoxLayout(); + gps_to_label = new QLabel("Time Out"); + gps_to_slider = new QSlider(Qt::Horizontal); + gps_to_slider->setSingleStep(5); + gps_to_slider->setRange(5, 120); + gps_to_slider->setValue(gps.getTimeOut()); + gps_to_slider_value = new QLabel(QString("%1 sec.").arg(gps_to_slider->value())); + layout_row3->addWidget(gps_to_label); + layout_row3->addWidget(gps_to_slider); + layout_row3->addWidget(gps_to_slider_value); + + connect(gps_to_slider, SIGNAL(valueChanged(int)), this, SLOT(set_to(int)) ); + + // row 4 + layout_row4 = new QHBoxLayout(); + gps_i_label = new QLabel("Interval"); + + gps_i_slider = new QSlider(Qt::Horizontal); + gps_i_slider->setSingleStep(5); + gps_i_slider->setRange(5, 60); + gps_i_slider->setValue(gps.getInterval()/60); + gps_i_slider_value = new QLabel(QString("%1 min.").arg(gps_i_slider->value())); + layout_row4->addWidget(gps_i_label); + layout_row4->addWidget(gps_i_slider); + layout_row4->addWidget(gps_i_slider_value); + + connect(gps_i_slider, SIGNAL(valueChanged(int)), this, SLOT(set_i(int)) ); + + // row 5 + layout_row5 = new QHBoxLayout(); + gps_ac_group = new QButtonGroup(); + gps_ac_label = new QLabel("Auto Connect"); + gps_ac_yes = new QRadioButton("Yes"); + gps_ac_not = new QRadioButton("No"); + gps_ac_group->addButton(gps_ac_yes); + gps_ac_group->addButton(gps_ac_not); + layout_row5->addWidget(gps_ac_label); + layout_row5->addWidget(gps_ac_yes); + layout_row5->addWidget(gps_ac_not); + + if ( latitude.getAutoConnect() == true ) gps_ac_yes->setChecked(true); + if ( latitude.getAutoConnect() == false ) gps_ac_not->setChecked(true); + + connect(gps_ac_yes, SIGNAL(clicked()), this, SLOT(set_ac_yes()) ); + connect(gps_ac_not, SIGNAL(clicked()), this, SLOT(set_ac_not()) ); + + // gui + layout_gui = new QVBoxLayout(); + layout_gui->addLayout(layout_row1); + layout_gui->addLayout(layout_row2); + layout_gui->addLayout(layout_row3); + layout_gui->addLayout(layout_row4); + layout_gui->addLayout(layout_row5); + + setLayout(layout_gui); + latitude.getAccess(); +} + diff --git a/latitude.qt/widget.h b/latitude.qt/widget.h new file mode 100644 index 0000000..eb1c3e3 --- /dev/null +++ b/latitude.qt/widget.h @@ -0,0 +1,149 @@ +#ifndef LATITUDEGUI_H +#define LATITUDEGUI_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "googlelatitude.h" +#include "gpscontrol.h" + +class LatitudeGUI : public QWidget { + Q_OBJECT +public: + LatitudeGUI(QWidget *parent = 0); + +signals: + +public slots: + +private slots: + void gl_GotToken() { + qDebug() << "* LatitudeGUI::gl_GotToken"; + do_oauth->setDisabled(true); + if (system("killall -0 latituded 2> /dev/null" )) { + do_start->setEnabled(true); + do_stop->setDisabled(true); + } else { + do_start->setDisabled(true); + do_stop->setEnabled(true); + } + } + void gl_NotToken() { + qDebug() << "* LatitudeGUI::gl_NotToken"; + do_oauth->setEnabled(true); + do_start->setDisabled(true); + do_stop->setDisabled(true); + gps.stopUpdates(true); + } + void gl_needAuth() { + qDebug() << "* LatitudeGUI::gl_needAuth"; + do_oauth->setEnabled(true); + } + void gl_webauth() { + qDebug() << "* LatitudeGUI::gl_webauth"; + QDesktopServices::openUrl(latitude.getUserAuthorization()); + } + void gps_start() { + qDebug() << "* LatitudeGUI::gps_start"; + do_start->setDisabled(true); + do_stop->setEnabled(true); + if (demonio.exists()) { + qDebug() << "* LatitudeGUI:: demonio"; + cli.startDetached(demonio.fileName()); + return; + } + qDebug() << "* LatitudeGUI:: demonio none"; + gps.startUpdates(); + } + void gps_stop() { + qDebug() << "* LatitudeGUI::gps_stop"; + do_start->setEnabled(true); + do_stop->setDisabled(true); + if (demonio.exists()) { + qDebug() << "* LatitudeGUI:: demonio kill" << system("killall latituded 2> /dev/null"); + } else { + gps.stopUpdates(true); + } + } + void set_latitude() { + qDebug() << "* LatitudeGUI::set_latitude"; + latitude.setCurrentLocation(gps.getCurrentLatitude(), + gps.getCurrentLongitude(), + gps.getCurrentAccuracy()); + latitude.sendCurrentLocation(); + } + void set_method() { + qDebug() << "* LatitudeGUI::set_method"; + if (gps_cell->isChecked()) gps.setPositioningMethod("cell"); + if (gps_both->isChecked()) gps.setPositioningMethod("all"); + if (gps_agps->isChecked()) gps.setPositioningMethod("gps"); + } + void set_to(int value) { + qDebug() << "* LatitudeGUI::set_to()" << value; + gps.setTimeOut(value); + gps_to_slider_value->setText(QString("%1 sec.").arg(value)); + + } + void set_i(int value) { + qDebug() << "* LatitudeGUI::set_i()" << value; + gps.setInterval(value*60); + gps_i_slider_value->setText(QString("%1 min.").arg(value)); + } + void set_ac_yes() { + qDebug() << "* LatitudeGUI::set_ac_yes"; + latitude.setAutoConnect(true); + } + void set_ac_not() { + qDebug() << "* LatitudeGUI::set_ac_not"; + latitude.setAutoConnect(false); + } + +private: + GoogleLatitude latitude; + GpsControl gps; + QFile demonio; + QProcess cli; + + QHBoxLayout *layout_row1; + QPushButton *do_oauth; + QPushButton *do_start; + QPushButton *do_stop; + + QHBoxLayout *layout_row2; + QLabel *gps_method; + QButtonGroup *gps_group; + QRadioButton *gps_cell; + QRadioButton *gps_both; + QRadioButton *gps_agps; + + QHBoxLayout *layout_row3; + QLabel *gps_to_label; + QSlider *gps_to_slider; + QLabel *gps_to_slider_value; + + QHBoxLayout *layout_row4; + QLabel *gps_i_label; + QSlider *gps_i_slider; + QLabel *gps_i_slider_value; + + QHBoxLayout *layout_row5; + QLabel *gps_ac_label; + QButtonGroup *gps_ac_group; + QRadioButton *gps_ac_yes; + QRadioButton *gps_ac_not; + + QVBoxLayout *layout_gui; +}; + +#endif // LATITUDEGUI_H + diff --git a/latituded/daemon.cpp b/latituded/daemon.cpp new file mode 100644 index 0000000..a2f6601 --- /dev/null +++ b/latituded/daemon.cpp @@ -0,0 +1,17 @@ +#include "daemon.h" + +LatitudeDaemon::LatitudeDaemon(QObject *parent) : + QObject(parent), + latitude(this), + gps(this) { + qDebug() << "* LatitudeDaemon::LatitudeDaemon"; + + connect(&latitude, SIGNAL(gotToken()), this, SLOT(gl_GotToken()) ); + connect(&latitude, SIGNAL(notToken()), this, SLOT(gl_NotToken()) ); + connect(&latitude, SIGNAL(needAuth()), this, SLOT(gl_needAuth()) ); + + connect(&gps, SIGNAL(gotUpdate()), this, SLOT(get_gps()) ); + connect(&gps, SIGNAL(gotFix()), this, SLOT(set_latitude()) ); + + latitude.getAccess(); +} diff --git a/latituded/daemon.h b/latituded/daemon.h new file mode 100644 index 0000000..d18a673 --- /dev/null +++ b/latituded/daemon.h @@ -0,0 +1,54 @@ +#ifndef LATITUDEDAEMON_H +#define LATITUDEDAEMON_H + +#include +#include +#include "googlelatitude.h" +#include "gpscontrol.h" + +class LatitudeDaemon : public QObject { + Q_OBJECT +public: + LatitudeDaemon(QObject *parent = 0); +signals: + +public slots: + +private slots: + void gl_GotToken() { + qDebug() << "LatitudeDaemon::gl_GotToken()"; + gps.startUpdates(); + } + void gl_NotToken() { + qDebug() << "LatitudeDaemon::gl_NotToken()"; + QCoreApplication::exit(); + } + void gl_needAuth() { + qDebug() << "LatitudeDaemon::gl_needAuth()"; + QCoreApplication::exit(); + } + void get_gps() { + qDebug() << "LatitudeDaemon::get_gps()" + << gps.getCurrentLatitude() + << gps.getCurrentLongitude() + << gps.getCurrentAccuracy() + << gps.getCurrentTimestamp(); + } + void set_latitude() { + qDebug() << "LatitudeDaemon::set_latitude()" + << gps.getCurrentLatitude() + << gps.getCurrentLongitude() + << gps.getCurrentAccuracy() + << gps.getCurrentTimestamp(); + latitude.setCurrentLocation(gps.getCurrentLatitude(), + gps.getCurrentLongitude(), + gps.getCurrentAccuracy()); + latitude.sendCurrentLocation(); + } + +private: + GoogleLatitude latitude; + GpsControl gps; +}; + +#endif // LATITUDEDAEMON_H diff --git a/latituded/latituded.pro b/latituded/latituded.pro new file mode 100644 index 0000000..111a573 --- /dev/null +++ b/latituded/latituded.pro @@ -0,0 +1,18 @@ +TEMPLATE = app +TARGET = latituded +target.path = /opt/linfati.com/bin/ +INSTALLS += target + +QT += network +CONFIG += mobility +MOBILITY += location + +INCLUDEPATH += ../liblatitudeupdater +INCLUDEPATH += ../libkqoauth + +LIBS += ../liblocationmaemo5/liblocationmaemo5.a +LIBS += ../liblatitudeupdater/liblatitudeupdater.a +LIBS += ../libkqoauth/libkqoauth.a + +HEADERS += daemon.h +SOURCES += daemon.cpp main.cpp diff --git a/latituded/main.cpp b/latituded/main.cpp new file mode 100644 index 0000000..fe07d64 --- /dev/null +++ b/latituded/main.cpp @@ -0,0 +1,16 @@ +#include +#include "daemon.h" + +int main(int argc, char *argv[]) { + qDebug() << "* Main Daemon"; + QCoreApplication::setOrganizationName("linfati.com"); + QCoreApplication::setOrganizationDomain("linfati.com"); + QCoreApplication::setApplicationName("latitudeupdater"); + + QCoreApplication lu(argc, argv); + LatitudeDaemon mygui; + + Q_UNUSED(mygui) + + return lu.exec(); +} diff --git a/latitudedaemon.cpp b/latitudedaemon.cpp deleted file mode 100644 index 35a31e6..0000000 --- a/latitudedaemon.cpp +++ /dev/null @@ -1,17 +0,0 @@ -#include "latitudedaemon.h" - -LatitudeDaemon::LatitudeDaemon(QObject *parent) : - QObject(parent), - latitude(this), - gps(this) { - qDebug() << "* LatitudeDaemon::LatitudeDaemon"; - - connect(&latitude, SIGNAL(gotToken()), this, SLOT(gl_GotToken()) ); - connect(&latitude, SIGNAL(notToken()), this, SLOT(gl_NotToken()) ); - connect(&latitude, SIGNAL(needAuth()), this, SLOT(gl_needAuth()) ); - - connect(&gps, SIGNAL(gotUpdate()), this, SLOT(get_gps()) ); - connect(&gps, SIGNAL(gotFix()), this, SLOT(set_latitude()) ); - - latitude.getAccess(); -} diff --git a/latitudedaemon.h b/latitudedaemon.h deleted file mode 100644 index d18a673..0000000 --- a/latitudedaemon.h +++ /dev/null @@ -1,54 +0,0 @@ -#ifndef LATITUDEDAEMON_H -#define LATITUDEDAEMON_H - -#include -#include -#include "googlelatitude.h" -#include "gpscontrol.h" - -class LatitudeDaemon : public QObject { - Q_OBJECT -public: - LatitudeDaemon(QObject *parent = 0); -signals: - -public slots: - -private slots: - void gl_GotToken() { - qDebug() << "LatitudeDaemon::gl_GotToken()"; - gps.startUpdates(); - } - void gl_NotToken() { - qDebug() << "LatitudeDaemon::gl_NotToken()"; - QCoreApplication::exit(); - } - void gl_needAuth() { - qDebug() << "LatitudeDaemon::gl_needAuth()"; - QCoreApplication::exit(); - } - void get_gps() { - qDebug() << "LatitudeDaemon::get_gps()" - << gps.getCurrentLatitude() - << gps.getCurrentLongitude() - << gps.getCurrentAccuracy() - << gps.getCurrentTimestamp(); - } - void set_latitude() { - qDebug() << "LatitudeDaemon::set_latitude()" - << gps.getCurrentLatitude() - << gps.getCurrentLongitude() - << gps.getCurrentAccuracy() - << gps.getCurrentTimestamp(); - latitude.setCurrentLocation(gps.getCurrentLatitude(), - gps.getCurrentLongitude(), - gps.getCurrentAccuracy()); - latitude.sendCurrentLocation(); - } - -private: - GoogleLatitude latitude; - GpsControl gps; -}; - -#endif // LATITUDEDAEMON_H diff --git a/latitudeqml.cpp b/latitudeqml.cpp deleted file mode 100644 index 69b5ba8..0000000 --- a/latitudeqml.cpp +++ /dev/null @@ -1,20 +0,0 @@ -#include "latitudeqml.h" -#include - -LatitudeQML::LatitudeQML(QDeclarativeView *parent) : - QDeclarativeView(parent), - latitude(this), - gps(this), - demonio(QCoreApplication::applicationDirPath() - + QDir::separator() - + "LatitudeUpdaterDaemon"), - cli(this) { - qDebug() << "* LatitudeQML::LatitudeQML"; - - rootContext()->setContextProperty("latitude", &latitude); - rootContext()->setContextProperty("gps", &gps); - rootContext()->setContextProperty("demonio", this); - setSource(QUrl("qrc:/qml/main.qml")); - - latitude.getAccess(); -} diff --git a/latitudeqml.h b/latitudeqml.h deleted file mode 100644 index 82db1f4..0000000 --- a/latitudeqml.h +++ /dev/null @@ -1,55 +0,0 @@ -#ifndef LatitudeQML_H -#define LatitudeQML_H - -#include -#include -#include -#include -#include -#include -#include "googlelatitude.h" -#include "gpscontrol.h" - -class LatitudeQML : public QDeclarativeView { - Q_OBJECT -public: - LatitudeQML(QDeclarativeView *parent = 0); - -signals: - -public slots: - bool demonio_status() { - qDebug() << "LatitudeQML::demonio_status"; - if (system("killall -0 LatitudeUpdaterDaemon 2> /dev/null" )) { - return false; - } - return true; - } - bool demonio_start() { - qDebug() << "LatitudeQML::demonio_start"; - if (demonio.exists()) { - cli.startDetached(demonio.fileName()); - return true; - } - qDebug() << "LatitudeQML:: demonio none"; - return false; - } - bool demonio_stop() { - qDebug() << "LatitudeQML::demonio_stop"; - if (demonio.exists()) { - qDebug() << "LatitudeQML:: demonio kill" << system("killall LatitudeUpdaterDaemon 2> /dev/null"); - return true; - } - return false; - } - -private slots: - -private: - GoogleLatitude latitude; - GpsControl gps; - QFile demonio; - QProcess cli; -}; - -#endif // LatitudeQML_H diff --git a/latitudeupdater.pro b/latitudeupdater.pro index 33d560f..f8d0ff5 100644 --- a/latitudeupdater.pro +++ b/latitudeupdater.pro @@ -1,30 +1,32 @@ -# temporal fix -linux-g++-maemo:!contains(MEEGO_EDITION,harmattan): { - MEEGO_VERSION_MAJOR = 1 - MEEGO_VERSION_MINOR = 2 - MEEGO_VERSION_PATCH = 0 - MEEGO_EDITION = harmattan - DEFINES += MEEGO_EDITION_HARMATTAN -} - TEMPLATE = subdirs +CONFIG += ordered + +SUBDIRS = \ + liblocationmaemo5 \ + libkqoauth \ + liblatitudeupdater \ + latituded \ + latitude.qt \ + latitude.qml + +contains(QT_CONFIG, maemo5): message(Maemo5) +contains(MEEGO_EDITION,harmattan): message(Maemo6) + +include(deployment.pri) +qtcAddDeployment() -contains(QT_CONFIG, maemo5): { - SUBDIRS = LatitudeUpdaterDaemon.pro LatitudeUpdaterWidget.pro - DEFINES += GUIFOUND - message(Maemo5) -} -contains(MEEGO_EDITION,harmattan): { - SUBDIRS = LatitudeUpdaterDaemon.pro LatitudeUpdaterQML.pro - DEFINES += GUIFOUND - message(Maemo6) -} -contains(CONFIG, simulator): { - SUBDIRS = LatitudeUpdaterWidget.pro - DEFINES += GUIFOUND - message(Simulator) -} -!contains(DEFINES, GUIFOUND): { - SUBDIRS = LatitudeUpdaterDaemon.pro LatitudeUpdaterWidget.pro LatitudeUpdaterQML.pro - message(Plataform not found) -} +OTHER_FILES += \ + qtc_packaging/debian_harmattan/rules \ + qtc_packaging/debian_harmattan/rules.real \ + qtc_packaging/debian_harmattan/README \ + qtc_packaging/debian_harmattan/copyright \ + qtc_packaging/debian_harmattan/control \ + qtc_packaging/debian_harmattan/compat \ + qtc_packaging/debian_harmattan/changelog \ + qtc_packaging/debian_fremantle/rules \ + qtc_packaging/debian_fremantle/rules.real \ + qtc_packaging/debian_fremantle/README \ + qtc_packaging/debian_fremantle/copyright \ + qtc_packaging/debian_fremantle/control \ + qtc_packaging/debian_fremantle/compat \ + qtc_packaging/debian_fremantle/changelog diff --git a/latitudeupdater64.png b/latitudeupdater64.png new file mode 100644 index 0000000000000000000000000000000000000000..d98268f31e1c847a9b0e0d3fda477d7079f494d9 GIT binary patch literal 3646 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 Qv;Y7A07*qoM6N<$f^%-)0RR91 literal 0 HcmV?d00001 diff --git a/latitudeupdater80.png b/latitudeupdater80.png new file mode 100644 index 0000000000000000000000000000000000000000..b581969e17ff539882b14e78a6dfbfe4a97f33dd GIT binary patch literal 5280 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 - layout_row1->addWidget(do_start); - layout_row1->addWidget(do_stop); - - do_oauth->setDisabled(true); - do_start->setDisabled(true); - do_stop->setDisabled(true); - - connect(do_oauth, SIGNAL(clicked()), this, SLOT(gl_webauth()) ); - connect(do_start, SIGNAL(clicked()), this, SLOT(gps_start()) ); - connect(do_stop, SIGNAL(clicked()), this, SLOT(gps_stop()) ); - - connect(&latitude, SIGNAL(gotToken()), this, SLOT(gl_GotToken()) ); - connect(&latitude, SIGNAL(notToken()), this, SLOT(gl_NotToken()) ); - connect(&latitude, SIGNAL(needAuth()), this, SLOT(gl_needAuth()) ); - - connect(&gps, SIGNAL(gotFix()), this, SLOT(set_latitude()) ); - - // row 2 - layout_row2 = new QHBoxLayout(); - gps_group = new QButtonGroup(); - gps_method = new QLabel("Method"); - gps_cell = new QRadioButton("Cell Tower"); - gps_both = new QRadioButton("Both"); - gps_agps = new QRadioButton("Only Gps"); - gps_group->addButton(gps_cell); - gps_group->addButton(gps_both); - gps_group->addButton(gps_agps); - layout_row2->addWidget(gps_method); - layout_row2->addWidget(gps_cell); - layout_row2->addWidget(gps_both); - layout_row2->addWidget(gps_agps); - - if ( gps.getPositioningMethod() == "gps" ) gps_agps->setChecked(true); - if ( gps.getPositioningMethod() == "cell" ) gps_cell->setChecked(true); - if ( gps.getPositioningMethod() == "all" ) gps_both->setChecked(true); - - connect(gps_cell, SIGNAL(clicked()), this, SLOT(set_method()) ); - connect(gps_both, SIGNAL(clicked()), this, SLOT(set_method()) ); - connect(gps_agps, SIGNAL(clicked()), this, SLOT(set_method()) ); - - // row 3 - layout_row3 = new QHBoxLayout(); - gps_to_label = new QLabel("Time Out"); - gps_to_slider = new QSlider(Qt::Horizontal); - gps_to_slider->setSingleStep(5); - gps_to_slider->setRange(5, 120); - gps_to_slider->setValue(gps.getTimeOut()); - gps_to_slider_value = new QLabel(QString("%1 sec.").arg(gps_to_slider->value())); - layout_row3->addWidget(gps_to_label); - layout_row3->addWidget(gps_to_slider); - layout_row3->addWidget(gps_to_slider_value); - - connect(gps_to_slider, SIGNAL(valueChanged(int)), this, SLOT(set_to(int)) ); - - // row 4 - layout_row4 = new QHBoxLayout(); - gps_i_label = new QLabel("Interval"); - - gps_i_slider = new QSlider(Qt::Horizontal); - gps_i_slider->setSingleStep(5); - gps_i_slider->setRange(5, 60); - gps_i_slider->setValue(gps.getInterval()/60); - gps_i_slider_value = new QLabel(QString("%1 min.").arg(gps_i_slider->value())); - layout_row4->addWidget(gps_i_label); - layout_row4->addWidget(gps_i_slider); - layout_row4->addWidget(gps_i_slider_value); - - connect(gps_i_slider, SIGNAL(valueChanged(int)), this, SLOT(set_i(int)) ); - - // row 5 - layout_row5 = new QHBoxLayout(); - gps_ac_group = new QButtonGroup(); - gps_ac_label = new QLabel("Auto Connect"); - gps_ac_yes = new QRadioButton("Yes"); - gps_ac_not = new QRadioButton("No"); - gps_ac_group->addButton(gps_ac_yes); - gps_ac_group->addButton(gps_ac_not); - layout_row5->addWidget(gps_ac_label); - layout_row5->addWidget(gps_ac_yes); - layout_row5->addWidget(gps_ac_not); - - if ( latitude.getAutoConnect() == true ) gps_ac_yes->setChecked(true); - if ( latitude.getAutoConnect() == false ) gps_ac_not->setChecked(true); - - connect(gps_ac_yes, SIGNAL(clicked()), this, SLOT(set_ac_yes()) ); - connect(gps_ac_not, SIGNAL(clicked()), this, SLOT(set_ac_not()) ); - - // gui - layout_gui = new QVBoxLayout(); - layout_gui->addLayout(layout_row1); - layout_gui->addLayout(layout_row2); - layout_gui->addLayout(layout_row3); - layout_gui->addLayout(layout_row4); - layout_gui->addLayout(layout_row5); - - setLayout(layout_gui); - latitude.getAccess(); -} - diff --git a/latitudewidget.h b/latitudewidget.h deleted file mode 100644 index 6821240..0000000 --- a/latitudewidget.h +++ /dev/null @@ -1,149 +0,0 @@ -#ifndef LATITUDEGUI_H -#define LATITUDEGUI_H - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "googlelatitude.h" -#include "gpscontrol.h" - -class LatitudeGUI : public QWidget { - Q_OBJECT -public: - LatitudeGUI(QWidget *parent = 0); - -signals: - -public slots: - -private slots: - void gl_GotToken() { - qDebug() << "* LatitudeGUI::gl_GotToken"; - do_oauth->setDisabled(true); - if (system("killall -0 LatitudeUpdaterDaemon 2> /dev/null" )) { - do_start->setEnabled(true); - do_stop->setDisabled(true); - } else { - do_start->setDisabled(true); - do_stop->setEnabled(true); - } - } - void gl_NotToken() { - qDebug() << "* LatitudeGUI::gl_NotToken"; - do_oauth->setEnabled(true); - do_start->setDisabled(true); - do_stop->setDisabled(true); - gps.stopUpdates(true); - } - void gl_needAuth() { - qDebug() << "* LatitudeGUI::gl_needAuth"; - do_oauth->setEnabled(true); - } - void gl_webauth() { - qDebug() << "* LatitudeGUI::gl_webauth"; - QDesktopServices::openUrl(latitude.getUserAuthorization()); - } - void gps_start() { - qDebug() << "* LatitudeGUI::gps_start"; - do_start->setDisabled(true); - do_stop->setEnabled(true); - if (demonio.exists()) { - qDebug() << "* LatitudeGUI:: demonio"; - cli.startDetached(demonio.fileName()); - return; - } - qDebug() << "* LatitudeGUI:: demonio none"; - gps.startUpdates(); - } - void gps_stop() { - qDebug() << "* LatitudeGUI::gps_stop"; - do_start->setEnabled(true); - do_stop->setDisabled(true); - if (demonio.exists()) { - qDebug() << "* LatitudeGUI:: demonio kill" << system("killall LatitudeUpdaterDaemon 2> /dev/null"); - } else { - gps.stopUpdates(true); - } - } - void set_latitude() { - qDebug() << "* LatitudeGUI::set_latitude"; - latitude.setCurrentLocation(gps.getCurrentLatitude(), - gps.getCurrentLongitude(), - gps.getCurrentAccuracy()); - latitude.sendCurrentLocation(); - } - void set_method() { - qDebug() << "* LatitudeGUI::set_method"; - if (gps_cell->isChecked()) gps.setPositioningMethod("cell"); - if (gps_both->isChecked()) gps.setPositioningMethod("all"); - if (gps_agps->isChecked()) gps.setPositioningMethod("gps"); - } - void set_to(int value) { - qDebug() << "* LatitudeGUI::set_to()" << value; - gps.setTimeOut(value); - gps_to_slider_value->setText(QString("%1 sec.").arg(value)); - - } - void set_i(int value) { - qDebug() << "* LatitudeGUI::set_i()" << value; - gps.setInterval(value*60); - gps_i_slider_value->setText(QString("%1 min.").arg(value)); - } - void set_ac_yes() { - qDebug() << "* LatitudeGUI::set_ac_yes"; - latitude.setAutoConnect(true); - } - void set_ac_not() { - qDebug() << "* LatitudeGUI::set_ac_not"; - latitude.setAutoConnect(false); - } - -private: - GoogleLatitude latitude; - GpsControl gps; - QFile demonio; - QProcess cli; - - QHBoxLayout *layout_row1; - QPushButton *do_oauth; - QPushButton *do_start; - QPushButton *do_stop; - - QHBoxLayout *layout_row2; - QLabel *gps_method; - QButtonGroup *gps_group; - QRadioButton *gps_cell; - QRadioButton *gps_both; - QRadioButton *gps_agps; - - QHBoxLayout *layout_row3; - QLabel *gps_to_label; - QSlider *gps_to_slider; - QLabel *gps_to_slider_value; - - QHBoxLayout *layout_row4; - QLabel *gps_i_label; - QSlider *gps_i_slider; - QLabel *gps_i_slider_value; - - QHBoxLayout *layout_row5; - QLabel *gps_ac_label; - QButtonGroup *gps_ac_group; - QRadioButton *gps_ac_yes; - QRadioButton *gps_ac_not; - - QVBoxLayout *layout_gui; -}; - -#endif // LATITUDEGUI_H - diff --git a/libkqoauth/libkqoauth.pro b/libkqoauth/libkqoauth.pro new file mode 100644 index 0000000..4b8e4ca --- /dev/null +++ b/libkqoauth/libkqoauth.pro @@ -0,0 +1,26 @@ +TEMPLATE = lib +CONFIG += staticlib +TARGET = kqoauth + +QT += network + +HEADERS += kqoauthauthreplyserver.h \ + kqoauthauthreplyserver_p.h \ + kqoauthglobals.h \ + kqoauthmanager.h \ + kqoauthmanager_p.h \ + kqoauthrequest.h \ + kqoauthrequest_1.h \ + kqoauthrequest_p.h \ + kqoauthrequest_xauth.h \ + kqoauthrequest_xauth_p.h \ + kqoauthutils.h +SOURCES += kqoauthauthreplyserver.cpp \ + kqoauthmanager.cpp \ + kqoauthrequest.cpp \ + kqoauthrequest_1.cpp \ + kqoauthrequest_xauth.cpp \ + kqoauthutils.cpp + +include(../deployment.pri) +qtcAddDeployment() diff --git a/liblatitudeupdater/googlelatitude.cpp b/liblatitudeupdater/googlelatitude.cpp new file mode 100644 index 0000000..47e90c5 --- /dev/null +++ b/liblatitudeupdater/googlelatitude.cpp @@ -0,0 +1,178 @@ +#include "googlelatitude.h" +#include + +GoogleLatitude::GoogleLatitude(QObject *parent) : + QObject(parent), + OauthSettings(this), + OAuthGetRequestToken("https://www.google.com/accounts/OAuthGetRequestToken"), + OAuthAuthorizeToken("https://www.google.com/accounts/OAuthAuthorizeToken"), + OAuthGetAccessToken("https://www.google.com/accounts/OAuthGetAccessToken"), + CurrentLocation("https://www.googleapis.com/latitude/v1/currentLocation"), + UserAuthorization(""), + ConsumerKey("1062862865804.apps.googleusercontent.com"), + ConsumerSecretKey("EYQaRaUJ9Fznw8mPMor660Kx"), + CurrentLatitude(0), + CurrentLongitude(0), + CurrentAccuracy(0) { + qDebug() << "* GoogleLatitude::GoogleLatitude"; + OauthRequest = new KQOAuthRequest(this); + OauthManager = new KQOAuthManager(this); + GoogleOauthAdditional.insert("scope", "https://www.googleapis.com/auth/latitude"); + GoogleOauthAdditional.insert("xoauth_displayname", "LatitudeUpdater"); + + connect(OauthManager, SIGNAL(temporaryTokenReceived(QString,QString)), + this, SLOT(onTemporaryTokenReceived(QString, QString))); + + connect(OauthManager, SIGNAL(authorizationReceived(QString,QString)), + this, SLOT(onAuthorizationReceived(QString, QString))); + + connect(OauthManager, SIGNAL(accessTokenReceived(QString,QString)), + this, SLOT(onAccessTokenReceived(QString,QString))); + + connect(OauthManager, SIGNAL(requestReady(QByteArray)), + this, SLOT(onRequestReady(QByteArray))); + + connect(OauthManager, SIGNAL(authorizedRequestDone()), + this, SLOT(onAuthorizedRequestDone())); + + connect(this, SIGNAL(gotToken()), + this, SLOT(getCurrentLocation())); + + connect(this, SIGNAL(notToken()), + this, SLOT(onNotToken())); + + connect(this, SIGNAL(gotToken()), + this, SLOT(onGotToken())); + + connect(this, SIGNAL(needAuth()), + this, SLOT(onNeedAuth())); +} + +GoogleLatitude::~GoogleLatitude() { + qDebug() << "* GoogleLatitude::~GoogleLatitude"; + delete OauthManager; + delete OauthRequest; +} + +void GoogleLatitude::getAccess() { + qDebug() << "* GoogleLatitude::getAccess"; + if ( OauthSettings.value("oauth_token").isNull() || OauthSettings.value("oauth_token_secret").isNull() ) { + OauthRequest->clearRequest(); + OauthRequest->initRequest(KQOAuthRequest::TemporaryCredentials, OAuthGetRequestToken); + OauthRequest->setConsumerKey(ConsumerKey); + OauthRequest->setConsumerSecretKey(ConsumerSecretKey); + OauthRequest->setAdditionalParameters(GoogleOauthAdditional); + OauthManager->setHandleUserAuthorization(true); + OauthRequest->setHttpMethod(KQOAuthRequest::POST); + OauthManager->executeRequest(OauthRequest); + } else { + emit gotToken(); + } +} + +void GoogleLatitude::getCurrentLocation() { + qDebug() << "* GoogleLatitude::getCurrentLocation"; + if ( OauthSettings.value("oauth_token").isNull() || OauthSettings.value("oauth_token_secret").isNull() ) { + emit notToken(); + } else { + OauthRequest->clearRequest(); + OauthRequest->initRequest(KQOAuthRequest::AuthorizedRequest, CurrentLocation); + OauthRequest->setToken(OauthSettings.value("oauth_token").toString()); + OauthRequest->setTokenSecret(OauthSettings.value("oauth_token_secret").toString()); + OauthRequest->setConsumerKey(ConsumerKey); + OauthRequest->setConsumerSecretKey(ConsumerSecretKey); + OauthRequest->setHttpMethod(KQOAuthRequest::GET); + OauthManager->executeRequest(OauthRequest); + } +} + +void GoogleLatitude::sendCurrentLocation() { + qDebug() << "* GoogleLatitude::sendCurrentLocation"; + if (OauthSettings.value("oauth_token").isNull() || OauthSettings.value("oauth_token_secret").isNull()) { + emit notToken(); + } else { + if (abs(CurrentLatitude) <= 0.01) return; + if (abs(CurrentLongitude) <= 0.01) return; + if (abs(CurrentAccuracy) <= 0.01) return; + + QNetworkConfigurationManager mgr; + if (!OauthSettings.value("net_auto").toBool() && !mgr.isOnline()) { + qDebug() << "* GoogleLatitude::sendCurrentLocation" << "offline"; + return; + } + + QByteArray json_location; + json_location = "{\"data\": {\"kind\":\"latitude#location\","; + json_location += QString("\"latitude\":%1,").arg(CurrentLatitude); + json_location += QString("\"longitude\":%1,").arg(CurrentLongitude); + json_location += QString("\"accuracy\":%1").arg(CurrentAccuracy); + json_location += "}}"; + qDebug() << "json_location" << json_location; + + OauthRequest->clearRequest(); + OauthRequest->initRequest(KQOAuthRequest::AuthorizedRequest, CurrentLocation); + OauthRequest->setToken(OauthSettings.value("oauth_token").toString()); + OauthRequest->setTokenSecret(OauthSettings.value("oauth_token_secret").toString()); + OauthRequest->setConsumerKey(ConsumerKey); + OauthRequest->setConsumerSecretKey(ConsumerSecretKey); + OauthRequest->setHttpMethod(KQOAuthRequest::POST); + OauthRequest->setContentType("application/json"); + OauthRequest->setRawData(json_location); + OauthManager->executeRequest(OauthRequest); + } +} + +void GoogleLatitude::setCurrentLocation(double lat, double lon, double acc) { + qDebug() << "* GoogleLatitude::setCurrentLocation" << lat << lon << acc; + CurrentLatitude = lat; + CurrentLongitude = lon; + CurrentAccuracy = acc; +} + +QUrl GoogleLatitude::getUserAuthorization() { + qDebug() << "* GoogleLatitude::getUserAuthorization"; + return UserAuthorization; +} + +void GoogleLatitude::setAutoConnect(bool status) { + qDebug() << "* GoogleLatitude::setAutoConnect" << status; + OauthSettings.setValue("net_auto", status); +} + +bool GoogleLatitude::getAutoConnect() { + qDebug() << "* GoogleLatitude::getAutoConnect"; + return OauthSettings.value("net_auto").toBool(); +} + +void GoogleLatitude::onTemporaryTokenReceived(QString temporaryToken, QString temporaryTokenSecret) { + qDebug() << "* GoogleLatitude::onTemporaryTokenReceived" << temporaryToken << temporaryTokenSecret; + if( OauthManager->lastError() == KQOAuthManager::NoError) { + UserAuthorization = OauthManager->getUserAuthorization(OAuthAuthorizeToken); + qDebug() << "* GoogleLatitude::onTemporaryTokenReceived" << "UserAuthorization" << UserAuthorization; + emit needAuth(); + } +} + +void GoogleLatitude::onAuthorizationReceived(QString token, QString verifier) { + qDebug() << "* GoogleLatitude::onAuthorizationReceived" << token << verifier; + OauthManager->getUserAccessTokens(OAuthGetAccessToken); + if(OauthManager->lastError() != KQOAuthManager::NoError) { + emit notToken(); + } +} + +void GoogleLatitude::onAccessTokenReceived(QString token, QString tokenSecret) { + qDebug() << "* GoogleLatitude::onAccessTokenReceived" << token << tokenSecret; + OauthSettings.setValue("oauth_token", token); + OauthSettings.setValue("oauth_token_secret", tokenSecret); + emit gotToken(); +} + +void GoogleLatitude::onRequestReady(QByteArray response) { + qDebug() << "* GoogleLatitude::onRequestReady" << response; + if (response.contains("Invalid Credentials") ) { + OauthSettings.remove("oauth_token"); + OauthSettings.remove("oauth_token_secret"); + emit notToken(); + } +} diff --git a/liblatitudeupdater/googlelatitude.h b/liblatitudeupdater/googlelatitude.h new file mode 100644 index 0000000..1f99a24 --- /dev/null +++ b/liblatitudeupdater/googlelatitude.h @@ -0,0 +1,57 @@ +#ifndef GOOGLELATITUDE_H +#define GOOGLELATITUDE_H + +#include +#include +#include +#include + +class GoogleLatitude : public QObject { + Q_OBJECT + +public: + GoogleLatitude(QObject *parent = 0); + ~GoogleLatitude(); + +public slots: + void getAccess(); + void getCurrentLocation(); + void sendCurrentLocation(); + void setCurrentLocation(double la, double lo, double ac); + QUrl getUserAuthorization(); + void setAutoConnect(bool status); + bool getAutoConnect(); + +private slots: + void onTemporaryTokenReceived(QString temporaryToken, QString temporaryTokenSecret); + void onAuthorizationReceived(QString token, QString verifier); + void onAccessTokenReceived(QString token, QString tokenSecret); + void onRequestReady(QByteArray response); + void onAuthorizedRequestDone() { qDebug() << "* GoogleLatitude::onAuthorizedRequestDone"; } + void onNotToken() { qDebug() << "* GoogleLatitude::onNotToken"; } + void onGotToken() { qDebug() << "* GoogleLatitude::onGotToken"; } + void onNeedAuth() { qDebug() << "* GoogleLatitude::onNeedAuth"; } + +signals: + void notToken(); + void gotToken(); + void needAuth(); + +private: + QSettings OauthSettings; + QUrl OAuthGetRequestToken; + QUrl OAuthAuthorizeToken; + QUrl OAuthGetAccessToken; + QUrl CurrentLocation; + QUrl UserAuthorization; + KQOAuthParameters GoogleOauthAdditional; + QString ConsumerKey; + QString ConsumerSecretKey; + double CurrentLatitude; + double CurrentLongitude; + double CurrentAccuracy; + KQOAuthManager *OauthManager; + KQOAuthRequest *OauthRequest; +}; + +#endif // GOOGLELATITUDE_H diff --git a/liblatitudeupdater/gpscontrol.cpp b/liblatitudeupdater/gpscontrol.cpp new file mode 100644 index 0000000..2b900c9 --- /dev/null +++ b/liblatitudeupdater/gpscontrol.cpp @@ -0,0 +1,131 @@ +#include "gpscontrol.h" +#include + +GpsControl::GpsControl(QObject *parent) : + QObject(parent), + GpsSettings(this), + GpsSource(QGeoPositionInfoSource::createDefaultSource(this)), + GpsPosition(), + GpsTimeout(this), + GpsInterval(this) { + qDebug() << "* GpsControl::GpsControl"; + + GpsTimeout.setSingleShot(true); + GpsInterval.setSingleShot(true); + + setPositioningMethod(GpsSettings.value("gps_method", "cell").toString()); + setTimeOut(GpsSettings.value("gps_timeout", 60).toInt()); + setInterval(GpsSettings.value("gps_interval", 15*60).toInt()); + + if (!GpsSource) qDebug() << "* GpsControl::GpsControl" << "Not GpsSource"; + + if (GpsSource) connect(GpsSource, SIGNAL(positionUpdated(QGeoPositionInfo)), + this, SLOT(setCurrentLocation(QGeoPositionInfo))); + + connect(this, SIGNAL(gotUpdate()), + this, SLOT(onGotUpdate())); + + connect(this, SIGNAL(gotFix()), + this, SLOT(onGotFix())); + +} + +void GpsControl::setTimeOut(int sec) { + qDebug() << "* GpsControl::setTimeOut" << sec; + GpsSettings.setValue("gps_timeout", sec); +} + +int GpsControl::getTimeOut() { + qDebug() << "* GpsControl::getTimeOut"; + return GpsSettings.value("gps_timeout").toInt(); +} + +void GpsControl::setInterval(int sec) { + qDebug() << "* GpsControl::setInterval" << sec; + GpsSettings.setValue("gps_interval", sec); +} + +int GpsControl::getInterval() { + qDebug() << "* GpsControl::getInterval"; + return GpsSettings.value("gps_interval").toInt(); +} + +void GpsControl::setPositioningMethod(QString method) { + qDebug() << "* GpsControl::setPositioningMethod" << method; + if (method == "gps") { + GpsSettings.setValue("gps_method", method); + if (GpsSource) GpsSource->setPreferredPositioningMethods( + QGeoPositionInfoSource::SatellitePositioningMethods); + } + if (method == "cell") { + GpsSettings.setValue("gps_method", method); + if (GpsSource) GpsSource->setPreferredPositioningMethods( + QGeoPositionInfoSource::NonSatellitePositioningMethods); + } + if (method == "all") { + GpsSettings.setValue("gps_method", method); + if (GpsSource) GpsSource->setPreferredPositioningMethods( + QGeoPositionInfoSource::AllPositioningMethods); + } +} + +void GpsControl::startUpdates() { + qDebug() << "* GpsControl::startUpdates"; + + GpsTimeout.singleShot(GpsSettings.value("gps_timeout").toInt()*1000, + this, SLOT(stopUpdates())); + GpsInterval.singleShot(GpsSettings.value("gps_interval").toInt()*1000, + this, SLOT(startUpdates())); + + QNetworkConfigurationManager mgr; + if (!GpsSettings.value("net_auto").toBool() && !mgr.isOnline()) { + qDebug() << "* GpsControl::startUpdates" << "offline"; + return; + } + + if (GpsSource) GpsSource->startUpdates(); +} + +void GpsControl::stopUpdates(bool force) { + qDebug() << "* GpsControl::stopUpdates" << force; + + if (GpsSource) GpsSource->stopUpdates(); + + if (force) { + GpsTimeout.stop(); + GpsInterval.stop(); + } else { + if (GpsSource && GpsSource->lastKnownPosition(GpsSettings.value("gps_method") + == "gps" ? true : false).isValid() ) { + emit gotFix(); + } + } +} + +double GpsControl::getCurrentLatitude() { + qDebug() << "* GpsControl::getCurrentLatitude"; + return GpsPosition.coordinate().latitude(); +} + +double GpsControl::getCurrentLongitude() { + qDebug() << "* GpsControl::getCurrentLongitude"; + return GpsPosition.coordinate().longitude(); +} + +double GpsControl::getCurrentAccuracy() { + qDebug() << "* GpsControl::getCurrentAccuracy"; + return GpsPosition.attribute(QGeoPositionInfo::HorizontalAccuracy); +} + +unsigned int GpsControl::getCurrentTimestamp() { + qDebug() << "* GpsControl::getCurrentTimestamp"; + return GpsPosition.timestamp().toTime_t(); +} + +void GpsControl::setCurrentLocation(QGeoPositionInfo pos) { + qDebug() << "* GpsControl::setCurrentLocation" << pos; + if (pos.isValid()) { + GpsPosition = pos; + emit gotUpdate(); + } +} diff --git a/liblatitudeupdater/gpscontrol.h b/liblatitudeupdater/gpscontrol.h new file mode 100644 index 0000000..7a7f6f5 --- /dev/null +++ b/liblatitudeupdater/gpscontrol.h @@ -0,0 +1,49 @@ +#ifndef GPSCONTROL_H +#define GPSCONTROL_H + +#include +#include +#include +#include +#include +#include + +using namespace QtMobility; + +class GpsControl : public QObject { + Q_OBJECT +public: + GpsControl(QObject *parent = 0); + +signals: + void gotUpdate(); + void gotFix(); + +public slots: + void setTimeOut(int sec); + int getTimeOut(); + void setInterval(int sec); + int getInterval(); + void setPositioningMethod(QString method); + QString getPositioningMethod() {return GpsSettings.value("gps_method").toString();} + void startUpdates(); + void stopUpdates(bool force = false); + double getCurrentLatitude(); + double getCurrentLongitude(); + double getCurrentAccuracy(); + unsigned int getCurrentTimestamp(); + +private slots: + void setCurrentLocation(QGeoPositionInfo pos); + void onGotUpdate() { qDebug() << "* GpsControl::ongotUpdate"; } + void onGotFix() { qDebug() << "* GpsControl::ongotFix"; } + +private: + QSettings GpsSettings; + QGeoPositionInfoSource *GpsSource; + QGeoPositionInfo GpsPosition; + QTimer GpsTimeout; + QTimer GpsInterval; +}; + +#endif // GPSCONTROL_H diff --git a/liblatitudeupdater/liblatitudeupdater.pro b/liblatitudeupdater/liblatitudeupdater.pro new file mode 100644 index 0000000..48d5c06 --- /dev/null +++ b/liblatitudeupdater/liblatitudeupdater.pro @@ -0,0 +1,15 @@ +TEMPLATE = lib +CONFIG += staticlib +TARGET = latitudeupdater + +QT += network +CONFIG += mobility +MOBILITY += location + +INCLUDEPATH += ../libkqoauth + +HEADERS += googlelatitude.h gpscontrol.h +SOURCES += googlelatitude.cpp gpscontrol.cpp + +include(../deployment.pri) +qtcAddDeployment() diff --git a/liblocationmaemo5/liblocationmaemo5.pro b/liblocationmaemo5/liblocationmaemo5.pro new file mode 100644 index 0000000..8492b81 --- /dev/null +++ b/liblocationmaemo5/liblocationmaemo5.pro @@ -0,0 +1,24 @@ +TEMPLATE = lib +CONFIG += staticlib +TARGET = locationmaemo5 + +CONFIG += mobility +MOBILITY += location + +contains(QT_CONFIG, maemo5): { +QT += maemo5 +CONFIG += link_pkgconfig +PKGCONFIG += glib-2.0 liblocation + +HEADERS += gconfitem_p.h \ + liblocationwrapper_p.h \ + qgeopositioninfosource_maemo5_p.h \ + qgeosatelliteinfosource_maemo5_p.h +SOURCES += gconfitem.cpp \ + liblocationwrapper.cpp \ + qgeopositioninfosource_maemo5.cpp \ + qgeosatelliteinfosource_maemo5.cpp +} + +include(../deployment.pri) +qtcAddDeployment() diff --git a/main-daemon.cpp b/main-daemon.cpp deleted file mode 100644 index 99230d3..0000000 --- a/main-daemon.cpp +++ /dev/null @@ -1,16 +0,0 @@ -#include -#include "latitudedaemon.h" - -int main(int argc, char *argv[]) { - qDebug() << "* Main Daemon"; - QCoreApplication::setOrganizationName("linfati.com"); - QCoreApplication::setOrganizationDomain("linfati.com"); - QCoreApplication::setApplicationName("latitudeupdater"); - - QCoreApplication lu(argc, argv); - LatitudeDaemon mygui; - - Q_UNUSED(mygui) - - return lu.exec(); -} diff --git a/main-qml.cpp b/main-qml.cpp deleted file mode 100644 index f17ff01..0000000 --- a/main-qml.cpp +++ /dev/null @@ -1,16 +0,0 @@ -#include -#include "latitudeqml.h" - -int main(int argc, char *argv[]) { - qDebug() << "* Main QML"; - QCoreApplication::setOrganizationName("linfati.com"); - QCoreApplication::setOrganizationDomain("linfati.com"); - QCoreApplication::setApplicationName("latitudeupdater"); - - QApplication lu(argc, argv); - LatitudeQML mygui; - - mygui.showFullScreen(); - - return lu.exec(); -} diff --git a/main-widget.cpp b/main-widget.cpp deleted file mode 100644 index aca9cf7..0000000 --- a/main-widget.cpp +++ /dev/null @@ -1,16 +0,0 @@ -#include -#include "latitudewidget.h" - -int main(int argc, char *argv[]) { - qDebug() << "* Main Widget"; - QCoreApplication::setOrganizationName("linfati.com"); - QCoreApplication::setOrganizationDomain("linfati.com"); - QCoreApplication::setApplicationName("latitudeupdater"); - - QApplication lu(argc, argv); - LatitudeGUI mygui; - - mygui.showMaximized(); - - return lu.exec(); -} diff --git a/qml/MainPage.qml b/qml/MainPage.qml deleted file mode 100644 index caeb84f..0000000 --- a/qml/MainPage.qml +++ /dev/null @@ -1,202 +0,0 @@ -import QtQuick 1.0 -import com.meego 1.0 - -Page { - id: mainPage - orientationLock: PageOrientation.LockLandscape - Column { - spacing: 16 - Row { - width: rootWindow.width - Button { - id: do_auth - width: rootWindow.width / 3 - text: "Auth" - enabled: false - onClicked: { - Qt.openUrlExternally(latitude.getUserAuthorization()) - } - } - Button { - id: do_start - width: rootWindow.width / 3 - text: "Start" - enabled: false - onClicked: { - do_start.enabled = false; - do_stop.enabled = true; - if (!demonio.demonio_start()) { - gps.startUpdates() - } - } - } - Button { - id: do_stop - width: rootWindow.width / 3 - text: "Stop" - enabled: false - onClicked: { - do_start.enabled = true; - do_stop.enabled = false; - if (!demonio.demonio_stop()) { - gps.stopUpdates(true) - } - } - } - } - Row { - Label { - id: method_label - text: "Method" - width: rootWindow.width / 4 - anchors.verticalCenter: method_button.verticalCenter - } - ButtonRow { - id: method_button - width: rootWindow.width * 2 / 3 - Button { - id: method_cell - text: "Cell Tower" - checked: gps.getPositioningMethod() == "cell" ? true : false - onClicked: gps.setPositioningMethod("cell") - } - Button { - id: method_all - text: "Both" - checked: gps.getPositioningMethod() == "all" ? true : false - onClicked: gps.setPositioningMethod("all") - } - Button { - id: method_agps - text: "Only GPS" - checked: gps.getPositioningMethod() == "gps" ? true : false - onClicked: gps.setPositioningMethod("gps") - } - } - } - Row { - Label { - id: timeout_label - text: "Time Out" - width: rootWindow.width / 4 - anchors.verticalCenter: timeout_slider.verticalCenter - } - Slider { - id: timeout_slider - width: rootWindow.width / 2 - valueIndicatorVisible: true - minimumValue: 5 - maximumValue: 120 - stepSize: 5 - value: gps.getTimeOut() - } - Label { - id: timeout_value - text: timeout_slider.value + " seg." - width: rootWindow.width / 4 - anchors.verticalCenter: timeout_slider.verticalCenter - } - Connections { - target: timeout_slider - onValueChanged: { - timeout_value.text = timeout_slider.value + " seg." - gps.setTimeOut(timeout_slider.value) - } - } - } - Row { - Label { - id: interval_label - text: "Interval" - width: rootWindow.width / 4 - anchors.verticalCenter: interval_slider.verticalCenter - } - Slider { - id: interval_slider - width: rootWindow.width / 2 - valueIndicatorVisible: true - minimumValue: 5 - maximumValue: 60 - stepSize: 5 - value: gps.getInterval() / 60 - } - Label { - id: interval_value - text: interval_slider.value + " min." - width: rootWindow.width / 4 - anchors.verticalCenter: interval_slider.verticalCenter - } - Connections { - target: interval_slider - onValueChanged: { - interval_value.text = interval_slider.value + " min." - gps.setInterval(interval_slider.value*60) - } - } - } - Row { - Label { - id: connect_label - text: "Auto Connect" - width: rootWindow.width / 4 - anchors.verticalCenter: connect_switch.verticalCenter - } - Switch { - id: connect_switch - width: rootWindow.width / 2 - checked: latitude.getAutoConnect() ? true : false - onCheckedChanged: { - connect_value.text = checked - latitude.setAutoConnect(checked) - } - } - Label { - id: connect_value - text: connect_switch.checked - width: rootWindow.width / 4 - anchors.verticalCenter: connect_switch.verticalCenter - } - } - - Connections { - target: latitude - onGotToken: { - do_auth.enabled = false; - if (demonio.demonio_status()) { - do_start.enabled = false; - do_stop.enabled = true; - } else { - do_start.enabled = true; - do_stop.enabled = false; - } - } - } - Connections { - target: latitude - onNotToken: { - do_auth.enabled = true; - do_start.enabled = false; - do_stop.enabled = false; - if (!demonio.demonio_stop()) { - gps.stopUpdates(true) - } - } - } - Connections { - target: latitude - onNeedAuth: { - do_auth.enabled = true; - } - } - - Connections { - target: gps - onGotFix: { - latitude.setCurrentLocation(gps.getCurrentLatitude(), - gps.getCurrentLongitude(), - gps.getCurrentAccuracy()) - latitude.sendCurrentLocation() - } - } - } -} diff --git a/qml/main.qml b/qml/main.qml deleted file mode 100644 index 6655bf5..0000000 --- a/qml/main.qml +++ /dev/null @@ -1,12 +0,0 @@ -import QtQuick 1.0 -import com.meego 1.0 - -PageStackWindow { - id: rootWindow - initialPage: mainPage - MainPage { - id: mainPage - } - showToolBar: false - showStatusBar: true -} diff --git a/qtc_packaging/debian_fremantle/control b/qtc_packaging/debian_fremantle/control index 81fddb6..f3b0a58 100644 --- a/qtc_packaging/debian_fremantle/control +++ b/qtc_packaging/debian_fremantle/control @@ -4,7 +4,7 @@ Priority: optional Maintainer: Rodrigo Linfati Build-Depends: debhelper (>= 5), libqt4-dev, libqtm-dev, liblocation-dev, libgconf2-dev Standards-Version: 3.7.3 -Homepage: http://googlelatitude.garage.maemo.org/ +Homepage: http://www.linfati.com/ XSBC-Bugtracker: mailto:rodrigo@linfati.cl Package: googlelatitude @@ -14,6 +14,7 @@ Description: Google Latitude Updater Features: - Retrieve location using Cell Tower and/or Gps and send to Google Latitude - Run as Daemon + Note: This is an unofficial client XB-Maemo-Display-Name: LatitudeUpdater XB-Maemo-Icon-26: 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 diff --git a/qtc_packaging/debian_fremantle/copyright b/qtc_packaging/debian_fremantle/copyright index 73b9a6b..33b3d11 100644 --- a/qtc_packaging/debian_fremantle/copyright +++ b/qtc_packaging/debian_fremantle/copyright @@ -1,7 +1,7 @@ This package was debianized by Rodrigo Linfati on sab, 02 gen 2010 22:12:52 +0100. -It was downloaded from +It was downloaded from Upstream Author(s): diff --git a/qtc_packaging/debian_harmattan/README b/qtc_packaging/debian_harmattan/README index cdce769..e67f568 100644 --- a/qtc_packaging/debian_harmattan/README +++ b/qtc_packaging/debian_harmattan/README @@ -1,4 +1,4 @@ -The Debian Package googlelatitude +The Debian Package latitudeupdater ---------------------------- Comments regarding the Package diff --git a/qtc_packaging/debian_harmattan/changelog b/qtc_packaging/debian_harmattan/changelog index 006c02e..073fff5 100644 --- a/qtc_packaging/debian_harmattan/changelog +++ b/qtc_packaging/debian_harmattan/changelog @@ -1,10 +1,10 @@ -googlelatitude (0.7-1) unstable; urgency=low +latitudeupdater (0.7-1) unstable; urgency=low * Enable invoker -- Rodrigo Linfati Wed, 10 Aug 2011 19:48:00 +0200 -googlelatitude (0.7-0) unstable; urgency=low +latitudeupdater (0.7-0) unstable; urgency=low * OAuth Support * Google Latitude 1.0 API Support @@ -15,20 +15,20 @@ googlelatitude (0.7-0) unstable; urgency=low -- Rodrigo Linfati Thu, 21 Jul 2011 21:58:20 +0200 -googlelatitude (0.6-2) unstable; urgency=low +latitudeupdater (0.6-2) unstable; urgency=low * enable use of gps+cell * fix the "start daemon" bug -- Rodrigo Linfati Thu, 27 Jan 2011 16:07:22 +0100 -googlelatitude (0.6-1) unstable; urgency=low +latitudeupdater (0.6-1) unstable; urgency=low * auto update setting for daemon, fix start at boot time, fix NaN in gps eph -- Rodrigo Linfati Wed, 26 Jan 2011 17:23:41 +0100 -googlelatitude (0.6-0) unstable; urgency=low +latitudeupdater (0.6-0) unstable; urgency=low * Daemon at boot time (default off) * If not network, do not try to update @@ -38,32 +38,32 @@ googlelatitude (0.6-0) unstable; urgency=low -- Rodrigo Linfati Wed, 26 Jan 2011 16:32:34 +0100 -googlelatitude (0.4-7) unstable; urgency=low +latitudeupdater (0.4-7) unstable; urgency=low * fix maximal accuracy -- Rodrigo Linfati Tue, 25 Jan 2011 00:48:01 +0100 -googlelatitude (0.4-6) unstable; urgency=low +latitudeupdater (0.4-6) unstable; urgency=low * GUI for the daemon mode -- Rodrigo Linfati Sat, 22 Jan 2011 23:26:09 +0100 -googlelatitude (0.4-5) unstable; urgency=low +latitudeupdater (0.4-5) unstable; urgency=low * New daemon mode * bugs fix -- Rodrigo Linfati Sat, 22 Jan 2011 18:51:23 +0100 -googlelatitude (0.4-0) unstable; urgency=low +latitudeupdater (0.4-0) unstable; urgency=low * Bump version -- Rodrigo Linfati Wed, 05 May 2010 16:14:00 +0200 -googlelatitude (0.3-9) unstable; urgency=low +latitudeupdater (0.3-9) unstable; urgency=low * Cleanup, preparation for pr1.2 * Now Google Location and Buzz @@ -71,74 +71,74 @@ googlelatitude (0.3-9) unstable; urgency=low -- Rodrigo Linfati Wed, 05 May 2010 16:05:51 +0200 -googlelatitude (0.3-8) unstable; urgency=low +latitudeupdater (0.3-8) unstable; urgency=low * Testing, minor bugs fix -- Rodrigo Linfati Sat, 02 Jan 2010 03:53:51 +0100 -googlelatitude (0.3-7) unstable; urgency=low +latitudeupdater (0.3-7) unstable; urgency=low * libqt4 -> diablo = OK, fremantle -> fail * libqt4-maemo5 -> fremantle => OK -- Rodrigo Linfati Sat, 02 Jan 2010 03:40:22 +0100 -googlelatitude (0.3-6) unstable; urgency=low +latitudeupdater (0.3-6) unstable; urgency=low * test libqt4 + libqt4-maemo5 -- Rodrigo Linfati Sat, 02 Jan 2010 02:44:33 +0100 -googlelatitude (0.3-5) unstable; urgency=low +latitudeupdater (0.3-5) unstable; urgency=low * some fix, support to auto update, auto stop on real-fix -- Rodrigo Linfati Fri, 01 Jan 2010 23:32:32 +0100 -googlelatitude (0.3-1) unstable; urgency=low +latitudeupdater (0.3-1) unstable; urgency=low * initial support to liblocation -- Rodrigo Linfati Fri, 01 Jan 2010 16:20:56 +0100 -googlelatitude (0.2-2) unstable; urgency=low +latitudeupdater (0.2-2) unstable; urgency=low * minor change in gui -- Rodrigo Linfati Tue, 29 Dec 2009 23:23:46 +0100 -googlelatitude (0.2-1) unstable; urgency=low +latitudeupdater (0.2-1) unstable; urgency=low * more fix... -- Rodrigo Linfati Tue, 29 Dec 2009 21:53:01 +0100 -googlelatitude (0.2-0) unstable; urgency=low +latitudeupdater (0.2-0) unstable; urgency=low * Google Maps via WebKit -- Rodrigo Linfati Tue, 29 Dec 2009 12:58:25 +0100 -googlelatitude (0.1-4) unstable; urgency=low +latitudeupdater (0.1-4) unstable; urgency=low * add libgconf2-dev depend... ¿why? -- Rodrigo Linfati Wed, 16 Dec 2009 19:08:20 +0100 -googlelatitude (0.1-3) unstable; urgency=low +latitudeupdater (0.1-3) unstable; urgency=low * fix depend from libqt4-dev to libqt4-maemo5-dev -- Rodrigo Linfati Wed, 16 Dec 2009 16:35:12 +0100 -googlelatitude (0.1-2) unstable; urgency=low +latitudeupdater (0.1-2) unstable; urgency=low * fix section -- Rodrigo Linfati Wed, 16 Dec 2009 15:34:52 +0100 -googlelatitude (0.1-1) unstable; urgency=low +latitudeupdater (0.1-1) unstable; urgency=low * Initial release diff --git a/qtc_packaging/debian_harmattan/control b/qtc_packaging/debian_harmattan/control index 2f69d36..e347342 100644 --- a/qtc_packaging/debian_harmattan/control +++ b/qtc_packaging/debian_harmattan/control @@ -1,19 +1,20 @@ -Source: googlelatitude +Source: latitudeupdater Section: user/navigation Priority: optional Maintainer: Rodrigo Linfati Build-Depends: debhelper (>= 5), libqt4-dev, libqtm-dev, applauncherd-dev, aegis-builder Standards-Version: 3.7.3 -Homepage: http://googlelatitude.garage.maemo.org/ +Homepage: http://www.linfati.com/ XSBC-Bugtracker: mailto:rodrigo@linfati.cl -Package: googlelatitude +Package: latitudeupdater Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends} Description: Google Latitude Updater Features: - Retrieve location using Cell Tower and/or Gps and send to Google Latitude - Run as Daemon + Note: This is an unofficial client XSBC-Maemo-Display-Name: LatitudeUpdater XB-Maemo-Icon-26: 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 diff --git a/qtc_packaging/debian_harmattan/copyright b/qtc_packaging/debian_harmattan/copyright index 73b9a6b..33b3d11 100644 --- a/qtc_packaging/debian_harmattan/copyright +++ b/qtc_packaging/debian_harmattan/copyright @@ -1,7 +1,7 @@ This package was debianized by Rodrigo Linfati on sab, 02 gen 2010 22:12:52 +0100. -It was downloaded from +It was downloaded from Upstream Author(s): diff --git a/qtc_packaging/debian_harmattan/googlelatitude.aegis b/qtc_packaging/debian_harmattan/googlelatitude.aegis index e950644..39bc771 100644 --- a/qtc_packaging/debian_harmattan/googlelatitude.aegis +++ b/qtc_packaging/debian_harmattan/googlelatitude.aegis @@ -1,30 +1,10 @@ - - - - - - - - - - - - - - diff --git a/qtc_packaging/debian_harmattan/manifest.aegis b/qtc_packaging/debian_harmattan/manifest.aegis new file mode 100644 index 0000000..e69de29 diff --git a/qtc_packaging/debian_harmattan/rules b/qtc_packaging/debian_harmattan/rules index e1b9481..40675ed 100755 --- a/qtc_packaging/debian_harmattan/rules +++ b/qtc_packaging/debian_harmattan/rules @@ -34,7 +34,7 @@ install: build dh_testroot dh_clean -k dh_installdirs - $(MAKE) INSTALL_ROOT="$(CURDIR)"/debian/googlelatitude install + $(MAKE) INSTALL_ROOT="$(CURDIR)"/debian/latitudeupdater install # Build architecture-independent files here. binary-indep: build install diff --git a/qtc_packaging/debian_harmattan/rules.real b/qtc_packaging/debian_harmattan/rules.real index bea4b59..5b1e3f0 100755 --- a/qtc_packaging/debian_harmattan/rules.real +++ b/qtc_packaging/debian_harmattan/rules.real @@ -34,7 +34,7 @@ install: build dh_testroot dh_clean -k dh_installdirs - $(MAKE) INSTALL_ROOT="$(CURDIR)"/debian/googlelatitude install + $(MAKE) INSTALL_ROOT="$(CURDIR)"/debian/latitudeupdater install # Build architecture-independent files here. binary-indep: build install @@ -70,7 +70,7 @@ binary-arch: build install dh_gencontrol dh_md5sums dh_builddeb - aegis-deb-add -control debian/googlelatitude/DEBIAN/control .. debian/googlelatitude.aegis=_aegis + aegis-deb-add -control debian/latitudeupdater/DEBIAN/control .. debian/latitudeupdater.aegis=_aegis binary: binary-indep binary-arch .PHONY: build clean binary-indep binary-arch binary install configure diff --git a/qtc_packaging/icon-256.png b/qtc_packaging/icon-256.png new file mode 100644 index 0000000000000000000000000000000000000000..d12a6137ca5043a3f7283c064831d27e3eeb1bd7 GIT binary patch literal 25671 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

+DixfkL%?$S0-2^ZwB* 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%0A#O)Yd- zep$+FhOt7J8~602N_)Kp z&l;03Abx~3ejx|q!wca z4`{LTvvjvBVjW{qd!8_PO3o``DW;t46i=b#eZqTBhDySHI(b##z>id=NX_G|_s%=B zPotBYuX&hu^rld2x;E+j-0&;lgNF?4f6~Pxr=aG-A{I3!&WUI@Zv2qnVGd z7O*eg+u2)|eNZ%f_r$v5dDOaZ*izCw5bgsjDt6YwMCQI7`Jz`6#j@9|<1V{l1{eBO zqec!Fy59EsKB~o-2D;A_qZy)hG7og6{Ls<2iZQM;)2k$?kjQ-3PukIWeHOKCI##DS zJP>IraKbsRgz&a#q*;x6d`2|nKRnL$?X1-3&`^f7cH7yiz_Qf#8MZqO=R36X)VT(o zI5*^YMD5k?+~6>wRJfZ%I$`FZraN|R-6wLiJ1n5jXD6a?j=c{X=dyGAu)kMMzqzm3 z*1N?q($1z+@hWP=cM_rf3Q5Ut9u!7~Afn?#>K9)eXT3a39ScW)pYRYgoUx0@=&SN+ z&NyQtRJXnQ@Nlf0sIN9n&gM6Q=M~1fX&NU@Yy|^ZUTU;4+t{%N7}d>4H;9{xV3WmH zztAkSbd+Lf*v{QRQ#sYA!7v_@ z;G9*8P2c^BY*lsbyJ6U9Q+}@fcsWrX7UR!cT#}JkRh{0VI3T2XXX$r57v75}wpRuV zulAKnC%@+gL8pj35somN^@tX3%ccmb&qkX`YU^pZe`wUnBc3@h_w#nm!TO!9%g7FP z&OLWm%er|@J39NRQYQxZ*xI$J#vybcmQ}xJvr$dn>vr;D(?o8@?zw3m-}0|8gZHxe z9Al;1KAoHsdwekUA`y9rIlUzw_%i+J2rYqUbURe9ASxA8*93<>ojlfk6R~PSBR;XY zgNvmI%UG--w+W)=xMx%Fn{D0m++1dKRJ+yECSMLu!(Gt%$!+wmd$cZs>Dt1T^Dr3K z)7B)>H+Jf>aX|;>)h*fcdad;s{Pd^hjZK8>j*Ct3p>a-o_oV4H#H4c9;nEn4k?_zf&%aUN*f3C)PYiR$ZrB>nAQ!FRJEcUYTO7;16V2$WB8kz7NC0 zn86iPI9khG021y;Y2vlTxl?uOh8P^crjKN3! z?}>wRW$q)eeEu_yC;5^H_XU=yM`q3$UYB;*Fwak{X%R?&-rkzoYO7$j2q!V3U5)3H zQ8m*Rpl2LY!N<~fDK!s;N=)RPV{*_UHfftp)wv-zyly9t&9ffz&ljpG7MRv3dHn`+ zkAHYiQtCM-O{3y2^H9o3+1Xh(YI~9|hP(&PZf>DAm5P*bdCA)C%(*i!7c41G%J^sM zT#gBUKT39m--uLRw2ZHyq|?%YYWm%_V%?gI%%S7Mhpf-Z&qf`H0KL_Ng`4b-EmBe> zmI}6kh_2MUP|qjzzvG>NzIqkMdLE%9%wt&_i9C`Jr|1m$9;!2a5aZdSr$a|hxNn1_ zYJPD_=~r@1fnhqJ{jd;d1($2n1F%|I9w10MX|+9m5tfKQgH|4j{RY^+v?JOwo)%5c zXAEr!tlOA$ikmPRaunjG9a?6%dUCc7Lb=eG4K@7J^u1!%NZtNA+tpBH1CE*Uvexm| zmg+vj70dBU!oaiLdq?*ZQYbrN0dj;piBz*?T$i--jQeRy zJs{tQR`xNdC$gX=Lxn3Eh}7X!IL39HpIZk+gYbEr(R}J`=PUhY^^?XbJL2wz0?I{E z6ksPHsS7Z&+$RDSVE~g0N1f%UQ`aH;iTV8`ddk~6_e62HC}90yRgnLDrS@rX(nVTE z_k~x^sUIV(0cWUeHYCwhO~q7_3WJ!-qgi2MK)|X>%xXT3b~AbZ>_ckdvBx6M1$y-{ zq`5M8JDZFXCNcXAzr}bG#~KLQ(g?UshmxSJHZxZAKew`!>7&kRC2v3Py14c6HvH)m zy{--uibq8$_Ch>wN{AZ2L(Td{&zXpIx2ln9?hv%>n;+p_8gUBx`pI|gSp zAK&Hne}C-rZg}!1Ba4U0tlTObQ*8!Svk)0Z1(U-D!Y16$Y43}Sn%9mPL=IunM&_~` zALQwuaXERa$z3+GT9&`%li@ve4#TmHH`}pQo_NpF?HfRv4c$>2t zvMwEgsKcseVH)HNsZ!Fc3CHM8MbiQL*WK=j{~Mr9kNXb}su&jUnAL{EQFUQ8Eg_Bi*uJCcs0Z9B9--wRZ}%(X1ETt6N|YENV_r8r?mi1(%^Em zkz>*!%e)eKp;)yC5HHsEIU~HZn(}8Dyz;Vj$xF@k{R3J)jp_g+;`VQ^SH5uQlF11uU{3zDd+*cLcqkzHxY~(Q$$&f9-u%!Mj6pIKTLf^X)k*f;!L5NyKzfQorNvFDY1tUi=;JN<-{T zKH-={DdykggM`AVD0n`nY-riGBi6*f2Oqv95$W9(ns*z1`&-2UYrsKwfb2IN?{jO( zuis1`zJ;;M@C?7gzq#|mZ);=f21E?q6;yeoUEuR=e3GqBbZuJ(+^+b2gZ;y2xvl*0 z{nNVPxA!OS6WEkU!D3R-GQwXh1dBDJg%tG4A|Ln2C*HZFn%AX&zMNafxRZ}V%Yu$t zl8lfwC&#UhjQ9BKmm~5T6Ky;+G>mAS(yx3*_^UmC$7@T4XjEM= z$ii<--l6myq6l+(;m7i!As*rvWYioPhA1Lz{)%klRR((QE9fzC=QKKUm;?Z^SQA8l z;HZGdf+!wvK=v7-j!sS@7=r=59AZF)g&C>Xxi?g2`vD?@A-=1mSI#3x4KWHH zjVIs^MVN$vhzbN@XA!~}^x<((MD{b@H*QHc%QvtDfmx@QUNFyPELE<=OE`zZ5w$p~ zs%QG2f-Kx%8HV=~_c*%rgklf(U0~mdH2R-J*)l2T#LVy}Z$nh}%K6~S8o;KYOIQkF z!_?uk2|uDY-H+mEINReA1w>v$K$rts4|@C`*0?QDhS*j?R9L;qCmEjg)Ss@nol=G` zKk))6m&5~tAWw!BAJ_30`@x^e0a*mmFRm?hc17x=>NE5My6k9u@Eb@?(|eDVv&LoT zlQRaNkKzXu#w>S&OXF9Hhp3Y7Hef@+`RcCFc;Z0Rp`TC~rHAnC_J&>95!;N#D=U_d ziFF@ z>}L%9C}xC?(kIw(OAX4|tAX67Zmn1@pRe9X41L7nl->RFG=4ww@!FsxGX&tQ6>;Jp ztS7`1-BOW$IPWTK?e^uo`G_Ch6QtwcB&+veq0}jmivzd77KZ8lw_1d6{CG*EwRWv& z{S5=a5)7nVuH1fL8q{6h416=>AX5ljSvjo!Zq(mk2BSzgWaPk@C;&9z9)*pzDJGA+ zH1)?svdvQwg^)4W4+ZT}{TEl#uVR-bTie@RYjA*#J5K59oi}$$(Tyj<2w*Us8h`e3 z==J+1iLnm!d%5W&^avQ?7ChU{H|KAT#+STd;MEqL-+}(a&7tDmi=yy)k3xC0^-l|m z7tIqPmSwF@=8z38D`fhCgK7qnnj~U=noyhu))^J=hKK*I`Y#8K|7ouu8Bruuxk{HA z8UWY1zyh2#9MwmGv}z%oog4ng)b=}~e{!NAGJpX?H&*7K79gr?7;8y^qsTw_ZZKn+ z!)o*SAd^}o#InK=xJj@ucroh;wD4;t=tOysgq~J z>#xno{j)b+O>j?h9aZH|d%Cud0^etYesW=73ahpy+uL^8}_L|fbls}?@D1oB~@_!{oGQEUTi=H z#CRglS``dAXh3(%fI=52S>@nAjq`31how?+;1X16B1GB)AThux1Qc~8{E8z;&~E8} zb^A~$1s*fRrz>s=j(;-)O0blT=2 zuR{EzSw-YX$NOVW{4bnsfJaQ;1kRph05Vx|$cARbQ-Biol7%Ax69bgDNr`exM>a}M|iKiKgsOt$#{qlwV;&qRc(4OUHK^QZK-+hs^`C~pRVVmJ7Q9}F~$6Max9H@!@0 zd!$c?-T=V#4*`N?|;m}eP);SIZJ2a#Gi?>iH)N_-qJ%hnl@s4nguBRW5otJqCE&l%vW1EIwnR+xc zLUL9*vTe>3o$7y_-J$2+9>doQpuUh3gPk6cPxjPP+wle%Ab2K6MmC6(v{@~y8 z?xA=daVNh8(x-c5p3AN1OMa=gp|V?)JPxC^TC{k+Nj|T;M_?&D z$C-L9`|b40sQUIZ+c{#i;0*hfTRtuo8Jj6Rj}0!auRQ%#;u|VgqX<`8pc9`N{dH&9 zuWQ?#&elS*@k#qs*SvW~`W&N*b zz<$*Xe=@9g=C6AAPqpLG(H&>zgm?j;sy|iYPo)S~lQE`E-@?%YQnkN&b>UB?MAz}Q z*FjD}|E9VNHJQ_pr2hw8;N|lx!iawjD}~q7XV`%Zh!65o{L3pyL2OGwvHfrAdQ3Ml z?U(&b)$U(*i-1?E_(usBZkL6!Qc9)<>|Zx2!$UWn89eKhAeSle1oBs}{wX_-c|D!> z`C$uXWAmr}_)|}w^tj##59bqbQ?w zwPc~hhJx9B`ZiF-OVv^@hu_jhKg&6XE8|Z+|9@jVYYCcpCqej5xS2rkzZ=|!I7ZEW z;^<1?)Kw39@Gs_-NXaZEs!Rxw@iO?!P$atD{o)r^_3uXC<~%WdiFX6wf0(V`|7E(X zg;Y*A;y8|fS6L#U%K1+QHC*Vn801j(PqFs;-H%C^*k!@HAwIusx_}@_xT^lrAO8Vs z_WS%}i6BEE>NRog&*WAu4gEKLMB$zi@YjJod#?YIul+k{wc)7j+46n{e7bV1-(zm} zi`(OtCrQMUcTA$VMF0e~&W(recpbz?2%8P^udf4rE!isN1UMV2%KBfo9~-L+h}PS7 zK34~pr_a`Pz+J59q9im?-4yFl(vR7b05jRWesQBz4zQ9EJ11szcqzZPy17Mpcj?7V zHzfk0=J-JDy#Go*rI*K}H!l^K8EsxZk=>MhbnrQU^>Uq{jll|a$U>iuLFCGNZy!IU z-&UF?K7Skxz11@@>L9zHiTj(w{OhJSlzBc;LYqmG^%~SIOUb@?T6*|7D)!H{=Ymd~UA^{55&e z^-he2bmU(-TUGKoMq$g_?$=Zp-jCYLdFe%!SXJ`iF{7k!MDgOw^!uvi|=CJ#3*JJ!)E+D^81HtBuirlFE`9b7VbsR+0WCF?cmLc-wHVD!L(ACX4Pp+jZ`{FFEMw79GGrC&Q`_@MB`h z>0~Sk`rZvrT$UXS4%r>LS+bFF*IG6x2Hq|gEO4DKDAO9g$Q|sEuXapb=2}})LXA2` zGmamRmbC2Swc6{vc^$FM@Of&*_G2nbf;);T#8^q4Gtn^*_Y2*Z>vIP$=XKX*4PI_# zwCP`wo%IUIU6D_tta6jcUAb8K?sD#C*TiS=T-dyu?BFtipf&CyS#S|p$Dn%~!M)AO zy|~K32Ej$^c7D*kRnWc0;(tHj?=Jc~ivG@n|39aSU;@v82uE*)lhcV0>ua;%@@ezP zw@$1rb4a`*G6lTOO&9#218wm{Hl5kQQX@Ng|9x(;GEsZauEi)mrzE&ad-V2b$!on* xC(zv^Zgy2qN!4oVvfdIj| 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 vl!VM0dI*%LLZx#~#pfm( - - qml/main.qml - qml/MainPage.qml - - -- 1.7.9.5