Merge lp:~larryprice/libertine-scope/libertine-store-search into lp:libertine-scope

Proposed by Larry Price
Status: Needs review
Proposed branch: lp:~larryprice/libertine-scope/libertine-store-search
Merge into: lp:libertine-scope
Diff against target: 6037 lines (+4404/-376)
77 files modified
CMakeLists.txt (+7/-0)
data/CMakeLists.txt (+11/-17)
data/com.canonical.libertine.ContainerManager.service (+3/-0)
data/store.svg (+77/-0)
debian/control (+18/-2)
debian/libertine-scope.install (+4/-0)
debian/libertined.install (+8/-0)
debian/rules (+2/-2)
lib/CMakeLists.txt (+1/-0)
lib/libertine-scope/CMakeLists.txt (+19/-0)
lib/libertine-scope/action.cpp (+49/-0)
lib/libertine-scope/action.h (+46/-0)
lib/libertine-scope/i18n.h (+59/-0)
lib/libertine-scope/package.cpp (+54/-0)
lib/libertine-scope/package.h (+56/-0)
lib/libertine-scope/preview.cpp (+283/-0)
lib/libertine-scope/preview.h (+93/-0)
lib/libertine-scope/service_manager.cpp (+103/-0)
lib/libertine-scope/service_manager.h (+51/-0)
manifest.json.in (+1/-1)
po/en_AU.po (+86/-6)
po/en_GB.po (+86/-6)
po/es.po (+94/-8)
po/fi.po (+86/-6)
po/fr.po (+86/-6)
po/gl.po (+86/-6)
po/hu.po (+92/-6)
po/libertine-scope.pot (+84/-5)
po/ms.po (+86/-6)
po/pt.po (+86/-6)
po/uk.po (+86/-6)
scope/CMakeLists.txt (+1/-1)
scope/apps/CMakeLists.txt (+6/-6)
scope/apps/action.cpp (+16/-23)
scope/apps/action.h (+10/-10)
scope/apps/applauncher.cpp (+8/-10)
scope/apps/applauncher.h (+6/-2)
scope/apps/config.h.in (+2/-0)
scope/apps/libertine.cpp (+1/-0)
scope/apps/localization.h (+0/-31)
scope/apps/preview.cpp (+34/-54)
scope/apps/preview.h (+21/-16)
scope/apps/query.cpp (+93/-33)
scope/apps/query.h (+4/-1)
scope/apps/scope.cpp (+11/-16)
scope/store/CMakeLists.txt (+50/-0)
scope/store/entry_point.cpp (+42/-0)
scope/store/libertine-scope.ubuntu_libertine-store.ini.in.in (+10/-0)
scope/store/query.cpp (+149/-0)
scope/store/query.h (+70/-0)
scope/store/scope.cpp (+75/-0)
scope/store/scope.h (+77/-0)
service/CMakeLists.txt (+9/-0)
service/libertine_service/appstream.py (+80/-0)
service/libertine_service/apt.py (+106/-0)
service/libertine_service/container.py (+68/-0)
service/libertine_service/dbus.py (+184/-0)
service/libertine_service/tasks.py (+149/-0)
service/libertined (+89/-0)
tests/CMakeLists.txt (+7/-0)
tests/lib/CMakeLists.txt (+1/-0)
tests/lib/libertine-scope/CMakeLists.txt (+24/-0)
tests/lib/libertine-scope/mock_service_manager.h (+49/-0)
tests/lib/libertine-scope/test_action.cpp (+70/-0)
tests/lib/libertine-scope/test_package.cpp (+108/-0)
tests/lib/libertine-scope/test_preview.cpp (+292/-0)
tests/scope/CMakeLists.txt (+2/-0)
tests/scope/apps/CMakeLists.txt (+9/-8)
tests/scope/apps/fake_container.cpp (+1/-1)
tests/scope/apps/fake_libertine.cpp (+2/-2)
tests/scope/apps/scopefixture.h (+3/-3)
tests/scope/apps/test_action.cpp (+47/-12)
tests/scope/apps/test_preview.cpp (+254/-37)
tests/scope/apps/test_query.cpp (+64/-17)
tests/scope/apps/test_scope.cpp (+4/-4)
tests/scope/store/CMakeLists.txt (+23/-0)
tests/scope/store/test_query.cpp (+170/-0)
To merge this branch: bzr merge lp:~larryprice/libertine-scope/libertine-store-search
Reviewer Review Type Date Requested Status
Libertine CI Bot continuous-integration Approve
Brandon Schaefer (community) Approve
Christopher Townsend Approve
Review via email: mp+300596@code.launchpad.net

Commit message

Create libertine service and store scope with simple search.

Description of the change

Create libertine service and store scope with simple search.

DBus service written in python is called libertined. All it currently does is react to a "search" request with a query string. The libertine-store scope is just an entity which calls into the service to get results for its own search.

Neither of these new tools are in a position to be published.

To post a comment you must log in.
77. By Larry Price

removing merge cruft

78. By Larry Price

removing commented code from test

Revision history for this message
Libertine CI Bot (libertine-ci-bot) wrote :

PASSED: Continuous integration, rev:76
https://jenkins.canonical.com/libertine/job/lp-libertine-scope-ci/47/
Executed test runs:
    SUCCESS: https://jenkins.canonical.com/libertine/job/build/191
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=amd64,release=vivid+overlay,testname=default/151
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=amd64,release=xenial+overlay,testname=default/151
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=amd64,release=yakkety,testname=default/151
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=i386,release=vivid+overlay,testname=default/151
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=i386,release=xenial+overlay,testname=default/151
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=i386,release=yakkety,testname=default/151
    None: https://jenkins.canonical.com/libertine/job/lp-generic-update-mp/148/console
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-0-fetch/194
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-1-sourcepkg/release=vivid+overlay/179
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-1-sourcepkg/release=xenial+overlay/179
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-1-sourcepkg/release=yakkety/179
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=vivid+overlay/172
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=vivid+overlay/172/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=xenial+overlay/172
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=xenial+overlay/172/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=yakkety/172
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=yakkety/172/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=vivid+overlay/172
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=vivid+overlay/172/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=xenial+overlay/172
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=xenial+overlay/172/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=yakkety/172
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=yakkety/172/artifact/output/*zip*/output.zip

Click here to trigger a rebuild:
https://jenkins.canonical.com/libertine/job/lp-libertine-scope-ci/47/rebuild

review: Approve (continuous-integration)
Revision history for this message
Libertine CI Bot (libertine-ci-bot) wrote :

PASSED: Continuous integration, rev:78
https://jenkins.canonical.com/libertine/job/lp-libertine-scope-ci/48/
Executed test runs:
    SUCCESS: https://jenkins.canonical.com/libertine/job/build/192
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=amd64,release=vivid+overlay,testname=default/152
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=amd64,release=xenial+overlay,testname=default/152
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=amd64,release=yakkety,testname=default/152
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=i386,release=vivid+overlay,testname=default/152
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=i386,release=xenial+overlay,testname=default/152
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=i386,release=yakkety,testname=default/152
    None: https://jenkins.canonical.com/libertine/job/lp-generic-update-mp/149/console
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-0-fetch/195
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-1-sourcepkg/release=vivid+overlay/180
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-1-sourcepkg/release=xenial+overlay/180
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-1-sourcepkg/release=yakkety/180
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=vivid+overlay/173
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=vivid+overlay/173/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=xenial+overlay/173
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=xenial+overlay/173/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=yakkety/173
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=yakkety/173/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=vivid+overlay/173
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=vivid+overlay/173/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=xenial+overlay/173
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=xenial+overlay/173/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=yakkety/173
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=yakkety/173/artifact/output/*zip*/output.zip

Click here to trigger a rebuild:
https://jenkins.canonical.com/libertine/job/lp-libertine-scope-ci/48/rebuild

review: Approve (continuous-integration)
79. By Larry Price

there is no price

Revision history for this message
Libertine CI Bot (libertine-ci-bot) wrote :

PASSED: Continuous integration, rev:79
https://jenkins.canonical.com/libertine/job/lp-libertine-scope-ci/49/
Executed test runs:
    SUCCESS: https://jenkins.canonical.com/libertine/job/build/193
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=amd64,release=vivid+overlay,testname=default/153
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=amd64,release=xenial+overlay,testname=default/153
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=amd64,release=yakkety,testname=default/153
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=i386,release=vivid+overlay,testname=default/153
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=i386,release=xenial+overlay,testname=default/153
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=i386,release=yakkety,testname=default/153
    None: https://jenkins.canonical.com/libertine/job/lp-generic-update-mp/150/console
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-0-fetch/196
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-1-sourcepkg/release=vivid+overlay/181
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-1-sourcepkg/release=xenial+overlay/181
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-1-sourcepkg/release=yakkety/181
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=vivid+overlay/174
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=vivid+overlay/174/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=xenial+overlay/174
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=xenial+overlay/174/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=yakkety/174
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=yakkety/174/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=vivid+overlay/174
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=vivid+overlay/174/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=xenial+overlay/174
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=xenial+overlay/174/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=yakkety/174
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=yakkety/174/artifact/output/*zip*/output.zip

Click here to trigger a rebuild:
https://jenkins.canonical.com/libertine/job/lp-libertine-scope-ci/49/rebuild

review: Approve (continuous-integration)
80. By Larry Price

merge

Revision history for this message
Libertine CI Bot (libertine-ci-bot) wrote :

PASSED: Continuous integration, rev:80
https://jenkins.canonical.com/libertine/job/lp-libertine-scope-ci/54/
Executed test runs:
    SUCCESS: https://jenkins.canonical.com/libertine/job/build/209
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=amd64,release=vivid+overlay,testname=default/169
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=amd64,release=xenial+overlay,testname=default/169
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=amd64,release=yakkety,testname=default/169
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=i386,release=vivid+overlay,testname=default/169
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=i386,release=xenial+overlay,testname=default/169
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=i386,release=yakkety,testname=default/169
    None: https://jenkins.canonical.com/libertine/job/lp-generic-update-mp/159/console
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-0-fetch/212
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-1-sourcepkg/release=vivid+overlay/196
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-1-sourcepkg/release=xenial+overlay/196
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-1-sourcepkg/release=yakkety/196
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=vivid+overlay/190
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=vivid+overlay/190/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=xenial+overlay/190
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=xenial+overlay/190/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=yakkety/190
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=yakkety/190/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=vivid+overlay/190
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=vivid+overlay/190/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=xenial+overlay/190
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=xenial+overlay/190/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=yakkety/190
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=yakkety/190/artifact/output/*zip*/output.zip

Click here to trigger a rebuild:
https://jenkins.canonical.com/libertine/job/lp-libertine-scope-ci/54/rebuild

review: Approve (continuous-integration)
81. By Larry Price

Merge

Revision history for this message
Libertine CI Bot (libertine-ci-bot) wrote :

FAILED: Continuous integration, rev:81
https://jenkins.canonical.com/libertine/job/lp-libertine-scope-ci/58/
Executed test runs:
    FAILURE: https://jenkins.canonical.com/libertine/job/build/219/console
    None: https://jenkins.canonical.com/libertine/job/lp-generic-update-mp/165/console
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-0-fetch/222
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-1-sourcepkg/release=vivid+overlay/207
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-1-sourcepkg/release=xenial+overlay/207
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-1-sourcepkg/release=yakkety/207
    FAILURE: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=vivid+overlay/200/console
    FAILURE: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=xenial+overlay/200/console
    FAILURE: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=yakkety/200/console
    FAILURE: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=vivid+overlay/200/console
    FAILURE: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=xenial+overlay/200/console
    FAILURE: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=yakkety/200/console

Click here to trigger a rebuild:
https://jenkins.canonical.com/libertine/job/lp-libertine-scope-ci/58/rebuild

review: Needs Fixing (continuous-integration)
82. By Larry Price

Moving new test files

Revision history for this message
Libertine CI Bot (libertine-ci-bot) wrote :

FAILED: Continuous integration, rev:82
https://jenkins.canonical.com/libertine/job/lp-libertine-scope-ci/60/
Executed test runs:
    SUCCESS: https://jenkins.canonical.com/libertine/job/build/221
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=amd64,release=vivid+overlay,testname=default/179
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=amd64,release=xenial+overlay,testname=default/179
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=amd64,release=yakkety,testname=default/179
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=i386,release=vivid+overlay,testname=default/179
    FAILURE: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=i386,release=xenial+overlay,testname=default/179/console
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=i386,release=yakkety,testname=default/179
    None: https://jenkins.canonical.com/libertine/job/lp-generic-update-mp/167/console
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-0-fetch/224
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-1-sourcepkg/release=vivid+overlay/209
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-1-sourcepkg/release=xenial+overlay/209
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-1-sourcepkg/release=yakkety/209
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=vivid+overlay/202
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=vivid+overlay/202/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=xenial+overlay/202
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=xenial+overlay/202/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=yakkety/202
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=yakkety/202/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=vivid+overlay/202
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=vivid+overlay/202/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=xenial+overlay/202
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=xenial+overlay/202/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=yakkety/202
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=yakkety/202/artifact/output/*zip*/output.zip

Click here to trigger a rebuild:
https://jenkins.canonical.com/libertine/job/lp-libertine-scope-ci/60/rebuild

review: Needs Fixing (continuous-integration)
Revision history for this message
Libertine CI Bot (libertine-ci-bot) wrote :

PASSED: Continuous integration, rev:82
https://jenkins.canonical.com/libertine/job/lp-libertine-scope-ci/62/
Executed test runs:
    SUCCESS: https://jenkins.canonical.com/libertine/job/build/223
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=amd64,release=vivid+overlay,testname=default/181
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=amd64,release=xenial+overlay,testname=default/181
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=amd64,release=yakkety,testname=default/181
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=i386,release=vivid+overlay,testname=default/181
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=i386,release=xenial+overlay,testname=default/181
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=i386,release=yakkety,testname=default/181
    None: https://jenkins.canonical.com/libertine/job/lp-generic-update-mp/169/console
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-0-fetch/226
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-1-sourcepkg/release=vivid+overlay/211
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-1-sourcepkg/release=xenial+overlay/211
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-1-sourcepkg/release=yakkety/211
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=vivid+overlay/204
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=vivid+overlay/204/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=xenial+overlay/204
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=xenial+overlay/204/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=yakkety/204
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=yakkety/204/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=vivid+overlay/204
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=vivid+overlay/204/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=xenial+overlay/204
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=xenial+overlay/204/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=yakkety/204
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=yakkety/204/artifact/output/*zip*/output.zip

Click here to trigger a rebuild:
https://jenkins.canonical.com/libertine/job/lp-libertine-scope-ci/62/rebuild

review: Approve (continuous-integration)
Revision history for this message
Christopher Townsend (townsend) wrote :

A couple of initial comments:

Need to add the python dependencies in the control file.

Also, inline comment.

83. By Larry Price

adding deps to control file

84. By Larry Price

More updates to rules, control, and fixing store install dir

Revision history for this message
Libertine CI Bot (libertine-ci-bot) wrote :

PASSED: Continuous integration, rev:84
https://jenkins.canonical.com/libertine/job/lp-libertine-scope-ci/64/
Executed test runs:
    SUCCESS: https://jenkins.canonical.com/libertine/job/build/228
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=amd64,release=vivid+overlay,testname=default/186
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=amd64,release=xenial+overlay,testname=default/186
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=amd64,release=yakkety,testname=default/186
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=i386,release=vivid+overlay,testname=default/186
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=i386,release=xenial+overlay,testname=default/186
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=i386,release=yakkety,testname=default/186
    None: https://jenkins.canonical.com/libertine/job/lp-generic-update-mp/173/console
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-0-fetch/231
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-1-sourcepkg/release=vivid+overlay/216
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-1-sourcepkg/release=xenial+overlay/216
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-1-sourcepkg/release=yakkety/216
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=vivid+overlay/209
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=vivid+overlay/209/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=xenial+overlay/209
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=xenial+overlay/209/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=yakkety/209
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=yakkety/209/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=vivid+overlay/209
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=vivid+overlay/209/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=xenial+overlay/209
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=xenial+overlay/209/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=yakkety/209
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=yakkety/209/artifact/output/*zip*/output.zip

Click here to trigger a rebuild:
https://jenkins.canonical.com/libertine/job/lp-libertine-scope-ci/64/rebuild

review: Approve (continuous-integration)
85. By Larry Price

add python3-dev and fix libertine service install

86. By Larry Price

getting python to install correctly

Revision history for this message
Libertine CI Bot (libertine-ci-bot) wrote :

FAILED: Continuous integration, rev:86
https://jenkins.canonical.com/libertine/job/lp-libertine-scope-ci/65/
Executed test runs:
    FAILURE: https://jenkins.canonical.com/libertine/job/build/230/console
    None: https://jenkins.canonical.com/libertine/job/lp-generic-update-mp/174/console
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-0-fetch/233
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-1-sourcepkg/release=vivid+overlay/218
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-1-sourcepkg/release=xenial+overlay/218
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-1-sourcepkg/release=yakkety/218
    FAILURE: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=vivid+overlay/211/console
    FAILURE: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=xenial+overlay/211/console
    FAILURE: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=yakkety/211/console
    FAILURE: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=vivid+overlay/211/console
    FAILURE: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=xenial+overlay/211/console
    FAILURE: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=yakkety/211/console

Click here to trigger a rebuild:
https://jenkins.canonical.com/libertine/job/lp-libertine-scope-ci/65/rebuild

review: Needs Fixing (continuous-integration)
87. By Larry Price

Fixing python install script

Revision history for this message
Libertine CI Bot (libertine-ci-bot) wrote :

PASSED: Continuous integration, rev:87
https://jenkins.canonical.com/libertine/job/lp-libertine-scope-ci/66/
Executed test runs:
    SUCCESS: https://jenkins.canonical.com/libertine/job/build/232
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=amd64,release=vivid+overlay,testname=default/189
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=amd64,release=xenial+overlay,testname=default/189
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=amd64,release=yakkety,testname=default/189
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=i386,release=vivid+overlay,testname=default/189
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=i386,release=xenial+overlay,testname=default/189
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=i386,release=yakkety,testname=default/189
    None: https://jenkins.canonical.com/libertine/job/lp-generic-update-mp/176/console
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-0-fetch/235
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-1-sourcepkg/release=vivid+overlay/220
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-1-sourcepkg/release=xenial+overlay/220
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-1-sourcepkg/release=yakkety/220
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=vivid+overlay/213
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=vivid+overlay/213/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=xenial+overlay/213
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=xenial+overlay/213/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=yakkety/213
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=yakkety/213/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=vivid+overlay/213
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=vivid+overlay/213/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=xenial+overlay/213
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=xenial+overlay/213/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=yakkety/213
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=yakkety/213/artifact/output/*zip*/output.zip

Click here to trigger a rebuild:
https://jenkins.canonical.com/libertine/job/lp-libertine-scope-ci/66/rebuild

review: Approve (continuous-integration)
Revision history for this message
Christopher Townsend (townsend) wrote :

Some quick comments as I'm playing with this.

1. The search should accept terms that have a space in them such as "Tux Racer" (without quotes). Folks will want to search for actual program names. We agreed this would be fixed in a follow-on MP.
2. The search histories are shared between the Desktop Apps scope and Find XApps scope. They should be separate.
3. Need to change the name to something like "Find Desktop Apps" for naming consistency.

I'll add more comments as I go:)

88. By Larry Price

Merge

89. By Larry Price

Retitle to 'Find Desktop Apps'

90. By Larry Price

remove commented out header

Revision history for this message
Libertine CI Bot (libertine-ci-bot) wrote :

FAILED: Continuous integration, rev:90
https://jenkins.canonical.com/libertine/job/lp-libertine-scope-ci/68/
Executed test runs:
    FAILURE: https://jenkins.canonical.com/libertine/job/build/241/console
    None: https://jenkins.canonical.com/libertine/job/lp-generic-update-mp/184/console
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-0-fetch/244
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-1-sourcepkg/release=vivid+overlay/229
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-1-sourcepkg/release=xenial+overlay/229
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-1-sourcepkg/release=yakkety/229
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=vivid+overlay/222
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=vivid+overlay/222/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=xenial+overlay/222
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=xenial+overlay/222/artifact/output/*zip*/output.zip
    FAILURE: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=yakkety/222/console
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=vivid+overlay/222
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=vivid+overlay/222/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=xenial+overlay/222
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=xenial+overlay/222/artifact/output/*zip*/output.zip
    FAILURE: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=yakkety/222/console

Click here to trigger a rebuild:
https://jenkins.canonical.com/libertine/job/lp-libertine-scope-ci/68/rebuild

review: Needs Fixing (continuous-integration)
Revision history for this message
Libertine CI Bot (libertine-ci-bot) wrote :

FAILED: Continuous integration, rev:90
https://jenkins.canonical.com/libertine/job/lp-libertine-scope-ci/69/
Executed test runs:
    FAILURE: https://jenkins.canonical.com/libertine/job/build/242/console
    None: https://jenkins.canonical.com/libertine/job/lp-generic-update-mp/185/console
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-0-fetch/245
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-1-sourcepkg/release=vivid+overlay/230
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-1-sourcepkg/release=xenial+overlay/230
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-1-sourcepkg/release=yakkety/230
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=vivid+overlay/223
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=vivid+overlay/223/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=xenial+overlay/223
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=xenial+overlay/223/artifact/output/*zip*/output.zip
    FAILURE: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=yakkety/223/console
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=vivid+overlay/223
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=vivid+overlay/223/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=xenial+overlay/223
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=xenial+overlay/223/artifact/output/*zip*/output.zip
    FAILURE: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=yakkety/223/console

Click here to trigger a rebuild:
https://jenkins.canonical.com/libertine/job/lp-libertine-scope-ci/69/rebuild

review: Needs Fixing (continuous-integration)
91. By Larry Price

Merge

Revision history for this message
Libertine CI Bot (libertine-ci-bot) wrote :

PASSED: Continuous integration, rev:91
https://jenkins.canonical.com/libertine/job/lp-libertine-scope-ci/72/
Executed test runs:
    SUCCESS: https://jenkins.canonical.com/libertine/job/build/281
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=amd64,release=vivid+overlay,testname=default/231
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=amd64,release=xenial+overlay,testname=default/231
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=amd64,release=yakkety,testname=default/231
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=i386,release=vivid+overlay,testname=default/231
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=i386,release=xenial+overlay,testname=default/231
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=i386,release=yakkety,testname=default/231
    None: https://jenkins.canonical.com/libertine/job/lp-generic-update-mp/214/console
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-0-fetch/283
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-1-sourcepkg/release=vivid+overlay/267
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-1-sourcepkg/release=xenial+overlay/267
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-1-sourcepkg/release=yakkety/267
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=vivid+overlay/260
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=vivid+overlay/260/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=xenial+overlay/260
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=xenial+overlay/260/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=yakkety/260
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=yakkety/260/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=vivid+overlay/260
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=vivid+overlay/260/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=xenial+overlay/260
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=xenial+overlay/260/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=yakkety/260
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=yakkety/260/artifact/output/*zip*/output.zip

Click here to trigger a rebuild:
https://jenkins.canonical.com/libertine/job/lp-libertine-scope-ci/72/rebuild

review: Approve (continuous-integration)
92. By Larry Price

undo slibdeps change

Revision history for this message
Libertine CI Bot (libertine-ci-bot) wrote :

PASSED: Continuous integration, rev:92
https://jenkins.canonical.com/libertine/job/lp-libertine-scope-ci/74/
Executed test runs:
    SUCCESS: https://jenkins.canonical.com/libertine/job/build/308
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=amd64,release=vivid+overlay,testname=default/255
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=amd64,release=xenial+overlay,testname=default/255
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=amd64,release=yakkety,testname=default/255
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=i386,release=vivid+overlay,testname=default/255
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=i386,release=xenial+overlay,testname=default/255
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=i386,release=yakkety,testname=default/255
    None: https://jenkins.canonical.com/libertine/job/lp-generic-update-mp/229/console
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-0-fetch/310
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-1-sourcepkg/release=vivid+overlay/294
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-1-sourcepkg/release=xenial+overlay/294
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-1-sourcepkg/release=yakkety/294
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=vivid+overlay/288
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=vivid+overlay/288/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=xenial+overlay/288
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=xenial+overlay/288/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=yakkety/288
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=yakkety/288/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=vivid+overlay/288
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=vivid+overlay/288/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=xenial+overlay/288
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=xenial+overlay/288/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=yakkety/288
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=yakkety/288/artifact/output/*zip*/output.zip

Click here to trigger a rebuild:
https://jenkins.canonical.com/libertine/job/lp-libertine-scope-ci/74/rebuild

review: Approve (continuous-integration)
93. By Larry Price

Installing dbus service to hopefully start as needed

Revision history for this message
Libertine CI Bot (libertine-ci-bot) wrote :

PASSED: Continuous integration, rev:93
https://jenkins.canonical.com/libertine/job/lp-libertine-scope-ci/75/
Executed test runs:
    SUCCESS: https://jenkins.canonical.com/libertine/job/build/309
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=amd64,release=vivid+overlay,testname=default/256
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=amd64,release=xenial+overlay,testname=default/256
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=amd64,release=yakkety,testname=default/256
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=i386,release=vivid+overlay,testname=default/256
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=i386,release=xenial+overlay,testname=default/256
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=i386,release=yakkety,testname=default/256
    None: https://jenkins.canonical.com/libertine/job/lp-generic-update-mp/230/console
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-0-fetch/311
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-1-sourcepkg/release=vivid+overlay/295
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-1-sourcepkg/release=xenial+overlay/295
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-1-sourcepkg/release=yakkety/295
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=vivid+overlay/289
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=vivid+overlay/289/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=xenial+overlay/289
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=xenial+overlay/289/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=yakkety/289
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=yakkety/289/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=vivid+overlay/289
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=vivid+overlay/289/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=xenial+overlay/289
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=xenial+overlay/289/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=yakkety/289
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=yakkety/289/artifact/output/*zip*/output.zip

Click here to trigger a rebuild:
https://jenkins.canonical.com/libertine/job/lp-libertine-scope-ci/75/rebuild

review: Approve (continuous-integration)
94. By Larry Price

Debian install file for libertine-scope

Revision history for this message
Libertine CI Bot (libertine-ci-bot) wrote :

PASSED: Continuous integration, rev:94
https://jenkins.canonical.com/libertine/job/lp-libertine-scope-ci/76/
Executed test runs:
    SUCCESS: https://jenkins.canonical.com/libertine/job/build/310
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=amd64,release=vivid+overlay,testname=default/257
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=amd64,release=xenial+overlay,testname=default/257
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=amd64,release=yakkety,testname=default/257
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=i386,release=vivid+overlay,testname=default/257
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=i386,release=xenial+overlay,testname=default/257
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=i386,release=yakkety,testname=default/257
    None: https://jenkins.canonical.com/libertine/job/lp-generic-update-mp/231/console
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-0-fetch/312
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-1-sourcepkg/release=vivid+overlay/296
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-1-sourcepkg/release=xenial+overlay/296
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-1-sourcepkg/release=yakkety/296
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=vivid+overlay/290
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=vivid+overlay/290/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=xenial+overlay/290
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=xenial+overlay/290/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=yakkety/290
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=yakkety/290/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=vivid+overlay/290
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=vivid+overlay/290/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=xenial+overlay/290
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=xenial+overlay/290/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=yakkety/290
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=yakkety/290/artifact/output/*zip*/output.zip

Click here to trigger a rebuild:
https://jenkins.canonical.com/libertine/job/lp-libertine-scope-ci/76/rebuild

review: Approve (continuous-integration)
95. By Larry Price

Fixing sigterm handling and python3-dev deps

96. By Larry Price

deleting recursive log

Revision history for this message
Libertine CI Bot (libertine-ci-bot) wrote :

PASSED: Continuous integration, rev:95
https://jenkins.canonical.com/libertine/job/lp-libertine-scope-ci/81/
Executed test runs:
    SUCCESS: https://jenkins.canonical.com/libertine/job/build/315
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=amd64,release=vivid+overlay,testname=default/259
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=amd64,release=xenial+overlay,testname=default/259
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=amd64,release=yakkety,testname=default/259
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=i386,release=vivid+overlay,testname=default/259
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=i386,release=xenial+overlay,testname=default/259
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=i386,release=yakkety,testname=default/259
    None: https://jenkins.canonical.com/libertine/job/lp-generic-update-mp/236/console
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-0-fetch/317
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-1-sourcepkg/release=vivid+overlay/301
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-1-sourcepkg/release=xenial+overlay/301
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-1-sourcepkg/release=yakkety/301
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=vivid+overlay/295
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=vivid+overlay/295/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=xenial+overlay/295
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=xenial+overlay/295/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=yakkety/295
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=yakkety/295/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=vivid+overlay/295
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=vivid+overlay/295/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=xenial+overlay/295
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=xenial+overlay/295/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=yakkety/295
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=yakkety/295/artifact/output/*zip*/output.zip

