Merge lp:~diegosarmentero/clickmanager-plugin/sign-url into lp:clickmanager-plugin

Proposed by Diego Sarmentero
Status: Merged
Approved by: Diego Sarmentero
Approved revision: 22
Merged at revision: 12
Proposed branch: lp:~diegosarmentero/clickmanager-plugin/sign-url
Merge into: lp:clickmanager-plugin
Diff against target: 839 lines (+246/-38)
27 files modified
debian/control (+3/-0)
src/application.cpp (+13/-4)
src/application.h (+10/-1)
src/clickmanager.cpp (+46/-11)
src/clickmanager.h (+19/-7)
src/clickmanager_plugin.cpp (+2/-0)
src/download/downloader.cpp (+6/-2)
src/download/downloader.h (+6/-2)
src/download_tracker.cpp (+4/-0)
src/download_tracker.h (+5/-1)
src/network/network.cpp (+3/-0)
src/network/network.h (+4/-0)
src/src.pro (+3/-2)
tests/fakedownloader.cpp (+11/-2)
tests/fakedownloader.h (+6/-2)
tests/fakenetwork.cpp (+4/-0)
tests/fakenetwork.h (+4/-0)
tests/fakeprocess.cpp (+4/-0)
tests/fakeprocess.h (+4/-0)
tests/fakessoservice.cpp (+16/-0)
tests/fakessoservice.h (+27/-0)
tests/test_main.cpp (+2/-0)
tests/testapplication.cpp (+4/-0)
tests/testapplication.h (+4/-0)
tests/testclickmanager.cpp (+23/-0)
tests/testclickmanager.h (+6/-0)
tests/tests.pro (+7/-4)
To merge this branch: bzr merge lp:~diegosarmentero/clickmanager-plugin/sign-url
Reviewer Review Type Date Requested Status
PS Jenkins bot (community) continuous-integration Approve
Alejandro J. Cura (community) Approve
dobey (community) Abstain
Review via email: mp+187602@code.launchpad.net

Commit message

- Support signed url.
- Improve error handling.

Description of the change

Use ubuntuone-credentials to get the token and use that token to sign the urls when a click download needs to be started.

To post a comment you must log in.
20. By Diego Sarmentero

update debian/control to include new dependencies

Revision history for this message
dobey (dobey) wrote :

+#include <ubuntuoneauth-2.0/ssoservice.h>

This is wrong. You should only include <ssoservice> as the ubuntuoneauth-2.0 should come from the INCLUDES paths passed to the compiler (as -I/usr/include/ubuntuoneauth-2.0/ for example).

review: Needs Fixing
Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Approve (continuous-integration)
21. By Diego Sarmentero

fixing includes

Revision history for this message
Diego Sarmentero (diegosarmentero) wrote :

> +#include <ubuntuoneauth-2.0/ssoservice.h>
>
> This is wrong. You should only include <ssoservice> as the ubuntuoneauth-2.0
> should come from the INCLUDES paths passed to the compiler (as
> -I/usr/include/ubuntuoneauth-2.0/ for example).

Fixed

Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Approve (continuous-integration)
Revision history for this message
dobey (dobey) :
review: Abstain
Revision history for this message
Alejandro J. Cura (alecu) wrote :

While reviewing this I found a bug for clickmanager-plugin here: #1231422, but this branch looks good to me.

review: Approve
Revision history for this message
dobey (dobey) wrote :

I'm abstaining for now, because this really should be 2 separate branches, one which adds the ClickPlugin namespace changes, and another which depends on that one, which adds the URL signing bits. I don't want to block this too long, given our current time frame, but I do want to state such changes should be split into separate branches when they are this invasive. So I am choosing to Abstain rather than vote Needs Fixing.

22. By Diego Sarmentero

