~unity-team/unity-scope-click/devel

« back to all changes in this revision

Viewing changes to libclickscope/click/preview.cpp

  • Committer: Tarmac
  • Author(s): Pawel Stolowski
  • Date: 2014-07-16 13:57:55 UTC
  • mfrom: (310.2.13 populate-departments-db)
  • Revision ID: tarmac-20140716135755-bsuqlp22axfwvvd5
Populate departments database in the store scope. Use slugs for unique department ids when parsing. Implemented a tool that initializes or updates departments db.

Approved by Alejandro J. Cura, PS Jenkins bot.

Show diffs side-by-side

added added

removed removed

Lines of Context:
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>
37
38
 
38
39
#include <boost/algorithm/string/replace.hpp>
39
40
 
53
54
 
54
55
namespace click {
55
56
 
 
57
DepartmentUpdater::DepartmentUpdater(const std::shared_ptr<click::DepartmentsDb>& depts)
 
58
    : depts(depts)
 
59
{
 
60
}
 
61
 
 
62
void DepartmentUpdater::store_department(const PackageDetails& details)
 
63
{
 
64
    //
 
65
    // store package -> department mapping in sqlite db
 
66
    if (depts)
 
67
    {
 
68
        if (!details.department.empty())
 
69
        {
 
70
            try
 
71
            {
 
72
                depts->store_package_mapping(details.package.name, details.department);
 
73
                qDebug() << "Storing mapping for" << QString::fromStdString(details.package.name) << ":" << QString::fromStdString(details.department);
 
74
            }
 
75
            catch (const std::exception& e)
 
76
            {
 
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());
 
81
            }
 
82
        }
 
83
        else
 
84
        {
 
85
            qWarning() << "Department is empty for package" << QString::fromStdString(details.package.name);
 
86
        }
 
87
    }
 
88
}
 
89
 
56
90
// Preview base class
57
91
 
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)
63
98
{
64
 
    strategy.reset(choose_strategy(result, metadata, client, nam));
 
99
    strategy.reset(choose_strategy(result, metadata, client, nam, depts));
65
100
}
66
101
 
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)
71
107
{
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);
83
119
 
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);
90
126
            } else {
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);
94
130
            }
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);
101
137
        } else {
102
138
            qWarning() << "preview() called with unexpected metadata. returning uninstalled preview";
103
 
            return new UninstalledPreview(result, client);
 
139
            return new UninstalledPreview(result, client, depts);
104
140
        }
105
141
    } else {
106
142
        // metadata.scope_data() is Null, so we return an appropriate "default" preview:
109
145
            return new InstalledScopePreview(result);
110
146
        }
111
147
        if (result["installed"].get_bool() == true) {
112
 
            return new InstalledPreview(result, metadata, client);
 
148
            return new InstalledPreview(result, metadata, client, depts);
113
149
        } else {
114
 
            return new UninstalledPreview(result, client);
 
150
            return new UninstalledPreview(result, client, depts);
115
151
        }
116
152
    }
117
153
 
340
376
    reply->push(downloadErrorWidgets());
341
377
}
342
378
 
343
 
 
344
379
// class InstallingPreview
345
380
 
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)),
 
389
      depts_db(depts)
352
390
{
353
391
}
354
392
 
383
421
              default:
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));
416
455
    return widgets;
417
456
}
418
457
 
419
 
 
420
458
// class InstalledPreview
421
459
 
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)
427
467
{
428
468
}
485
525
    }
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
686
727
 
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)
690
733
{
691
734
}
692
735
 
699
742
qDebug() << "in UninstalledPreview::run, about to populate details";
700
743
 
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)
752
796
{
753
797
}
754
798
UninstallingPreview::~UninstallingPreview()