Click here to trigger a rebuild:
https://jenkins.canonical.com/libertine/job/lp-libertine-scope-ci/81/rebuild

review: Approve (continuous-integration)
Revision history for this message
Libertine CI Bot (libertine-ci-bot) wrote :

PASSED: Continuous integration, rev:96
https://jenkins.canonical.com/libertine/job/lp-libertine-scope-ci/82/
Executed test runs:
    SUCCESS: https://jenkins.canonical.com/libertine/job/build/316
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=amd64,release=vivid+overlay,testname=default/260
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=amd64,release=xenial+overlay,testname=default/260
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=amd64,release=yakkety,testname=default/260
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=i386,release=vivid+overlay,testname=default/260
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=i386,release=xenial+overlay,testname=default/260
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=i386,release=yakkety,testname=default/260
    None: https://jenkins.canonical.com/libertine/job/lp-generic-update-mp/237/console
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-0-fetch/318
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-1-sourcepkg/release=vivid+overlay/302
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-1-sourcepkg/release=xenial+overlay/302
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-1-sourcepkg/release=yakkety/302
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=vivid+overlay/296
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=vivid+overlay/296/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=xenial+overlay/296
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=xenial+overlay/296/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=yakkety/296
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=yakkety/296/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=vivid+overlay/296
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=vivid+overlay/296/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=xenial+overlay/296
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=xenial+overlay/296/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=yakkety/296
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=yakkety/296/artifact/output/*zip*/output.zip

Click here to trigger a rebuild:
https://jenkins.canonical.com/libertine/job/lp-libertine-scope-ci/82/rebuild

review: Approve (continuous-integration)
Revision history for this message
Christopher Townsend (townsend) wrote :

Just to capture what we've discussed thus far on IRC:

1. No results are returned the first time a search is done.
2. libertined crashes when sending it SIGTERM. (fixed)
3. python3-dev needs to be moved to Build-Depends. (fixed)
4. get_categories() should return an empty list.

97. By Larry Price

no fun, work, or pink here

Revision history for this message
Libertine CI Bot (libertine-ci-bot) wrote :

PASSED: Continuous integration, rev:97
https://jenkins.canonical.com/libertine/job/lp-libertine-scope-ci/83/
Executed test runs:
    SUCCESS: https://jenkins.canonical.com/libertine/job/build/317
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=amd64,release=vivid+overlay,testname=default/261
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=amd64,release=xenial+overlay,testname=default/261
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=amd64,release=yakkety,testname=default/261
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=i386,release=vivid+overlay,testname=default/261
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=i386,release=xenial+overlay,testname=default/261
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=i386,release=yakkety,testname=default/261
    None: https://jenkins.canonical.com/libertine/job/lp-generic-update-mp/238/console
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-0-fetch/319
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-1-sourcepkg/release=vivid+overlay/303
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-1-sourcepkg/release=xenial+overlay/303
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-1-sourcepkg/release=yakkety/303
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=vivid+overlay/297
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=vivid+overlay/297/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=xenial+overlay/297
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=xenial+overlay/297/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=yakkety/297
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=yakkety/297/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=vivid+overlay/297
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=vivid+overlay/297/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=xenial+overlay/297
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=xenial+overlay/297/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=yakkety/297
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=yakkety/297/artifact/output/*zip*/output.zip

Click here to trigger a rebuild:
https://jenkins.canonical.com/libertine/job/lp-libertine-scope-ci/83/rebuild

review: Approve (continuous-integration)
98. By Larry Price

Removing invalid isValid() call

Revision history for this message
Libertine CI Bot (libertine-ci-bot) wrote :

PASSED: Continuous integration, rev:98
https://jenkins.canonical.com/libertine/job/lp-libertine-scope-ci/84/
Executed test runs:
    SUCCESS: https://jenkins.canonical.com/libertine/job/build/318
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=amd64,release=vivid+overlay,testname=default/262
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=amd64,release=xenial+overlay,testname=default/262
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=amd64,release=yakkety,testname=default/262
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=i386,release=vivid+overlay,testname=default/262
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=i386,release=xenial+overlay,testname=default/262
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=i386,release=yakkety,testname=default/262
    None: https://jenkins.canonical.com/libertine/job/lp-generic-update-mp/239/console
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-0-fetch/320
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-1-sourcepkg/release=vivid+overlay/304
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-1-sourcepkg/release=xenial+overlay/304
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-1-sourcepkg/release=yakkety/304
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=vivid+overlay/298
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=vivid+overlay/298/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=xenial+overlay/298
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=xenial+overlay/298/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=yakkety/298
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=yakkety/298/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=vivid+overlay/298
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=vivid+overlay/298/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=xenial+overlay/298
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=xenial+overlay/298/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=yakkety/298
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=yakkety/298/artifact/output/*zip*/output.zip

Click here to trigger a rebuild:
https://jenkins.canonical.com/libertine/job/lp-libertine-scope-ci/84/rebuild

review: Approve (continuous-integration)
Revision history for this message
Christopher Townsend (townsend) wrote :

Ok, I think I'm good with, but I'd like a second set of eyes on the code. Brandon is going to review as well.

review: Approve
Revision history for this message
Brandon Schaefer (brandontschaefer) wrote :

looks good to me (3 random inlines more or less comments/question noting really)

review: Approve
Revision history for this message
Larry Price (larryprice) wrote :

responding to inlines - thanks, guys!

Revision history for this message
Stephen M. Webb (bregma) wrote :

Couple of inline comments. I have not built and tested this MP.

Revision history for this message
Larry Price (larryprice) wrote :

inlines - just about to push minor fixes

99. By Larry Price

Fixing i18n pluralizer

Revision history for this message
Libertine CI Bot (libertine-ci-bot) wrote :

FAILED: Continuous integration, rev:99
https://jenkins.canonical.com/libertine/job/lp-libertine-scope-ci/85/
Executed test runs:
    FAILURE: https://jenkins.canonical.com/libertine/job/build/320/console
    None: https://jenkins.canonical.com/libertine/job/lp-generic-update-mp/241/console
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-0-fetch/322
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-1-sourcepkg/release=vivid+overlay/306
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-1-sourcepkg/release=xenial+overlay/306
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-1-sourcepkg/release=yakkety/306
    FAILURE: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=vivid+overlay/300/console
    FAILURE: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=xenial+overlay/300/console
    FAILURE: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=yakkety/300/console
    FAILURE: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=vivid+overlay/300/console
    FAILURE: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=xenial+overlay/300/console
    FAILURE: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=yakkety/300/console

Click here to trigger a rebuild:
https://jenkins.canonical.com/libertine/job/lp-libertine-scope-ci/85/rebuild

review: Needs Fixing (continuous-integration)
100. By Larry Price

Manipulate string such that there is no visible null character

Revision history for this message
Libertine CI Bot (libertine-ci-bot) wrote :

FAILED: Continuous integration, rev:100
https://jenkins.canonical.com/libertine/job/lp-libertine-scope-ci/86/
Executed test runs:
    FAILURE: https://jenkins.canonical.com/libertine/job/build/321/console
    None: https://jenkins.canonical.com/libertine/job/lp-generic-update-mp/242/console
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-0-fetch/323
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-1-sourcepkg/release=vivid+overlay/307
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-1-sourcepkg/release=xenial+overlay/307
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-1-sourcepkg/release=yakkety/307
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=vivid+overlay/301
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=vivid+overlay/301/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=xenial+overlay/301
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=xenial+overlay/301/artifact/output/*zip*/output.zip
    FAILURE: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=yakkety/301/console
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=vivid+overlay/301
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=vivid+overlay/301/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=xenial+overlay/301
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=xenial+overlay/301/artifact/output/*zip*/output.zip
    FAILURE: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=yakkety/301/console

Click here to trigger a rebuild:
https://jenkins.canonical.com/libertine/job/lp-libertine-scope-ci/86/rebuild

review: Needs Fixing (continuous-integration)
Revision history for this message
Libertine CI Bot (libertine-ci-bot) wrote :

PASSED: Continuous integration, rev:100
https://jenkins.canonical.com/libertine/job/lp-libertine-scope-ci/87/
Executed test runs:
    SUCCESS: https://jenkins.canonical.com/libertine/job/build/329
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=amd64,release=vivid+overlay,testname=default/263
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=amd64,release=xenial+overlay,testname=default/263
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=amd64,release=yakkety,testname=default/263
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=i386,release=vivid+overlay,testname=default/263
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=i386,release=xenial+overlay,testname=default/263
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=i386,release=yakkety,testname=default/263
    None: https://jenkins.canonical.com/libertine/job/lp-generic-update-mp/249/console
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-0-fetch/331
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-1-sourcepkg/release=vivid+overlay/314
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-1-sourcepkg/release=xenial+overlay/314
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-1-sourcepkg/release=yakkety/314
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=vivid+overlay/313
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=vivid+overlay/313/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=xenial+overlay/313
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=xenial+overlay/313/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=yakkety/313
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=yakkety/313/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=vivid+overlay/313
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=vivid+overlay/313/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=xenial+overlay/313
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=xenial+overlay/313/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=yakkety/313
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=yakkety/313/artifact/output/*zip*/output.zip

Click here to trigger a rebuild:
https://jenkins.canonical.com/libertine/job/lp-libertine-scope-ci/87/rebuild

review: Approve (continuous-integration)
101. By Larry Price

Create Preview pane with base information

Revision history for this message
Libertine CI Bot (libertine-ci-bot) wrote :

PASSED: Continuous integration, rev:101
https://jenkins.canonical.com/libertine/job/lp-libertine-scope-ci/89/
Executed test runs:
    SUCCESS: https://jenkins.canonical.com/libertine/job/build/346
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=amd64,release=vivid+overlay,testname=default/279
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=amd64,release=xenial+overlay,testname=default/279
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=amd64,release=yakkety,testname=default/279
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=i386,release=vivid+overlay,testname=default/279
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=i386,release=xenial+overlay,testname=default/279
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=i386,release=yakkety,testname=default/279
    None: https://jenkins.canonical.com/libertine/job/lp-generic-update-mp/261/console
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-0-fetch/348
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-1-sourcepkg/release=vivid+overlay/331
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-1-sourcepkg/release=xenial+overlay/331
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-1-sourcepkg/release=yakkety/331
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=vivid+overlay/330
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=vivid+overlay/330/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=xenial+overlay/330
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=xenial+overlay/330/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=yakkety/330
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=yakkety/330/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=vivid+overlay/330
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=vivid+overlay/330/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=xenial+overlay/330
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=xenial+overlay/330/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=yakkety/330
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=yakkety/330/artifact/output/*zip*/output.zip

Click here to trigger a rebuild:
https://jenkins.canonical.com/libertine/job/lp-libertine-scope-ci/89/rebuild

review: Approve (continuous-integration)
102. By Larry Price

Add AppStream backend for libertine service

Revision history for this message
Libertine CI Bot (libertine-ci-bot) wrote :

PASSED: Continuous integration, rev:102
https://jenkins.canonical.com/libertine/job/lp-libertine-scope-ci/90/
Executed test runs:
    SUCCESS: https://jenkins.canonical.com/libertine/job/build/347
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=amd64,release=vivid+overlay,testname=default/280
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=amd64,release=xenial+overlay,testname=default/280
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=amd64,release=yakkety,testname=default/280
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=i386,release=vivid+overlay,testname=default/280
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=i386,release=xenial+overlay,testname=default/280
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=i386,release=yakkety,testname=default/280
    None: https://jenkins.canonical.com/libertine/job/lp-generic-update-mp/262/console
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-0-fetch/349
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-1-sourcepkg/release=vivid+overlay/332
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-1-sourcepkg/release=xenial+overlay/332
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-1-sourcepkg/release=yakkety/332
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=vivid+overlay/331
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=vivid+overlay/331/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=xenial+overlay/331
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=xenial+overlay/331/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=yakkety/331
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=yakkety/331/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=vivid+overlay/331
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=vivid+overlay/331/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=xenial+overlay/331
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=xenial+overlay/331/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=yakkety/331
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=yakkety/331/artifact/output/*zip*/output.zip

Click here to trigger a rebuild:
https://jenkins.canonical.com/libertine/job/lp-libertine-scope-ci/90/rebuild

review: Approve (continuous-integration)
103. By Larry Price

Add link to Store in Apps Scope

Revision history for this message
Libertine CI Bot (libertine-ci-bot) wrote :

PASSED: Continuous integration, rev:103
https://jenkins.canonical.com/libertine/job/lp-libertine-scope-ci/91/
Executed test runs:
    SUCCESS: https://jenkins.canonical.com/libertine/job/build/352
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=amd64,release=vivid+overlay,testname=default/285
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=amd64,release=xenial+overlay,testname=default/285
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=amd64,release=yakkety,testname=default/285
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=i386,release=vivid+overlay,testname=default/285
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=i386,release=xenial+overlay,testname=default/285
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=i386,release=yakkety,testname=default/285
    None: https://jenkins.canonical.com/libertine/job/lp-generic-update-mp/266/console
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-0-fetch/354
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-1-sourcepkg/release=vivid+overlay/337
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-1-sourcepkg/release=xenial+overlay/337
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-1-sourcepkg/release=yakkety/337
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=vivid+overlay/336
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=vivid+overlay/336/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=xenial+overlay/336
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=xenial+overlay/336/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=yakkety/336
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=yakkety/336/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=vivid+overlay/336
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=vivid+overlay/336/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=xenial+overlay/336
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=xenial+overlay/336/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=yakkety/336
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=yakkety/336/artifact/output/*zip*/output.zip

Click here to trigger a rebuild:
https://jenkins.canonical.com/libertine/job/lp-libertine-scope-ci/91/rebuild

review: Approve (continuous-integration)
Revision history for this message
Libertine CI Bot (libertine-ci-bot) wrote :

PASSED: Continuous integration, rev:103
https://jenkins.canonical.com/libertine/job/lp-libertine-scope-ci/92/
Executed test runs:
    SUCCESS: https://jenkins.canonical.com/libertine/job/build/353
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=amd64,release=vivid+overlay,testname=default/286
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=amd64,release=xenial+overlay,testname=default/286
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=amd64,release=yakkety,testname=default/286
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=i386,release=vivid+overlay,testname=default/286
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=i386,release=xenial+overlay,testname=default/286
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=i386,release=yakkety,testname=default/286
    None: https://jenkins.canonical.com/libertine/job/lp-generic-update-mp/267/console
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-0-fetch/355
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-1-sourcepkg/release=vivid+overlay/338
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-1-sourcepkg/release=xenial+overlay/338
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-1-sourcepkg/release=yakkety/338
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=vivid+overlay/337
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=vivid+overlay/337/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=xenial+overlay/337
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=xenial+overlay/337/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=yakkety/337
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=yakkety/337/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=vivid+overlay/337
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=vivid+overlay/337/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=xenial+overlay/337
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=xenial+overlay/337/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=yakkety/337
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=yakkety/337/artifact/output/*zip*/output.zip

Click here to trigger a rebuild:
https://jenkins.canonical.com/libertine/job/lp-libertine-scope-ci/92/rebuild

review: Approve (continuous-integration)
104. By Larry Price

Install/remove functionality

Revision history for this message
Libertine CI Bot (libertine-ci-bot) wrote :

PASSED: Continuous integration, rev:104
https://jenkins.canonical.com/libertine/job/lp-libertine-scope-ci/93/
Executed test runs:
    SUCCESS: https://jenkins.canonical.com/libertine/job/build/354
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=amd64,release=vivid+overlay,testname=default/287
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=amd64,release=xenial+overlay,testname=default/287
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=amd64,release=yakkety,testname=default/287
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=i386,release=vivid+overlay,testname=default/287
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=i386,release=xenial+overlay,testname=default/287
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=i386,release=yakkety,testname=default/287
    None: https://jenkins.canonical.com/libertine/job/lp-generic-update-mp/268/console
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-0-fetch/356
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-1-sourcepkg/release=vivid+overlay/339
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-1-sourcepkg/release=xenial+overlay/339
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-1-sourcepkg/release=yakkety/339
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=vivid+overlay/338
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=vivid+overlay/338/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=xenial+overlay/338
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=xenial+overlay/338/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=yakkety/338
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=yakkety/338/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=vivid+overlay/338
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=vivid+overlay/338/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=xenial+overlay/338
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=xenial+overlay/338/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=yakkety/338
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=yakkety/338/artifact/output/*zip*/output.zip

Click here to trigger a rebuild:
https://jenkins.canonical.com/libertine/job/lp-libertine-scope-ci/93/rebuild

review: Approve (continuous-integration)
105. By Larry Price

Implement progress update architecture

Revision history for this message
Libertine CI Bot (libertine-ci-bot) wrote :

PASSED: Continuous integration, rev:105
https://jenkins.canonical.com/libertine/job/lp-libertine-scope-ci/94/
Executed test runs:
    SUCCESS: https://jenkins.canonical.com/libertine/job/build/355
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=amd64,release=vivid+overlay,testname=default/288
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=amd64,release=xenial+overlay,testname=default/288
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=amd64,release=yakkety,testname=default/288
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=i386,release=vivid+overlay,testname=default/288
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=i386,release=xenial+overlay,testname=default/288
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=i386,release=yakkety,testname=default/288
    None: https://jenkins.canonical.com/libertine/job/lp-generic-update-mp/269/console
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-0-fetch/357
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-1-sourcepkg/release=vivid+overlay/340
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-1-sourcepkg/release=xenial+overlay/340
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-1-sourcepkg/release=yakkety/340
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=vivid+overlay/339
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=vivid+overlay/339/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=xenial+overlay/339
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=xenial+overlay/339/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=yakkety/339
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=yakkety/339/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=vivid+overlay/339
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=vivid+overlay/339/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=xenial+overlay/339
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=xenial+overlay/339/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=yakkety/339
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=yakkety/339/artifact/output/*zip*/output.zip

Click here to trigger a rebuild:
https://jenkins.canonical.com/libertine/job/lp-libertine-scope-ci/94/rebuild

review: Approve (continuous-integration)
106. By Larry Price

Open apps from Store, commonize scope codes

Revision history for this message
Libertine CI Bot (libertine-ci-bot) wrote :

FAILED: Continuous integration, rev:106
https://jenkins.canonical.com/libertine/job/lp-libertine-scope-ci/95/
Executed test runs:
    FAILURE: https://jenkins.canonical.com/libertine/job/build/356/console
    None: https://jenkins.canonical.com/libertine/job/lp-generic-update-mp/270/console
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-0-fetch/358
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-1-sourcepkg/release=vivid+overlay/341
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-1-sourcepkg/release=xenial+overlay/341
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-1-sourcepkg/release=yakkety/341
    FAILURE: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=vivid+overlay/340/console
    FAILURE: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=xenial+overlay/340/console
    FAILURE: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=yakkety/340/console
    FAILURE: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=vivid+overlay/340/console
    FAILURE: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=xenial+overlay/340/console
    FAILURE: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=yakkety/340/console

Click here to trigger a rebuild:
https://jenkins.canonical.com/libertine/job/lp-libertine-scope-ci/95/rebuild

review: Needs Fixing (continuous-integration)
107. By Larry Price

Removing URL_DISPATCHER

108. By Larry Price

Merge with lp:libertine-scope

Revision history for this message
Libertine CI Bot (libertine-ci-bot) wrote :

PASSED: Continuous integration, rev:108
https://jenkins.canonical.com/libertine/job/lp-libertine-scope-ci/96/
Executed test runs:
    SUCCESS: https://jenkins.canonical.com/libertine/job/build/357
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=amd64,release=vivid+overlay,testname=default/289
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=amd64,release=xenial+overlay,testname=default/289
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=amd64,release=yakkety,testname=default/289
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=i386,release=vivid+overlay,testname=default/289
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=i386,release=xenial+overlay,testname=default/289
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=i386,release=yakkety,testname=default/289
    None: https://jenkins.canonical.com/libertine/job/lp-generic-update-mp/271/console
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-0-fetch/359
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-1-sourcepkg/release=vivid+overlay/342
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-1-sourcepkg/release=xenial+overlay/342
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-1-sourcepkg/release=yakkety/342
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=vivid+overlay/341
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=vivid+overlay/341/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=xenial+overlay/341
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=xenial+overlay/341/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=yakkety/341
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=yakkety/341/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=vivid+overlay/341
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=vivid+overlay/341/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=xenial+overlay/341
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=xenial+overlay/341/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=yakkety/341
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=yakkety/341/artifact/output/*zip*/output.zip

Click here to trigger a rebuild:
https://jenkins.canonical.com/libertine/job/lp-libertine-scope-ci/96/rebuild

review: Approve (continuous-integration)
Revision history for this message
Larry Price (larryprice) wrote :

For this series, I need to split up the dbus service and the scope. The dbus service will potentially be used by the snap store, while the scope portions will potentially be dropped. A bit blurry so far, so this branch does not need to be thrown out quite yet.

Unmerged revisions

108. By Larry Price

Merge with lp:libertine-scope

107. By Larry Price

Removing URL_DISPATCHER

106. By Larry Price

Open apps from Store, commonize scope codes

105. By Larry Price

Implement progress update architecture

104. By Larry Price

Install/remove functionality

103. By Larry Price

Add link to Store in Apps Scope

102. By Larry Price

Add AppStream backend for libertine service

101. By Larry Price

Create Preview pane with base information

100. By Larry Price

Manipulate string such that there is no visible null character

99. By Larry Price