* Automatic snapshot from revision 9
[ Ɓukasz 'sil2100' Zemczak ]
* Automatic snapshot from revision 5 (bootstrap)
[ Ubuntu daily release ]
* Automatic snapshot from revision 6

Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Approve (continuous-integration)

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'debian/control'
--- debian/control 2013-09-18 13:27:46 +0000
+++ debian/control 2013-09-26 16:47:31 +0000
@@ -4,6 +4,9 @@
4Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>4Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
5Build-Depends: debhelper (>= 9),5Build-Depends: debhelper (>= 9),
6 libapt-pkg-dev,6 libapt-pkg-dev,
7 libubuntuoneauth-2.0-dev,
8 libsignon-qt5-dev,
9 libaccounts-qt5-dev,
7 qt5-default,10 qt5-default,
8 qt5-qmake,11 qt5-qmake,
9 qtbase5-dev,12 qtbase5-dev,
1013
=== modified file 'src/application.cpp'
--- src/application.cpp 2013-09-13 10:12:01 +0000
+++ src/application.cpp 2013-09-26 16:47:31 +0000
@@ -21,6 +21,8 @@
21#include <apt-pkg/debversion.h>21#include <apt-pkg/debversion.h>
22#include <QDebug>22#include <QDebug>
2323
24namespace ClickPlugin {
25
24Application::Application(QQuickItem *parent) :26Application::Application(QQuickItem *parent) :
25 QQuickItem(parent)27 QQuickItem(parent)
26{28{
@@ -47,13 +49,20 @@
47{49{
48 this->m_remote_version = version;50 this->m_remote_version = version;
4951
50 debVersioningSystem debVersion;52 int result = debVS.CmpVersion(this->m_local_version.toUtf8().data(),
5153 this->m_remote_version.toUtf8().data());
52 int result = debVersion.CmpVersion(this->m_local_version.toUtf8().data(),
53 this->m_remote_version.toUtf8().data());
54 if(result == -1) {54 if(result == -1) {
55 this->m_update = true;55 this->m_update = true;
56 }else{56 }else{
57 this->m_update = false;57 this->m_update = false;
58 }58 }
59}59}
60
61void Application::setError(QString error) {
62 this->m_error = error;
63 if(!this->m_error.isEmpty()) {
64 emit this->errorChanged();
65 }
66}
67
68}
6069
=== modified file 'src/application.h'
--- src/application.h 2013-09-13 10:12:01 +0000
+++ src/application.h 2013-09-26 16:47:31 +0000
@@ -22,6 +22,8 @@
22#include <QQuickItem>22#include <QQuickItem>
23#include <QString>23#include <QString>
2424
25namespace ClickPlugin {
26
25class Application : public QQuickItem27class Application : public QQuickItem
26{28{
27 Q_OBJECT29 Q_OBJECT
@@ -36,6 +38,7 @@
36 Q_PROPERTY(bool updateState READ updateState WRITE setUpdateState NOTIFY updatesStateChanged)38 Q_PROPERTY(bool updateState READ updateState WRITE setUpdateState NOTIFY updatesStateChanged)
37 Q_PROPERTY(bool selected READ selected WRITE setSelected NOTIFY selectedChanged)39 Q_PROPERTY(bool selected READ selected WRITE setSelected NOTIFY selectedChanged)
38 Q_PROPERTY(QString dbusPath READ dbusPath NOTIFY dbusPathChanged)40 Q_PROPERTY(QString dbusPath READ dbusPath NOTIFY dbusPathChanged)
41 Q_PROPERTY(QString error READ getError NOTIFY errorChanged)
3942
40signals:43signals:
41 void titleChanged();44 void titleChanged();
@@ -46,6 +49,7 @@
46 void updatesStateChanged();49 void updatesStateChanged();
47 void selectedChanged();50 void selectedChanged();
48 void dbusPathChanged();51 void dbusPathChanged();
52 void errorChanged();
4953
50public:54public:
51 Application(QQuickItem *parent = 0);55 Application(QQuickItem *parent = 0);
@@ -60,6 +64,7 @@
60 bool updateRequired() { return this->m_update; }64 bool updateRequired() { return this->m_update; }
61 bool updateState() { return this->m_update_state; }65 bool updateState() { return this->m_update_state; }
62 bool selected() { return this->m_selected; }66 bool selected() { return this->m_selected; }
67 QString getError() { return this->m_error; }
6368
64 void initializeApplication(QString packagename, QString title, QString version);69 void initializeApplication(QString packagename, QString title, QString version);
65 void setRemoteVersion(QString& version);70 void setRemoteVersion(QString& version);
@@ -68,6 +73,7 @@
68 void setDbusPath(QString dbuspath) { this->m_dbuspath = dbuspath; emit this->dbusPathChanged(); }73 void setDbusPath(QString dbuspath) { this->m_dbuspath = dbuspath; emit this->dbusPathChanged(); }
69 void setBinaryFilesize(int size) { this->m_binary_filesize = size; emit this->binaryFilesizeChanged(); }74 void setBinaryFilesize(int size) { this->m_binary_filesize = size; emit this->binaryFilesizeChanged(); }
70 void setIconUrl(QString icon) { this->m_icon_url = icon; emit this->iconUrlChanged(); }75 void setIconUrl(QString icon) { this->m_icon_url = icon; emit this->iconUrlChanged(); }
76 void setError(QString error);
7177
72private:78private:
73 QString m_packagename;79 QString m_packagename;
@@ -76,12 +82,15 @@
76 QString m_remote_version;82 QString m_remote_version;
77 QString m_dbuspath;83 QString m_dbuspath;
78 QString m_icon_url;84 QString m_icon_url;
85 QString m_error;
79 int m_binary_filesize;86 int m_binary_filesize;
80 bool m_update;87 bool m_update;
81 bool m_update_state;88 bool m_update_state;
82 bool m_selected;89 bool m_selected;
83};90};
8491
85QML_DECLARE_TYPE(Application)92}
93
94QML_DECLARE_TYPE(ClickPlugin::Application)
8695
87#endif // APPLICATION_H96#endif // APPLICATION_H
8897
=== modified file 'src/clickmanager.cpp'
--- src/clickmanager.cpp 2013-09-23 14:26:39 +0000
+++ src/clickmanager.cpp 2013-09-26 16:47:31 +0000
@@ -25,34 +25,54 @@
25#include <QJsonValue>25#include <QJsonValue>
26#include <QDebug>26#include <QDebug>
2727
28namespace ClickPlugin {
29
28ClickManager::ClickManager(QQuickItem *parent):30ClickManager::ClickManager(QQuickItem *parent):
29 QQuickItem(parent)31 QQuickItem(parent)
30 , m_process(this)32 , m_process(this)
31{33{
32 this->m_updatesAvailable = false;34 QObject::connect(&m_service, SIGNAL(credentialsFound(const Token&)),
33 this->connect(&(this->m_process), SIGNAL(finished(int)),35 this, SLOT(handleCredentialsFound(Token)));
36 QObject::connect(&m_service, SIGNAL(credentialsNotFound()),
37 this, SLOT(handleCredentialsNotFound()));
38 QObject::connect(&(this->m_process), SIGNAL(finished(int)),
34 this, SLOT(processOutput()));39 this, SLOT(processOutput()));
35 this->connect(&(this->network), SIGNAL(updatesFound()),40 QObject::connect(&(this->m_network), SIGNAL(updatesFound()),
36 this, SLOT(processUpdates()));41 this, SLOT(processUpdates()));
37 this->connect(&(this->network), SIGNAL(updatesNotFound()),42 QObject::connect(&(this->m_network), SIGNAL(updatesNotFound()),
38 this, SIGNAL(updatesNotFound()));43 this, SIGNAL(updatesNotFound()));
39 this->connect(&(this->network), SIGNAL(downloadUrlFound(QString,QString)),44 QObject::connect(&(this->m_network), SIGNAL(downloadUrlFound(QString,QString)),
40 this, SLOT(downloadUrlObtained(QString,QString)));45 this, SLOT(downloadUrlObtained(QString,QString)));
41 this->connect(&(this->downloader), SIGNAL(downloadCreated(QString,QString)),46 QObject::connect(&(this->downloader), SIGNAL(downloadCreated(QString,QString)),
42 this, SLOT(downloadCreated(QString,QString)));47 this, SLOT(downloadCreated(QString,QString)));
48 QObject::connect(&(this->downloader), SIGNAL(downloadNotCreated(QString,QString)),
49 this, SLOT(downloadNotCreated(QString,QString)));
43}50}
4451
45ClickManager::~ClickManager()52ClickManager::~ClickManager()
46{53{
47}54}
4855
49void ClickManager::checkUpdates()56void ClickManager::handleCredentialsFound(Token token)
50{57{
58 qDebug() << "Credentials found.";
59 this->m_token = token;
51 QStringList args("list");60 QStringList args("list");
52 args << "--manifest";61 args << "--manifest";
53 this->m_process.start("click", args);62 this->m_process.start("click", args);
54}63}
5564
65void ClickManager::handleCredentialsNotFound()
66{
67 qDebug() << "No credentials were found.";
68 emit this->credentialsNotFound();
69}
70
71void ClickManager::checkUpdates()
72{
73 this->m_service.getCredentials();
74}
75
56void ClickManager::processOutput()76void ClickManager::processOutput()
57{77{
58 QString output(this->m_process.readAllStandardOutput());78 QString output(this->m_process.readAllStandardOutput());
@@ -72,7 +92,7 @@
72 this->m_apps[app->getPackageName()] = app;92 this->m_apps[app->getPackageName()] = app;
73 }93 }
7494
75 this->network.checkForNewVersions(this->m_apps);95 this->m_network.checkForNewVersions(this->m_apps);
76}96}
7797
78void ClickManager::processUpdates()98void ClickManager::processUpdates()
@@ -90,13 +110,20 @@
90void ClickManager::startDownload(QString packagename)110void ClickManager::startDownload(QString packagename)
91{111{
92 qDebug() << "Download Package:" << packagename;112 qDebug() << "Download Package:" << packagename;
93 this->network.getResourceUrl(packagename);113 this->m_network.getResourceUrl(packagename);
94}114}
95115
96void ClickManager::downloadUrlObtained(QString packagename, QString url)116void ClickManager::downloadUrlObtained(QString packagename, QString url)
97{117{
98 this->downloader.startDownload(packagename, url.append("?noauth=1"));118 if(this->m_token.isValid()) {
99 qDebug() << "Download Url:" << url;119 QString authHeader = this->m_token.signUrl(url, QStringLiteral("GET"));
120 qDebug() << "Download Url:" << url;
121 this->m_apps[packagename]->setError("");
122 this->downloader.startDownload(packagename, url, authHeader);
123 } else {
124 Application* app = this->m_apps[packagename];
125 app->setError("Invalid User Token");
126 }
100}127}
101128
102void ClickManager::downloadCreated(QString packagename, QString dbuspath)129void ClickManager::downloadCreated(QString packagename, QString dbuspath)
@@ -105,3 +132,11 @@
105 this->m_apps[packagename]->setDbusPath(dbuspath);132 this->m_apps[packagename]->setDbusPath(dbuspath);
106 this->m_apps[packagename]->setUpdateState(true);133 this->m_apps[packagename]->setUpdateState(true);
107}134}
135
136void ClickManager::downloadNotCreated(QString packagename, QString error)
137{
138 Application* app = this->m_apps[packagename];
139 app->setError(error);
140}
141
142}
108143
=== modified file 'src/clickmanager.h'
--- src/clickmanager.h 2013-09-23 14:20:48 +0000
+++ src/clickmanager.h 2013-09-26 16:47:31 +0000
@@ -25,23 +25,29 @@
25#include <QVariant>25#include <QVariant>
26#include <QVariantList>26#include <QVariantList>
27#include "application.h"27#include "application.h"
28#include <token.h>
2829
29#ifdef TESTS30#ifdef TESTS
30#include "fakeprocess.h"31#include "fakeprocess.h"
31#include "fakenetwork.h"32#include "fakenetwork.h"
32#include "fakedownloader.h"33#include "fakedownloader.h"
33#include "testclickmanager.h"34#include "testclickmanager.h"
35#include "fakessoservice.h"
34#else36#else
37#include <ssoservice.h>
35#include <QProcess>38#include <QProcess>
36#include "network/network.h"39#include "network/network.h"
37#include "download/downloader.h"40#include "download/downloader.h"
38#endif41#endif
3942
43using namespace UbuntuOne;
44
45namespace ClickPlugin {
46
40class ClickManager : public QQuickItem47class ClickManager : public QQuickItem
41{48{
42 Q_OBJECT49 Q_OBJECT
43 Q_DISABLE_COPY(ClickManager)50 Q_DISABLE_COPY(ClickManager)
44 Q_PROPERTY(bool updatesAvailable READ updatesAvailable NOTIFY updatesAvailableChanged)
45 Q_PROPERTY(QVariantList model READ model NOTIFY modelChanged)51 Q_PROPERTY(QVariantList model READ model NOTIFY modelChanged)
4652
47#ifdef TESTS53#ifdef TESTS
@@ -49,9 +55,9 @@
49#endif55#endif
5056
51signals:57signals:
52 void updatesAvailableChanged();
53 void modelChanged();58 void modelChanged();
54 void updatesNotFound();59 void updatesNotFound();
60 void credentialsNotFound();
55 61
56public:62public:
57 ClickManager(QQuickItem *parent = 0);63 ClickManager(QQuickItem *parent = 0);
@@ -60,7 +66,6 @@
60 Q_INVOKABLE void checkUpdates();66 Q_INVOKABLE void checkUpdates();
61 Q_INVOKABLE void startDownload(QString packagename);67 Q_INVOKABLE void startDownload(QString packagename);
6268
63 bool updatesAvailable() { return this->m_updatesAvailable; }
64 QVariantList model() const { return this->m_model; }69 QVariantList model() const { return this->m_model; }
6570
66private slots:71private slots:
@@ -68,25 +73,32 @@
68 void processUpdates();73 void processUpdates();
69 void downloadUrlObtained(QString packagename, QString url);74 void downloadUrlObtained(QString packagename, QString url);
70 void downloadCreated(QString packagename, QString dbuspath);75 void downloadCreated(QString packagename, QString dbuspath);
76 void downloadNotCreated(QString packagename, QString error);
77 void handleCredentialsFound(Token token);
78 void handleCredentialsNotFound();
7179
72private:80private:
73 bool m_updatesAvailable;
74 QHash<QString, Application*> m_apps;81 QHash<QString, Application*> m_apps;
75 QVariantList m_model;82 QVariantList m_model;
83 Token m_token;
76#ifdef TESTS84#ifdef TESTS
77 FakeNetwork network;85 FakeSsoService m_service;
86 FakeNetwork m_network;
78 FakeDownloader downloader;87 FakeDownloader downloader;
79 FakeProcess m_process;88 FakeProcess m_process;
80#else89#else
90 SSOService m_service;
81 QProcess m_process;91 QProcess m_process;
82 Network network;92 Network m_network;
83 Downloader downloader;93 Downloader downloader;
84#endif94#endif
8595
86 void checkForUpdates();96 void checkForUpdates();
87};97};
8898
89QML_DECLARE_TYPE(ClickManager)99}
100
101QML_DECLARE_TYPE(ClickPlugin::ClickManager)
90102
91#endif // CLICKMANAGER_H103#endif // CLICKMANAGER_H
92104
93105
=== modified file 'src/clickmanager_plugin.cpp'
--- src/clickmanager_plugin.cpp 2013-09-13 10:12:01 +0000
+++ src/clickmanager_plugin.cpp 2013-09-26 16:47:31 +0000
@@ -23,6 +23,8 @@
2323
24#include <qqml.h>24#include <qqml.h>
2525
26using namespace ClickPlugin;
27
26void ClickManagerPlugin::registerTypes(const char *uri)28void ClickManagerPlugin::registerTypes(const char *uri)
27{29{
28 // @uri com.ubuntu.click30 // @uri com.ubuntu.click
2931
=== modified file 'src/download/downloader.cpp'
--- src/download/downloader.cpp 2013-09-23 14:50:58 +0000
+++ src/download/downloader.cpp 2013-09-26 16:47:31 +0000
@@ -23,6 +23,8 @@
23#define DOWNLOAD_COMMAND "post-download-command"23#define DOWNLOAD_COMMAND "post-download-command"
24#define APP_ID "app_id"24#define APP_ID "app_id"
2525
26namespace ClickPlugin {
27
26Downloader::Downloader(QObject *parent) :28Downloader::Downloader(QObject *parent) :
27 QObject(parent)29 QObject(parent)
28{30{
@@ -33,7 +35,7 @@
33 this->manager = new DownloadManager("com.canonical.applications.Downloader", "/", QDBusConnection::sessionBus(), 0);35 this->manager = new DownloadManager("com.canonical.applications.Downloader", "/", QDBusConnection::sessionBus(), 0);
34}36}
3537
36void Downloader::startDownload(QString& packagename, QString& url)38void Downloader::startDownload(QString& packagename, QString& url, QString& authHeader)
37{39{
38 QVariantMap vmap;40 QVariantMap vmap;
39 QStringList args;41 QStringList args;
@@ -41,14 +43,16 @@
41 vmap[DOWNLOAD_COMMAND] = args;43 vmap[DOWNLOAD_COMMAND] = args;
42 vmap[APP_ID] = packagename;44 vmap[APP_ID] = packagename;
43 StringMap map;45 StringMap map;
46 map["Authorization"] = authHeader;
44 DownloadStruct down = DownloadStruct(url, vmap, map);47 DownloadStruct down = DownloadStruct(url, vmap, map);
45 QDBusPendingReply<QDBusObjectPath> reply = this->manager->createDownload(down);48 QDBusPendingReply<QDBusObjectPath> reply = this->manager->createDownload(down);
46 reply.waitForFinished();49 reply.waitForFinished();
47 if (reply.isError()) {50 if (reply.isError()) {
48 emit this->downloadNotCreated(packagename);51 emit this->downloadNotCreated(packagename, reply.error().message());
49 }else{52 }else{
50 QDBusObjectPath path = reply.value();53 QDBusObjectPath path = reply.value();
51 emit this->downloadCreated(packagename, path.path());54 emit this->downloadCreated(packagename, path.path());
52 }55 }
53}56}
5457
58}
5559
=== modified file 'src/download/downloader.h'
--- src/download/downloader.h 2013-09-10 19:01:19 +0000
+++ src/download/downloader.h 2013-09-26 16:47:31 +0000
@@ -24,21 +24,25 @@
24#include <QDBusObjectPath>24#include <QDBusObjectPath>
25#include "downloadmanager.h"25#include "downloadmanager.h"
2626
27namespace ClickPlugin {
28
27class Downloader : public QObject29class Downloader : public QObject
28{30{
29 Q_OBJECT31 Q_OBJECT
30public:32public:
31 explicit Downloader(QObject *parent = 0);33 explicit Downloader(QObject *parent = 0);
3234
33 void startDownload(QString& packagename, QString& url);35 void startDownload(QString& packagename, QString& url, QString& authHeader);
3436
35signals:37signals:
36 void downloadCreated(QString packagename, QString dbuspath);38 void downloadCreated(QString packagename, QString dbuspath);
37 void downloadNotCreated(QString packagename);39 void downloadNotCreated(QString packagename, QString error);
3840
39private:41private:
40 DownloadManager* manager;42 DownloadManager* manager;
41 43
42};44};
4345
46}
47
44#endif // DOWNLOADER_H48#endif // DOWNLOADER_H
4549
=== modified file 'src/download_tracker.cpp'
--- src/download_tracker.cpp 2013-09-13 10:12:01 +0000
+++ src/download_tracker.cpp 2013-09-26 16:47:31 +0000
@@ -22,6 +22,8 @@
22#include "download_tracker.h"22#include "download_tracker.h"
23#include <QDebug>23#include <QDebug>
2424
25namespace ClickPlugin {
26
25DownloadTracker::DownloadTracker(QQuickItem *parent) :27DownloadTracker::DownloadTracker(QQuickItem *parent) :
26 QQuickItem(parent)28 QQuickItem(parent)
27{29{
@@ -70,3 +72,5 @@
70 this->adaptor->start();72 this->adaptor->start();
71 }73 }
72}74}
75
76}
7377
=== modified file 'src/download_tracker.h'
--- src/download_tracker.h 2013-09-13 10:12:01 +0000
+++ src/download_tracker.h 2013-09-26 16:47:31 +0000
@@ -27,6 +27,8 @@
27#include <QDBusObjectPath>27#include <QDBusObjectPath>
28#include <download/downloadtrackeradaptor.h>28#include <download/downloadtrackeradaptor.h>
2929
30namespace ClickPlugin {
31
30class DownloadTracker : public QQuickItem32class DownloadTracker : public QQuickItem
31{33{
32 Q_OBJECT34 Q_OBJECT
@@ -61,6 +63,8 @@
61 void startService();63 void startService();
62};64};
6365
64QML_DECLARE_TYPE(DownloadTracker)66}
67
68QML_DECLARE_TYPE(ClickPlugin::DownloadTracker)
6569
66#endif // MYTYPE_H70#endif // MYTYPE_H
6771
=== modified file 'src/network/network.cpp'
--- src/network/network.cpp 2013-09-23 14:20:48 +0000
+++ src/network/network.cpp 2013-09-26 16:47:31 +0000
@@ -27,6 +27,7 @@
27#define URL_APPS "https://myapps.developer.ubuntu.com/dev/api/click-metadata/"27#define URL_APPS "https://myapps.developer.ubuntu.com/dev/api/click-metadata/"
28#define URL_PACKAGE "https://search.apps.ubuntu.com/api/v1/package/"28#define URL_PACKAGE "https://search.apps.ubuntu.com/api/v1/package/"
2929
30namespace ClickPlugin {
3031
31Network::Network(QObject *parent) :32Network::Network(QObject *parent) :
32 QObject(parent)33 QObject(parent)
@@ -127,3 +128,5 @@
127 this->_request->setUrl(QUrl(URL_PACKAGE + packagename));128 this->_request->setUrl(QUrl(URL_PACKAGE + packagename));
128 this->_nam->get(*this->_request);129 this->_nam->get(*this->_request);
129}130}
131
132}
130133
=== modified file 'src/network/network.h'
--- src/network/network.h 2013-09-10 19:01:19 +0000
+++ src/network/network.h 2013-09-26 16:47:31 +0000
@@ -25,6 +25,8 @@
25#include <QHash>25#include <QHash>
26#include "application.h"26#include "application.h"
2727
28namespace ClickPlugin {
29
28class Network : public QObject30class Network : public QObject
29{31{
30 Q_OBJECT32 Q_OBJECT
@@ -49,4 +51,6 @@
49 QHash<QString, Application*> _apps;51 QHash<QString, Application*> _apps;
50};52};
5153
54}
55
52#endif // NETWORK_H56#endif // NETWORK_H
5357
=== modified file 'src/src.pro'
--- src/src.pro 2013-09-13 15:34:29 +0000
+++ src/src.pro 2013-09-26 16:47:31 +0000
@@ -1,6 +1,6 @@
1TEMPLATE = lib1TEMPLATE = lib
2TARGET = ClickManager2TARGET = ClickManager
3QT += qml quick core dbus 3QT += qml quick core dbus xml network
4CONFIG += qt plugin4CONFIG += qt plugin
55
6TARGET = $$qtLibraryTarget($$TARGET)6TARGET = $$qtLibraryTarget($$TARGET)
@@ -52,4 +52,5 @@
52 INSTALLS += target qmldir52 INSTALLS += target qmldir
53}53}
5454
55LIBS += -lapt-pkg55QMAKE_CXXFLAGS += -I /usr/include/ubuntuoneauth-2.0 -I /usr/include/signon-qt5 -I /usr/include/accounts-qt5
56LIBS += -lapt-pkg -lubuntuoneauth-2.0 -lsignon-qt5 -laccounts-qt5
5657
=== modified file 'tests/fakedownloader.cpp'
--- tests/fakedownloader.cpp 2013-09-13 11:00:52 +0000
+++ tests/fakedownloader.cpp 2013-09-26 16:47:31 +0000
@@ -17,13 +17,22 @@
17 */17 */
1818
19#include "fakedownloader.h"19#include "fakedownloader.h"
20#include <QDebug>
21
22namespace ClickPlugin {
2023
21FakeDownloader::FakeDownloader(QObject *parent) :24FakeDownloader::FakeDownloader(QObject *parent) :
22 QObject(parent)25 QObject(parent)
23{26{
24}27}
2528
26void FakeDownloader::startDownload(QString& packagename, QString& url)29void FakeDownloader::startDownload(QString& packagename, QString& url, QString authHeader)
27{30{
28 emit this->downloadCreated(packagename, "/com/canonical/download/path");31 if(authHeader.isEmpty()) {
32 emit this->downloadNotCreated(packagename, QString("DOWNLOAD ERROR"));
33 } else {
34 emit this->downloadCreated(packagename, "/com/canonical/download/path");
35 }
36}
37
29}38}
3039
=== modified file 'tests/fakedownloader.h'
--- tests/fakedownloader.h 2013-09-13 11:00:52 +0000
+++ tests/fakedownloader.h 2013-09-26 16:47:31 +0000
@@ -21,18 +21,22 @@
2121
22#include <QObject>22#include <QObject>
2323
24namespace ClickPlugin {
25
24class FakeDownloader : public QObject26class FakeDownloader : public QObject
25{27{
26 Q_OBJECT28 Q_OBJECT
27public:29public:
28 explicit FakeDownloader(QObject *parent = 0);30 explicit FakeDownloader(QObject *parent = 0);
29 31
30 void startDownload(QString& packagename, QString& url);32 void startDownload(QString& packagename, QString& url, QString authHeader);
3133
32signals:34signals:
33 void downloadCreated(QString packagename, QString dbuspath);35 void downloadCreated(QString packagename, QString dbuspath);
34 void downloadNotCreated(QString packagename);36 void downloadNotCreated(QString packagename, QString error);
35 37
36};38};
3739
40}
41
38#endif // FAKEDOWNLOADER_H42#endif // FAKEDOWNLOADER_H
3943
=== modified file 'tests/fakenetwork.cpp'
--- tests/fakenetwork.cpp 2013-09-13 11:00:52 +0000
+++ tests/fakenetwork.cpp 2013-09-26 16:47:31 +0000
@@ -18,6 +18,8 @@
1818
19#include "fakenetwork.h"19#include "fakenetwork.h"
2020
21namespace ClickPlugin {
22
21FakeNetwork::FakeNetwork(QObject *parent) :23FakeNetwork::FakeNetwork(QObject *parent) :
22 QObject(parent)24 QObject(parent)
23{25{
@@ -37,3 +39,5 @@
37{39{
38 emit this->downloadUrlFound(packagename, "http://canonical.com");40 emit this->downloadUrlFound(packagename, "http://canonical.com");
39}41}
42
43}
4044
=== modified file 'tests/fakenetwork.h'
--- tests/fakenetwork.h 2013-09-13 11:00:52 +0000
+++ tests/fakenetwork.h 2013-09-26 16:47:31 +0000
@@ -24,6 +24,8 @@
24#include <QString>24#include <QString>
25#include "application.h"25#include "application.h"
2626
27namespace ClickPlugin {
28
27class FakeNetwork : public QObject29class FakeNetwork : public QObject
28{30{
29 Q_OBJECT31 Q_OBJECT
@@ -41,4 +43,6 @@
41 43
42};44};
4345
46}
47
44#endif // FAKENETWORK_H48#endif // FAKENETWORK_H
4549
=== modified file 'tests/fakeprocess.cpp'
--- tests/fakeprocess.cpp 2013-09-23 15:32:01 +0000
+++ tests/fakeprocess.cpp 2013-09-26 16:47:31 +0000
@@ -21,6 +21,8 @@
21#include <QTextStream>21#include <QTextStream>
22#include <QDir>22#include <QDir>
2323
24namespace ClickPlugin {
25
24FakeProcess::FakeProcess(QObject *parent) :26FakeProcess::FakeProcess(QObject *parent) :
25 QObject(parent)27 QObject(parent)
26{28{
@@ -55,3 +57,5 @@
55{57{
5658
57}59}
60
61}
5862
=== modified file 'tests/fakeprocess.h'
--- tests/fakeprocess.h 2013-09-23 15:32:01 +0000
+++ tests/fakeprocess.h 2013-09-26 16:47:31 +0000
@@ -23,6 +23,8 @@
23#include <QString>23#include <QString>
24#include <QStringList>24#include <QStringList>
2525
26namespace ClickPlugin {
27
26class FakeProcess : public QObject28class FakeProcess : public QObject
27{29{
28 Q_OBJECT30 Q_OBJECT
@@ -41,4 +43,6 @@
41 43
42};44};
4345
46}
47
44#endif // FAKEPROCESS_H48#endif // FAKEPROCESS_H
4549
=== added file 'tests/fakessoservice.cpp'
--- tests/fakessoservice.cpp 1970-01-01 00:00:00 +0000
+++ tests/fakessoservice.cpp 2013-09-26 16:47:31 +0000
@@ -0,0 +1,16 @@
1#include "fakessoservice.h"
2
3namespace ClickPlugin {
4
5FakeSsoService::FakeSsoService(QObject *parent) :
6 QObject(parent)
7{
8}
9
10void FakeSsoService::getCredentials()
11{
12 Token token("token_key", "token_secret", "consumer_key", "consumer_secret");
13 emit this->credentialsFound(token);
14}
15
16}
017
=== added file 'tests/fakessoservice.h'
--- tests/fakessoservice.h 1970-01-01 00:00:00 +0000
+++ tests/fakessoservice.h 2013-09-26 16:47:31 +0000
@@ -0,0 +1,27 @@
1#ifndef FAKESSOSERVICE_H
2#define FAKESSOSERVICE_H
3
4#include <QObject>
5#include <token.h>
6
7using namespace UbuntuOne;
8
9namespace ClickPlugin {
10
11class FakeSsoService : public QObject
12{
13 Q_OBJECT
14public:
15 explicit FakeSsoService(QObject *parent = 0);
16
17 void getCredentials();
18
19signals:
20 void credentialsFound(const Token&);
21 void credentialsNotFound();
22
23};
24
25}
26
27#endif // FAKESSOSERVICE_H
028
=== modified file 'tests/test_main.cpp'
--- tests/test_main.cpp 2013-09-13 10:12:01 +0000
+++ tests/test_main.cpp 2013-09-26 16:47:31 +0000
@@ -21,6 +21,8 @@
21#include "testapplication.h"21#include "testapplication.h"
22#include "testclickmanager.h"22#include "testclickmanager.h"
2323
24using namespace ClickPlugin;
25
24int main()26int main()
25{27{
2628
2729
=== modified file 'tests/testapplication.cpp'
--- tests/testapplication.cpp 2013-09-13 11:00:52 +0000
+++ tests/testapplication.cpp 2013-09-26 16:47:31 +0000
@@ -21,6 +21,8 @@
2121
22#include "application.h"22#include "application.h"
2323
24namespace ClickPlugin {
25
24void TestApplication::testCompareVersion()26void TestApplication::testCompareVersion()
25{27{
26 Application app;28 Application app;
@@ -30,3 +32,5 @@
30 app.setRemoteVersion(version);32 app.setRemoteVersion(version);
31 QCOMPARE(app.updateRequired(), true);33 QCOMPARE(app.updateRequired(), true);
32}34}
35
36}
3337
=== modified file 'tests/testapplication.h'
--- tests/testapplication.h 2013-09-13 11:00:52 +0000
+++ tests/testapplication.h 2013-09-26 16:47:31 +0000
@@ -23,6 +23,8 @@
2323
24#include <QtTest/QtTest>24#include <QtTest/QtTest>
2525
26namespace ClickPlugin {
27
26class TestApplication : public QObject28class TestApplication : public QObject
27{29{
28 Q_OBJECT30 Q_OBJECT
@@ -32,4 +34,6 @@
32 34
33};35};
3436
37}
38
35#endif // TESTAPPLICATION_H39#endif // TESTAPPLICATION_H
3640
=== modified file 'tests/testclickmanager.cpp'
--- tests/testclickmanager.cpp 2013-09-13 11:00:52 +0000
+++ tests/testclickmanager.cpp 2013-09-26 16:47:31 +0000
@@ -21,6 +21,8 @@
21#include "clickmanager.h"21#include "clickmanager.h"
22#include "application.h"22#include "application.h"
2323
24namespace ClickPlugin {
25
24void TestClickManager::cleanup()26void TestClickManager::cleanup()
25{27{
26 this->m_signal_counter = 0;28 this->m_signal_counter = 0;
@@ -57,3 +59,24 @@
57 QCOMPARE(app->updateState(), true);59 QCOMPARE(app->updateState(), true);
58 QCOMPARE(app->dbusPath(), QString("/com/canonical/download/path"));60 QCOMPARE(app->dbusPath(), QString("/com/canonical/download/path"));
59}61}
62
63void TestClickManager::testTokenObtained()
64{
65 ClickManager manager;
66 manager.checkUpdates();
67 QCOMPARE(manager.m_token.isValid(), true);
68}
69
70void TestClickManager::testDownloadNotCreated()
71{
72 ClickManager manager;
73 manager.checkUpdates();
74 manager.m_token = Token();
75 Application* app = manager.m_model[0].value<Application*>();
76 manager.startDownload(app->getPackageName());
77 QCOMPARE(app->updateState(), false);
78 QCOMPARE(app->dbusPath(), QString(""));
79 QCOMPARE(app->getError(), QString("Invalid User Token"));
80}
81
82}
6083
=== modified file 'tests/testclickmanager.h'
--- tests/testclickmanager.h 2013-09-13 11:00:52 +0000
+++ tests/testclickmanager.h 2013-09-26 16:47:31 +0000
@@ -23,6 +23,8 @@
2323
24#include <QtTest/QtTest>24#include <QtTest/QtTest>
2525
26namespace ClickPlugin {
27
26class TestClickManager : public QObject28class TestClickManager : public QObject
27{29{
28 Q_OBJECT30 Q_OBJECT
@@ -35,9 +37,13 @@
3537
36 void testCheckUpdates();38 void testCheckUpdates();
37 void testStartDownload();39 void testStartDownload();
40 void testTokenObtained();
41 void testDownloadNotCreated();
3842
39private:43private:
40 int m_signal_counter;44 int m_signal_counter;
41};45};
4246
47}
48
43#endif // TESTCLICKMANAGER_H49#endif // TESTCLICKMANAGER_H
4450
=== modified file 'tests/tests.pro'
--- tests/tests.pro 2013-09-13 15:34:29 +0000
+++ tests/tests.pro 2013-09-26 16:47:31 +0000
@@ -1,4 +1,4 @@
1QT += core qml quick network testlib dbus1QT += core qml quick network testlib dbus xml
22
3QT -= gui3QT -= gui
44
@@ -25,7 +25,8 @@
25 fakeprocess.cpp \25 fakeprocess.cpp \
26 ../src/download/download_struct.cpp \26 ../src/download/download_struct.cpp \
27 ../src/download/group_download_struct.cpp \27 ../src/download/group_download_struct.cpp \
28 ../src/download/hash_algorithm.cpp28 ../src/download/hash_algorithm.cpp \
29 fakessoservice.cpp
2930
30HEADERS += \31HEADERS += \
31 ../src/clickmanager_plugin.h \32 ../src/clickmanager_plugin.h \
@@ -44,9 +45,11 @@
44 fakeprocess.h \45 fakeprocess.h \
45 ../src/download/download_struct.h \46 ../src/download/download_struct.h \
46 ../src/download/group_download_struct.h \47 ../src/download/group_download_struct.h \
47 ../src/download/hash_algorithm.h48 ../src/download/hash_algorithm.h \
49 fakessoservice.h
4850
49LIBS += -lapt-pkg51QMAKE_CXXFLAGS += -I /usr/include/ubuntuoneauth-2.0 -I /usr/include/signon-qt5 -I /usr/include/accounts-qt5
52LIBS += -lapt-pkg -lubuntuoneauth-2.0 -lsignon-qt5 -laccounts-qt5
50INCLUDEPATH += ../src/53INCLUDEPATH += ../src/
5154
52DEFINES += SRCDIR=\\\"$$PWD/\\\"55DEFINES += SRCDIR=\\\"$$PWD/\\\"

Subscribers

People subscribed via source and target branches