34
34
#include <click/download-manager.h>
35
35
#include <click/launcher.h>
36
36
#include <click/dbus_constants.h>
37
#include <click/departments-db.h>
38
39
#include <boost/algorithm/string/replace.hpp>
57
DepartmentUpdater::DepartmentUpdater(const std::shared_ptr<click::DepartmentsDb>& depts)
62
void DepartmentUpdater::store_department(const PackageDetails& details)
65
// store package -> department mapping in sqlite db
68
if (!details.department.empty())
72
depts->store_package_mapping(details.package.name, details.department);
73
qDebug() << "Storing mapping for" << QString::fromStdString(details.package.name) << ":" << QString::fromStdString(details.department);
75
catch (const std::exception& e)
77
qWarning() << "Failed to store package mapping for package '"
78
<< QString::fromStdString(details.package.name)
79
<< "', department '" << QString::fromStdString(details.department)
80
<< "':" << QString::fromStdString(e.what());
85
qWarning() << "Department is empty for package" << QString::fromStdString(details.package.name);
56
90
// Preview base class
58
92
Preview::Preview(const unity::scopes::Result& result,
59
93
const unity::scopes::ActionMetadata& metadata,
60
94
const QSharedPointer<click::web::Client>& client,
61
const QSharedPointer<click::network::AccessManager>& nam)
95
const QSharedPointer<click::network::AccessManager>& nam,
96
std::shared_ptr<click::DepartmentsDb> depts)
62
97
: PreviewQueryBase(result, metadata)
64
strategy.reset(choose_strategy(result, metadata, client, nam));
99
strategy.reset(choose_strategy(result, metadata, client, nam, depts));
67
102
PreviewStrategy* Preview::choose_strategy(const unity::scopes::Result &result,
68
103
const unity::scopes::ActionMetadata &metadata,
69
104
const QSharedPointer<web::Client> &client,
70
const QSharedPointer<click::network::AccessManager>& nam)
105
const QSharedPointer<click::network::AccessManager>& nam,
106
std::shared_ptr<click::DepartmentsDb> depts)
72
108
if (metadata.scope_data().which() != scopes::Variant::Type::Null) {
73
109
auto metadict = metadata.scope_data().get_dict();
81
117
<< " and close_preview="
82
118
<< metadict.count(click::Preview::Actions::CLOSE_PREVIEW);
84
return new InstalledPreview(result, metadata, client);
120
return new InstalledPreview(result, metadata, client, depts);
85
121
} else if (metadict.count("action_id") != 0 && metadict.count("download_url") != 0) {
86
122
std::string action_id = metadict["action_id"].get_string();
87
123
std::string download_url = metadict["download_url"].get_string();
88
124
if (action_id == click::Preview::Actions::INSTALL_CLICK) {
89
return new InstallingPreview(download_url, result, client, nam);
125
return new InstallingPreview(download_url, result, client, nam, depts);
91
127
qWarning() << "unexpected action id " << QString::fromStdString(action_id)
92
128
<< " given with download_url" << QString::fromStdString(download_url);
93
return new UninstalledPreview(result, client);
129
return new UninstalledPreview(result, client, depts);
95
131
} else if (metadict.count(click::Preview::Actions::UNINSTALL_CLICK) != 0) {
96
132
return new UninstallConfirmationPreview(result);
97
133
} else if (metadict.count(click::Preview::Actions::CONFIRM_UNINSTALL) != 0) {
98
134
return new UninstallingPreview(result, client);
99
135
} else if (metadict.count(click::Preview::Actions::RATED) != 0) {
100
return new InstalledPreview(result, metadata, client);
136
return new InstalledPreview(result, metadata, client, depts);
102
138
qWarning() << "preview() called with unexpected metadata. returning uninstalled preview";
103
return new UninstalledPreview(result, client);
139
return new UninstalledPreview(result, client, depts);
106
142
// metadata.scope_data() is Null, so we return an appropriate "default" preview:
109
145
return new InstalledScopePreview(result);
111
147
if (result["installed"].get_bool() == true) {
112
return new InstalledPreview(result, metadata, client);
148
return new InstalledPreview(result, metadata, client, depts);
114
return new UninstalledPreview(result, client);
150
return new UninstalledPreview(result, client, depts);
340
376
reply->push(downloadErrorWidgets());
344
379
// class InstallingPreview
346
381
InstallingPreview::InstallingPreview(const std::string &download_url,
347
382
const unity::scopes::Result &result,
348
383
const QSharedPointer<click::web::Client>& client,
349
const QSharedPointer<click::network::AccessManager> &nam)
350
: PreviewStrategy(result, client), download_url(download_url),
351
downloader(new click::Downloader(nam))
384
const QSharedPointer<click::network::AccessManager> &nam,
385
std::shared_ptr<click::DepartmentsDb> depts)
386
: PreviewStrategy(result, client), DepartmentUpdater(depts),
387
download_url(download_url),
388
downloader(new click::Downloader(nam)),
384
422
std::string object_path = rc.first;
385
423
qDebug() << "Successfully created UDM Download.";
386
populateDetails([this, reply, object_path](const PackageDetails &details){
424
populateDetails([this, reply, object_path](const PackageDetails &details) {
425
store_department(details);
387
426
reply->push(headerWidgets(details));
388
427
reply->push(progressBarWidget(object_path));
389
428
reply->push(descriptionWidgets(details));
420
458
// class InstalledPreview
422
460
InstalledPreview::InstalledPreview(const unity::scopes::Result& result,
423
461
const unity::scopes::ActionMetadata& metadata,
424
const QSharedPointer<click::web::Client>& client)
462
const QSharedPointer<click::web::Client>& client,
463
const std::shared_ptr<click::DepartmentsDb>& depts)
425
464
: PreviewStrategy(result, client),
465
DepartmentUpdater(depts),
426
466
metadata(metadata)
486
526
getApplicationUri(manifest, [this, reply, manifest, app_name, &review](const std::string& uri) {
487
527
populateDetails([this, reply, uri, manifest, app_name, &review](const PackageDetails &details){
528
store_department(details);
488
529
reply->push(headerWidgets(details));
489
530
reply->push(createButtons(uri, manifest));
490
531
reply->push(descriptionWidgets(details));
685
726
// class UninstalledPreview
687
728
UninstalledPreview::UninstalledPreview(const unity::scopes::Result& result,
688
const QSharedPointer<click::web::Client>& client)
689
: PreviewStrategy(result, client)
729
const QSharedPointer<click::web::Client>& client,
730
const std::shared_ptr<click::DepartmentsDb>& depts)
731
: PreviewStrategy(result, client),
732
DepartmentUpdater(depts)
699
742
qDebug() << "in UninstalledPreview::run, about to populate details";
701
744
populateDetails([this, reply](const PackageDetails &details){
745
store_department(details);
702
746
reply->push(headerWidgets(details));
703
747
reply->push(uninstalledActionButtonWidgets(details));
704
748
reply->push(descriptionWidgets(details));
748
792
// TODO: this class should be removed once uninstall() is handled elsewhere.
749
793
UninstallingPreview::UninstallingPreview(const unity::scopes::Result& result,
750
794
const QSharedPointer<click::web::Client>& client)
751
: UninstalledPreview(result, client)
795
: UninstalledPreview(result, client, nullptr)
754
798
UninstallingPreview::~UninstallingPreview()