Fixing i18n pluralizer

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'CMakeLists.txt'
--- CMakeLists.txt 2016-08-01 13:24:26 +0000
+++ CMakeLists.txt 2016-09-23 14:36:26 +0000
@@ -29,15 +29,20 @@
29find_package(PkgConfig REQUIRED)29find_package(PkgConfig REQUIRED)
30find_package(Intltool)30find_package(Intltool)
31find_package(Qt5Core REQUIRED)31find_package(Qt5Core REQUIRED)
32find_package(Qt5DBus REQUIRED)
32find_program(INTLTOOL_MERGE intltool-merge)33find_program(INTLTOOL_MERGE intltool-merge)
3334
34# useful variables35# useful variables
35set(APPS_LIB_DIR ${CMAKE_INSTALL_FULL_LIBDIR}/unity-scopes/libertine-scope/)36set(APPS_LIB_DIR ${CMAKE_INSTALL_FULL_LIBDIR}/unity-scopes/libertine-scope/)
36set(APPS_DATA_DIR ${CMAKE_INSTALL_FULL_DATADIR}/unity/scopes/libertine-scope/)37set(APPS_DATA_DIR ${CMAKE_INSTALL_FULL_DATADIR}/unity/scopes/libertine-scope/)
38set(STORE_LIB_DIR ${CMAKE_INSTALL_FULL_LIBDIR}/unity-scopes/libertine-scope/)
37set(SCOPE_NAME "libertine-scope")39set(SCOPE_NAME "libertine-scope")
38set(SCOPE_DISPLAY_NAME "Desktop Apps")40set(SCOPE_DISPLAY_NAME "Desktop Apps")
39set(PACKAGE_NAME "libertine-scope.ubuntu")41set(PACKAGE_NAME "libertine-scope.ubuntu")
40set(FULLY_QUALIFIED_NAME "${PACKAGE_NAME}_${SCOPE_NAME}")42set(FULLY_QUALIFIED_NAME "${PACKAGE_NAME}_${SCOPE_NAME}")
43set(STORE_SCOPE_NAME "libertine-store")
44set(STORE_PACKAGE_NAME "libertine-scope.ubuntu_${STORE_SCOPE_NAME}")
45set(SCOPE_LIB_NAME "libertine-scope")
41option(CLICK_MODE "Installs to a contained location" off)46option(CLICK_MODE "Installs to a contained location" off)
4247
43add_definitions(-DSCOPE_NAME="${SCOPE_NAME}")48add_definitions(-DSCOPE_NAME="${SCOPE_NAME}")
@@ -88,7 +93,9 @@
88endif()93endif()
8994
90# Add our main directories95# Add our main directories
96add_subdirectory(lib)
91add_subdirectory(scope)97add_subdirectory(scope)
98add_subdirectory(service)
92add_subdirectory(data)99add_subdirectory(data)
93add_subdirectory(po)100add_subdirectory(po)
94101
95102
=== modified file 'data/CMakeLists.txt'
--- data/CMakeLists.txt 2016-07-19 17:56:58 +0000
+++ data/CMakeLists.txt 2016-09-23 14:36:26 +0000
@@ -1,17 +1,11 @@
1# Put the ini files in the build directory next to the scope1# Copy data files into apps scope dir for dev
2# .so file so that the test tools can find them.2file(COPY store.svg blacklist DESTINATION ${CMAKE_BINARY_DIR}/scope/apps/)
33
4# Install the scope images4install(FILES apps.png apps.svg
5install(5 DESTINATION ${APPS_DATA_DIR})
6 FILES6
7 "apps.png"7install(FILES blacklist store.svg
8 DESTINATION8 DESTINATION ${SCOPE_INSTALL_DIR})
9 ${APPS_DATA_DIR}9
10)10install(FILES com.canonical.libertine.ContainerManager.service
1111 DESTINATION ${CMAKE_INSTALL_DATADIR}/dbus-1/services)
12install(
13 FILES
14 "blacklist"
15 DESTINATION
16 ${SCOPE_INSTALL_DIR}
17)
1812
=== added file 'data/com.canonical.libertine.ContainerManager.service'
--- data/com.canonical.libertine.ContainerManager.service 1970-01-01 00:00:00 +0000
+++ data/com.canonical.libertine.ContainerManager.service 2016-09-23 14:36:26 +0000
@@ -0,0 +1,3 @@
1[D-BUS Service]
2Name=com.canonical.libertine.ContainerManager
3Exec=/usr/bin/libertined
04
=== added file 'data/store.svg'
--- data/store.svg 1970-01-01 00:00:00 +0000
+++ data/store.svg 2016-09-23 14:36:26 +0000
@@ -0,0 +1,77 @@
1<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2<!-- Created with Inkscape (http://www.inkscape.org/) -->
3
4<svg
5 xmlns:dc="http://purl.org/dc/elements/1.1/"
6 xmlns:cc="http://creativecommons.org/ns#"
7 xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
8 xmlns:svg="http://www.w3.org/2000/svg"
9 xmlns="http://www.w3.org/2000/svg"
10 xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
11 xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
12 width="351.27005mm"
13 height="433.59958mm"
14 viewBox="0 0 1244.6577 1536.3765"
15 id="svg3637"
16 version="1.1"
17 inkscape:version="0.91 r13725"
18 sodipodi:docname="store.svg">
19 <defs
20 id="defs3639" />
21 <sodipodi:namedview
22 id="base"
23 pagecolor="#00ffff"
24 bordercolor="#666666"
25 borderopacity="1.0"
26 inkscape:pageopacity="0"
27 inkscape:pageshadow="2"
28 inkscape:zoom="0.24748737"
29 inkscape:cx="-563.75562"
30 inkscape:cy="519.26806"
31 inkscape:document-units="px"
32 inkscape:current-layer="layer1"
33 showgrid="false"
34 inkscape:window-width="1920"
35 inkscape:window-height="1056"
36 inkscape:window-x="1920"
37 inkscape:window-y="24"
38 inkscape:window-maximized="1"
39 fit-margin-left="118.5"
40 fit-margin-right="118.5"
41 fit-margin-top="120"
42 fit-margin-bottom="180" />
43 <metadata
44 id="metadata3642">
45 <rdf:RDF>
46 <cc:Work
47 rdf:about="">
48 <dc:format>image/svg+xml</dc:format>
49 <dc:type
50 rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
51 <dc:title></dc:title>
52 </cc:Work>
53 </rdf:RDF>
54 </metadata>
55 <g
56 inkscape:label="Layer 1"
57 inkscape:groupmode="layer"
58 id="layer1"
59 transform="translate(-388.21849,836.02937)">
60 <g
61 id="g3343"
62 transform="matrix(0.74113597,0,0,0.78153068,321.48718,23.928691)">
63 <path
64 transform="translate(229.97523,-735.66029)"
65 inkscape:connector-curvature="0"
66 id="path3734"
67 d="m 435.93411,771.50865 c 5.13251,-7.46428 23.15091,-32.85714 40.04089,-56.42857 16.88998,-23.57143 36.65936,-51.21428 43.93196,-61.42857 7.2726,-10.21428 21.97523,-30.46508 32.67251,-45.00177 10.69727,-14.53669 27.61176,-38.11043 37.58774,-52.38611 9.97598,-14.27566 24.24529,-34.14652 31.70958,-44.15743 7.46428,-10.01089 13.57143,-19.48897 13.57143,-21.06235 0,-2.71828 -17.5498,-29.26911 -81.37207,-123.10662 -15.49738,-22.78572 -40.3902,-59.42858 -55.31738,-81.42858 -14.92718,-22 -35.00329,-51.57142 -44.61358,-65.71428 -9.6103,-14.14286 -19.70681,-29.25 -22.4367,-33.57143 l -4.96343,-7.85714 65.44846,0 65.44845,0 33.90313,50.17117 c 18.64671,27.59414 35.20443,52.34414 36.79492,55 4.96144,8.28476 14.04967,21.90535 15.61363,23.40026 5.56962,5.32368 80.066,120.17946 80.066,123.44281 0,2.24606 -7.49798,14.28313 -16.66215,26.74904 -31.75367,43.19412 -68.03182,92.82957 -153.20253,209.6104 l -85.57896,117.3406 -20.98687,0 -20.98687,0 9.33184,-13.57143 z"
68 style="fill:#ffffff" />
69 <path
70 transform="translate(229.97523,-735.66029)"
71 inkscape:connector-curvature="0"
72 id="path3736"
73 d="m 831.21335,770.08008 c -5.66053,-8.25 -20.06228,-29.14285 -32.00388,-46.42857 -11.9416,-17.28571 -38.73039,-56.5 -59.53064,-87.14286 -20.80026,-30.64285 -44.68152,-65.72971 -53.06948,-77.97082 -13.98989,-20.41635 -14.92937,-22.77866 -11.36275,-28.57143 2.13845,-3.47317 18.80864,-26.80949 37.04485,-51.85846 18.23622,-25.04895 38.94248,-53.61705 46.01391,-63.48466 7.07143,-9.86761 23.78571,-33.00848 37.14286,-51.42417 13.35714,-18.41568 28.87474,-39.99043 34.48356,-47.9439 5.60881,-7.95346 26.18024,-36.33887 45.71429,-63.07868 19.53404,-26.73982 39.227,-54.06125 43.76215,-60.71429 l 8.24572,-12.09644 22.55911,0 22.55911,0 -8.89011,12.14285 c -12.05808,16.46994 -89.78558,123.80437 -110.17606,152.14286 -16.77918,23.31954 -41.38224,57.29953 -74.11675,102.36479 l -18.32072,25.22193 59.10118,87.6352 c 32.50564,48.19937 70.71004,104.99237 84.89866,126.20665 14.18861,21.21429 26.78352,39 27.98867,39.5238 1.20515,0.52383 2.19119,1.99846 2.19119,3.277 0,1.27855 8.43058,14.6714 18.73463,29.76192 l 18.73462,27.43728 -65.70612,0 -65.70611,0 -10.29189,-15 z"
74 style="fill:#ffffff" />
75 </g>
76 </g>
77</svg>
078
=== modified file 'debian/control'
--- debian/control 2016-07-13 17:26:54 +0000
+++ debian/control 2016-09-23 14:36:26 +0000
@@ -10,11 +10,12 @@
10 google-mock,10 google-mock,
11 intltool,11 intltool,
12 libunity-scopes-dev (>= 1.0.0),12 libunity-scopes-dev (>= 1.0.0),
13 liburl-dispatcher1-dev,
14 libubuntu-app-launch2-dev,13 libubuntu-app-launch2-dev,
15 liblibertine-dev,14 liblibertine-dev,
16 pkg-config,15 pkg-config,
17 qtbase5-dev16 qtbase5-dev,
17 libqt5dbus5 (>= 5.4.1),
18 python3-dev
18Standards-Version: 3.9.619Standards-Version: 3.9.6
19Homepage: https://launchpad.net/libertine-scope20Homepage: https://launchpad.net/libertine-scope
20Vcs-Bzr: https://code.launchpad.net/~libertine-team/libertine-scope/devel21Vcs-Bzr: https://code.launchpad.net/~libertine-team/libertine-scope/devel
@@ -23,6 +24,7 @@
23Package: libertine-scope24Package: libertine-scope
24Architecture: any25Architecture: any
25Depends: libertine-tools,26Depends: libertine-tools,
27 libertined,
26 ${misc:Depends},28 ${misc:Depends},
27 ${shlibs:Depends}29 ${shlibs:Depends}
28Description: Libertine packages scope for Unity30Description: Libertine packages scope for Unity
@@ -31,3 +33,17 @@
31 still waiting to be ported natively to Unity.33 still waiting to be ported natively to Unity.
32 .34 .
33 This package provides the Libertine scope itself.35 This package provides the Libertine scope itself.
36
37Package: libertined
38Architecture: any
39Depends: python3-libertine,
40 python3-apt (>= 0.9.3),
41 python3-dbus (>= 1.2.0),
42 appstream,
43 gir1.2-appstream,
44 ${python3:Depends}
45Description: Libertine packages scope for Unity
46 The libertined package provides the d-bus service for finding and
47 maintaining deb-packaged X11-based legacy software.
48 .
49 This package provides the libertined service.
3450
=== added file 'debian/libertine-scope.install'
--- debian/libertine-scope.install 1970-01-01 00:00:00 +0000
+++ debian/libertine-scope.install 2016-09-23 14:36:26 +0000
@@ -0,0 +1,4 @@
1usr/lib/*/unity-scopes/*
2usr/share/unity/scopes/libertine-scope/*png
3usr/share/unity/scopes/libertine-scope/*svg
4usr/share/locale/*/LC_MESSAGES/libertine-scope.mo
05
=== added file 'debian/libertined.install'
--- debian/libertined.install 1970-01-01 00:00:00 +0000
+++ debian/libertined.install 2016-09-23 14:36:26 +0000
@@ -0,0 +1,8 @@
1usr/share/dbus-1/services/com.canonical.libertine.ContainerManager.service
2usr/bin/libertined
3usr/lib/python*/*/libertine_service/__init__.py
4usr/lib/python*/*/libertine_service/appstream.py
5usr/lib/python*/*/libertine_service/apt.py
6usr/lib/python*/*/libertine_service/container.py
7usr/lib/python*/*/libertine_service/dbus.py
8usr/lib/python*/*/libertine_service/tasks.py
09
=== modified file 'debian/rules'
--- debian/rules 2016-06-28 17:15:54 +0000
+++ debian/rules 2016-09-23 14:36:26 +0000
@@ -1,7 +1,7 @@
1#!/usr/bin/make -f 1#!/usr/bin/make -f
22
3%:3%:
4 dh $@4 dh $@ --with python3
55
6override_dh_auto_build:6override_dh_auto_build:
7 dh_auto_build -- all translations7 dh_auto_build -- all translations
88
=== added directory 'lib'
=== added file 'lib/CMakeLists.txt'
--- lib/CMakeLists.txt 1970-01-01 00:00:00 +0000
+++ lib/CMakeLists.txt 2016-09-23 14:36:26 +0000
@@ -0,0 +1,1 @@
1add_subdirectory(libertine-scope)
02
=== added directory 'lib/libertine-scope'
=== added file 'lib/libertine-scope/CMakeLists.txt'
--- lib/libertine-scope/CMakeLists.txt 1970-01-01 00:00:00 +0000
+++ lib/libertine-scope/CMakeLists.txt 2016-09-23 14:36:26 +0000
@@ -0,0 +1,19 @@
1SET (CMAKE_INCLUDE_CURRENT_DIR ON)
2SET (CMAKE_AUTOMOC ON)
3
4add_library(${SCOPE_LIB_NAME} STATIC
5 preview.cpp
6 service_manager.cpp
7 package.cpp
8 action.cpp
9)
10
11include_directories(
12 ${CMAKE_SOURCE_DIR}/lib
13)
14
15target_link_libraries (${SCOPE_LIB_NAME}
16 ${SCOPE_LDFLAGS}
17 Qt5::Core
18 Qt5::DBus
19)
020
=== added file 'lib/libertine-scope/action.cpp'
--- lib/libertine-scope/action.cpp 1970-01-01 00:00:00 +0000
+++ lib/libertine-scope/action.cpp 2016-09-23 14:36:26 +0000
@@ -0,0 +1,49 @@
1/*
2 * Copyright (C) 2016 Canonical Ltd
3 *
4 * This program is free software: you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License version 3 as
6 * published by the Free Software Foundation.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16#include "libertine-scope/action.h"
17
18#include "libertine-scope/service_manager.h"
19
20
21libertine::scope::Action::
22Action(unity::scopes::Result const& result,
23 unity::scopes::ActionMetadata const& metadata,
24 std::string const& action_id,
25 std::shared_ptr<ServiceManager> const& service_manager)
26 : ActivationQueryBase(result, metadata)
27 , action_id_(action_id)
28 , service_(service_manager)
29{ }
30
31
32unity::scopes::ActivationResponse libertine::scope::Action::
33activate()
34{
35 if (action_id_ == "open")
36 {
37 return unity::scopes::ActivationResponse(unity::scopes::ActivationResponse::Status::NotHandled);
38 }
39
40 if (action_id_ == "install")
41 {
42 service_->install(QString::fromStdString(result()["id"].get_string()));
43 }
44 else if (action_id_ == "remove")
45 {
46 service_->remove(QString::fromStdString(result()["id"].get_string()));
47 }
48 return unity::scopes::ActivationResponse(unity::scopes::ActivationResponse::Status::ShowPreview);
49}
050
=== added file 'lib/libertine-scope/action.h'
--- lib/libertine-scope/action.h 1970-01-01 00:00:00 +0000
+++ lib/libertine-scope/action.h 2016-09-23 14:36:26 +0000
@@ -0,0 +1,46 @@
1/*
2 * Copyright (C) 2016 Canonical Ltd
3 *
4 * This program is free software: you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License version 3 as
6 * published by the Free Software Foundation.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16
17#pragma once
18
19#include <unity/scopes/ActivationQueryBase.h>
20
21
22namespace libertine
23{
24namespace scope
25{
26
27class ServiceManager;
28
29class Action : public unity::scopes::ActivationQueryBase
30{
31public:
32 explicit Action(unity::scopes::Result const& result,
33 unity::scopes::ActionMetadata const& metadata,
34 std::string const& action_id,
35 std::shared_ptr<ServiceManager> const& service_manager);
36
37 virtual ~Action() = default;
38
39 virtual unity::scopes::ActivationResponse activate() override;
40
41private:
42 std::string action_id_;
43 std::shared_ptr<ServiceManager> service_;
44};
45} // namespace libertine
46} // namespace scope
047
=== added file 'lib/libertine-scope/i18n.h'
--- lib/libertine-scope/i18n.h 1970-01-01 00:00:00 +0000
+++ lib/libertine-scope/i18n.h 2016-09-23 14:36:26 +0000
@@ -0,0 +1,59 @@
1/**
2 * @file lib/libertine-scope/i18n.h
3 * @brief Internationalization helpers.
4 */
5/*
6 * Copyright 2016 Canonical Ltd.
7 *
8 * This program is free software: you can redistribute it and/or modify it under
9 * the terms of the GNU General Public License, version 3, as published by the
10 * Free Software Foundation.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program. If not, see <http://www.gnu.org/licenses/>.
19 */
20#pragma once
21
22#include <libintl.h>
23#include <string>
24
25
26/**
27 * Translates a simple string.
28 * @param[in] msgid The string to be translated.
29 * @returns the translated string.
30 */
31inline std::string
32_(char const* msgid)
33{
34 return dgettext(GETTEXT_PACKAGE, msgid);
35}
36
37
38/**
39 * Translates a single/plural string pair.
40 * @param[in] msgid1 The string to be tranlated (single form).
41 * @param[in] msgid2 The string to be translated (plural form).
42 * @param[in] n The number of items referenced in the string.
43 *
44 * @returns the translated string, either singular or plural forms depending on
45 * @p n.
46 */
47inline std::string
48_(char const* msgid1, char const* msgid2, unsigned long int n)
49{
50 auto fmt = dngettext(GETTEXT_PACKAGE, msgid1, msgid2, n);
51 auto sz = std::snprintf(nullptr, 0, fmt, n);
52 std::string buf;
53 if (sz > 0)
54 {
55 buf.resize(sz);
56 std::snprintf(&buf[0], sz+1, fmt, n);
57 }
58 return buf;
59}
060
=== added file 'lib/libertine-scope/package.cpp'
--- lib/libertine-scope/package.cpp 1970-01-01 00:00:00 +0000
+++ lib/libertine-scope/package.cpp 2016-09-23 14:36:26 +0000
@@ -0,0 +1,54 @@
1/*
2 * Copyright 2016 Canonical Ltd.
3 *
4 * This program is free software: you can redistribute it and/or modify it under
5 * the terms of the GNU General Public License, version 3, as published by the
6 * Free Software Foundation.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16#include "libertine-scope/package.h"
17
18
19libertine::scope::Package libertine::scope::Package::
20from_map(QVariantMap const& pkgMap)
21{
22 Package pkg;
23 pkg.name = pkgMap["name"].toString().toStdString();
24 pkg.summary = pkgMap["summary"].toString().toStdString();
25 pkg.description = pkgMap["description"].toString().toStdString();
26 pkg.icon = pkgMap["icon"].toString().toStdString();
27 pkg.publisher = pkgMap["publisher"].toString().toStdString();
28 pkg.website = pkgMap["website"].toString().toStdString();
29 pkg.license = pkgMap["license"].toString().toStdString();
30 pkg.id = pkgMap["id"].toString().toStdString();
31 pkg.status = pkgMap["status"].toString().toStdString();
32 pkg.progress = pkgMap["progress_id"].toString().toStdString();
33
34 for (auto const& screenshot: pkgMap["screenshots"].toStringList())
35 {
36 pkg.screenshots.push_back(screenshot.toStdString());
37 }
38
39 return pkg;
40}
41
42
43QList<libertine::scope::Package> libertine::scope::Package::
44from_map(QList<QVariantMap> const& pkgMap)
45{
46 QList<Package> pkgs;
47
48 for (auto const& pkg: pkgMap)
49 {
50 pkgs << Package::from_map(pkg);
51 }
52
53 return pkgs;
54}
055
=== added file 'lib/libertine-scope/package.h'
--- lib/libertine-scope/package.h 1970-01-01 00:00:00 +0000
+++ lib/libertine-scope/package.h 2016-09-23 14:36:26 +0000
@@ -0,0 +1,56 @@
1/*
2 * Copyright 2016 Canonical Ltd.
3 *
4 * This program is free software: you can redistribute it and/or modify it under
5 * the terms of the GNU General Public License, version 3, as published by the
6 * Free Software Foundation.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16#pragma once
17
18
19#include <QList>
20#include <QVariant>
21
22
23namespace libertine
24{
25namespace scope
26{
27
28
29class Package
30{
31public:
32 explicit Package() = default;
33 virtual ~Package() = default;
34
35 static Package from_map(QVariantMap const&);
36 static QList<Package> from_map(QList<QVariantMap> const&);
37
38
39 std::string id;
40 std::string name;
41 std::string summary;
42 std::string status;
43
44 std::string description;
45 std::string icon;
46 std::string publisher;
47 std::string website;
48 std::string license;
49 std::string progress;
50
51 std::vector<std::string> screenshots;
52};
53
54
55} // Store
56} // Libertine
057
=== added file 'lib/libertine-scope/preview.cpp'
--- lib/libertine-scope/preview.cpp 1970-01-01 00:00:00 +0000
+++ lib/libertine-scope/preview.cpp 2016-09-23 14:36:26 +0000
@@ -0,0 +1,283 @@
1/*
2 * Copyright 2016 Canonical Ltd.
3 *
4 * This program is free software: you can redistribute it and/or modify it under
5 * the terms of the GNU General Public License, version 3, as published by the
6 * Free Software Foundation.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16#include "libertine-scope/preview.h"
17
18
19#include "libertine-scope/i18n.h"
20#include "libertine-scope/service_manager.h"
21#include <future>
22#include <QDebug>
23#include <unity/UnityExceptions.h>
24#include <unity/scopes/ColumnLayout.h>
25#include <unity/scopes/PreviewReply.h>
26#include <unity/scopes/Variant.h>
27#include <unity/scopes/VariantBuilder.h>
28#include <unity/scopes/ActionMetadata.h>
29#include <unity/scopes/Result.h>
30
31
32namespace usc = unity::scopes;
33
34
35namespace
36{
37static auto constexpr HEADER_ID = "hdr";
38static auto constexpr ACTIONS_ID = "actions";
39static auto constexpr METADATA_ID = "other_metadata";
40static auto constexpr SUMMARY_ID = "summary";
41static auto constexpr SCREENSHOTS_ID = "screenshots";
42static auto const SUMMARY_TITLE = _("Info");
43static auto const ACTION_INSTALL = _("Install");
44static auto const ACTION_REMOVE = _("Remove");
45static auto const ACTION_NOOP_REMOVING = _("Removing...");
46static auto const ACTION_NOOP_INSTALLING = _("Installing...");
47static auto const ACTION_OPEN = _("Open");
48static auto const METADATA_PUBLISHER = _("Publisher/Creator");
49static auto const METADATA_WEBSITE = _("Website");
50static auto const METADATA_LICENSE = _("License");
51
52
53static usc::PreviewWidget
54metadataWidgets(libertine::scope::Package const& app)
55{
56 usc::PreviewWidget widget(METADATA_ID, "table");
57 usc::VariantArray values;
58 if (!app.publisher.empty())
59 {
60 values.push_back(usc::Variant{usc::VariantArray{usc::Variant{METADATA_PUBLISHER}, usc::Variant{app.publisher}}});
61 }
62 if (!app.website.empty())
63 {
64 values.push_back(usc::Variant{usc::VariantArray{usc::Variant{METADATA_WEBSITE}, usc::Variant{app.website}}});
65 }
66 if (!app.license.empty())
67 {
68 values.push_back(usc::Variant{usc::VariantArray{usc::Variant{METADATA_LICENSE}, usc::Variant{app.license}}});
69 }
70
71 widget.add_attribute_value("values", usc::Variant(values));
72 return widget;
73}
74
75
76static usc::PreviewWidget
77screenshotWidgets(libertine::scope::Package const& app)
78{
79 usc::PreviewWidget gallery(SCREENSHOTS_ID, "gallery");
80 usc::VariantArray arr;
81 for (auto const& screenshot: app.screenshots)
82 {
83 arr.push_back(usc::Variant(screenshot));
84 }
85 gallery.add_attribute_value("sources", usc::Variant(arr));
86 return gallery;
87}
88}
89
90
91std::chrono::milliseconds libertine::scope::Preview::
92update_progress_after = std::chrono::milliseconds(500);
93
94
95libertine::scope::Preview::
96Preview(usc::Result const& result,
97 usc::ActionMetadata const& metadata,
98 std::shared_ptr<ServiceManager> const& service)
99 : PreviewQueryBase(result, metadata)
100 , service_(service)
101 , thread_()
102{
103}
104
105
106libertine::scope::Preview::
107~Preview()
108{
109 if (thread_ != nullptr)
110 {
111 thread_->join();
112 }
113}
114
115
116void libertine::scope::Preview::
117cancelled()
118{
119}
120
121
122void libertine::scope::Preview::
123createSingleColumnLayout(Package const& app)
124{
125 oneColumn.column.push_back(HEADER_ID);
126 oneColumn.column.push_back(ACTIONS_ID);
127 oneColumn.column.push_back(METADATA_ID);
128 if (!app.screenshots.empty())
129 {
130 oneColumn.column.push_back(SCREENSHOTS_ID);
131 }
132 oneColumn.column.push_back(SUMMARY_ID);
133}
134
135
136void libertine::scope::Preview::
137createDualColumnLayout(Package const& app)
138{
139 twoColumns.column1.push_back(HEADER_ID);
140 twoColumns.column1.push_back(ACTIONS_ID);
141 twoColumns.column1.push_back(SUMMARY_ID);
142 twoColumns.column2.push_back(METADATA_ID);
143 if (!app.screenshots.empty())
144 {
145 twoColumns.column2.push_back(SCREENSHOTS_ID);
146 }
147}
148
149
150void libertine::scope::Preview::
151run(usc::PreviewReplyProxy const& reply)
152{
153 auto app = service_->app_info(QString::fromStdString(result()["id"].get_string()));
154 auto widgets = createWidgets(app);
155
156 createSingleColumnLayout(app);
157 createDualColumnLayout(app);
158
159 registerLayouts(reply);
160 reply->push(widgets);
161
162 // update the progress bar asynchronously
163 // if an operation is in progress
164 if (app.status == "installing" || app.status == "removing") {
165 thread_.reset(new std::thread([=](){
166 std::this_thread::sleep_for(update_progress_after);
167 service_->update_progress(QString::fromStdString(app.id));
168 }));
169 }
170}
171
172
173usc::PreviewWidgetList libertine::scope::Preview::
174createWidgets(libertine::scope::Package const& app) const
175{
176 auto widgets = headerWidgets(app);
177 widgets.push_back(buttonWidgets(app));
178 widgets.push_back(metadataWidgets(app));
179 if (!app.screenshots.empty())
180 {
181 widgets.push_back(screenshotWidgets(app));
182 }
183 widgets.push_back(descriptionWidgets(app));
184
185 return widgets;
186}
187
188
189usc::PreviewWidgetList libertine::scope::Preview::
190headerWidgets(libertine::scope::Package const& app) const
191{
192 usc::PreviewWidget header(HEADER_ID, "header");
193 header.add_attribute_value("title", usc::Variant(app.name.empty() ? result().title() : app.name));
194 header.add_attribute_value("subtitle", usc::Variant(app.summary));
195 header.add_attribute_value("mascot", usc::Variant(app.icon.empty() ? result().art() : app.icon));
196 header.add_attribute_value("fallback", usc::Variant("image://theme/placeholder-app-icon"));
197
198 usc::PreviewWidgetList widgets;
199 widgets.push_back(header);
200
201 qDebug() << "Pushed widgets for package:" << QString::fromStdString(app.name);
202 return widgets;
203}
204
205
206usc::PreviewWidget libertine::scope::Preview::
207buttonWidgets(libertine::scope::Package const& package) const
208{
209 if (package.status == "installing" || package.status == "removing")
210 {
211 usc::PreviewWidget progress(ACTIONS_ID, "progress");
212 usc::VariantMap tuple;
213 tuple["dbus-name"] = "com.canonical.libertine.ContainerManager";
214 tuple["dbus-object"] = std::string("/Progress/") + package.progress;
215 progress.add_attribute_value("source", usc::Variant(tuple));
216 return progress;
217 }
218
219 usc::VariantBuilder builder;
220 if (package.status == "installed")
221 {
222 builder.add_tuple(
223 {
224 {"id", usc::Variant("remove")},
225 {"label", usc::Variant(ACTION_REMOVE)},
226 });
227 builder.add_tuple(
228 {
229 {"id", usc::Variant("open")},
230 {"label", usc::Variant(ACTION_OPEN)},
231 });
232 }
233 else
234 {
235 builder.add_tuple(
236 {
237 {"id", usc::Variant("install")},
238 {"label", usc::Variant(ACTION_INSTALL)},
239 });
240 }
241
242 usc::PreviewWidget buttons(ACTIONS_ID, "actions");
243 buttons.add_attribute_value("actions", builder.end());
244 return buttons;
245}
246
247
248usc::PreviewWidget libertine::scope::Preview::
249descriptionWidgets(libertine::scope::Package const& app) const
250{
251 usc::PreviewWidget summary(SUMMARY_ID, "text");
252 summary.add_attribute_value("title", usc::Variant(SUMMARY_TITLE));
253 if (app.description.empty() && result().contains("description"))
254 {
255 summary.add_attribute_value("text", usc::Variant(result()["description"].get_string()));
256 }
257 else
258 {
259 summary.add_attribute_value("text", usc::Variant(app.description));
260 }
261 return summary;
262}
263
264
265void libertine::scope::Preview::
266registerLayouts(unity::scopes::PreviewReplyProxy const& reply)
267{
268 usc::ColumnLayout layout1col(1);
269 layout1col.add_column(oneColumn.column);
270
271 usc::ColumnLayout layout2col(2);
272 layout2col.add_column(twoColumns.column1);
273 layout2col.add_column(twoColumns.column2);
274
275 try
276 {
277 reply->register_layout({layout1col, layout2col});
278 }
279 catch (unity::LogicException const& e)
280 {
281 qWarning() << "Failed to register layout:" << QString::fromStdString(e.what());
282 }
283}
0284
=== added file 'lib/libertine-scope/preview.h'
--- lib/libertine-scope/preview.h 1970-01-01 00:00:00 +0000
+++ lib/libertine-scope/preview.h 2016-09-23 14:36:26 +0000
@@ -0,0 +1,93 @@
1/*
2 * Copyright 2016 Canonical Ltd.
3 *
4 * This program is free software: you can redistribute it and/or modify it under
5 * the terms of the GNU General Public License, version 3, as published by the
6 * Free Software Foundation.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16#pragma once
17
18#include <chrono>
19#include <unity/scopes/PreviewQueryBase.h>
20#include <unity/scopes/PreviewWidget.h>
21
22
23namespace std
24{
25class thread;
26}
27
28namespace libertine
29{
30namespace scope
31{
32
33
34class ServiceManager;
35class Package;
36
37
38class Preview
39: public unity::scopes::PreviewQueryBase
40{
41public:
42 explicit Preview(unity::scopes::Result const& result,
43 unity::scopes::ActionMetadata const& metadata,
44 std::shared_ptr<ServiceManager> const& service);
45
46 virtual ~Preview();
47
48 virtual void
49 cancelled() override;
50
51 virtual void
52 run(unity::scopes::PreviewReplyProxy const& reply) override;
53
54 static
55 std::chrono::milliseconds update_progress_after;
56
57protected:
58 virtual unity::scopes::PreviewWidget
59 buttonWidgets(libertine::scope::Package const& package) const;
60
61private:
62 unity::scopes::PreviewWidgetList
63 createWidgets(libertine::scope::Package const& app) const;
64
65 unity::scopes::PreviewWidgetList
66 headerWidgets(libertine::scope::Package const& app) const;
67
68 unity::scopes::PreviewWidget
69 descriptionWidgets(libertine::scope::Package const& app) const;
70
71 void
72 registerLayouts(unity::scopes::PreviewReplyProxy const& reply);
73
74 void
75 createSingleColumnLayout(Package const& app);
76
77 void
78 createDualColumnLayout(Package const& app);
79
80 struct {
81 std::vector<std::string> column;
82 } oneColumn;
83
84 struct {
85 std::vector<std::string> column1;
86 std::vector<std::string> column2;
87 } twoColumns;
88
89 std::shared_ptr<ServiceManager> service_;
90 std::unique_ptr<std::thread> thread_;
91};
92} // namespace scope
93} // namespace libertine
094
=== added file 'lib/libertine-scope/service_manager.cpp'
--- lib/libertine-scope/service_manager.cpp 1970-01-01 00:00:00 +0000
+++ lib/libertine-scope/service_manager.cpp 2016-09-23 14:36:26 +0000
@@ -0,0 +1,103 @@
1/*
2 * Copyright 2016 Canonical Ltd.
3 *
4 * This program is free software: you can redistribute it and/or modify it under
5 * the terms of the GNU General Public License, version 3, as published by the
6 * Free Software Foundation.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16#include "libertine-scope/service_manager.h"
17
18#include <QtDBus>
19#include <QDebug>
20#include <QDBusMetaType>
21
22namespace
23{
24constexpr auto SEARCH_CACHE_METHOD = "search";
25constexpr auto APP_INFO_METHOD = "app_info";
26constexpr auto INSTALL_METHOD = "install";
27constexpr auto REMOVE_METHOD = "remove";
28constexpr auto UPDATE_PROGRESS_METHOD = "update_progress";
29constexpr auto LIBERTINE_SERVICE_DESTINATION = "com.canonical.libertine.ContainerManager";
30constexpr auto LIBERTINE_SERVICE_INTERFACE = "com.canonical.libertine.ContainerManager";
31constexpr auto LIBERTINE_SERVICE_OBJECT = "/Manager";
32}
33
34
35libertine::scope::ServiceManager::
36ServiceManager()
37{
38 qDBusRegisterMetaType<QList<QVariantMap > >();
39}
40
41
42void libertine::scope::ServiceManager::
43install(QString const& package_name) const
44{
45 call<qlonglong>(INSTALL_METHOD, QVariant(package_name));
46}
47
48
49void libertine::scope::ServiceManager::
50remove(QString const& package_name) const
51{
52 call<qlonglong>(REMOVE_METHOD, QVariant(package_name));
53}
54
55
56libertine::scope::Package libertine::scope::ServiceManager::
57app_info(const QString &app_id) const
58{
59 return Package::from_map(call<QVariantMap >(APP_INFO_METHOD, QVariant(app_id)));
60}
61
62
63void libertine::scope::ServiceManager::
64update_progress(QString const& package_name) const
65{
66 call<bool>(UPDATE_PROGRESS_METHOD, QVariant(package_name));
67}
68
69
70QList<libertine::scope::Package> libertine::scope::ServiceManager::
71search_cache(const QString &query) const
72{
73 return Package::from_map(call<QList<QVariantMap > >(SEARCH_CACHE_METHOD, QVariant(query)));
74}
75
76
77template<class T>
78T libertine::scope::ServiceManager::
79call(QString const& method, QVariant const& arg1) const
80{
81 if (!valid())
82 {
83 qCritical() << "Cannot connect to D-Bus session bus.";
84 return T{};
85 }
86
87 QDBusInterface iface(LIBERTINE_SERVICE_DESTINATION, LIBERTINE_SERVICE_OBJECT, LIBERTINE_SERVICE_INTERFACE, QDBusConnection::sessionBus());
88 QDBusReply<T> response = iface.call(method, arg1);
89 if (response.isValid())
90 {
91 return response.value();
92 }
93
94 qCritical() << "Call to " << method << " failed:" << qPrintable(response.error().message());
95 return T{};
96}
97
98
99bool libertine::scope::ServiceManager::
100valid() const
101{
102 return QDBusConnection::sessionBus().isConnected();
103}
0104
=== added file 'lib/libertine-scope/service_manager.h'
--- lib/libertine-scope/service_manager.h 1970-01-01 00:00:00 +0000
+++ lib/libertine-scope/service_manager.h 2016-09-23 14:36:26 +0000
@@ -0,0 +1,51 @@
1/*
2 * Copyright 2016 Canonical Ltd.
3 *
4 * This program is free software: you can redistribute it and/or modify it under
5 * the terms of the GNU General Public License, version 3, as published by the
6 * Free Software Foundation.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16#pragma once
17
18#include "libertine-scope/package.h"
19
20#include <QString>
21#include <QVariant>
22
23
24namespace libertine
25{
26namespace scope
27{
28
29
30class ServiceManager
31{
32public:
33 explicit ServiceManager();
34 virtual ~ServiceManager() = default;
35
36 virtual QList<Package> search_cache(QString const& query) const;
37 virtual Package app_info(QString const& app_id) const;
38 virtual void install(QString const& package_name) const;
39 virtual void remove(QString const& package_name) const;
40 virtual void update_progress(QString const& package_name) const;
41
42private:
43 bool valid() const;
44
45 template<class T>
46 T call(QString const& method, QVariant const& = QVariant()) const;
47};
48
49
50} // namespace libertine
51} // namespace scope
052
=== modified file 'manifest.json.in'
--- manifest.json.in 2016-07-15 19:52:28 +0000
+++ manifest.json.in 2016-09-23 14:36:26 +0000
@@ -1,7 +1,7 @@
1{1{
2 "architecture": "@CLICK_ARCH@",2 "architecture": "@CLICK_ARCH@",
3 "description": "A Unity scope that surfaces Legacy apps from a Libertine container",3 "description": "A Unity scope that surfaces Legacy apps from a Libertine container",
4 "framework": "ubuntu-sdk-15.04.3",4 "framework": "ubuntu-sdk-15.04.5",
5 "hooks": {5 "hooks": {
6 "libertine-scope": {6 "libertine-scope": {
7 "apparmor": "@SCOPE_NAME@.apparmor",7 "apparmor": "@SCOPE_NAME@.apparmor",
88
=== modified file 'po/en_AU.po'
--- po/en_AU.po 2016-08-25 06:10:07 +0000
+++ po/en_AU.po 2016-09-23 14:36:26 +0000
@@ -6,11 +6,12 @@
6msgid ""6msgid ""
7msgstr ""7msgstr ""
8"Project-Id-Version: libertine-scope\n"8"Project-Id-Version: libertine-scope\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"9"Report-Msgid-Bugs-To: \n"
10"POT-Creation-Date: 2016-07-20 12:38-0400\n"10"POT-Creation-Date: 2016-08-26 14:45-0400\n"
11"PO-Revision-Date: 2016-05-21 11:19+0000\n"11"PO-Revision-Date: 2016-05-21 11:19+0000\n"
12"Last-Translator: Jared Norris <jarednorris@ubuntu.com>\n"12"Last-Translator: Jared Norris <jarednorris@ubuntu.com>\n"
13"Language-Team: English (Australia) <en_AU@li.org>\n"13"Language-Team: English (Australia) <en_AU@li.org>\n"
14"Language: \n"
14"MIME-Version: 1.0\n"15"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"16"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"17"Content-Transfer-Encoding: 8bit\n"
@@ -30,14 +31,77 @@
30msgid "Search apps"31msgid "Search apps"
31msgstr ""32msgstr ""
3233
34#: ../.bzr/cobzr/store/scope/apps/query.cpp:38
35msgid "X Apps"
36msgstr ""
37
38#: ../.bzr/cobzr/store/scope/apps/query.cpp:39
39msgid "Hidden X Apps"
40msgstr ""
41
42#: ../.bzr/cobzr/store/scope/apps/query.cpp:43 ../scope/apps/query.cpp:43
43msgid "Exclude Apps: "
44msgstr ""
45
46#. anonymous namespace
47#: ../.bzr/cobzr/store/scope/apps/query.cpp:113
48msgid ""
49"No XApps available. Install new applications with the Libertine Manager."
50msgstr ""
51
52#: ../.bzr/cobzr/store/scope/apps/query.cpp:114
53msgid "All XApps hidden. Reset filters or check the Hidden XApps department."
54msgstr ""
55
56#: ../lib/libertine-scope/preview.cpp:40
57msgid "Info"
58msgstr ""
59
60#: ../lib/libertine-scope/preview.cpp:41
61msgid "Install"
62msgstr ""
63
64#: ../lib/libertine-scope/preview.cpp:42
65msgid "Remove"
66msgstr ""
67
68#: ../lib/libertine-scope/preview.cpp:43
69msgid "Removing..."
70msgstr ""
71
72#: ../lib/libertine-scope/preview.cpp:44
73msgid "Installing..."
74msgstr ""
75
76#: ../lib/libertine-scope/preview.cpp:45 ../scope/apps/preview.cpp:47
77msgid "Open"
78msgstr ""
79
80#: ../lib/libertine-scope/preview.cpp:46
81msgid "Publisher/Creator"
82msgstr ""
83
84#: ../lib/libertine-scope/preview.cpp:47
85msgid "Website"
86msgstr ""
87
88#: ../lib/libertine-scope/preview.cpp:48
89msgid "License"
90msgstr ""
91
92#. Translators: Users tap "Show" button to remove an app from the hidden list of apps: so the meaning is to undo a hide
93#: ../scope/apps/preview.cpp:55
94msgid "Show"
95msgstr ""
96
97#: ../scope/apps/preview.cpp:62
98msgid "Hide"
99msgstr ""
100
33#: ../scope/apps/query.cpp:39101#: ../scope/apps/query.cpp:39
34msgid "Hidden Desktop Apps"102msgid "Hidden Desktop Apps"
35msgstr ""103msgstr ""
36104
37#: ../scope/apps/query.cpp:43
38msgid "Exclude Apps: "
39msgstr ""
40
41#. anonymous namespace105#. anonymous namespace
42#: ../scope/apps/query.cpp:113106#: ../scope/apps/query.cpp:113
43msgid ""107msgid ""
@@ -50,3 +114,19 @@
50"All applications hidden. Reset filters or check the Hidden Desktop Apps "114"All applications hidden. Reset filters or check the Hidden Desktop Apps "
51"department."115"department."
52msgstr ""116msgstr ""
117
118#: ../scope/store/query.cpp:68
119msgid "%1 result found"
120msgstr ""
121
122#: ../scope/store/query.cpp:69
123msgid "%1 results found"
124msgstr ""
125
126#: ../scope/store/query.cpp:74
127msgid "Use the searchbar to find software."
128msgstr ""
129
130#: ../scope/store/query.cpp:75
131msgid "No results found."
132msgstr ""
53133
=== modified file 'po/en_GB.po'
--- po/en_GB.po 2016-08-25 06:10:07 +0000
+++ po/en_GB.po 2016-09-23 14:36:26 +0000
@@ -6,11 +6,12 @@
6msgid ""6msgid ""
7msgstr ""7msgstr ""
8"Project-Id-Version: libertine-scope\n"8"Project-Id-Version: libertine-scope\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"9"Report-Msgid-Bugs-To: \n"
10"POT-Creation-Date: 2016-07-20 12:38-0400\n"10"POT-Creation-Date: 2016-08-26 14:45-0400\n"
11"PO-Revision-Date: 2016-05-20 16:47+0000\n"11"PO-Revision-Date: 2016-05-20 16:47+0000\n"
12"Last-Translator: Andi Chandler <Unknown>\n"12"Last-Translator: Andi Chandler <Unknown>\n"
13"Language-Team: English (United Kingdom) <en_GB@li.org>\n"13"Language-Team: English (United Kingdom) <en_GB@li.org>\n"
14"Language: \n"
14"MIME-Version: 1.0\n"15"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"16"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"17"Content-Transfer-Encoding: 8bit\n"
@@ -30,14 +31,77 @@
30msgid "Search apps"31msgid "Search apps"
31msgstr ""32msgstr ""
3233
34#: ../.bzr/cobzr/store/scope/apps/query.cpp:38
35msgid "X Apps"
36msgstr ""
37
38#: ../.bzr/cobzr/store/scope/apps/query.cpp:39
39msgid "Hidden X Apps"
40msgstr ""
41
42#: ../.bzr/cobzr/store/scope/apps/query.cpp:43 ../scope/apps/query.cpp:43
43msgid "Exclude Apps: "
44msgstr ""
45
46#. anonymous namespace
47#: ../.bzr/cobzr/store/scope/apps/query.cpp:113
48msgid ""
49"No XApps available. Install new applications with the Libertine Manager."
50msgstr ""
51
52#: ../.bzr/cobzr/store/scope/apps/query.cpp:114
53msgid "All XApps hidden. Reset filters or check the Hidden XApps department."
54msgstr ""
55
56#: ../lib/libertine-scope/preview.cpp:40
57msgid "Info"
58msgstr ""
59
60#: ../lib/libertine-scope/preview.cpp:41
61msgid "Install"
62msgstr ""
63
64#: ../lib/libertine-scope/preview.cpp:42
65msgid "Remove"
66msgstr ""
67
68#: ../lib/libertine-scope/preview.cpp:43
69msgid "Removing..."
70msgstr ""
71
72#: ../lib/libertine-scope/preview.cpp:44
73msgid "Installing..."
74msgstr ""
75
76#: ../lib/libertine-scope/preview.cpp:45 ../scope/apps/preview.cpp:47
77msgid "Open"
78msgstr ""
79
80#: ../lib/libertine-scope/preview.cpp:46
81msgid "Publisher/Creator"
82msgstr ""
83
84#: ../lib/libertine-scope/preview.cpp:47
85msgid "Website"
86msgstr ""
87
88#: ../lib/libertine-scope/preview.cpp:48
89msgid "License"
90msgstr ""
91
92#. Translators: Users tap "Show" button to remove an app from the hidden list of apps: so the meaning is to undo a hide
93#: ../scope/apps/preview.cpp:55
94msgid "Show"
95msgstr ""
96
97#: ../scope/apps/preview.cpp:62
98msgid "Hide"
99msgstr ""
100
33#: ../scope/apps/query.cpp:39101#: ../scope/apps/query.cpp:39
34msgid "Hidden Desktop Apps"102msgid "Hidden Desktop Apps"
35msgstr ""103msgstr ""
36104
37#: ../scope/apps/query.cpp:43
38msgid "Exclude Apps: "
39msgstr ""
40
41#. anonymous namespace105#. anonymous namespace
42#: ../scope/apps/query.cpp:113106#: ../scope/apps/query.cpp:113
43msgid ""107msgid ""
@@ -50,3 +114,19 @@
50"All applications hidden. Reset filters or check the Hidden Desktop Apps "114"All applications hidden. Reset filters or check the Hidden Desktop Apps "
51"department."115"department."
52msgstr ""116msgstr ""
117
118#: ../scope/store/query.cpp:68
119msgid "%1 result found"
120msgstr ""
121
122#: ../scope/store/query.cpp:69
123msgid "%1 results found"
124msgstr ""
125
126#: ../scope/store/query.cpp:74
127msgid "Use the searchbar to find software."
128msgstr ""
129
130#: ../scope/store/query.cpp:75
131msgid "No results found."
132msgstr ""
53133
=== modified file 'po/es.po'
--- po/es.po 2016-08-25 06:10:07 +0000
+++ po/es.po 2016-09-23 14:36:26 +0000
@@ -6,11 +6,12 @@
6msgid ""6msgid ""
7msgstr ""7msgstr ""
8"Project-Id-Version: libertine-scope\n"8"Project-Id-Version: libertine-scope\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"9"Report-Msgid-Bugs-To: \n"
10"POT-Creation-Date: 2016-07-20 12:38-0400\n"10"POT-Creation-Date: 2016-08-26 14:45-0400\n"
11"PO-Revision-Date: 2016-07-26 14:22+0000\n"11"PO-Revision-Date: 2016-07-26 14:22+0000\n"
12"Last-Translator: Víctor R. Ruiz <Unknown>\n"12"Last-Translator: Víctor R. Ruiz <Unknown>\n"
13"Language-Team: Spanish <es@li.org>\n"13"Language-Team: Spanish <es@li.org>\n"
14"Language: es\n"
14"MIME-Version: 1.0\n"15"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"16"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"17"Content-Transfer-Encoding: 8bit\n"
@@ -24,21 +25,90 @@
2425
25#: ../scope/apps/libertine-scope.ubuntu_libertine-scope.ini.in.in.h:226#: ../scope/apps/libertine-scope.ubuntu_libertine-scope.ini.in.in.h:2
26msgid "Surface and launch DEB-packaged X11-based applications."27msgid "Surface and launch DEB-packaged X11-based applications."
27msgstr ""28msgstr "Mostrar y ejecutar aplicaciones basadas en X11 y empaquetadas en DEB."
28"Mostrar y ejecutar aplicaciones basadas en X11 y empaquetadas en DEB."
2929
30#: ../scope/apps/libertine-scope.ubuntu_libertine-scope.ini.in.in.h:330#: ../scope/apps/libertine-scope.ubuntu_libertine-scope.ini.in.in.h:3
31msgid "Search apps"31msgid "Search apps"
32msgstr "Buscar aplis"32msgstr "Buscar aplis"
3333
34#: ../.bzr/cobzr/store/scope/apps/query.cpp:38
35msgid "X Apps"
36msgstr ""
37
38#: ../.bzr/cobzr/store/scope/apps/query.cpp:39
39#, fuzzy
40msgid "Hidden X Apps"
41msgstr "Aplis de escritorio ocultas"
42
43#: ../.bzr/cobzr/store/scope/apps/query.cpp:43 ../scope/apps/query.cpp:43
44msgid "Exclude Apps: "
45msgstr "Excluir aplis: "
46
47#. anonymous namespace
48#: ../.bzr/cobzr/store/scope/apps/query.cpp:113
49#, fuzzy
50msgid ""
51"No XApps available. Install new applications with the Libertine Manager."
52msgstr ""
53"No hay aplicaciones disponibles. Instale las nuevas aplicaciones con el "
54"gestor de Libertine."
55
56#: ../.bzr/cobzr/store/scope/apps/query.cpp:114
57#, fuzzy
58msgid "All XApps hidden. Reset filters or check the Hidden XApps department."
59msgstr ""
60"Todas las aplicaciones están ocultas. Reinice los filtros o revise el "
61"departamento Aplis de escritorio ocultas."
62
63#: ../lib/libertine-scope/preview.cpp:40
64msgid "Info"
65msgstr ""
66
67#: ../lib/libertine-scope/preview.cpp:41
68msgid "Install"
69msgstr ""
70
71#: ../lib/libertine-scope/preview.cpp:42
72msgid "Remove"
73msgstr ""
74
75#: ../lib/libertine-scope/preview.cpp:43
76msgid "Removing..."
77msgstr ""
78
79#: ../lib/libertine-scope/preview.cpp:44
80msgid "Installing..."
81msgstr ""
82
83#: ../lib/libertine-scope/preview.cpp:45 ../scope/apps/preview.cpp:47
84msgid "Open"
85msgstr ""
86
87#: ../lib/libertine-scope/preview.cpp:46
88msgid "Publisher/Creator"
89msgstr ""
90
91#: ../lib/libertine-scope/preview.cpp:47
92msgid "Website"
93msgstr ""
94
95#: ../lib/libertine-scope/preview.cpp:48
96msgid "License"
97msgstr ""
98
99#. Translators: Users tap "Show" button to remove an app from the hidden list of apps: so the meaning is to undo a hide
100#: ../scope/apps/preview.cpp:55
101msgid "Show"
102msgstr ""
103
104#: ../scope/apps/preview.cpp:62
105msgid "Hide"
106msgstr ""
107
34#: ../scope/apps/query.cpp:39108#: ../scope/apps/query.cpp:39
35msgid "Hidden Desktop Apps"109msgid "Hidden Desktop Apps"
36msgstr "Aplis de escritorio ocultas"110msgstr "Aplis de escritorio ocultas"
37111
38#: ../scope/apps/query.cpp:43
39msgid "Exclude Apps: "
40msgstr "Excluir aplis: "
41
42#. anonymous namespace112#. anonymous namespace
43#: ../scope/apps/query.cpp:113113#: ../scope/apps/query.cpp:113
44msgid ""114msgid ""
@@ -55,3 +125,19 @@
55msgstr ""125msgstr ""
56"Todas las aplicaciones están ocultas. Reinice los filtros o revise el "126"Todas las aplicaciones están ocultas. Reinice los filtros o revise el "
57"departamento Aplis de escritorio ocultas."127"departamento Aplis de escritorio ocultas."
128
129#: ../scope/store/query.cpp:68
130msgid "%1 result found"
131msgstr ""
132
133#: ../scope/store/query.cpp:69
134msgid "%1 results found"
135msgstr ""
136
137#: ../scope/store/query.cpp:74
138msgid "Use the searchbar to find software."
139msgstr ""
140
141#: ../scope/store/query.cpp:75
142msgid "No results found."
143msgstr ""
58144
=== modified file 'po/fi.po'
--- po/fi.po 2016-08-25 06:10:07 +0000
+++ po/fi.po 2016-09-23 14:36:26 +0000
@@ -6,11 +6,12 @@
6msgid ""6msgid ""
7msgstr ""7msgstr ""
8"Project-Id-Version: libertine-scope\n"8"Project-Id-Version: libertine-scope\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"9"Report-Msgid-Bugs-To: \n"
10"POT-Creation-Date: 2016-07-20 12:38-0400\n"10"POT-Creation-Date: 2016-08-26 14:45-0400\n"
11"PO-Revision-Date: 2016-05-30 07:34+0000\n"11"PO-Revision-Date: 2016-05-30 07:34+0000\n"
12"Last-Translator: Jiri Grönroos <Unknown>\n"12"Last-Translator: Jiri Grönroos <Unknown>\n"
13"Language-Team: Finnish <fi@li.org>\n"13"Language-Team: Finnish <fi@li.org>\n"
14"Language: fi\n"
14"MIME-Version: 1.0\n"15"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"16"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"17"Content-Transfer-Encoding: 8bit\n"
@@ -30,14 +31,77 @@
30msgid "Search apps"31msgid "Search apps"
31msgstr ""32msgstr ""
3233
34#: ../.bzr/cobzr/store/scope/apps/query.cpp:38
35msgid "X Apps"
36msgstr ""
37
38#: ../.bzr/cobzr/store/scope/apps/query.cpp:39
39msgid "Hidden X Apps"
40msgstr ""
41
42#: ../.bzr/cobzr/store/scope/apps/query.cpp:43 ../scope/apps/query.cpp:43
43msgid "Exclude Apps: "
44msgstr ""
45
46#. anonymous namespace
47#: ../.bzr/cobzr/store/scope/apps/query.cpp:113
48msgid ""
49"No XApps available. Install new applications with the Libertine Manager."
50msgstr ""
51
52#: ../.bzr/cobzr/store/scope/apps/query.cpp:114
53msgid "All XApps hidden. Reset filters or check the Hidden XApps department."
54msgstr ""
55
56#: ../lib/libertine-scope/preview.cpp:40
57msgid "Info"
58msgstr ""
59
60#: ../lib/libertine-scope/preview.cpp:41
61msgid "Install"
62msgstr ""
63
64#: ../lib/libertine-scope/preview.cpp:42
65msgid "Remove"
66msgstr ""
67
68#: ../lib/libertine-scope/preview.cpp:43
69msgid "Removing..."
70msgstr ""
71
72#: ../lib/libertine-scope/preview.cpp:44
73msgid "Installing..."
74msgstr ""
75
76#: ../lib/libertine-scope/preview.cpp:45 ../scope/apps/preview.cpp:47
77msgid "Open"
78msgstr ""
79
80#: ../lib/libertine-scope/preview.cpp:46
81msgid "Publisher/Creator"
82msgstr ""
83
84#: ../lib/libertine-scope/preview.cpp:47
85msgid "Website"
86msgstr ""
87
88#: ../lib/libertine-scope/preview.cpp:48
89msgid "License"
90msgstr ""
91
92#. Translators: Users tap "Show" button to remove an app from the hidden list of apps: so the meaning is to undo a hide
93#: ../scope/apps/preview.cpp:55
94msgid "Show"
95msgstr ""
96
97#: ../scope/apps/preview.cpp:62
98msgid "Hide"
99msgstr ""
100
33#: ../scope/apps/query.cpp:39101#: ../scope/apps/query.cpp:39
34msgid "Hidden Desktop Apps"102msgid "Hidden Desktop Apps"
35msgstr ""103msgstr ""
36104
37#: ../scope/apps/query.cpp:43
38msgid "Exclude Apps: "
39msgstr ""
40
41#. anonymous namespace105#. anonymous namespace
42#: ../scope/apps/query.cpp:113106#: ../scope/apps/query.cpp:113
43msgid ""107msgid ""
@@ -50,3 +114,19 @@
50"All applications hidden. Reset filters or check the Hidden Desktop Apps "114"All applications hidden. Reset filters or check the Hidden Desktop Apps "
51"department."115"department."
52msgstr ""116msgstr ""
117
118#: ../scope/store/query.cpp:68
119msgid "%1 result found"
120msgstr ""
121
122#: ../scope/store/query.cpp:69
123msgid "%1 results found"
124msgstr ""
125
126#: ../scope/store/query.cpp:74
127msgid "Use the searchbar to find software."
128msgstr ""
129
130#: ../scope/store/query.cpp:75
131msgid "No results found."
132msgstr ""
53133
=== modified file 'po/fr.po'
--- po/fr.po 2016-08-25 06:10:07 +0000
+++ po/fr.po 2016-09-23 14:36:26 +0000
@@ -6,11 +6,12 @@
6msgid ""6msgid ""
7msgstr ""7msgstr ""
8"Project-Id-Version: libertine-scope\n"8"Project-Id-Version: libertine-scope\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"9"Report-Msgid-Bugs-To: \n"
10"POT-Creation-Date: 2016-07-20 12:38-0400\n"10"POT-Creation-Date: 2016-08-26 14:45-0400\n"
11"PO-Revision-Date: 2016-05-21 12:23+0000\n"11"PO-Revision-Date: 2016-05-21 12:23+0000\n"
12"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"12"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
13"Language-Team: French <fr@li.org>\n"13"Language-Team: French <fr@li.org>\n"
14"Language: fr\n"
14"MIME-Version: 1.0\n"15"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"16"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"17"Content-Transfer-Encoding: 8bit\n"
@@ -30,14 +31,77 @@
30msgid "Search apps"31msgid "Search apps"
31msgstr ""32msgstr ""
3233
34#: ../.bzr/cobzr/store/scope/apps/query.cpp:38
35msgid "X Apps"
36msgstr ""
37
38#: ../.bzr/cobzr/store/scope/apps/query.cpp:39
39msgid "Hidden X Apps"
40msgstr ""
41
42#: ../.bzr/cobzr/store/scope/apps/query.cpp:43 ../scope/apps/query.cpp:43
43msgid "Exclude Apps: "
44msgstr ""
45
46#. anonymous namespace
47#: ../.bzr/cobzr/store/scope/apps/query.cpp:113
48msgid ""
49"No XApps available. Install new applications with the Libertine Manager."
50msgstr ""
51
52#: ../.bzr/cobzr/store/scope/apps/query.cpp:114
53msgid "All XApps hidden. Reset filters or check the Hidden XApps department."
54msgstr ""
55
56#: ../lib/libertine-scope/preview.cpp:40
57msgid "Info"
58msgstr ""
59
60#: ../lib/libertine-scope/preview.cpp:41
61msgid "Install"
62msgstr ""
63
64#: ../lib/libertine-scope/preview.cpp:42
65msgid "Remove"
66msgstr ""
67
68#: ../lib/libertine-scope/preview.cpp:43
69msgid "Removing..."
70msgstr ""
71
72#: ../lib/libertine-scope/preview.cpp:44
73msgid "Installing..."
74msgstr ""
75
76#: ../lib/libertine-scope/preview.cpp:45 ../scope/apps/preview.cpp:47
77msgid "Open"
78msgstr ""
79
80#: ../lib/libertine-scope/preview.cpp:46
81msgid "Publisher/Creator"
82msgstr ""
83
84#: ../lib/libertine-scope/preview.cpp:47
85msgid "Website"
86msgstr ""
87
88#: ../lib/libertine-scope/preview.cpp:48
89msgid "License"
90msgstr ""
91
92#. Translators: Users tap "Show" button to remove an app from the hidden list of apps: so the meaning is to undo a hide
93#: ../scope/apps/preview.cpp:55
94msgid "Show"
95msgstr ""
96
97#: ../scope/apps/preview.cpp:62
98msgid "Hide"
99msgstr ""
100
33#: ../scope/apps/query.cpp:39101#: ../scope/apps/query.cpp:39
34msgid "Hidden Desktop Apps"102msgid "Hidden Desktop Apps"
35msgstr ""103msgstr ""
36104
37#: ../scope/apps/query.cpp:43
38msgid "Exclude Apps: "
39msgstr ""
40
41#. anonymous namespace105#. anonymous namespace
42#: ../scope/apps/query.cpp:113106#: ../scope/apps/query.cpp:113
43msgid ""107msgid ""
@@ -50,3 +114,19 @@
50"All applications hidden. Reset filters or check the Hidden Desktop Apps "114"All applications hidden. Reset filters or check the Hidden Desktop Apps "
51"department."115"department."
52msgstr ""116msgstr ""
117
118#: ../scope/store/query.cpp:68
119msgid "%1 result found"
120msgstr ""
121
122#: ../scope/store/query.cpp:69
123msgid "%1 results found"
124msgstr ""
125
126#: ../scope/store/query.cpp:74
127msgid "Use the searchbar to find software."
128msgstr ""
129
130#: ../scope/store/query.cpp:75
131msgid "No results found."
132msgstr ""
53133
=== modified file 'po/gl.po'
--- po/gl.po 2016-08-25 06:10:07 +0000
+++ po/gl.po 2016-09-23 14:36:26 +0000
@@ -6,11 +6,12 @@
6msgid ""6msgid ""
7msgstr ""7msgstr ""
8"Project-Id-Version: libertine-scope\n"8"Project-Id-Version: libertine-scope\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"9"Report-Msgid-Bugs-To: \n"
10"POT-Creation-Date: 2016-07-20 12:38-0400\n"10"POT-Creation-Date: 2016-08-26 14:45-0400\n"
11"PO-Revision-Date: 2016-07-30 18:36+0000\n"11"PO-Revision-Date: 2016-07-30 18:36+0000\n"
12"Last-Translator: Marcos Lans <Unknown>\n"12"Last-Translator: Marcos Lans <Unknown>\n"
13"Language-Team: Galician <gl@li.org>\n"13"Language-Team: Galician <gl@li.org>\n"
14"Language: gl\n"
14"MIME-Version: 1.0\n"15"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"16"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"17"Content-Transfer-Encoding: 8bit\n"
@@ -31,14 +32,77 @@
31msgid "Search apps"32msgid "Search apps"
32msgstr "Buscar nos aplicativos"33msgstr "Buscar nos aplicativos"
3334
35#: ../.bzr/cobzr/store/scope/apps/query.cpp:38
36msgid "X Apps"
37msgstr ""
38
39#: ../.bzr/cobzr/store/scope/apps/query.cpp:39
40msgid "Hidden X Apps"
41msgstr ""
42
43#: ../.bzr/cobzr/store/scope/apps/query.cpp:43 ../scope/apps/query.cpp:43
44msgid "Exclude Apps: "
45msgstr "Excluír aplicativos: "
46
47#. anonymous namespace
48#: ../.bzr/cobzr/store/scope/apps/query.cpp:113
49msgid ""
50"No XApps available. Install new applications with the Libertine Manager."
51msgstr ""
52
53#: ../.bzr/cobzr/store/scope/apps/query.cpp:114
54msgid "All XApps hidden. Reset filters or check the Hidden XApps department."
55msgstr ""
56
57#: ../lib/libertine-scope/preview.cpp:40
58msgid "Info"
59msgstr ""
60
61#: ../lib/libertine-scope/preview.cpp:41
62msgid "Install"
63msgstr ""
64
65#: ../lib/libertine-scope/preview.cpp:42
66msgid "Remove"
67msgstr ""
68
69#: ../lib/libertine-scope/preview.cpp:43
70msgid "Removing..."
71msgstr ""
72
73#: ../lib/libertine-scope/preview.cpp:44
74msgid "Installing..."
75msgstr ""
76
77#: ../lib/libertine-scope/preview.cpp:45 ../scope/apps/preview.cpp:47
78msgid "Open"
79msgstr ""
80
81#: ../lib/libertine-scope/preview.cpp:46
82msgid "Publisher/Creator"
83msgstr ""
84
85#: ../lib/libertine-scope/preview.cpp:47
86msgid "Website"
87msgstr ""
88
89#: ../lib/libertine-scope/preview.cpp:48
90msgid "License"
91msgstr ""
92
93#. Translators: Users tap "Show" button to remove an app from the hidden list of apps: so the meaning is to undo a hide
94#: ../scope/apps/preview.cpp:55
95msgid "Show"
96msgstr ""
97
98#: ../scope/apps/preview.cpp:62
99msgid "Hide"
100msgstr ""
101
34#: ../scope/apps/query.cpp:39102#: ../scope/apps/query.cpp:39
35msgid "Hidden Desktop Apps"103msgid "Hidden Desktop Apps"
36msgstr "Aplicativos de escritorio ocultos"104msgstr "Aplicativos de escritorio ocultos"
37105
38#: ../scope/apps/query.cpp:43
39msgid "Exclude Apps: "
40msgstr "Excluír aplicativos: "
41
42#. anonymous namespace106#. anonymous namespace
43#: ../scope/apps/query.cpp:113107#: ../scope/apps/query.cpp:113
44msgid ""108msgid ""
@@ -55,3 +119,19 @@
55msgstr ""119msgstr ""
56"Todos os aplicativos ocultos. Restabeleza os filtros ou comprobe o apartado "120"Todos os aplicativos ocultos. Restabeleza os filtros ou comprobe o apartado "
57"de aplicativos de escritorio ocultos."121"de aplicativos de escritorio ocultos."
122
123#: ../scope/store/query.cpp:68
124msgid "%1 result found"
125msgstr ""
126
127#: ../scope/store/query.cpp:69
128msgid "%1 results found"
129msgstr ""
130
131#: ../scope/store/query.cpp:74
132msgid "Use the searchbar to find software."
133msgstr ""
134
135#: ../scope/store/query.cpp:75
136msgid "No results found."
137msgstr ""
58138
=== modified file 'po/hu.po'
--- po/hu.po 2016-08-25 06:10:07 +0000
+++ po/hu.po 2016-09-23 14:36:26 +0000
@@ -6,11 +6,12 @@
6msgid ""6msgid ""
7msgstr ""7msgstr ""
8"Project-Id-Version: libertine-scope\n"8"Project-Id-Version: libertine-scope\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"9"Report-Msgid-Bugs-To: \n"
10"POT-Creation-Date: 2016-07-20 12:38-0400\n"10"POT-Creation-Date: 2016-08-26 14:45-0400\n"
11"PO-Revision-Date: 2016-07-21 20:40+0000\n"11"PO-Revision-Date: 2016-07-21 20:40+0000\n"
12"Last-Translator: Richard Somlói <ricsipontaz@gmail.com>\n"12"Last-Translator: Richard Somlói <ricsipontaz@gmail.com>\n"
13"Language-Team: Hungarian <hu@li.org>\n"13"Language-Team: Hungarian <hu@li.org>\n"
14"Language: hu\n"
14"MIME-Version: 1.0\n"15"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"16"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"17"Content-Transfer-Encoding: 8bit\n"
@@ -30,14 +31,83 @@
30msgid "Search apps"31msgid "Search apps"
31msgstr "Alkalmazások keresése"32msgstr "Alkalmazások keresése"
3233
34#: ../.bzr/cobzr/store/scope/apps/query.cpp:38
35msgid "X Apps"
36msgstr ""
37
38#: ../.bzr/cobzr/store/scope/apps/query.cpp:39
39#, fuzzy
40msgid "Hidden X Apps"
41msgstr "Rejtett asztali alkalmazások"
42
43#: ../.bzr/cobzr/store/scope/apps/query.cpp:43 ../scope/apps/query.cpp:43
44msgid "Exclude Apps: "
45msgstr "Alkalmazáskivételek: "
46
47#. anonymous namespace
48#: ../.bzr/cobzr/store/scope/apps/query.cpp:113
49#, fuzzy
50msgid ""
51"No XApps available. Install new applications with the Libertine Manager."
52msgstr ""
53"Nincs elérhető alkalmazás. Telepítsen újakat a Libertine-kezelő segítségével."
54
55#: ../.bzr/cobzr/store/scope/apps/query.cpp:114
56#, fuzzy
57msgid "All XApps hidden. Reset filters or check the Hidden XApps department."
58msgstr ""
59"Minden alkalmazás rejtett. Törölje a szűrőt vagy váltson a rejtett asztali "
60"alkalmazásokra."
61
62#: ../lib/libertine-scope/preview.cpp:40
63msgid "Info"
64msgstr ""
65
66#: ../lib/libertine-scope/preview.cpp:41
67msgid "Install"
68msgstr ""
69
70#: ../lib/libertine-scope/preview.cpp:42
71msgid "Remove"
72msgstr ""
73
74#: ../lib/libertine-scope/preview.cpp:43
75msgid "Removing..."
76msgstr ""
77
78#: ../lib/libertine-scope/preview.cpp:44
79msgid "Installing..."
80msgstr ""
81
82#: ../lib/libertine-scope/preview.cpp:45 ../scope/apps/preview.cpp:47
83msgid "Open"
84msgstr ""
85
86#: ../lib/libertine-scope/preview.cpp:46
87msgid "Publisher/Creator"
88msgstr ""
89
90#: ../lib/libertine-scope/preview.cpp:47
91msgid "Website"
92msgstr ""
93
94#: ../lib/libertine-scope/preview.cpp:48
95msgid "License"
96msgstr ""
97
98#. Translators: Users tap "Show" button to remove an app from the hidden list of apps: so the meaning is to undo a hide
99#: ../scope/apps/preview.cpp:55
100msgid "Show"
101msgstr ""
102
103#: ../scope/apps/preview.cpp:62
104msgid "Hide"
105msgstr ""
106
33#: ../scope/apps/query.cpp:39107#: ../scope/apps/query.cpp:39
34msgid "Hidden Desktop Apps"108msgid "Hidden Desktop Apps"
35msgstr "Rejtett asztali alkalmazások"109msgstr "Rejtett asztali alkalmazások"
36110
37#: ../scope/apps/query.cpp:43
38msgid "Exclude Apps: "
39msgstr "Alkalmazáskivételek: "
40
41#. anonymous namespace111#. anonymous namespace
42#: ../scope/apps/query.cpp:113112#: ../scope/apps/query.cpp:113
43msgid ""113msgid ""
@@ -53,3 +123,19 @@
53msgstr ""123msgstr ""
54"Minden alkalmazás rejtett. Törölje a szűrőt vagy váltson a rejtett asztali "124"Minden alkalmazás rejtett. Törölje a szűrőt vagy váltson a rejtett asztali "
55"alkalmazásokra."125"alkalmazásokra."
126
127#: ../scope/store/query.cpp:68
128msgid "%1 result found"
129msgstr ""
130
131#: ../scope/store/query.cpp:69
132msgid "%1 results found"
133msgstr ""
134
135#: ../scope/store/query.cpp:74
136msgid "Use the searchbar to find software."
137msgstr ""
138
139#: ../scope/store/query.cpp:75
140msgid "No results found."
141msgstr ""
56142
=== modified file 'po/libertine-scope.pot'
--- po/libertine-scope.pot 2016-07-20 16:39:17 +0000
+++ po/libertine-scope.pot 2016-09-23 14:36:26 +0000
@@ -8,7 +8,7 @@
8msgstr ""8msgstr ""
9"Project-Id-Version: PACKAGE VERSION\n"9"Project-Id-Version: PACKAGE VERSION\n"
10"Report-Msgid-Bugs-To: \n"10"Report-Msgid-Bugs-To: \n"
11"POT-Creation-Date: 2016-07-20 12:38-0400\n"11"POT-Creation-Date: 2016-08-26 14:45-0400\n"
12"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"12"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
13"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"13"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
14"Language-Team: LANGUAGE <LL@li.org>\n"14"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -30,14 +30,77 @@
30msgid "Search apps"30msgid "Search apps"
31msgstr ""31msgstr ""
3232
33#: ../.bzr/cobzr/store/scope/apps/query.cpp:38
34msgid "X Apps"
35msgstr ""
36
37#: ../.bzr/cobzr/store/scope/apps/query.cpp:39
38msgid "Hidden X Apps"
39msgstr ""
40
41#: ../.bzr/cobzr/store/scope/apps/query.cpp:43 ../scope/apps/query.cpp:43
42msgid "Exclude Apps: "
43msgstr ""
44
45#. anonymous namespace
46#: ../.bzr/cobzr/store/scope/apps/query.cpp:113
47msgid ""
48"No XApps available. Install new applications with the Libertine Manager."
49msgstr ""
50
51#: ../.bzr/cobzr/store/scope/apps/query.cpp:114
52msgid "All XApps hidden. Reset filters or check the Hidden XApps department."
53msgstr ""
54
55#: ../lib/libertine-scope/preview.cpp:40
56msgid "Info"
57msgstr ""
58
59#: ../lib/libertine-scope/preview.cpp:41
60msgid "Install"
61msgstr ""
62
63#: ../lib/libertine-scope/preview.cpp:42
64msgid "Remove"
65msgstr ""
66
67#: ../lib/libertine-scope/preview.cpp:43
68msgid "Removing..."
69msgstr ""
70
71#: ../lib/libertine-scope/preview.cpp:44
72msgid "Installing..."
73msgstr ""
74
75#: ../lib/libertine-scope/preview.cpp:45 ../scope/apps/preview.cpp:47
76msgid "Open"
77msgstr ""
78
79#: ../lib/libertine-scope/preview.cpp:46
80msgid "Publisher/Creator"
81msgstr ""
82
83#: ../lib/libertine-scope/preview.cpp:47
84msgid "Website"
85msgstr ""
86
87#: ../lib/libertine-scope/preview.cpp:48
88msgid "License"
89msgstr ""
90
91#. Translators: Users tap "Show" button to remove an app from the hidden list of apps: so the meaning is to undo a hide
92#: ../scope/apps/preview.cpp:55
93msgid "Show"
94msgstr ""
95
96#: ../scope/apps/preview.cpp:62
97msgid "Hide"
98msgstr ""
99
33#: ../scope/apps/query.cpp:39100#: ../scope/apps/query.cpp:39
34msgid "Hidden Desktop Apps"101msgid "Hidden Desktop Apps"
35msgstr ""102msgstr ""
36103
37#: ../scope/apps/query.cpp:43
38msgid "Exclude Apps: "
39msgstr ""
40
41#. anonymous namespace104#. anonymous namespace
42#: ../scope/apps/query.cpp:113105#: ../scope/apps/query.cpp:113
43msgid ""106msgid ""
@@ -50,3 +113,19 @@
50"All applications hidden. Reset filters or check the Hidden Desktop Apps "113"All applications hidden. Reset filters or check the Hidden Desktop Apps "
51"department."114"department."
52msgstr ""115msgstr ""
116
117#: ../scope/store/query.cpp:68
118msgid "%1 result found"
119msgstr ""
120
121#: ../scope/store/query.cpp:69
122msgid "%1 results found"
123msgstr ""
124
125#: ../scope/store/query.cpp:74
126msgid "Use the searchbar to find software."
127msgstr ""
128
129#: ../scope/store/query.cpp:75
130msgid "No results found."
131msgstr ""
53132
=== modified file 'po/ms.po'
--- po/ms.po 2016-08-25 06:10:07 +0000
+++ po/ms.po 2016-09-23 14:36:26 +0000
@@ -6,11 +6,12 @@
6msgid ""6msgid ""
7msgstr ""7msgstr ""
8"Project-Id-Version: libertine-scope\n"8"Project-Id-Version: libertine-scope\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"9"Report-Msgid-Bugs-To: \n"
10"POT-Creation-Date: 2016-07-20 12:38-0400\n"10"POT-Creation-Date: 2016-08-26 14:45-0400\n"
11"PO-Revision-Date: 2016-05-22 00:24+0000\n"11"PO-Revision-Date: 2016-05-22 00:24+0000\n"
12"Last-Translator: abuyop <Unknown>\n"12"Last-Translator: abuyop <Unknown>\n"
13"Language-Team: Malay <ms@li.org>\n"13"Language-Team: Malay <ms@li.org>\n"
14"Language: ms\n"
14"MIME-Version: 1.0\n"15"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"16"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"17"Content-Transfer-Encoding: 8bit\n"
@@ -30,14 +31,77 @@
30msgid "Search apps"31msgid "Search apps"
31msgstr ""32msgstr ""
3233
34#: ../.bzr/cobzr/store/scope/apps/query.cpp:38
35msgid "X Apps"
36msgstr ""
37
38#: ../.bzr/cobzr/store/scope/apps/query.cpp:39
39msgid "Hidden X Apps"
40msgstr ""
41
42#: ../.bzr/cobzr/store/scope/apps/query.cpp:43 ../scope/apps/query.cpp:43
43msgid "Exclude Apps: "
44msgstr ""
45
46#. anonymous namespace
47#: ../.bzr/cobzr/store/scope/apps/query.cpp:113
48msgid ""
49"No XApps available. Install new applications with the Libertine Manager."
50msgstr ""
51
52#: ../.bzr/cobzr/store/scope/apps/query.cpp:114
53msgid "All XApps hidden. Reset filters or check the Hidden XApps department."
54msgstr ""
55
56#: ../lib/libertine-scope/preview.cpp:40
57msgid "Info"
58msgstr ""
59
60#: ../lib/libertine-scope/preview.cpp:41
61msgid "Install"
62msgstr ""
63
64#: ../lib/libertine-scope/preview.cpp:42
65msgid "Remove"
66msgstr ""
67
68#: ../lib/libertine-scope/preview.cpp:43
69msgid "Removing..."
70msgstr ""
71
72#: ../lib/libertine-scope/preview.cpp:44
73msgid "Installing..."
74msgstr ""
75
76#: ../lib/libertine-scope/preview.cpp:45 ../scope/apps/preview.cpp:47
77msgid "Open"
78msgstr ""
79
80#: ../lib/libertine-scope/preview.cpp:46
81msgid "Publisher/Creator"
82msgstr ""
83
84#: ../lib/libertine-scope/preview.cpp:47
85msgid "Website"
86msgstr ""
87
88#: ../lib/libertine-scope/preview.cpp:48
89msgid "License"
90msgstr ""
91
92#. Translators: Users tap "Show" button to remove an app from the hidden list of apps: so the meaning is to undo a hide
93#: ../scope/apps/preview.cpp:55
94msgid "Show"
95msgstr ""
96
97#: ../scope/apps/preview.cpp:62
98msgid "Hide"
99msgstr ""
100
33#: ../scope/apps/query.cpp:39101#: ../scope/apps/query.cpp:39
34msgid "Hidden Desktop Apps"102msgid "Hidden Desktop Apps"
35msgstr ""103msgstr ""
36104
37#: ../scope/apps/query.cpp:43
38msgid "Exclude Apps: "
39msgstr ""
40
41#. anonymous namespace105#. anonymous namespace
42#: ../scope/apps/query.cpp:113106#: ../scope/apps/query.cpp:113
43msgid ""107msgid ""
@@ -50,3 +114,19 @@
50"All applications hidden. Reset filters or check the Hidden Desktop Apps "114"All applications hidden. Reset filters or check the Hidden Desktop Apps "
51"department."115"department."
52msgstr ""116msgstr ""
117
118#: ../scope/store/query.cpp:68
119msgid "%1 result found"
120msgstr ""
121
122#: ../scope/store/query.cpp:69
123msgid "%1 results found"
124msgstr ""
125
126#: ../scope/store/query.cpp:74
127msgid "Use the searchbar to find software."
128msgstr ""
129
130#: ../scope/store/query.cpp:75
131msgid "No results found."
132msgstr ""
53133
=== modified file 'po/pt.po'
--- po/pt.po 2016-08-25 06:10:07 +0000
+++ po/pt.po 2016-09-23 14:36:26 +0000
@@ -6,11 +6,12 @@
6msgid ""6msgid ""
7msgstr ""7msgstr ""
8"Project-Id-Version: libertine-scope\n"8"Project-Id-Version: libertine-scope\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"9"Report-Msgid-Bugs-To: \n"
10"POT-Creation-Date: 2016-07-20 12:38-0400\n"10"POT-Creation-Date: 2016-08-26 14:45-0400\n"
11"PO-Revision-Date: 2016-05-20 16:05+0000\n"11"PO-Revision-Date: 2016-05-20 16:05+0000\n"
12"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"12"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
13"Language-Team: Portuguese <pt@li.org>\n"13"Language-Team: Portuguese <pt@li.org>\n"
14"Language: pt\n"
14"MIME-Version: 1.0\n"15"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"16"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"17"Content-Transfer-Encoding: 8bit\n"
@@ -30,14 +31,77 @@
30msgid "Search apps"31msgid "Search apps"
31msgstr ""32msgstr ""
3233
34#: ../.bzr/cobzr/store/scope/apps/query.cpp:38
35msgid "X Apps"
36msgstr ""
37
38#: ../.bzr/cobzr/store/scope/apps/query.cpp:39
39msgid "Hidden X Apps"
40msgstr ""
41
42#: ../.bzr/cobzr/store/scope/apps/query.cpp:43 ../scope/apps/query.cpp:43
43msgid "Exclude Apps: "
44msgstr ""
45
46#. anonymous namespace
47#: ../.bzr/cobzr/store/scope/apps/query.cpp:113
48msgid ""
49"No XApps available. Install new applications with the Libertine Manager."
50msgstr ""
51
52#: ../.bzr/cobzr/store/scope/apps/query.cpp:114
53msgid "All XApps hidden. Reset filters or check the Hidden XApps department."
54msgstr ""
55
56#: ../lib/libertine-scope/preview.cpp:40
57msgid "Info"
58msgstr ""
59
60#: ../lib/libertine-scope/preview.cpp:41
61msgid "Install"
62msgstr ""
63
64#: ../lib/libertine-scope/preview.cpp:42
65msgid "Remove"
66msgstr ""
67
68#: ../lib/libertine-scope/preview.cpp:43
69msgid "Removing..."
70msgstr ""
71
72#: ../lib/libertine-scope/preview.cpp:44
73msgid "Installing..."
74msgstr ""
75
76#: ../lib/libertine-scope/preview.cpp:45 ../scope/apps/preview.cpp:47
77msgid "Open"
78msgstr ""
79
80#: ../lib/libertine-scope/preview.cpp:46
81msgid "Publisher/Creator"
82msgstr ""
83
84#: ../lib/libertine-scope/preview.cpp:47
85msgid "Website"
86msgstr ""
87
88#: ../lib/libertine-scope/preview.cpp:48
89msgid "License"
90msgstr ""
91
92#. Translators: Users tap "Show" button to remove an app from the hidden list of apps: so the meaning is to undo a hide
93#: ../scope/apps/preview.cpp:55
94msgid "Show"
95msgstr ""
96
97#: ../scope/apps/preview.cpp:62
98msgid "Hide"
99msgstr ""
100
33#: ../scope/apps/query.cpp:39101#: ../scope/apps/query.cpp:39
34msgid "Hidden Desktop Apps"102msgid "Hidden Desktop Apps"
35msgstr ""103msgstr ""
36104
37#: ../scope/apps/query.cpp:43
38msgid "Exclude Apps: "
39msgstr ""
40
41#. anonymous namespace105#. anonymous namespace
42#: ../scope/apps/query.cpp:113106#: ../scope/apps/query.cpp:113
43msgid ""107msgid ""
@@ -50,3 +114,19 @@
50"All applications hidden. Reset filters or check the Hidden Desktop Apps "114"All applications hidden. Reset filters or check the Hidden Desktop Apps "
51"department."115"department."
52msgstr ""116msgstr ""
117
118#: ../scope/store/query.cpp:68
119msgid "%1 result found"
120msgstr ""
121
122#: ../scope/store/query.cpp:69
123msgid "%1 results found"
124msgstr ""
125
126#: ../scope/store/query.cpp:74
127msgid "Use the searchbar to find software."
128msgstr ""
129
130#: ../scope/store/query.cpp:75
131msgid "No results found."
132msgstr ""
53133
=== modified file 'po/uk.po'
--- po/uk.po 2016-08-25 06:10:07 +0000
+++ po/uk.po 2016-09-23 14:36:26 +0000
@@ -6,11 +6,12 @@
6msgid ""6msgid ""
7msgstr ""7msgstr ""
8"Project-Id-Version: libertine-scope\n"8"Project-Id-Version: libertine-scope\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"9"Report-Msgid-Bugs-To: \n"
10"POT-Creation-Date: 2016-07-20 12:38-0400\n"10"POT-Creation-Date: 2016-08-26 14:45-0400\n"
11"PO-Revision-Date: 2016-05-20 15:56+0000\n"11"PO-Revision-Date: 2016-05-20 15:56+0000\n"
12"Last-Translator: Yuri Chornoivan <yurchor@gmail.com>\n"12"Last-Translator: Yuri Chornoivan <yurchor@gmail.com>\n"
13"Language-Team: Ukrainian <uk@li.org>\n"13"Language-Team: Ukrainian <uk@li.org>\n"
14"Language: uk\n"
14"MIME-Version: 1.0\n"15"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"16"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"17"Content-Transfer-Encoding: 8bit\n"
@@ -30,14 +31,77 @@
30msgid "Search apps"31msgid "Search apps"
31msgstr ""32msgstr ""
3233
34#: ../.bzr/cobzr/store/scope/apps/query.cpp:38
35msgid "X Apps"
36msgstr ""
37
38#: ../.bzr/cobzr/store/scope/apps/query.cpp:39
39msgid "Hidden X Apps"
40msgstr ""
41
42#: ../.bzr/cobzr/store/scope/apps/query.cpp:43 ../scope/apps/query.cpp:43
43msgid "Exclude Apps: "
44msgstr ""
45
46#. anonymous namespace
47#: ../.bzr/cobzr/store/scope/apps/query.cpp:113
48msgid ""
49"No XApps available. Install new applications with the Libertine Manager."
50msgstr ""
51
52#: ../.bzr/cobzr/store/scope/apps/query.cpp:114
53msgid "All XApps hidden. Reset filters or check the Hidden XApps department."
54msgstr ""
55
56#: ../lib/libertine-scope/preview.cpp:40
57msgid "Info"
58msgstr ""
59
60#: ../lib/libertine-scope/preview.cpp:41
61msgid "Install"
62msgstr ""
63
64#: ../lib/libertine-scope/preview.cpp:42
65msgid "Remove"
66msgstr ""
67
68#: ../lib/libertine-scope/preview.cpp:43
69msgid "Removing..."
70msgstr ""
71
72#: ../lib/libertine-scope/preview.cpp:44
73msgid "Installing..."
74msgstr ""
75
76#: ../lib/libertine-scope/preview.cpp:45 ../scope/apps/preview.cpp:47
77msgid "Open"
78msgstr ""
79
80#: ../lib/libertine-scope/preview.cpp:46
81msgid "Publisher/Creator"
82msgstr ""
83
84#: ../lib/libertine-scope/preview.cpp:47
85msgid "Website"
86msgstr ""
87
88#: ../lib/libertine-scope/preview.cpp:48
89msgid "License"
90msgstr ""
91
92#. Translators: Users tap "Show" button to remove an app from the hidden list of apps: so the meaning is to undo a hide
93#: ../scope/apps/preview.cpp:55
94msgid "Show"
95msgstr ""
96
97#: ../scope/apps/preview.cpp:62
98msgid "Hide"
99msgstr ""
100
33#: ../scope/apps/query.cpp:39101#: ../scope/apps/query.cpp:39
34msgid "Hidden Desktop Apps"102msgid "Hidden Desktop Apps"
35msgstr ""103msgstr ""
36104
37#: ../scope/apps/query.cpp:43
38msgid "Exclude Apps: "
39msgstr ""
40
41#. anonymous namespace105#. anonymous namespace
42#: ../scope/apps/query.cpp:113106#: ../scope/apps/query.cpp:113
43msgid ""107msgid ""
@@ -50,3 +114,19 @@
50"All applications hidden. Reset filters or check the Hidden Desktop Apps "114"All applications hidden. Reset filters or check the Hidden Desktop Apps "
51"department."115"department."
52msgstr ""116msgstr ""
117
118#: ../scope/store/query.cpp:68
119msgid "%1 result found"
120msgstr ""
121
122#: ../scope/store/query.cpp:69
123msgid "%1 results found"
124msgstr ""
125
126#: ../scope/store/query.cpp:74
127msgid "Use the searchbar to find software."
128msgstr ""
129
130#: ../scope/store/query.cpp:75
131msgid "No results found."
132msgstr ""
53133
=== modified file 'scope/CMakeLists.txt'
--- scope/CMakeLists.txt 2016-07-12 18:26:07 +0000
+++ scope/CMakeLists.txt 2016-09-23 14:36:26 +0000
@@ -1,2 +1,2 @@
1# add_subdirectory(libertine-store)
2add_subdirectory(apps)1add_subdirectory(apps)
2add_subdirectory(store)
33
=== modified file 'scope/apps/CMakeLists.txt'
--- scope/apps/CMakeLists.txt 2016-07-21 14:10:23 +0000
+++ scope/apps/CMakeLists.txt 2016-09-23 14:36:26 +0000
@@ -1,8 +1,6 @@
1set (CMAKE_INCLUDE_CURRENT_DIR ON)1set (CMAKE_INCLUDE_CURRENT_DIR ON)
2set (CMAKE_AUTOMOC ON)2set (CMAKE_AUTOMOC ON)
33
4pkg_check_modules(URL_DISPATCHER REQUIRED url-dispatcher-1)
5
6# Find all the sources4# Find all the sources
7file(GLOB_RECURSE SCOPE_SOURCES5file(GLOB_RECURSE SCOPE_SOURCES
8 "*.cpp"6 "*.cpp"
@@ -13,14 +11,16 @@
13 ${SCOPE_SOURCES}11 ${SCOPE_SOURCES}
14)12)
1513
16include_directories(${URL_DISPATCHER_INCLUDE_DIRS})
17
18target_link_libraries(apps14target_link_libraries(apps
15 ${SCOPE_LIB_NAME}
19 ${SCOPE_LDFLAGS}16 ${SCOPE_LDFLAGS}
17 ${LIBERTINE_LDFLAGS}
20 ${UAL_LDFLAGS}18 ${UAL_LDFLAGS}
21 ${LIBERTINE_LDFLAGS}
22 Qt5::Core19 Qt5::Core
23 ${URL_DISPATCHER_LIBRARIES}20)
21
22include_directories(
23 ${CMAKE_SOURCE_DIR}/lib
24)24)
2525
26configure_file(26configure_file(
2727
=== modified file 'scope/apps/action.cpp'
--- scope/apps/action.cpp 2016-07-29 13:21:34 +0000
+++ scope/apps/action.cpp 2016-09-23 14:36:26 +0000
@@ -21,50 +21,42 @@
21#include "scope/apps/hidden_apps.h"21#include "scope/apps/hidden_apps.h"
22#include <unity/scopes/ActivationResponse.h>22#include <unity/scopes/ActivationResponse.h>
23#include <unity/scopes/CannedQuery.h>23#include <unity/scopes/CannedQuery.h>
24#include <url-dispatcher.h>
25#include <QString>24#include <QString>
26#include <QFile>25#include <QFile>
27#include <QTextStream>26#include <QTextStream>
2827
29namespace usc = unity::scopes;
30
3128
32namespace29namespace
33{30{
34static usc::ActivationResponse31static unity::scopes::ActivationResponse
35sendToResults(usc::FilterState const& filter_state)32sendToResults(unity::scopes::FilterState const& filter_state)
36{33{
37 usc::CannedQuery query(FULLY_QUALIFIED_APPS_SCOPE);34 unity::scopes::CannedQuery query(FULLY_QUALIFIED_APPS_SCOPE);
38 query.set_filter_state(filter_state);35 query.set_filter_state(filter_state);
39 return usc::ActivationResponse(query);36 return unity::scopes::ActivationResponse(query);
40}37}
41}38}
4239
4340
44Action::41Action::
45Action(unity::scopes::Result const& result,42Action(unity::scopes::Result const& result,
46 unity::scopes::ActionMetadata const& metadata,43 unity::scopes::ActionMetadata const& metadata,
47 std::string const& action_id,44 std::string const& action_id,
48 Action::OpenUriAction open_action,45 std::shared_ptr<libertine::scope::ServiceManager> const& service,
49 std::shared_ptr<HiddenApps> hidden,46 std::shared_ptr<HiddenApps> const& hidden,
50 unity::scopes::FilterState const& filter_state)47 unity::scopes::FilterState const& filter_state)
51 : usc::ActivationQueryBase(result, metadata)48 : libertine::scope::Action(result, metadata, action_id, service)
52 , action_id_(action_id)49 , action_id_(action_id)
53 , open_action_(open_action)
54 , hidden_(hidden)50 , hidden_(hidden)
55 , filter_state_(filter_state)51 , filter_state_(filter_state)
56{52{
57}53}
5854
5955
60usc::ActivationResponse56unity::scopes::ActivationResponse Action::
61Action::activate()57activate()
62{58{
63 if (action_id_ == "open")59 if (action_id_ == "hide")
64 {
65 open_action_(result().uri());
66 }
67 else if (action_id_ == "hide")
68 {60 {
69 hidden_->add(QString::fromStdString(result()["app_id"].get_string()));61 hidden_->add(QString::fromStdString(result()["app_id"].get_string()));
70 return sendToResults(filter_state_);62 return sendToResults(filter_state_);
@@ -74,5 +66,6 @@
74 hidden_->remove(QString::fromStdString(result()["app_id"].get_string()));66 hidden_->remove(QString::fromStdString(result()["app_id"].get_string()));
75 return sendToResults(filter_state_);67 return sendToResults(filter_state_);
76 }68 }
77 return usc::ActivationResponse(usc::ActivationResponse::Status::NotHandled);69
70 return libertine::scope::Action::activate();
78}71}
7972
=== modified file 'scope/apps/action.h'
--- scope/apps/action.h 2016-07-28 20:12:03 +0000
+++ scope/apps/action.h 2016-09-23 14:36:26 +0000
@@ -19,6 +19,7 @@
19#define SCOPE_ACTION_H_19#define SCOPE_ACTION_H_
2020
2121
22#include <libertine-scope/action.h>
22#include <unity/scopes/ActionMetadata.h>23#include <unity/scopes/ActionMetadata.h>
23#include <unity/scopes/ActivationQueryBase.h>24#include <unity/scopes/ActivationQueryBase.h>
24#include <unity/scopes/ActivationResponse.h>25#include <unity/scopes/ActivationResponse.h>
@@ -27,16 +28,16 @@
2728
28class HiddenApps;29class HiddenApps;
2930
30class Action : public unity::scopes::ActivationQueryBase {31class Action : public libertine::scope::Action
32{
31public:33public:
32 typedef std::function<void(std::string const&)> OpenUriAction;34 explicit
3335 Action(unity::scopes::Result const& result,
34 explicit Action(unity::scopes::Result const& result,36 unity::scopes::ActionMetadata const& metadata,
35 unity::scopes::ActionMetadata const& metadata,37 std::string const& action_id,
36 std::string const& action_id,38 std::shared_ptr<libertine::scope::ServiceManager> const& service,
37 OpenUriAction open_action,39 std::shared_ptr<HiddenApps> const& hidden,
38 std::shared_ptr<HiddenApps> hidden,40 unity::scopes::FilterState const& filterState);
39 unity::scopes::FilterState const& filterState);
4041
41 virtual ~Action() = default;42 virtual ~Action() = default;
42 virtual unity::scopes::ActivationResponse activate() override;43 virtual unity::scopes::ActivationResponse activate() override;
@@ -44,7 +45,6 @@
44private:45private:
45 std::string action_id_;46 std::string action_id_;
46 std::string cache_dir_;47 std::string cache_dir_;
47 OpenUriAction open_action_;
48 std::shared_ptr<HiddenApps> hidden_;48 std::shared_ptr<HiddenApps> hidden_;
49 unity::scopes::FilterState filter_state_;49 unity::scopes::FilterState filter_state_;
50};50};
5151
=== modified file 'scope/apps/applauncher.cpp'
--- scope/apps/applauncher.cpp 2016-07-12 18:26:07 +0000
+++ scope/apps/applauncher.cpp 2016-09-23 14:36:26 +0000
@@ -26,20 +26,11 @@
26 name_ = app->info()->name().value();26 name_ = app->info()->name().value();
27 icon_ = app->info()->iconPath().value();27 icon_ = app->info()->iconPath().value();
28 description_ = app->info()->description().value();28 description_ = app->info()->description().value();
29 id_ = appId.appname.value() + ".desktop";
29 uri_ = "appid://" + container_id + "/" + appId.appname.value() + "/0.0";30 uri_ = "appid://" + container_id + "/" + appId.appname.value() + "/0.0";
30}31}
3132
3233
33AppLauncher::
34AppLauncher() { /* empty */ }
35
36
37AppLauncher::
38~AppLauncher()
39{
40}
41
42
43std::string AppLauncher::34std::string AppLauncher::
44name() const35name() const
45{36{
@@ -67,3 +58,10 @@
67 return uri_;58 return uri_;
68}59}
6960
61
62std::string AppLauncher::
63id() const
64{
65 return id_;
66}
67
7068
=== modified file 'scope/apps/applauncher.h'
--- scope/apps/applauncher.h 2016-05-03 13:25:14 +0000
+++ scope/apps/applauncher.h 2016-09-23 14:36:26 +0000
@@ -33,7 +33,7 @@
33 AppLauncher(const std::string& app_id, const std::string& container_name);33 AppLauncher(const std::string& app_id, const std::string& container_name);
3434
35 virtual35 virtual
36 ~AppLauncher();36 ~AppLauncher() = default;
3737
38 virtual std::string38 virtual std::string
39 name() const;39 name() const;
@@ -47,14 +47,18 @@
47 virtual std::string47 virtual std::string
48 uri() const;48 uri() const;
4949
50 virtual std::string
51 id() const;
52
50protected:53protected:
51 explicit54 explicit
52 AppLauncher();55 AppLauncher() = default;
5356
54 std::string name_;57 std::string name_;
55 std::string icon_;58 std::string icon_;
56 std::string uri_;59 std::string uri_;
57 std::string description_;60 std::string description_;
61 std::string id_;
58};62};
5963
60#endif /* LIBERTINE_SCOPE_APPLAUNCHER_H */64#endif /* LIBERTINE_SCOPE_APPLAUNCHER_H */
6165
=== modified file 'scope/apps/config.h.in'
--- scope/apps/config.h.in 2016-07-29 13:21:34 +0000
+++ scope/apps/config.h.in 2016-09-23 14:36:26 +0000
@@ -17,7 +17,9 @@
17#define LIBERTINE_SCOPE_CONFIG_H_17#define LIBERTINE_SCOPE_CONFIG_H_
1818
19const std::string FULLY_QUALIFIED_APPS_SCOPE = "@FULLY_QUALIFIED_NAME@";19const std::string FULLY_QUALIFIED_APPS_SCOPE = "@FULLY_QUALIFIED_NAME@";
20const std::string STORE_SCOPE_FULL_NAME = "@STORE_PACKAGE_NAME@";
20const std::string ROOT_DEPT_ID = "root_dept";21const std::string ROOT_DEPT_ID = "root_dept";
21const std::string HIDDEN_DEPT_ID = "hidden_dept";22const std::string HIDDEN_DEPT_ID = "hidden_dept";
23const std::string DATA_DIR = "@APPS_DATA_DIR@";
2224
23#endif // LIBERTINE_SCOPE_CONFIG_H_25#endif // LIBERTINE_SCOPE_CONFIG_H_
2426
=== modified file 'scope/apps/libertine.cpp'
--- scope/apps/libertine.cpp 2016-07-28 14:04:27 +0000
+++ scope/apps/libertine.cpp 2016-09-23 14:36:26 +0000
@@ -19,6 +19,7 @@
19#include <liblibertine/libertine.h>19#include <liblibertine/libertine.h>
20#include <glib.h>20#include <glib.h>
2121
22
22namespace23namespace
23{24{
2425
2526
=== removed file 'scope/apps/localization.h'
--- scope/apps/localization.h 2015-12-29 21:50:58 +0000
+++ scope/apps/localization.h 1970-01-01 00:00:00 +0000
@@ -1,31 +0,0 @@
1#ifndef LOCALIZATION_H_
2#define LOCALIZATION_H_
3
4#include <libintl.h>
5#include <string>
6
7
8inline char*
9_(const char *__msgid)
10{
11 return dgettext(GETTEXT_PACKAGE, __msgid);
12}
13
14
15inline std::string
16_(char const*__msgid1, char const*__msgid2, unsigned long int __n)
17{
18 char buffer [256];
19 if (snprintf(buffer, 256, dngettext(GETTEXT_PACKAGE, __msgid1, __msgid2, __n), __n ) >= 0)
20 {
21 return buffer;
22 }
23 else
24 {
25 return std::string();
26 }
27}
28
29#endif // LOCALIZATION_H_
30
31
320
=== modified file 'scope/apps/preview.cpp'
--- scope/apps/preview.cpp 2016-07-12 18:26:07 +0000
+++ scope/apps/preview.cpp 2016-09-23 14:36:26 +0000
@@ -13,9 +13,11 @@
13 * You should have received a copy of the GNU General Public License13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */15 */
16
17#include "scope/apps/preview.h"16#include "scope/apps/preview.h"
17
18#include "scope/apps/config.h"18#include "scope/apps/config.h"
19#include "scope/apps/hidden_apps.h"
20#include <libertine-scope/i18n.h>
19#include <unity/scopes/PreviewReply.h>21#include <unity/scopes/PreviewReply.h>
20#include <unity/scopes/Variant.h>22#include <unity/scopes/Variant.h>
21#include <unity/scopes/VariantBuilder.h>23#include <unity/scopes/VariantBuilder.h>
@@ -24,64 +26,42 @@
2426
25namespace usc = unity::scopes;27namespace usc = unity::scopes;
2628
27Preview::29
28Preview(usc::Result const& result,30Preview::
29 usc::ActionMetadata const& metadata)31Preview(usc::Result const& result,
30: PreviewQueryBase(result, metadata)32 usc::ActionMetadata const& metadata,
31{33 std::shared_ptr<libertine::scope::ServiceManager> const& service,
32}34 std::shared_ptr<HiddenApps> const& hidden)
3335 : libertine::scope::Preview(result, metadata, service)
3436 , hidden_(hidden)
35Preview::37{
36~Preview()38}
37{39
38}40
3941unity::scopes::PreviewWidget Preview::buttonWidgets(libertine::scope::Package const&) const
4042{
41void Preview::43 usc::PreviewWidget buttons("actions", "actions");
42cancelled()
43{
44}
45
46
47void Preview::
48run(usc::PreviewReplyProxy const& reply)
49{
50 usc::PreviewWidget header("hdr", "header");
51 header.add_attribute_mapping("title", "title");
52 header.add_attribute_mapping("mascot", "art");
53 header.add_attribute_value("fallback", usc::Variant("image://theme/placeholder-app-icon"));
54
55 usc::PreviewWidget buttons("buttons", "actions");
56 usc::VariantBuilder vb;44 usc::VariantBuilder vb;
57 vb.add_tuple({45 vb.add_tuple({
58 {"id", usc::Variant("open")},46 {"id", usc::Variant("open")},
59 {"label", usc::Variant("Open")},47 {"label", usc::Variant(_("Open"))}
60 });48 });
6149
62 if (result().contains("department_id"))50 if (hidden_->app_is_hidden(QString::fromStdString(result()["app_id"].get_string())))
63 {51 {
64 if (result()["department_id"].get_string() == ROOT_DEPT_ID)52 vb.add_tuple({
65 {53 {"id", usc::Variant("show")},
66 vb.add_tuple({54 //Translators: Users tap "Show" button to remove an app from the hidden list of apps: so the meaning is to undo a hide
67 {"id", usc::Variant("hide")},55 {"label", usc::Variant(_("Show"))},
68 {"label", usc::Variant("Hide")},56 });
69 });57 }
70 }58 else
71 else59 {
72 {60 vb.add_tuple({
73 vb.add_tuple({61 {"id", usc::Variant("hide")},
74 {"id", usc::Variant("show")},62 {"label", usc::Variant(_("Hide"))},
75 //Translators: Users tap "Show" button to remove an app from the hidden list of apps: so the meaning is to undo a hide63 });
76 {"label", usc::Variant("Show")},
77 });
78 }
79 }64 }
80 buttons.add_attribute_value("actions", vb.end());65 buttons.add_attribute_value("actions", vb.end());
8166 return buttons;
82 usc::PreviewWidget desc("desc", "text");
83 desc.add_attribute_mapping("text", "description");
84
85 usc::PreviewWidgetList widgets{ header, desc, buttons };
86 reply->push(widgets);
87}67}
8868
=== modified file 'scope/apps/preview.h'
--- scope/apps/preview.h 2016-06-10 15:11:56 +0000
+++ scope/apps/preview.h 2016-09-23 14:36:26 +0000
@@ -13,26 +13,31 @@
13 * You should have received a copy of the GNU General Public License13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */15 */
16#ifndef LIBERTINE_SCOPE_PREVIEW_H16#pragma once
17#define LIBERTINE_SCOPE_PREVIEW_H17
1818
19#include <libertine-scope/preview.h>
19#include <unity/scopes/PreviewQueryBase.h>20#include <unity/scopes/PreviewQueryBase.h>
2021
22class HiddenApps;
23
2124
22class Preview25class Preview
23: public unity::scopes::PreviewQueryBase26: public libertine::scope::Preview
24{27{
25public:28public:
26 Preview(unity::scopes::Result const& result,29 explicit
27 unity::scopes::ActionMetadata const& metadata);30 Preview(unity::scopes::Result const& result,
2831 unity::scopes::ActionMetadata const& metadata,
29 virtual ~Preview();32 std::shared_ptr<libertine::scope::ServiceManager> const& service,
3033 std::shared_ptr<HiddenApps> const& hidden);
31 void34
32 cancelled() override;35 virtual ~Preview() = default;
3336
34 void37protected:
35 run(unity::scopes::PreviewReplyProxy const& reply) override;38 virtual unity::scopes::PreviewWidget
39 buttonWidgets(const libertine::scope::Package &package) const override;
40
41private:
42 std::shared_ptr<HiddenApps> hidden_;
36};43};
37
38#endif /* LIBERTINE_SCOPE_PREVIEW_H */
3944
=== modified file 'scope/apps/query.cpp'
--- scope/apps/query.cpp 2016-07-28 14:04:27 +0000
+++ scope/apps/query.cpp 2016-09-23 14:36:26 +0000
@@ -17,7 +17,7 @@
17#include "scope/apps/query.h"17#include "scope/apps/query.h"
18#include "scope/apps/container.h"18#include "scope/apps/container.h"
19#include "scope/apps/config.h"19#include "scope/apps/config.h"
20#include "scope/apps/localization.h"20#include <libertine-scope/i18n.h>
21#include <unity/scopes/CategorisedResult.h>21#include <unity/scopes/CategorisedResult.h>
22#include <unity/scopes/CategoryRenderer.h>22#include <unity/scopes/CategoryRenderer.h>
23#include <unity/scopes/QueryBase.h>23#include <unity/scopes/QueryBase.h>
@@ -31,8 +31,10 @@
31#include <QFile>31#include <QFile>
32#include <QTextStream>32#include <QTextStream>
3333
34
34namespace usc = unity::scopes;35namespace usc = unity::scopes;
3536
37
36namespace38namespace
37{39{
38static const auto ROOT_DEPT_TITLE = _("Desktop Apps");40static const auto ROOT_DEPT_TITLE = _("Desktop Apps");
@@ -41,6 +43,8 @@
41static const auto APP_ID_FIELD = "app_id";43static const auto APP_ID_FIELD = "app_id";
42static const auto DEPARTMENT_ID_FIELD = "department_id";44static const auto DEPARTMENT_ID_FIELD = "department_id";
43static const auto EXCLUDED_APPS_FILTER_TITLE = _("Exclude Apps: ");45static const auto EXCLUDED_APPS_FILTER_TITLE = _("Exclude Apps: ");
46static const auto SEARCH_STORE_HINT = _("Search for '%s' in the store");
47static const auto SEARCH_STORE_CATEGORY_TITLE = _("Get more apps from the store");
4448
45struct AppInfo49struct AppInfo
46{50{
@@ -107,23 +111,45 @@
107 }111 }
108 }112 }
109)";113)";
114
115
116static const auto CATEGORY_STORE = R"(
117 {
118 "schema-version": 1,
119 "template": {
120 "category-layout": "grid",
121 "overlay": true,
122 "card-background": "color:///#E95420"
123 },
124 "components": {
125 "title": "title",
126 "art": {
127 "aspect-ratio": 0.55,
128 "field": "art"
129 },
130 "overlay-color": "overlay-color"
131 }
132 }
133)";
110} // anonymous namespace134} // anonymous namespace
111135
112136
113std::string const Query::NO_RESULTS_HINT = _("No applications available. Install new applications with the Libertine Manager.");137std::string const Query::NO_RESULTS_HINT = _("No applications available in this department.");
114std::string const Query::ALL_RESULTS_FILTERED_HINT = _("All applications hidden. Reset filters or check the Hidden Desktop Apps department.");138std::string const Query::ALL_RESULTS_FILTERED_HINT = _("All applications filtered. Reset filters or clear department.");
115139
116140
117Query::141Query::
118Query(usc::CannedQuery const& query,142Query(usc::CannedQuery const& query,
119 usc::SearchMetadata const& metadata,143 usc::SearchMetadata const& metadata,
120 Libertine::Factory const& libertine_factory,144 Libertine::Factory const& libertine_factory,
121 std::shared_ptr<HiddenApps> hidden,145 std::shared_ptr<HiddenApps> hidden,
122 std::shared_ptr<Blacklist> blacklist)146 std::shared_ptr<Blacklist> blacklist,
147 std::string const& data_directory)
123 : usc::SearchQueryBase(query, metadata)148 : usc::SearchQueryBase(query, metadata)
124 , libertine_factory_(libertine_factory)149 , libertine_factory_(libertine_factory)
125 , hidden_(hidden)150 , hidden_(hidden)
126 , blacklist_(blacklist)151 , blacklist_(blacklist)
152 , data_directory_(data_directory)
127{153{
128}154}
129155
@@ -201,6 +227,35 @@
201227
202228
203void Query::229void Query::
230add_store_link(usc::SearchReplyProxy const& reply) const
231{
232 const auto querystr = query().query_string();
233 auto cat_title = SEARCH_STORE_CATEGORY_TITLE;
234
235 if (!querystr.empty())
236 {
237 char tmp[512];
238 if (snprintf(tmp, sizeof(tmp), SEARCH_STORE_HINT.c_str(), querystr.c_str()) > 0)
239 {
240 cat_title = tmp;
241 }
242 }
243
244 usc::CategoryRenderer rdr(CATEGORY_STORE);
245 auto cat = reply->register_category("hint", cat_title, "", rdr);
246
247 const unity::scopes::CannedQuery store_scope(STORE_SCOPE_FULL_NAME, querystr, "");
248
249 usc::CategorisedResult res(cat);
250 res.set_title(_("Install X Apps"));
251 res.set_art(data_directory_ + "/store.svg");
252 res.set_uri(store_scope.to_uri());
253 res["overlay-color"] = "transparent";
254 reply->push(res);
255}
256
257
258void Query::
204run(usc::SearchReplyProxy const& reply)259run(usc::SearchReplyProxy const& reply)
205{260{
206 if (!hidden_->empty())261 if (!hidden_->empty())
@@ -219,7 +274,8 @@
219274
220 QRegExp search_query(QString::fromStdString(query().query_string()), Qt::CaseInsensitive);275 QRegExp search_query(QString::fromStdString(query().query_string()), Qt::CaseInsensitive);
221 bool has_no_apps = true,276 bool has_no_apps = true,
222 all_filtered = true;277 all_filtered = true,
278 is_hidden_dept = query().department_id() == HIDDEN_DEPT_ID;
223279
224 for (auto const& container: libertine->get_container_list())280 for (auto const& container: libertine->get_container_list())
225 {281 {
@@ -230,44 +286,41 @@
230286
231 for (auto const& app: container->app_launchers())287 for (auto const& app: container->app_launchers())
232 {288 {
289 auto app_info = parse_app_info(app.uri());
290
291 // ignore blacklisted apps
292 if (blacklist_->app_is_blacklisted(app_info.app_id, container->id()))
293 {
294 continue;
295 }
296
297 // ignore hidden apps unless in hidden dept
298 if ((!is_hidden_dept && hidden_->app_is_hidden(app_info.key)) ||
299 (is_hidden_dept && !hidden_->app_is_hidden(app_info.key)))
300 {
301 continue;
302 }
303
233 has_no_apps = false;304 has_no_apps = false;
305
234 if (!(search_query.isEmpty() || QString::fromStdString(app.name()).contains(search_query)))306 if (!(search_query.isEmpty() || QString::fromStdString(app.name()).contains(search_query)))
235 {307 {
236 continue;308 continue;
237 }309 }
238310
239 auto app_info = parse_app_info(app.uri());
240
241 if (blacklist_->app_is_blacklisted(app_info.app_id, container->id()))
242 {
243 continue;
244 }
245
246 if (excludes_by_filter.contains(app_info.key))311 if (excludes_by_filter.contains(app_info.key))
247 {312 {
248 continue;313 continue;
249 }314 }
250315
251 // ignore hidden apps in root department
252 if (query().department_id().empty() || query().department_id() == ROOT_DEPT_ID)
253 {
254 if (hidden_->app_is_hidden(app_info.key))
255 {
256 continue;
257 }
258 }
259 else if (!hidden_->app_is_hidden(app_info.key))
260 {
261 continue;
262 }
263
264 usc::CategorisedResult result(category);316 usc::CategorisedResult result(category);
265 result.set_title(app.name());317 result.set_title(app.name());
266 result.set_art(app.icon());318 result.set_art(app.icon());
267 result.set_uri(app.uri());319 result.set_uri(app.uri());
268 result[DESCRIPTION_FIELD] = app.description();320 result[DESCRIPTION_FIELD] = app.description();
269 result[APP_ID_FIELD] = app_info.key.toStdString();321 result[APP_ID_FIELD] = app_info.key.toStdString();
270 result[DEPARTMENT_ID_FIELD] = (query().department_id().empty() || query().department_id() == ROOT_DEPT_ID) ? ROOT_DEPT_ID : HIDDEN_DEPT_ID;322 result["id"] = app.id();
323 result[DEPARTMENT_ID_FIELD] = is_hidden_dept ? HIDDEN_DEPT_ID : ROOT_DEPT_ID;
271324
272 if (!reply->push(result))325 if (!reply->push(result))
273 {326 {
@@ -278,12 +331,19 @@
278 }331 }
279 }332 }
280333
281 if (has_no_apps)334 if (is_hidden_dept)
282 {335 {
283 show_hint(reply, NO_RESULTS_HINT);336 if (has_no_apps)
337 {
338 show_hint(reply, NO_RESULTS_HINT);
339 }
340 else if (all_filtered)
341 {
342 show_hint(reply, ALL_RESULTS_FILTERED_HINT);
343 }
284 }344 }
285 else if (all_filtered)345 else
286 {346 {
287 show_hint(reply, ALL_RESULTS_FILTERED_HINT);347 add_store_link(reply);
288 }348 }
289}349}
290350
=== modified file 'scope/apps/query.h'
--- scope/apps/query.h 2016-07-28 14:04:27 +0000
+++ scope/apps/query.h 2016-09-23 14:36:26 +0000
@@ -35,7 +35,8 @@
35 unity::scopes::SearchMetadata const& metadata,35 unity::scopes::SearchMetadata const& metadata,
36 Libertine::Factory const& libertine_factory,36 Libertine::Factory const& libertine_factory,
37 std::shared_ptr<HiddenApps> hidden_apps,37 std::shared_ptr<HiddenApps> hidden_apps,
38 std::shared_ptr<Blacklist> blacklist);38 std::shared_ptr<Blacklist> blacklist,
39 std::string const& data_directory);
3940
40 ~Query() = default;41 ~Query() = default;
4142
@@ -53,10 +54,12 @@
53 QStringList make_filters(unity::scopes::SearchReplyProxy const& reply, Libertine::UPtr libertine) const;54 QStringList make_filters(unity::scopes::SearchReplyProxy const& reply, Libertine::UPtr libertine) const;
54 void show_hint(unity::scopes::SearchReplyProxy const& reply, std::string const& reason) const;55 void show_hint(unity::scopes::SearchReplyProxy const& reply, std::string const& reason) const;
55 void parse_blacklist(const std::string& data_dir);56 void parse_blacklist(const std::string& data_dir);
57 void add_store_link(unity::scopes::SearchReplyProxy const& reply) const;
5658
57 Libertine::Factory libertine_factory_;59 Libertine::Factory libertine_factory_;
58 std::shared_ptr<HiddenApps> hidden_;60 std::shared_ptr<HiddenApps> hidden_;
59 std::shared_ptr<Blacklist> blacklist_;61 std::shared_ptr<Blacklist> blacklist_;
62 const std::string data_directory_;
60};63};
6164
62#endif // LIBERTINE_SCOPE_QUERY_H_65#endif // LIBERTINE_SCOPE_QUERY_H_
6366
=== modified file 'scope/apps/scope.cpp'
--- scope/apps/scope.cpp 2016-07-29 13:21:34 +0000
+++ scope/apps/scope.cpp 2016-09-23 14:36:26 +0000
@@ -18,27 +18,18 @@
18#include "scope/apps/preview.h"18#include "scope/apps/preview.h"
19#include "scope/apps/query.h"19#include "scope/apps/query.h"
20#include "scope/apps/action.h"20#include "scope/apps/action.h"
21#include "scope/apps/localization.h"21#include <libertine-scope/i18n.h>
22#include <libertine-scope/action.h>
23#include <libertine-scope/preview.h>
24#include <libertine-scope/service_manager.h>
22#include <sstream>25#include <sstream>
23#include <url-dispatcher.h>
24#include <QFile>26#include <QFile>
25#include <QTextStream>27#include <QTextStream>
26#include <QString>28#include <QString>
2729
28
29namespace usc = unity::scopes;30namespace usc = unity::scopes;
3031
3132
32namespace
33{
34static void
35open_application(std::string const& app_uri)
36{
37 url_dispatch_send(app_uri.c_str(), NULL, NULL);
38}
39}
40
41
42Scope::33Scope::
43Scope(Libertine::Factory const& libertine_factory)34Scope(Libertine::Factory const& libertine_factory)
44: libertine_factory_(libertine_factory)35: libertine_factory_(libertine_factory)
@@ -71,7 +62,8 @@
71 metadata,62 metadata,
72 libertine_factory_,63 libertine_factory_,
73 std::make_shared<HiddenApps>(cache_directory()),64 std::make_shared<HiddenApps>(cache_directory()),
74 std::make_shared<Blacklist>(scope_directory())));65 std::make_shared<Blacklist>(scope_directory()),
66 scope_directory()));
75}67}
7668
7769
@@ -79,7 +71,10 @@
79preview(usc::Result const& result,71preview(usc::Result const& result,
80 usc::ActionMetadata const& metadata)72 usc::ActionMetadata const& metadata)
81{73{
82 return usc::PreviewQueryBase::UPtr(new Preview(result, metadata));74 return usc::PreviewQueryBase::UPtr(new Preview(result,
75 metadata,
76 std::make_shared<libertine::scope::ServiceManager>(),
77 std::make_shared<HiddenApps>(cache_directory())));
83}78}
8479
8580
@@ -92,7 +87,7 @@
92 return usc::ActivationQueryBase::UPtr(new Action(result,87 return usc::ActivationQueryBase::UPtr(new Action(result,
93 metadata,88 metadata,
94 action_id,89 action_id,
95 open_application,90 std::make_shared<libertine::scope::ServiceManager>(),
96 std::make_shared<HiddenApps>(cache_directory()),91 std::make_shared<HiddenApps>(cache_directory()),
97 filter_state_));92 filter_state_));
98}93}
9994
=== added directory 'scope/store'
=== added file 'scope/store/CMakeLists.txt'
--- scope/store/CMakeLists.txt 1970-01-01 00:00:00 +0000
+++ scope/store/CMakeLists.txt 2016-09-23 14:36:26 +0000
@@ -0,0 +1,50 @@
1set (CMAKE_INCLUDE_CURRENT_DIR ON)
2set (CMAKE_AUTOMOC ON)
3
4set(STORE_SCOPE_TARGET store)
5
6# Find all the sources
7file(GLOB_RECURSE STORE_SCOPE_SOURCES
8 "*.cpp"
9 "*.h"
10)
11
12add_library(${STORE_SCOPE_TARGET} SHARED
13 ${STORE_SCOPE_SOURCES}
14)
15
16target_link_libraries(${STORE_SCOPE_TARGET}
17 ${SCOPE_LIB_NAME}
18 ${SCOPE_LDFLAGS}
19 ${LIBERTINE_LDFLAGS}
20 Qt5::Core
21)
22
23include_directories(
24 ${CMAKE_SOURCE_DIR}/lib
25)
26
27set_target_properties(store
28 PROPERTIES
29 OUTPUT_NAME ${STORE_PACKAGE_NAME}
30)
31
32install(TARGETS ${STORE_SCOPE_TARGET}
33 LIBRARY DESTINATION "${STORE_LIB_DIR}"
34)
35
36set(STORE_INI_TARGET ${STORE_PACKAGE_NAME}.ini)
37configure_file(
38 ${STORE_INI_TARGET}.in.in
39 ${STORE_INI_TARGET}.in
40)
41
42add_custom_target(${STORE_INI_TARGET} ALL
43 COMMENT "Merging translations into ${STORE_INI_TARGET}"
44 COMMAND LC_ALL=C ${INTLTOOL_MERGE} -d -u ${CMAKE_SOURCE_DIR}/po ${STORE_INI_TARGET}.in ${STORE_INI_TARGET} >/dev/null
45)
46
47install(
48 FILES "${CMAKE_CURRENT_BINARY_DIR}/${STORE_INI_TARGET}"
49 DESTINATION "${STORE_LIB_DIR}"
50)
051
=== added file 'scope/store/entry_point.cpp'
--- scope/store/entry_point.cpp 1970-01-01 00:00:00 +0000
+++ scope/store/entry_point.cpp 2016-09-23 14:36:26 +0000
@@ -0,0 +1,42 @@
1/**
2 * @file store/entry_point.cpp
3 * @brief The scope entry point.
4 */
5/*
6 * Copyright 2016 Canonical Ltd.
7 *
8 * This program is free software: you can redistribute it and/or modify it under
9 * the terms of the GNU General Public License, version 3, as published by the
10 * Free Software Foundation.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program. If not, see <http://www.gnu.org/licenses/>.
19 */
20#include "scope/store/scope.h"
21#include <unity/scopes/ScopeBase.h>
22
23#define EXPORT __attribute__((visibility ("default")))
24
25// These functions define the entry points for the scope plugin
26extern "C"
27{
28
29EXPORT unity::scopes::ScopeBase*
30UNITY_SCOPE_CREATE_FUNCTION()
31{
32 return new libertine::scope::Scope();
33}
34
35
36EXPORT void
37UNITY_SCOPE_DESTROY_FUNCTION(unity::scopes::ScopeBase* scope)
38{
39 delete scope;
40}
41
42}
043
=== added file 'scope/store/libertine-scope.ubuntu_libertine-store.ini.in.in'
--- scope/store/libertine-scope.ubuntu_libertine-store.ini.in.in 1970-01-01 00:00:00 +0000
+++ scope/store/libertine-scope.ubuntu_libertine-store.ini.in.in 2016-09-23 14:36:26 +0000
@@ -0,0 +1,10 @@
1[ScopeConfig]
2_DisplayName=Find Desktop Apps
3_Description=Search for XApps to install.
4Author=The Canonical Libertine Team <libertine-team@lists.launchpad.net>
5Icon=@APPS_DATA_DIR@/apps.png
6_SearchHint=Search apps
7Keywords=apps
8
9[Appearance]
10LogoOverlayColor=#ffffffff
011
=== added file 'scope/store/query.cpp'
--- scope/store/query.cpp 1970-01-01 00:00:00 +0000
+++ scope/store/query.cpp 2016-09-23 14:36:26 +0000
@@ -0,0 +1,149 @@
1/*
2 * Copyright 2016 Canonical Ltd.
3 *
4 * This program is free software: you can redistribute it and/or modify it under
5 * the terms of the GNU General Public License, version 3, as published by the
6 * Free Software Foundation.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16#include "scope/store/query.h"
17
18#include <libertine-scope/service_manager.h>
19#include <libertine-scope/i18n.h>
20#include <unity/scopes/SearchReply.h>
21#include <unity/scopes/CategoryRenderer.h>
22#include <unity/scopes/VariantBuilder.h>
23#include <QtDBus>
24#include <QDebug>
25
26namespace usc = unity::scopes;
27
28namespace
29{
30static constexpr auto CATEGORY_APPS_DISPLAY = R"(
31 {
32 "schema-version" : 1,
33 "template" : {
34 "category-layout" : "grid",
35 "card-layout" : "horizontal",
36 "collapsed-rows": 0,
37 "card-size": "large"
38 },
39 "components" : {
40 "title" : "title",
41 "art" : {
42 "field": "art",
43 "aspect-ratio": 1.13,
44 "fallback": "image://theme/placeholder-app-icon"
45 },
46 "subtitle": "subtitle",
47 "attributes": { "field": "attributes", "max-count": 3 }
48 }
49 }
50)";
51
52
53static constexpr auto CATEGORY_HINT = R"(
54 {
55 "schema-version": 1,
56 "template": {
57 "category-layout": "grid",
58 "card-size": "large",
59 "card-layout": "horizontal"
60 },
61 "components": {
62 "title": "title"
63 }
64 }
65)";
66
67
68static auto const SINGLE_RESULT_FOUND = _("%1 result found");
69static auto const MULTIPLE_RESULTS_FOUND = _("%1 results found");
70static QString const APPID_URI_FORMAT = "appid://palatine/%1/0.0";
71}
72
73
74std::string const libertine::scope::Query::USE_SEARCH_HINT = _("Use the searchbar to find software.");
75std::string const libertine::scope::Query::NO_SEARCH_RESULTS_HINT = _("No results found.");
76
77
78libertine::scope::Query::
79Query(usc::CannedQuery const& query,
80 usc::SearchMetadata const& metadata,
81 std::shared_ptr<ServiceManager> const& service)
82 : usc::SearchQueryBase(query, metadata)
83 , service_(service)
84{
85}
86
87
88void libertine::scope::Query::
89cancelled()
90{
91}
92
93
94void libertine::scope::Query::
95show_hint(usc::SearchReplyProxy const& reply,
96 std::string const& reason) const
97{
98 auto hint_category = reply->register_category("hint", "", "", usc::CategoryRenderer(CATEGORY_HINT));
99 usc::CategorisedResult res(hint_category);
100 res.set_uri(usc::CannedQuery(query()).to_uri());
101 res.set_title(reason);
102 reply->push(res);
103}
104
105
106void libertine::scope::Query::
107run_search(usc::SearchReplyProxy const& reply) const
108{
109 auto results = service_->search_cache(QString::fromStdString(query().query_string()));
110 if (results.empty())
111 {
112 show_hint(reply, NO_SEARCH_RESULTS_HINT);
113 return;
114 }
115
116 auto category = reply->register_category("aptcache",
117 _("%u result found", "%u results found", results.size()),
118 "Application",
119 usc::CategoryRenderer(CATEGORY_APPS_DISPLAY));
120 auto self_uri = usc::CannedQuery(query()).to_uri();
121 for (auto const& result: results)
122 {
123 usc::CategorisedResult cr(category);
124 cr.set_title(result.name);
125 cr["subtitle"] = result.summary;
126 cr["id"] = result.id;
127 cr.set_art(result.icon);
128 cr.set_uri(APPID_URI_FORMAT.arg(QString::fromStdString(result.id).remove(".desktop")).toStdString());
129
130 if (!reply->push(cr))
131 {
132 qCritical() << "Error while adding result " << QString::fromStdString(result.name);
133 return;
134 }
135 }
136}
137
138
139void libertine::scope::Query::
140run(usc::SearchReplyProxy const& reply)
141{
142 if (!query().query_string().empty())
143 {
144 run_search(reply);
145 return;
146 }
147
148 show_hint(reply, USE_SEARCH_HINT);
149}
0150
=== added file 'scope/store/query.h'
--- scope/store/query.h 1970-01-01 00:00:00 +0000
+++ scope/store/query.h 2016-09-23 14:36:26 +0000
@@ -0,0 +1,70 @@
1/*
2 * Copyright 2016 Canonical Ltd.
3 *
4 * This program is free software: you can redistribute it and/or modify it under
5 * the terms of the GNU General Public License, version 3, as published by the
6 * Free Software Foundation.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16#ifndef LIBERTINE_STORE_QUERY_H_
17#define LIBERTINE_STORE_QUERY_H_
18
19
20#include <unity/scopes/ReplyProxyFwd.h>
21#include <unity/scopes/SearchQueryBase.h>
22
23class QStringList;
24
25
26namespace libertine
27{
28namespace scope
29{
30
31class ServiceManager;
32
33/**
34 * Engine to run a specific store query.
35 */
36class Query
37 : public unity::scopes::SearchQueryBase
38{
39public:
40 explicit Query(unity::scopes::CannedQuery const& query,
41 unity::scopes::SearchMetadata const& metadata,
42 std::shared_ptr<ServiceManager> const& service);
43
44 ~Query() = default;
45
46 virtual void
47 cancelled() override;
48
49 virtual void
50 run(unity::scopes::SearchReplyProxy const& reply) override;
51
52 static std::string const USE_SEARCH_HINT;
53 static std::string const NO_SEARCH_RESULTS_HINT;
54
55private:
56 void
57 show_hint(unity::scopes::SearchReplyProxy const& reply,
58 std::string const& reason) const;
59 void
60 run_search(unity::scopes::SearchReplyProxy const& reply) const;
61
62 std::shared_ptr<ServiceManager> service_;
63};
64
65} // namespace scope
66} // namespace libertine
67
68#endif // LIBERTINE_STORE_QUERY_H_
69
70
071
=== added file 'scope/store/scope.cpp'
--- scope/store/scope.cpp 1970-01-01 00:00:00 +0000
+++ scope/store/scope.cpp 2016-09-23 14:36:26 +0000
@@ -0,0 +1,75 @@
1/**
2 * @file libertine_store/scope.cpp
3 * @brief The implementation of the Libertine Store scope class.
4 */
5/*
6 * Copyright 2016 Canonical Ltd.
7 *
8 * This program is free software: you can redistribute it and/or modify it under
9 * the terms of the GNU General Public License, version 3, as published by the
10 * Free Software Foundation.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program. If not, see <http://www.gnu.org/licenses/>.
19 */
20#include "scope/store/scope.h"
21
22#include "scope/store/query.h"
23#include <libertine-scope/action.h>
24#include <libertine-scope/i18n.h>
25#include <libertine-scope/preview.h>
26#include <libertine-scope/service_manager.h>
27
28
29namespace usc = unity::scopes;
30
31
32libertine::scope::Scope::
33Scope()
34 : service_(std::make_shared<ServiceManager>())
35{ }
36
37
38void libertine::scope::Scope::
39start(std::string const&)
40{
41 setlocale(LC_ALL, "");
42 std::string translation_directory = ScopeBase::scope_directory()
43 + "/../share/locale/";
44 bindtextdomain(GETTEXT_PACKAGE, translation_directory.c_str());
45}
46
47
48usc::SearchQueryBase::UPtr libertine::scope::Scope::
49search(usc::CannedQuery const& query,
50 usc::SearchMetadata const& metadata)
51{
52 return usc::SearchQueryBase::UPtr(new Query(query, metadata, service_));
53}
54
55
56usc::PreviewQueryBase::UPtr libertine::scope::Scope::
57preview(usc::Result const& result,
58 usc::ActionMetadata const& metadata)
59{
60 return usc::PreviewQueryBase::UPtr(new Preview(result, metadata, service_));
61}
62
63
64usc::ActivationQueryBase::UPtr libertine::scope::Scope::
65perform_action(usc::Result const& result,
66 usc::ActionMetadata const& metadata,
67 std::string const& /* widget_id */,
68 std::string const& action_id)
69{
70 return usc::ActivationQueryBase::UPtr(new Action(result,
71 metadata,
72 action_id,
73 service_));
74}
75
076
=== added file 'scope/store/scope.h'
--- scope/store/scope.h 1970-01-01 00:00:00 +0000
+++ scope/store/scope.h 2016-09-23 14:36:26 +0000
@@ -0,0 +1,77 @@
1/**
2 * @file libertine_store/scope.h
3 * @brief The internal interface for the Libertine Store scope class.
4 */
5/*
6 * Copyright 2016 Canonical Ltd.
7 *
8 * This program is free software: you can redistribute it and/or modify it under
9 * the terms of the GNU General Public License, version 3, as published by the
10 * Free Software Foundation.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program. If not, see <http://www.gnu.org/licenses/>.
19 */
20#ifndef LIBERTINE_STORE_SCOPE_H_
21#define LIBERTINE_STORE_SCOPE_H_
22
23#include <unity/scopes/ScopeBase.h>
24
25namespace libertine
26{
27namespace scope
28{
29
30class ServiceManager;
31
32
33class Scope
34: public unity::scopes::ScopeBase
35{
36public:
37 explicit Scope();
38 virtual ~Scope() = default;
39
40 /**
41 * Initializes the scope instance.
42 */
43 virtual void
44 start(std::string const&) override;
45
46 /**
47 * Called each time a new query is requested
48 */
49 virtual unity::scopes::SearchQueryBase::UPtr
50 search(unity::scopes::CannedQuery const& query,
51 unity::scopes::SearchMetadata const& metadata) override;
52
53 /**
54 * Gets an application preview.
55 */
56 virtual unity::scopes::PreviewQueryBase::UPtr
57 preview(unity::scopes::Result const& result,
58 unity::scopes::ActionMetadata const& metadata) override;
59
60 /**
61 * Gets an application preview.
62 */
63 virtual unity::scopes::ActivationQueryBase::UPtr
64 perform_action(unity::scopes::Result const& result,
65 unity::scopes::ActionMetadata const& metadata,
66 std::string const& widget_id,
67 std::string const& action_id) override;
68
69private:
70 std::shared_ptr<ServiceManager> service_;
71};
72
73
74} // namespace scope
75} // namespace libertine
76
77#endif /* LIBERTINE_STORE_SCOPE_H_ */
078
=== added directory 'service'
=== added file 'service/CMakeLists.txt'
--- service/CMakeLists.txt 1970-01-01 00:00:00 +0000
+++ service/CMakeLists.txt 2016-09-23 14:36:26 +0000
@@ -0,0 +1,9 @@
1# Figure out where the host distro stores its Python3 packages.
2execute_process(COMMAND python3 -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())"
3 OUTPUT_VARIABLE python_site_packages
4 OUTPUT_STRIP_TRAILING_WHITESPACE)
5
6install(DIRECTORY libertine_service
7 DESTINATION ${python_site_packages})
8install(PROGRAMS libertined
9 DESTINATION ${CMAKE_INSTALL_BINDIR})
010
=== added directory 'service/libertine_service'
=== added file 'service/libertine_service/__init__.py'
=== added file 'service/libertine_service/appstream.py'
--- service/libertine_service/appstream.py 1970-01-01 00:00:00 +0000
+++ service/libertine_service/appstream.py 2016-09-23 14:36:26 +0000
@@ -0,0 +1,80 @@
1# Copyright 2016 Canonical Ltd.
2#
3# This program is free software: you can redistribute it and/or modify
4# it under the terms of the GNU General Public License as published by
5# the Free Software Foundation; version 3 of the License.
6#
7# This program is distributed in the hope that it will be useful,
8# but WITHOUT ANY WARRANTY; without even the implied warranty of
9# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10# GNU General Public License for more details.
11#
12# You should have received a copy of the GNU General Public License
13# along with this program. If not, see <http://www.gnu.org/licenses/>.
14
15import gi
16gi.require_version('AppStream', '1.0')
17from gi.repository import AppStream
18
19
20def xstr(s):
21 """Converts anything to a string"""
22 return str(s or "")
23
24
25class AppStreamCache(object):
26 """AppStreamCache"""
27 def __init__(self, config):
28 super(AppStreamCache, self).__init__()
29 self.config = config
30 self.pool = AppStream.Pool()
31 self.pool.load()
32
33 def search(self, query):
34 packages = []
35 for component in self.pool.search(query):
36 if component.is_valid():
37 package = {}
38 package["name"] = xstr(component.get_name())
39 package["id"] = xstr(component.get_id())
40 package["summary"] = xstr(component.get_summary())
41 package["uri"] = xstr(component.get_url(AppStream.UrlKind.HOMEPAGE))
42
43 if len(component.get_icons()) > 0:
44 package["icon"] = xstr(self._get_largest_icon(component.get_icons()).get_filename())
45 packages.append(package)
46
47 return packages[::-1]
48
49 def app_info(self, app_id):
50 apps = self.pool.get_components_by_id(app_id)
51 app_data = {}
52 if len(apps) == 1 and apps[0].is_valid():
53 app = apps[0]
54 app_data["name"] = xstr(app.get_name())
55 app_data["id"] = xstr(app.get_id())
56 app_data["summary"] = xstr(app.get_summary())
57 app_data["website"] = xstr(app.get_url(AppStream.UrlKind.HOMEPAGE))
58 app_data["license"] = xstr(app.get_project_license())
59 app_data['package'] = ' '.join(app.get_pkgnames())
60 for screenshot in app.get_screenshots():
61 if screenshot.is_valid() and screenshot.get_kind() is AppStream.ScreenshotKind.EXTRA:
62 largest = self._get_largest_icon(screenshot.get_images())
63 if largest is not None:
64 if "screenshots" not in app_data:
65 app_data["screenshots"] = []
66 app_data["screenshots"].append(largest.get_url())
67
68 app_data["description"] = xstr(app.get_description())
69
70 if len(app.get_icons()) > 0:
71 app_data["icon"] = xstr(self._get_largest_icon(app.get_icons()).get_filename())
72
73 return app_data
74
75 def _get_largest_icon(self, images):
76 largest = None
77 for icon in images:
78 if largest is None or icon.get_width() > largest.get_width():
79 largest = icon
80 return largest
081
=== added file 'service/libertine_service/apt.py'
--- service/libertine_service/apt.py 1970-01-01 00:00:00 +0000
+++ service/libertine_service/apt.py 2016-09-23 14:36:26 +0000
@@ -0,0 +1,106 @@
1# Copyright 2016 Canonical Ltd.
2#
3# This program is free software: you can redistribute it and/or modify
4# it under the terms of the GNU General Public License as published by
5# the Free Software Foundation; version 3 of the License.
6#
7# This program is distributed in the hope that it will be useful,
8# but WITHOUT ANY WARRANTY; without even the implied warranty of
9# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10# GNU General Public License for more details.
11#
12# You should have received a copy of the GNU General Public License
13# along with this program. If not, see <http://www.gnu.org/licenses/>.
14
15import apt
16import glob
17import os
18import re
19
20def _use_system_gpg():
21 """ Configures APT to use the system-wide GPG store. Always."""
22 for key in 'Dir::Etc::Trusted', 'Dir::Etc::TrustedParts':
23 apt.apt_pkg.config.set(key, apt.apt_pkg.config.find_file(key))
24
25
26def _get_system_sources_list():
27 """Concatenates all the system apt/sources.list files into a single text buffer."""
28 sources_path = os.path.join('/etc', 'apt')
29 sources_list = glob.glob(os.path.join(sources_path, 'sources.list.d', '*.list'))
30 sources_list.append(os.path.join(sources_path, 'sources.list'))
31 sources = ''
32 for source in sources_list:
33 with open(source) as f:
34 sources += f.read()
35 return sources
36
37
38def _write_local_sources_list(rootdir):
39 """ Writes out a user-local sources.list file by copying all the systemwide ones. """
40 sources = _get_system_sources_list()
41 sources_path = os.path.join(rootdir, 'etc', 'apt')
42 os.makedirs(sources_path, exist_ok=True)
43 srcfile = os.path.join(sources_path, 'sources.list')
44 with open(srcfile, 'w') as f:
45 f.write(sources)
46 return srcfile
47
48
49def _get_local_apt_cache():
50 """ Gets a user-local APT cache. """
51 rootdir = os.path.join('/tmp', '.cache', 'libertine', 'apt')
52 srcfile = _write_local_sources_list(rootdir)
53
54 apt_cache = apt.Cache(rootdir=rootdir, memonly=True)
55 apt.apt_pkg.config.clear("APT::Update::Post-Invoke-Success")
56 apt_cache.update(sources_list=srcfile)
57 apt_cache.open()
58
59 return apt_cache
60
61
62def _get_apt_cache(config):
63 """ Factory function to get the APT cache obejct. """
64 _use_system_gpg()
65 if config.use_local_cache:
66 return _get_local_apt_cache()
67 else:
68 return apt.Cache()
69
70class AptCache(object):
71 """docstring for AptCache"""
72 def __init__(self, config):
73 super(AptCache, self).__init__()
74 self.config = config
75
76 def search(self, query):
77 apps = []
78
79 cache = _get_apt_cache(self.config)
80 pkg_keys = [key for key in cache.keys() if re.match(query, key)]
81 for key in pkg_keys:
82 app = {}
83 app["name"] = cache[key].name
84 app["id"] = cache[key].name
85 app["package"] = cache[key].name
86 if len(cache[key].versions) > 0:
87 app["summary"] = cache[key].versions[0].summary
88 app["website"] = cache[key].versions[0].homepage
89 apps.append(app)
90 return apps
91
92 def app_info(self, app_id):
93 app_data = {}
94 cache = _get_apt_cache(self.config)
95 if app_id in cache:
96 app = cache[app_id]
97 app_data["name"] = app.name
98 app_data["id"] = app.name
99 app_data["package"] = app.name
100 if len(app.versions) > 0:
101 app_data["summary"] = app.versions[0].summary
102 app_data["website"] = app.versions[0].homepage
103 app_data["description"] = app.versions[0].description
104 app_data["package"] = app.name
105
106 return app_data
0107
=== added file 'service/libertine_service/container.py'
--- service/libertine_service/container.py 1970-01-01 00:00:00 +0000
+++ service/libertine_service/container.py 2016-09-23 14:36:26 +0000
@@ -0,0 +1,68 @@
1# Copyright 2016 Canonical Ltd.
2#
3# This program is free software: you can redistribute it and/or modify
4# it under the terms of the GNU General Public License as published by
5# the Free Software Foundation; version 3 of the License.
6#
7# This program is distributed in the hope that it will be useful,
8# but WITHOUT ANY WARRANTY; without even the implied warranty of
9# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10# GNU General Public License for more details.
11#
12# You should have received a copy of the GNU General Public License
13# along with this program. If not, see <http://www.gnu.org/licenses/>.
14
15from threading import Lock
16from libertine import ContainersConfig
17from libertine_service import tasks
18
19
20class SafeContainersConfig(object):
21 def __init__(self):
22 self.lock = Lock()
23 self.config = ContainersConfig.ContainersConfig()
24 def __getattr__(self, name):
25 config_method = getattr(self.config, name)
26 if config_method is not None:
27 def _method(*args, **kwargs):
28 with self.lock:
29 return config_method(*args)
30 return _method
31
32
33class Container(object):
34 def __init__(self, log):
35 self.log = log
36 self.libertine_config = SafeContainersConfig()
37 self.lock = Lock()
38
39 def install(self, package_name, container_id, progress):
40 self.libertine_config.refresh_database()
41 if not self._container_exists(container_id):
42 self.log.debug("Container does not exist, queuing create operation")
43 create = tasks.CreateTask(container_id, self.libertine_config, self.lock, self.log)
44 create.start()
45
46 task = tasks.InstallTask(package_name, container_id, self.libertine_config, progress, self.lock, self.log)
47 return task.start()
48
49 def remove(self, package_name, container_id, progress):
50 self.libertine_config.refresh_database()
51 if not self._container_exists(container_id):
52 self.log.debug("Container does not exist, queuing create operation")
53 create = tasks.CreateTask(container_id, self.libertine_config, self.lock, self.log)
54 create.start()
55
56 task = tasks.RemoveTask(package_name, container_id, self.libertine_config, progress, self.lock, self.log)
57 return task.start()
58
59 def status(self, package_name, container_id):
60 self.log.debug("Checking status of package '%s'" % package_name)
61 self.libertine_config.refresh_database()
62 if not self._container_exists(container_id):
63 return ''
64 return self.libertine_config.get_package_install_status(container_id, package_name) or ''
65
66 def _container_exists(self, container_id):
67 self.log.debug("Checking if container '%s' exists" % container_id)
68 return self.libertine_config.container_exists(container_id)
069
=== added file 'service/libertine_service/dbus.py'
--- service/libertine_service/dbus.py 1970-01-01 00:00:00 +0000
+++ service/libertine_service/dbus.py 2016-09-23 14:36:26 +0000
@@ -0,0 +1,184 @@
1# Copyright 2016 Canonical Ltd.
2#
3# This program is free software: you can redistribute it and/or modify
4# it under the terms of the GNU General Public License as published by
5# the Free Software Foundation; version 3 of the License.
6#
7# This program is distributed in the hope that it will be useful,
8# but WITHOUT ANY WARRANTY; without even the implied warranty of
9# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10# GNU General Public License for more details.
11#
12# You should have received a copy of the GNU General Public License
13# along with this program. If not, see <http://www.gnu.org/licenses/>.
14
15import dbus
16import dbus.service
17import logging
18from libertine_service import apt
19from libertine_service import appstream
20from libertine_service import container
21from dbus.mainloop.glib import DBusGMainLoop
22from time import time
23
24
25LIBERTINE_SERVICE_NAME = "com.canonical.libertine.ContainerManager"
26LIBERTINE_STORE_INTERFACE = LIBERTINE_SERVICE_NAME
27DOWNLOAD_INTERFACE = "com.canonical.applications.Download"
28LIBERTINE_STORE_PATH = "/Manager"
29CONTAINER_ID = "palatine"
30
31log = logging.getLogger("Libertine")
32
33
34class Progress(dbus.service.Object):
35 def __init__(self, connection):
36 log.debug("creating a Progress object")
37 self._id = hex(int(time()*10000000))[2:]
38 self._finished = False
39 self.current_progress = (dbus.UInt64(0), dbus.UInt64(0))
40 dbus.service.Object.__init__(self, conn=connection, object_path=("/Progress/%s" % self._id))
41
42 def emit_progress(self):
43 self.progress(self.current_progress[0], self.current_progress[1])
44
45 @property
46 def id(self):
47 return self._id
48
49 @property
50 def done(self):
51 return self._finished
52
53 @dbus.service.signal(DOWNLOAD_INTERFACE)
54 def finished(self, path):
55 log.debug("emit finished('%s')" % path)
56 self._finished = True
57
58 @dbus.service.signal(DOWNLOAD_INTERFACE)
59 def progress(self, received, total):
60 log.debug("emit progress(%d, %d)" % (received, total))
61 self.current_progress = (received, total)
62
63
64class Service(dbus.service.Object):
65
66 def __init__(self, config):
67 log.debug("creating service")
68 DBusGMainLoop(set_as_default=True)
69 try:
70 bus_name = dbus.service.BusName(LIBERTINE_SERVICE_NAME,
71 bus=dbus.SessionBus(),
72 do_not_queue=True)
73 except dbus.exceptions.NameExistsException:
74 log.warning("service is already running")
75 raise
76
77 try:
78 self.cache = appstream.AppStreamCache(config)
79 except:
80 log.warning("AppStream backend unavailable, falling back to Apt backend.")
81 self.cache = apt.AptCache(config)
82
83 self.container = container.Container(log)
84 self.progress = {}
85
86 super().__init__(bus_name, LIBERTINE_STORE_PATH)
87
88 @dbus.service.method(LIBERTINE_STORE_INTERFACE,
89 out_signature='as')
90 def get_categories(self):
91 log.debug("get_categories() called")
92 return []
93
94 @dbus.service.method(LIBERTINE_STORE_INTERFACE,
95 out_signature='as')
96 def get_featured(self):
97 log.debug("get_featured() called")
98 return []
99
100 @dbus.service.method(LIBERTINE_STORE_INTERFACE,
101 out_signature='as')
102 def get_popular(self):
103 log.debug("get_popular() called")
104 return []
105
106 @dbus.service.method(LIBERTINE_STORE_INTERFACE,
107 in_signature='s',
108 out_signature='aa{sv}')
109 def search(self, search_string):
110 log.debug("search('{}') called".format(search_string))
111 return self.cache.search(search_string)
112
113 @dbus.service.method(LIBERTINE_STORE_INTERFACE,
114 in_signature='s',
115 out_signature='a{sv}')
116 def app_info(self, app_id):
117 log.debug("app_info('{}') called".format(app_id))
118 app = self.cache.app_info(app_id)
119 if 'package' in app:
120 app['status'] = self.container.status(app['package'], CONTAINER_ID)
121 if app['id'] in self.progress:
122 app['progress_id'] = self.progress[app['id']].id
123
124 return app
125
126 @dbus.service.signal(LIBERTINE_STORE_INTERFACE,
127 signature='su')
128 def updating(self, target, percent):
129 log.debug("emit updating('{}', {})".format(target, percent))
130
131 # Packaging
132
133 @dbus.service.method(LIBERTINE_STORE_INTERFACE,
134 in_signature='s',
135 out_signature='x')
136 def install(self, app_id):
137 log.debug("install('%s')" % app_id)
138 package = self.cache.app_info(app_id)
139 if 'package' in package:
140 return self.container.install(package['package'], CONTAINER_ID, self.find_or_create_package_progress(app_id))
141
142 return 0
143
144 @dbus.service.method(LIBERTINE_STORE_INTERFACE,
145 in_signature='s',
146 out_signature='x')
147 def remove(self, app_id):
148 log.debug("remove('%s')" % app_id)
149 package = self.cache.app_info(app_id)
150 if 'package' in package:
151 return self.container.remove(package['package'], CONTAINER_ID, self.find_or_create_package_progress(app_id))
152
153 return 0
154
155 @dbus.service.method(LIBERTINE_STORE_INTERFACE,
156 in_signature='s',
157 out_signature='b')
158 def update_progress(self, app_id):
159 log.debug("update_progress('%s')" % app_id)
160 self.cleanup_progress()
161 if app_id in self.progress:
162 self.progress[app_id].emit_progress()
163 return True
164 return False
165
166 def find_or_create_package_progress(self, app_id):
167 self.cleanup_progress()
168
169 if app_id in self.progress:
170 progress = self.progress[app_id]
171 else:
172 progress = Progress(self.connection)
173 self.progress[app_id] = progress
174
175 return progress
176
177 def cleanup_progress(self):
178 updated_progress_list = {}
179 for key in self.progress.keys():
180 if self.progress[key].done:
181 self.progress[key].remove_from_connection()
182 else:
183 updated_progress_list[key] = self.progress[key]
184 self.progress = updated_progress_list
0185
=== added file 'service/libertine_service/tasks.py'
--- service/libertine_service/tasks.py 1970-01-01 00:00:00 +0000
+++ service/libertine_service/tasks.py 2016-09-23 14:36:26 +0000
@@ -0,0 +1,149 @@
1# Copyright 2016 Canonical Ltd.
2#
3# This program is free software: you can redistribute it and/or modify
4# it under the terms of the GNU General Public License as published by
5# the Free Software Foundation; version 3 of the License.
6#
7# This program is distributed in the hope that it will be useful,
8# but WITHOUT ANY WARRANTY; without even the implied warranty of
9# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10# GNU General Public License for more details.
11#
12# You should have received a copy of the GNU General Public License
13# along with this program. If not, see <http://www.gnu.org/licenses/>.
14
15from subprocess import Popen, PIPE
16from threading import Thread
17from abc import ABCMeta, abstractmethod
18from libertine import LibertineContainer, HostInfo, utils
19from dbus import UInt64
20
21
22class LibertineTask(metaclass=ABCMeta):
23 """
24 Abstract class for performing long-running, synchronous operations on a
25 Libertine container. Child classes must implement _run, which will execute
26 in a separate thread. Override _before to run commands synchronously; if
27 _before returns False, _run will not be executed.
28 """
29 def __init__(self, lock, log):
30 self.lock = lock
31 self.log = log
32
33 def start(self):
34 if self._before():
35 thread = Thread(target=self.run)
36 thread.start()
37 return thread.ident
38 else:
39 return 0
40
41 def run(self):
42 with self.lock:
43 self._run()
44
45 @abstractmethod
46 def _run(self):
47 pass
48
49 def _before(self):
50 return True
51
52
53class ProgressTask(LibertineTask):
54 def __init__(self, package_name, container_id, config, progress, lock, log):
55 super().__init__(lock, log)
56 self.package = package_name
57 self.container = container_id
58 self.config = config
59 self.progress = progress
60 self.current_progress = 0
61
62 def _progress(self):
63 self.current_progress += 1
64 self.progress.progress(UInt64(self.current_progress), UInt64(self.current_progress+1))
65
66
67class InstallTask(ProgressTask):
68 def __init__(self, package_name, container_id, config, progress, lock, log):
69 super().__init__(package_name, container_id, config, progress, lock, log)
70
71 def _run(self):
72 self.log.debug("Installing package '%s'" % self.package)
73 self._progress()
74 container = LibertineContainer(self.container, self.config)
75 if container.install_package(self.package):
76 self._progress()
77 self.config.update_package_install_status(self.container, self.package, "installed")
78 utils.refresh_libertine_scope()
79 else:
80 self.log.warning("Package installation failed for '%s'" % self.package)
81 self.config.delete_package(self.container, self.package)
82 self.progress.finished(self.package)
83
84 def _before(self):
85 self.log.debug("InstallTask::_before")
86 self._progress()
87 self.config.add_new_package(self.container, self.package)
88 self.config.update_package_install_status(self.container, self.package, "installing")
89 self._progress()
90 return True
91
92
93class RemoveTask(ProgressTask):
94 def __init__(self, package_name, container_id, config, progress, lock, log):
95 super().__init__(package_name, container_id, config, progress, lock, log)
96 self.fallback = "installed"
97
98 def _run(self):
99 self.log.debug("Removing package '%s'" % self.package)
100 self._progress()
101 container = LibertineContainer(self.container, self.config)
102 if container.remove_package(self.package):
103 self._progress()
104 self.config.delete_package(self.container, self.package)
105 utils.refresh_libertine_scope()
106 else:
107 self.log.warning("Package removal failed for '%s'" % self.package)
108 self.config.update_package_install_status(self.container, self.package, self.fallback)
109 self.progress.finished(self.package)
110
111 def _before(self):
112 self.log.debug("RemoveTask::_before")
113 self._progress()
114 if self.config.package_exists(self.container, self.package):
115 self.fallback = self.config.get_package_install_status(self.container, self.package)
116 self.config.update_package_install_status(self.container, self.package, "removing")
117 self._progress()
118 return True
119 else:
120 self.log.debug("Package '%s' already exists, skipping install" % self.package)
121 return False
122
123
124class CreateTask(LibertineTask):
125 def __init__(self, container_id, config, lock, log):
126 super().__init__(lock, log)
127 self.container = container_id
128 self.config = config
129
130 def _run(self):
131 self.log.debug("Creating container '%s'" % self.container)
132 container = LibertineContainer(self.container, self.config)
133 if not container.create_libertine_container(password=''):
134 self.log.debug("Creating container '%s' failed" % self.container)
135 self.config.delete_container(self.container)
136 return
137 self.config.update_container_install_status(self.container, "ready")
138
139 def _before(self):
140 self.log.debug("CreateTask::_before")
141 if self.config.container_exists(self.container):
142 return False
143
144 info = HostInfo.HostInfo()
145
146 self.config.add_new_container(self.container, 'User Applications', info.select_container_type_by_kernel(),
147 info.get_host_distro_release())
148 self.config.update_container_install_status(self.container, 'installing')
149 return True
0150
=== added file 'service/libertined'
--- service/libertined 1970-01-01 00:00:00 +0000
+++ service/libertined 2016-09-23 14:36:26 +0000
@@ -0,0 +1,89 @@
1#!/usr/bin/python3
2# -*- coding: utf-8 -*-
3
4# Copyright 2016 Canonical Ltd.
5#
6# This program is free software: you can redistribute it and/or modify
7# it under the terms of the GNU General Public License as published by
8# the Free Software Foundation; version 3 of the License.
9#
10# This program is distributed in the hope that it will be useful,
11# but WITHOUT ANY WARRANTY; without even the implied warranty of
12# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13# GNU General Public License for more details.
14#
15# You should have received a copy of the GNU General Public License
16# along with this program. If not, see <http://www.gnu.org/licenses/>.
17
18import argparse
19import logging
20import signal
21import sys
22from gi.repository import GLib, GObject
23from libertine_service import dbus
24
25
26log = logging.getLogger("Libertine")
27
28
29class Config(object):
30
31 def __init__(self):
32 self._arg_parser = argparse.ArgumentParser(description=u'Libertine Store service')
33 self._arg_parser.add_argument(u'-d', u"--debug",
34 action='store_true',
35 default=False,
36 help=u"enable internal debugging output")
37 self._arg_parser.add_argument(u'-l', u"--use-local-cache",
38 action='store_true',
39 default=False,
40 help=u"use local cache instead of system cache")
41 args = self._arg_parser.parse_args(namespace=Config)
42
43
44def configure_logging(config):
45 if config.debug:
46 log.setLevel(logging.DEBUG)
47 else:
48 log.setLevel(logging.INFO)
49 lch = logging.StreamHandler(sys.stdout)
50 lfm = logging.Formatter('%(asctime)s %(name)s [%(levelname)s] %(message)s')
51 lch.setFormatter(lfm)
52 log.addHandler(lch)
53
54
55class Loop(object):
56 def __init__(self):
57 GLib.unix_signal_add(GLib.PRIORITY_HIGH,
58 signal.SIGTERM,
59 self.sigterm,
60 None)
61 self.loop = GLib.MainLoop()
62
63 def sigterm(self, code):
64 log.info("terminate ('%s') signal received" % code)
65 self.shutdown()
66
67 def shutdown(self):
68 log.info("shutting service down")
69 self.loop.quit()
70
71 def run(self):
72 log.info("entering main loop")
73 self.loop.run()
74
75def main():
76 config = Config()
77 configure_logging(config)
78 service = dbus.Service(config=config)
79 loop = Loop()
80
81 try:
82 loop.run()
83 except KeyboardInterrupt:
84 log.debug("keyboard interrupt received")
85 loop.shutdown()
86
87
88if __name__ == '__main__':
89 main()
090
=== added file 'tests/CMakeLists.txt'
--- tests/CMakeLists.txt 1970-01-01 00:00:00 +0000
+++ tests/CMakeLists.txt 2016-09-23 14:36:26 +0000
@@ -0,0 +1,7 @@
1# Build with system gmock and its embedded gtest -- the horror of hardcoding
2set(GMOCK_SOURCE_DIR "/usr/src/gmock" CACHE PATH "gmock source directory")
3set(GTEST_INCLUDE_DIR "${GMOCK_SOURCE_DIR}/gtest/include" CACHE PATH "gtest source include directory")
4add_subdirectory(${GMOCK_SOURCE_DIR} "${CMAKE_CURRENT_BINARY_DIR}/gmock")
5
6add_subdirectory(scope)
7add_subdirectory(lib)
08
=== added directory 'tests/lib'
=== added file 'tests/lib/CMakeLists.txt'
--- tests/lib/CMakeLists.txt 1970-01-01 00:00:00 +0000
+++ tests/lib/CMakeLists.txt 2016-09-23 14:36:26 +0000
@@ -0,0 +1,1 @@
1add_subdirectory(libertine-scope)
02
=== added directory 'tests/lib/libertine-scope'
=== added file 'tests/lib/libertine-scope/CMakeLists.txt'
--- tests/lib/libertine-scope/CMakeLists.txt 1970-01-01 00:00:00 +0000
+++ tests/lib/libertine-scope/CMakeLists.txt 2016-09-23 14:36:26 +0000
@@ -0,0 +1,24 @@
1function(create_test test_name)
2 add_executable(${test_name}_exe
3 mock_service_manager.h
4 ${test_name}.cpp
5 )
6
7 include_directories(${test_name}_exe
8 ${CMAKE_SOURCE_DIR}/lib
9 )
10
11 target_link_libraries(${test_name}_exe
12 ${SCOPE_LIB_NAME}
13 Qt5::Core
14 Qt5::DBus
15 gmock
16 gmock_main
17 )
18
19 add_test(${test_name} ${test_name}_exe)
20endfunction(create_test)
21
22create_test(test_preview)
23create_test(test_package)
24create_test(test_action)
025
=== added file 'tests/lib/libertine-scope/mock_service_manager.h'
--- tests/lib/libertine-scope/mock_service_manager.h 1970-01-01 00:00:00 +0000
+++ tests/lib/libertine-scope/mock_service_manager.h 2016-09-23 14:36:26 +0000
@@ -0,0 +1,49 @@
1/*
2 * Copyright 2016 Canonical Ltd.
3 *
4 * This program is free software: you can redistribute it and/or modify it under
5 * the terms of the GNU General Public License, version 3, as published by the
6 * Free Software Foundation.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16
17#ifndef _MOCK_SERVICE_MANAGER_H
18#define _MOCK_SERVICE_MANAGER_H
19
20#include "libertine-scope/service_manager.h"
21#include <gmock/gmock.h>
22
23
24namespace libertine
25{
26namespace scope
27{
28
29
30class MockServiceManager : public ServiceManager
31{
32public:
33 MockServiceManager()
34 : ServiceManager()
35 {
36 }
37
38 MOCK_CONST_METHOD1(search_cache, QList<Package>(QString const&));
39 MOCK_CONST_METHOD1(app_info, Package(QString const&));
40 MOCK_CONST_METHOD1(update_progress, void(QString const&));
41 MOCK_CONST_METHOD1(install, void(QString const&));
42 MOCK_CONST_METHOD1(remove, void(QString const&));
43};
44
45
46} // namesapce Store
47} // namesapce Libertine
48
49#endif // _MOCK_SERVICE_MANAGER_H
050
=== added file 'tests/lib/libertine-scope/test_action.cpp'
--- tests/lib/libertine-scope/test_action.cpp 1970-01-01 00:00:00 +0000
+++ tests/lib/libertine-scope/test_action.cpp 2016-09-23 14:36:26 +0000
@@ -0,0 +1,70 @@
1/*
2 * Copyright 2016 Canonical Ltd.
3 *
4 * This program is free software: you can redistribute it and/or modify it under
5 * the terms of the GNU General Public License, version 3, as published by the
6 * Free Software Foundation.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16#include "libertine-scope/action.h"
17
18#include "tests/lib/libertine-scope/mock_service_manager.h"
19#include <unity/scopes/ActionMetadata.h>
20#include <unity/scopes/testing/Result.h>
21#include <gmock/gmock.h>
22
23
24namespace
25{
26TEST(StoreActionTest, CallsInstallOnServiceManager)
27{
28 unity::scopes::testing::Result result;
29 result["id"] = "vim-common";
30 unity::scopes::ActionMetadata metadata("en_US", "phone");
31 auto service = std::make_shared<testing::NiceMock<libertine::scope::MockServiceManager> >();
32
33 libertine::scope::Action action(result, metadata, "install", service);
34
35 EXPECT_CALL(*service, install(QString("vim-common")));
36
37 auto response = action.activate();
38 EXPECT_EQ(unity::scopes::ActivationResponse::Status::ShowPreview, response.status());
39}
40
41
42TEST(StoreActionTest, CallsRemoveOnServiceManager)
43{
44 unity::scopes::testing::Result result;
45 result["id"] = "gedit";
46 unity::scopes::ActionMetadata metadata("en_US", "phone");
47 auto service = std::make_shared<testing::NiceMock<libertine::scope::MockServiceManager> >();
48
49 libertine::scope::Action action(result, metadata, "remove", service);
50
51 EXPECT_CALL(*service, remove(QString("gedit")));
52
53 auto response = action.activate();
54 EXPECT_EQ(unity::scopes::ActivationResponse::Status::ShowPreview, response.status());
55}
56
57
58TEST(StoreActionTest, OpenAllowsDefaultHandlerToRun)
59{
60 unity::scopes::testing::Result result;
61 result["id"] = "gedit";
62 unity::scopes::ActionMetadata metadata("en_US", "phone");
63 auto service = std::make_shared<testing::NiceMock<libertine::scope::MockServiceManager> >();
64
65 libertine::scope::Action action(result, metadata, "open", service);
66
67 auto response = action.activate();
68 EXPECT_EQ(unity::scopes::ActivationResponse::Status::NotHandled, response.status());
69}
70}
071
=== added file 'tests/lib/libertine-scope/test_package.cpp'
--- tests/lib/libertine-scope/test_package.cpp 1970-01-01 00:00:00 +0000
+++ tests/lib/libertine-scope/test_package.cpp 2016-09-23 14:36:26 +0000
@@ -0,0 +1,108 @@
1/*
2 * Copyright 2016 Canonical Ltd.
3 *
4 * This program is free software: you can redistribute it and/or modify it under
5 * the terms of the GNU General Public License, version 3, as published by the
6 * Free Software Foundation.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16#include "libertine-scope/package.h"
17
18#include <gmock/gmock.h>
19
20
21namespace
22{
23using namespace libertine::scope;
24
25
26static QVariantMap
27attribute_map(QString const& name, QString const& summary, QString const& description,
28 QString const& icon, QString const& publisher, QString const& website,
29 QString const& license, QString const& id, QString const& status, QStringList screenshots)
30{
31 QVariantMap attributes;
32 attributes["name"] = name;
33 attributes["summary"] = summary;
34 attributes["description"] = description;
35 attributes["icon"] = icon;
36 attributes["publisher"] = publisher;
37 attributes["website"] = website;
38 attributes["license"] = license;
39 attributes["id"] = id;
40 attributes["status"] = status;
41 attributes["screenshots"] = screenshots;
42 return attributes;
43}
44
45
46static void
47package_matches_attributes(Package actual, std::string const& name, std::string const& summary,
48 std::string const& description, std::string const& icon, std::string const& publisher,
49 std::string const& website, std::string const& license, std::string const& id,
50 std::string const& status, QStringList screenshots)
51{
52 EXPECT_EQ(name, actual.name);
53 EXPECT_EQ(summary, actual.summary);
54 EXPECT_EQ(description, actual.description);
55 EXPECT_EQ(icon, actual.icon);
56 EXPECT_EQ(publisher, actual.publisher);
57 EXPECT_EQ(website, actual.website);
58 EXPECT_EQ(license, actual.license);
59 EXPECT_EQ(id, actual.id);
60 EXPECT_EQ(status, actual.status);
61
62 ASSERT_EQ(actual.screenshots.size(), screenshots.size());
63 for (auto i = 0u; i < actual.screenshots.size(); ++i)
64 {
65 EXPECT_EQ(screenshots[i], QString::fromStdString(actual.screenshots[i]));
66 }
67}
68
69
70TEST(PackageTest, FromMapCreatesSinglePackage)
71{
72 QStringList screenshots{"file:///some/image.png", "file:///some/other/image.jpg"};
73 auto attributeMap = attribute_map("Harry", "The Philosopher's Stone",
74 "Boy with head injury seeks magic rock",
75 "harry.png", "JK", "pottermore.com", "Private",
76 "com.pottermore.harry", "finished", screenshots);
77 auto package = Package::from_map(attributeMap);
78 package_matches_attributes(package, "Harry", "The Philosopher's Stone",
79 "Boy with head injury seeks magic rock",
80 "harry.png", "JK", "pottermore.com", "Private",
81 "com.pottermore.harry", "finished", screenshots);
82}
83
84
85TEST(PackageTest, FromMapCreatesListOfPackages)
86{
87 QStringList screenshots{"file:///some/image.png", "file:///some/other/image.jpg"};
88 auto attributePkg1Map = attribute_map("Harry", "The Philosopher's Stone",
89 "Boy with head injury seeks magic rock",
90 "harry.png", "JK", "pottermore.com", "Private",
91 "com.pottermore.harry", "finished", screenshots);
92 QStringList screenshots2{"file://imageFor2.png"};
93 auto attributePkg2Map = attribute_map("Dune", "Classic science fiction",
94 "The spice must flow", "worms.png",
95 "Herbert", "dunebook.net", "Other",
96 "net.dunebook.dune", "spicey", screenshots2);
97 auto packages = Package::from_map(QList<QVariantMap>{attributePkg1Map, attributePkg2Map});
98 ASSERT_EQ(2, packages.size());
99 package_matches_attributes(packages[0], "Harry", "The Philosopher's Stone",
100 "Boy with head injury seeks magic rock",
101 "harry.png", "JK", "pottermore.com", "Private",
102 "com.pottermore.harry", "finished", screenshots);
103 package_matches_attributes(packages[1], "Dune", "Classic science fiction",
104 "The spice must flow", "worms.png",
105 "Herbert", "dunebook.net", "Other",
106 "net.dunebook.dune", "spicey", screenshots2);
107}
108}
0109
=== added file 'tests/lib/libertine-scope/test_preview.cpp'
--- tests/lib/libertine-scope/test_preview.cpp 1970-01-01 00:00:00 +0000
+++ tests/lib/libertine-scope/test_preview.cpp 2016-09-23 14:36:26 +0000
@@ -0,0 +1,292 @@
1/*
2 * Copyright 2016 Canonical Ltd.
3 *
4 * This program is free software: you can redistribute it and/or modify it under
5 * the terms of the GNU General Public License, version 3, as published by the
6 * Free Software Foundation.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16#include "libertine-scope/preview.h"
17#include "tests/lib/libertine-scope/mock_service_manager.h"
18
19#include <unity/scopes/ActionMetadata.h>
20#include <unity/scopes/PreviewWidget.h>
21#include <unity/scopes/testing/MockPreviewReply.h>
22#include <unity/scopes/testing/Result.h>
23#include <gtest/gtest.h>
24#include <gmock/gmock.h>
25
26namespace
27{
28using namespace libertine::scope;
29
30
31static void
32verifyHeader(Package const& package, unity::scopes::PreviewWidget const& header)
33{
34 EXPECT_EQ("hdr", header.id());
35 EXPECT_EQ("header", header.widget_type());
36
37 EXPECT_EQ(package.name, header.attribute_values()["title"].get_string());
38 EXPECT_EQ(package.summary, header.attribute_values()["subtitle"].get_string());
39 EXPECT_EQ(package.icon, header.attribute_values()["mascot"].get_string());
40}
41
42
43static void
44verifyButtons(unity::scopes::PreviewWidget const& buttons)
45{
46 EXPECT_EQ("actions", buttons.id());
47 EXPECT_EQ("actions", buttons.widget_type());
48 auto buttons_actions = buttons.attribute_values()["actions"].get_array();
49 ASSERT_EQ(1, buttons_actions.size());
50 EXPECT_EQ("install", buttons_actions[0].get_dict()["id"].get_string());
51 EXPECT_EQ("Install", buttons_actions[0].get_dict()["label"].get_string());
52}
53
54static void
55verifyInProgressButtons(unity::scopes::PreviewWidget const& buttons, std::string const& progress_id)
56{
57 EXPECT_EQ("actions", buttons.id());
58 EXPECT_EQ("progress", buttons.widget_type());
59 auto source = buttons.attribute_values()["source"].get_dict();
60 EXPECT_EQ("com.canonical.libertine.ContainerManager", source["dbus-name"].get_string());
61 EXPECT_EQ(std::string("/Progress/") + progress_id, source["dbus-object"].get_string());
62}
63
64
65static void
66verifyInstalledButtons(unity::scopes::PreviewWidget const& buttons)
67{
68 EXPECT_EQ("actions", buttons.id());
69 EXPECT_EQ("actions", buttons.widget_type());
70 auto buttons_actions = buttons.attribute_values()["actions"].get_array();
71 ASSERT_EQ(2, buttons_actions.size());
72 EXPECT_EQ("remove", buttons_actions[0].get_dict()["id"].get_string());
73 EXPECT_EQ("Remove", buttons_actions[0].get_dict()["label"].get_string());
74 EXPECT_EQ("open", buttons_actions[1].get_dict()["id"].get_string());
75 EXPECT_EQ("Open", buttons_actions[1].get_dict()["label"].get_string());
76}
77
78
79static void
80verifyMetadata(Package const& package, unity::scopes::PreviewWidget const& props)
81{
82 EXPECT_EQ("other_metadata", props.id());
83 EXPECT_EQ("table", props.widget_type());
84
85 auto propValues = props.attribute_values()["values"].get_array();
86 ASSERT_EQ(3, propValues.size());
87 ASSERT_EQ(2, propValues[0].get_array().size());
88 EXPECT_EQ("Publisher/Creator", propValues[0].get_array()[0].get_string());
89 EXPECT_EQ(package.publisher, propValues[0].get_array()[1].get_string());
90 ASSERT_EQ(2, propValues[1].get_array().size());
91 EXPECT_EQ("Website", propValues[1].get_array()[0].get_string());
92 EXPECT_EQ(package.website, propValues[1].get_array()[1].get_string());
93 ASSERT_EQ(2, propValues[2].get_array().size());
94 EXPECT_EQ("License", propValues[2].get_array()[0].get_string());
95 EXPECT_EQ(package.license, propValues[2].get_array()[1].get_string());
96}
97
98
99static void
100verifyDescription(Package const& package, unity::scopes::PreviewWidget const& description)
101{
102 EXPECT_EQ("summary", description.id());
103 EXPECT_EQ("text", description.widget_type());
104 EXPECT_EQ("Info", description.attribute_values()["title"].get_string());
105 EXPECT_EQ(package.description, description.attribute_values()["text"].get_string());
106}
107
108
109static void
110verifyScreenshots(Package const& package, unity::scopes::PreviewWidget const& screenshots)
111{
112 EXPECT_EQ("screenshots", screenshots.id());
113 EXPECT_EQ("gallery", screenshots.widget_type());
114
115 auto sources = screenshots.attribute_values()["sources"].get_array();
116 ASSERT_EQ(package.screenshots.size(), sources.size());
117
118 for (auto i = 0u; i < package.screenshots.size(); ++i)
119 {
120 EXPECT_EQ(package.screenshots[i], sources[i].get_string());
121 }
122
123}
124
125
126static Package
127basePackage()
128{
129 Package package;
130 package.name = "vim";
131 package.summary = "classic text editor";
132 package.description = "this or emacs";
133 package.icon = "file:///test/file.png";
134 package.publisher = "Woody Boyd";
135 package.website = "http://canonical.com/";
136 package.license = "GPLv8+";
137 package.id = "vim.desktop";
138 package.status = "";
139 return package;
140}
141
142
143class StorePreviewTest : public testing::Test
144{
145protected:
146 StorePreviewTest()
147 : testing::Test()
148 , result()
149 , metadata("en_US", "phone")
150 , list(new unity::scopes::PreviewWidgetList())
151 , reply()
152 , proxy(&reply, [](unity::scopes::PreviewReply*) {})
153 , service(new testing::NiceMock<MockServiceManager>())
154 {
155 }
156
157 virtual void
158 SetUp()
159 {
160 EXPECT_CALL(reply, push(testing::_)).WillOnce(testing::SaveArg<0>(list.get()));
161 Preview::update_progress_after = std::chrono::milliseconds(0);
162 }
163
164 void usePackage(Package const& package)
165 {
166 result["id"] = unity::scopes::Variant(package.id);
167 EXPECT_CALL(*service, app_info(QString::fromStdString(package.id))).WillOnce(testing::Return(package));
168 }
169
170 unity::scopes::testing::Result result;
171 unity::scopes::ActionMetadata metadata;
172 std::unique_ptr<unity::scopes::PreviewWidgetList> list;
173 testing::NiceMock<unity::scopes::testing::MockPreviewReply> reply;
174 unity::scopes::PreviewReplyProxy proxy;
175 std::shared_ptr<testing::NiceMock<MockServiceManager> > service;
176};
177
178
179TEST_F(StorePreviewTest, ShowsDetailedInformationForPackage)
180{
181 auto package = basePackage();
182 usePackage(package);
183
184 Preview preview(result, metadata, service);
185 preview.run(proxy);
186
187 ASSERT_NE(nullptr, list);
188 ASSERT_EQ(4, list->size());
189
190 verifyHeader(package, list->front());
191 list->pop_front();
192 verifyButtons(list->front());
193 list->pop_front();
194 verifyMetadata(package, list->front());
195 list->pop_front();
196 verifyDescription(package, list->front());
197}
198
199
200TEST_F(StorePreviewTest, ShowsScreenshotsWhenAvailable)
201{
202 auto package = basePackage();
203 package.screenshots = std::vector<std::string>{"file:///some/string/uri.png", "file:///some/other/string/uri.jpg"};
204 usePackage(package);
205
206 Preview preview(result, metadata, service);
207 preview.run(proxy);
208
209 ASSERT_NE(nullptr, list);
210 ASSERT_EQ(5, list->size());
211
212 verifyHeader(package, list->front());
213 list->pop_front();
214 verifyButtons(list->front());
215 list->pop_front();
216 verifyMetadata(package, list->front());
217 list->pop_front();
218 verifyScreenshots(package, list->front());
219 list->pop_front();
220 verifyDescription(package, list->front());
221}
222
223
224TEST_F(StorePreviewTest, ShowsRemoveAndOpenButtonsWhenInstalled)
225{
226 auto package = basePackage();
227 package.status = "installed";
228 usePackage(package);
229
230 Preview preview(result, metadata, service);
The diff has been truncated for viewing.

Subscribers

People subscribed via source and target branches