Merge lp:~larryprice/libertine/system-settings-plugin into lp:libertine

Proposed by Larry Price
Status: Merged
Approved by: Christopher Townsend
Approved revision: 337
Merged at revision: 311
Proposed branch: lp:~larryprice/libertine/system-settings-plugin
Merge into: lp:libertine
Diff against target: 1951 lines (+786/-286)
52 files modified
CMakeLists.txt (+11/-4)
common/CMakeLists.txt (+13/-0)
common/ContainerAppsList.cpp (+4/-2)
common/ContainerAppsList.h (+2/-3)
common/ContainerArchivesList.cpp (+4/-2)
common/ContainerArchivesList.h (+0/-2)
common/ContainerConfig.cpp (+2/-2)
common/ContainerConfigList.cpp (+6/-7)
common/ContainerManager.cpp (+12/-1)
common/LibertineConfig.cpp (+2/-27)
common/LibertineConfig.h (+3/-7)
common/PackageOperationDetails.cpp (+78/-0)
common/PackageOperationDetails.h (+43/-0)
data/CMakeLists.txt (+1/-1)
data/libertine-manager-app.desktop (+2/-2)
debian/control (+47/-6)
debian/libertine-manager-app.install (+3/-4)
debian/libertine-qt-common.install (+2/-0)
debian/libertine-tools.install (+1/-1)
debian/python3-libertine-chroot.install (+1/-1)
debian/python3-libertine-lxc.install (+3/-3)
debian/python3-libertine.install (+2/-2)
debian/ubuntu-system-settings-libertine.install (+4/-0)
libertine/CMakeLists.txt (+10/-5)
libertine/config.h.in (+1/-1)
libertine/libertine.cpp (+27/-14)
libertine/libertine.h (+2/-0)
liblibertine/CMakeLists.txt (+12/-13)
liblibertine/libertine.cpp (+3/-2)
qml/CMakeLists.txt (+3/-0)
qml/common/AddExtraArchiveView.qml (+4/-2)
qml/common/ContainerEditView.qml (+7/-8)
qml/common/ContainerInfoView.qml (+5/-7)
qml/common/ContainerOptionsDialog.qml (+5/-5)
qml/common/ContainersList.qml (+131/-0)
qml/common/ExtraArchivesView.qml (+1/-1)
qml/common/ManageContainer.qml (+12/-10)
qml/common/PackageInfoView.qml (+12/-13)
qml/common/SearchPackagesDialog.qml (+3/-2)
qml/common/SearchResults.qml (+3/-1)
qml/common/SearchResultsView.qml (+11/-9)
qml/gui/ContainersView.qml (+8/-103)
qml/gui/WelcomeView.qml (+3/-2)
qml/gui/libertine.qml (+10/-9)
qml/plugin/MainSettingsPage.qml (+58/-0)
system-settings-plugin/CMakeLists.txt (+38/-0)
system-settings-plugin/config.h.in (+16/-0)
system-settings-plugin/libertine.settings.in (+14/-0)
system-settings-plugin/plugin.cpp (+105/-0)
system-settings-plugin/plugin.h (+34/-0)
tests/unit/ContainerConfigListTests.cpp (+1/-1)
tests/unit/ContainerConfigTests.cpp (+1/-1)
To merge this branch: bzr merge lp:~larryprice/libertine/system-settings-plugin
Reviewer Review Type Date Requested Status
Christopher Townsend Approve
Libertine CI Bot continuous-integration Approve
Stephen M. Webb (community) Approve
Review via email: mp+306926@code.launchpad.net

Commit message

Add implementation for libertine gui as a system-settings plugin.

Description of the change

Port the libertine gui to also be available as an ubuntu-system-settings plugin.

This involved moving around the QML files, moving the common libertine code, and adding a package for the plugin. There was substantial refactoring of the QML to utilize a central PackageOperationDetails object to send/receive signals between pages instead of depending on the main page. Although I did a bit of testing to try to verify everything's still working, it could certainly use more.

To test the system-settings plugin, you'll have to run `make install` from the root dir or the `system-settings-plugin` dir, or you could alternatively build/install the deb. You'll also need to install `ubuntu-system-settings`. You'll find the new libertine icon near the bottom of the system-settings UI.

To post a comment you must log in.
Revision history for this message
Libertine CI Bot (libertine-ci-bot) wrote :

FAILED: Continuous integration, rev:316
https://jenkins.canonical.com/libertine/job/lp-libertine-ci/131/
Executed test runs:
    FAILURE: https://jenkins.canonical.com/libertine/job/build/358/console
    None: https://jenkins.canonical.com/libertine/job/lp-generic-update-mp/272/console
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-0-fetch/360
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-1-sourcepkg/release=vivid+overlay/343
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-1-sourcepkg/release=xenial+overlay/343
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-1-sourcepkg/release=yakkety/343
    FAILURE: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=vivid+overlay/342/console
    FAILURE: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=xenial+overlay/342/console
    FAILURE: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=yakkety/342/console
    FAILURE: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=vivid+overlay/342/console
    FAILURE: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=xenial+overlay/342/console
    FAILURE: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=yakkety/342/console

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

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

FAILED: Continuous integration, rev:317
https://jenkins.canonical.com/libertine/job/lp-libertine-ci/132/
Executed test runs:
    FAILURE: https://jenkins.canonical.com/libertine/job/build/359/console
    None: https://jenkins.canonical.com/libertine/job/lp-generic-update-mp/273/console
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-0-fetch/361
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-1-sourcepkg/release=vivid+overlay/344
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-1-sourcepkg/release=xenial+overlay/344
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-1-sourcepkg/release=yakkety/344
    FAILURE: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=vivid+overlay/343/console
    FAILURE: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=xenial+overlay/343/console
    FAILURE: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=yakkety/343/console
    FAILURE: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=vivid+overlay/343/console
    FAILURE: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=xenial+overlay/343/console
    FAILURE: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=yakkety/343/console

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

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

FAILED: Continuous integration, rev:319
https://jenkins.canonical.com/libertine/job/lp-libertine-ci/133/
Executed test runs:
    FAILURE: https://jenkins.canonical.com/libertine/job/build/360/console
    None: https://jenkins.canonical.com/libertine/job/lp-generic-update-mp/274/console
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-0-fetch/362
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-1-sourcepkg/release=vivid+overlay/345
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-1-sourcepkg/release=xenial+overlay/345
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-1-sourcepkg/release=yakkety/345
    FAILURE: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=vivid+overlay/344/console
    FAILURE: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=xenial+overlay/344/console
    FAILURE: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=yakkety/344/console
    FAILURE: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=vivid+overlay/344/console
    FAILURE: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=xenial+overlay/344/console
    FAILURE: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=yakkety/344/console

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

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

Use LIBRARIES var from SS

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

FAILED: Continuous integration, rev:320
https://jenkins.canonical.com/libertine/job/lp-libertine-ci/134/
Executed test runs:
    FAILURE: https://jenkins.canonical.com/libertine/job/build/361/console
    None: https://jenkins.canonical.com/libertine/job/lp-generic-update-mp/275/console
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-0-fetch/363
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-1-sourcepkg/release=vivid+overlay/346
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-1-sourcepkg/release=xenial+overlay/346
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-1-sourcepkg/release=yakkety/346
    FAILURE: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=vivid+overlay/345/console
    FAILURE: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=xenial+overlay/345/console
    FAILURE: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=yakkety/345/console
    FAILURE: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=vivid+overlay/345/console
    FAILURE: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=xenial+overlay/345/console
    FAILURE: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=yakkety/345/console

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

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

Hopefully fixing packaging issues by linking to Quick instead of Core, which works with local pdebuild

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

FAILED: Continuous integration, rev:321
https://jenkins.canonical.com/libertine/job/lp-libertine-ci/136/
Executed test runs:
    FAILURE: https://jenkins.canonical.com/libertine/job/build/363/console
    None: https://jenkins.canonical.com/libertine/job/lp-generic-update-mp/277/console
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-0-fetch/365
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-1-sourcepkg/release=vivid+overlay/348
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-1-sourcepkg/release=xenial+overlay/348
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-1-sourcepkg/release=yakkety/348
    FAILURE: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=vivid+overlay/347/console
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=xenial+overlay/347
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=xenial+overlay/347/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=yakkety/347
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=yakkety/347/artifact/output/*zip*/output.zip
    FAILURE: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=vivid+overlay/347/console
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=xenial+overlay/347
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=xenial+overlay/347/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=yakkety/347
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=yakkety/347/artifact/output/*zip*/output.zip

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

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

errorOccurred is from Qt5.6, which is not available in vivid+overlay

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

FAILED: Continuous integration, rev:322
https://jenkins.canonical.com/libertine/job/lp-libertine-ci/137/
Executed test runs:
    FAILURE: https://jenkins.canonical.com/libertine/job/build/364/console
    None: https://jenkins.canonical.com/libertine/job/lp-generic-update-mp/278/console
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-0-fetch/366
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-1-sourcepkg/release=vivid+overlay/349
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-1-sourcepkg/release=xenial+overlay/349
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-1-sourcepkg/release=yakkety/349
    FAILURE: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=vivid+overlay/348/console
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=xenial+overlay/348
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=xenial+overlay/348/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=yakkety/348
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=yakkety/348/artifact/output/*zip*/output.zip
    FAILURE: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=vivid+overlay/348/console
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=xenial+overlay/348
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=xenial+overlay/348/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=yakkety/348
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=yakkety/348/artifact/output/*zip*/output.zip

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

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

Need to perform static cast to use lambda syntax on error signal

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

FAILED: Continuous integration, rev:323
https://jenkins.canonical.com/libertine/job/lp-libertine-ci/138/
Executed test runs:
    FAILURE: https://jenkins.canonical.com/libertine/job/build/365/console
    None: https://jenkins.canonical.com/libertine/job/lp-generic-update-mp/279/console
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-0-fetch/367
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-1-sourcepkg/release=vivid+overlay/350
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-1-sourcepkg/release=xenial+overlay/350
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-1-sourcepkg/release=yakkety/350
    FAILURE: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=vivid+overlay/349/console
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=xenial+overlay/349
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=xenial+overlay/349/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=yakkety/349
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=yakkety/349/artifact/output/*zip*/output.zip
    FAILURE: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=vivid+overlay/349/console
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=xenial+overlay/349
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=xenial+overlay/349/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=yakkety/349
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=yakkety/349/artifact/output/*zip*/output.zip

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

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

Manually adding /usr/include to the include dirs when using automoc

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

Merge with trunk

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

PASSED: Continuous integration, rev:325
https://jenkins.canonical.com/libertine/job/lp-libertine-ci/143/
Executed test runs:
    SUCCESS: https://jenkins.canonical.com/libertine/job/build/371
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=amd64,release=vivid+overlay,testname=default/293
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=amd64,release=xenial+overlay,testname=default/293
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=amd64,release=yakkety,testname=default/293
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=i386,release=vivid+overlay,testname=default/293
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=i386,release=xenial+overlay,testname=default/293
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=i386,release=yakkety,testname=default/293
    None: https://jenkins.canonical.com/libertine/job/lp-generic-update-mp/284/console
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-0-fetch/373
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-1-sourcepkg/release=vivid+overlay/355
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-1-sourcepkg/release=xenial+overlay/355
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-1-sourcepkg/release=yakkety/355
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=vivid+overlay/354
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=vivid+overlay/354/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=xenial+overlay/354
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=xenial+overlay/354/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=yakkety/354
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=yakkety/354/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=vivid+overlay/354
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=vivid+overlay/354/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=xenial+overlay/354
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=xenial+overlay/354/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=yakkety/354
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=yakkety/354/artifact/output/*zip*/output.zip

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

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

merge

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

PASSED: Continuous integration, rev:326
https://jenkins.canonical.com/libertine/job/lp-libertine-ci/149/
Executed test runs:
    SUCCESS: https://jenkins.canonical.com/libertine/job/build/381
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=amd64,release=vivid+overlay,testname=default/302
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=amd64,release=xenial+overlay,testname=default/302
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=amd64,release=yakkety,testname=default/302
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=i386,release=vivid+overlay,testname=default/302
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=i386,release=xenial+overlay,testname=default/302
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=i386,release=yakkety,testname=default/302
    None: https://jenkins.canonical.com/libertine/job/lp-generic-update-mp/290/console
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-0-fetch/383
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-1-sourcepkg/release=vivid+overlay/365
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-1-sourcepkg/release=xenial+overlay/365
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-1-sourcepkg/release=yakkety/365
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=vivid+overlay/364
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=vivid+overlay/364/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=xenial+overlay/364
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=xenial+overlay/364/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=yakkety/364
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=yakkety/364/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=vivid+overlay/364
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=vivid+overlay/364/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=xenial+overlay/364
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=xenial+overlay/364/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=yakkety/364
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=yakkety/364/artifact/output/*zip*/output.zip

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

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

As discussed on IRC, the "libertine" binary package should be renamed to "libertine-manager-app" (or some other name that we agree on).

The current "libertine" binary package should be made into a dummy transitional package that depends on the new package.

Revision history for this message
Christopher Townsend (townsend) wrote :

Another thing discussed on IRC is to make a common qt package shared by both ubuntu-system-settings-libertine and libertine (soon to be renamed) and get rid of the Replaces.

327. By Larry Price

Add common qml module

328. By Larry Price

This should take care of the common code better

329. By Larry Price

rename libertine to l-m-a

330. By Larry Price

merge

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

PASSED: Continuous integration, rev:330
https://jenkins.canonical.com/libertine/job/lp-libertine-ci/151/
Executed test runs:
    SUCCESS: https://jenkins.canonical.com/libertine/job/build/383
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=amd64,release=vivid+overlay,testname=default/304
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=amd64,release=xenial+overlay,testname=default/304
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=amd64,release=yakkety,testname=default/304
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=i386,release=vivid+overlay,testname=default/304
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=i386,release=xenial+overlay,testname=default/304
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=i386,release=yakkety,testname=default/304
    None: https://jenkins.canonical.com/libertine/job/lp-generic-update-mp/292/console
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-0-fetch/385
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-1-sourcepkg/release=vivid+overlay/367
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-1-sourcepkg/release=xenial+overlay/367
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-1-sourcepkg/release=yakkety/367
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=vivid+overlay/366
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=vivid+overlay/366/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=xenial+overlay/366
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=xenial+overlay/366/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=yakkety/366
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=yakkety/366/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=vivid+overlay/366
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=vivid+overlay/366/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=xenial+overlay/366
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=xenial+overlay/366/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=yakkety/366
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=yakkety/366/artifact/output/*zip*/output.zip

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

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

dummy

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

PASSED: Continuous integration, rev:331
https://jenkins.canonical.com/libertine/job/lp-libertine-ci/153/
Executed test runs:
    SUCCESS: https://jenkins.canonical.com/libertine/job/build/385
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=amd64,release=vivid+overlay,testname=default/306
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=amd64,release=xenial+overlay,testname=default/306
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=amd64,release=yakkety,testname=default/306
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=i386,release=vivid+overlay,testname=default/306
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=i386,release=xenial+overlay,testname=default/306
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=i386,release=yakkety,testname=default/306
    None: https://jenkins.canonical.com/libertine/job/lp-generic-update-mp/294/console
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-0-fetch/387
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-1-sourcepkg/release=vivid+overlay/369
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-1-sourcepkg/release=xenial+overlay/369
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-1-sourcepkg/release=yakkety/369
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=vivid+overlay/368
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=vivid+overlay/368/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=xenial+overlay/368
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=xenial+overlay/368/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=yakkety/368
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=yakkety/368/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=vivid+overlay/368
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=vivid+overlay/368/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=xenial+overlay/368
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=xenial+overlay/368/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=yakkety/368
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=yakkety/368/artifact/output/*zip*/output.zip

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

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

Ok, I'm good with this. I've asked bregma to also give this a review, particularly the packaging changes. Will wait on his feedback before TA'ing.

review: Approve
332. By Larry Price

renaming libertine -> libertine-manager-app

333. By Larry Price

merge

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

FAILED: Continuous integration, rev:333
https://jenkins.canonical.com/libertine/job/lp-libertine-ci/155/
Executed test runs:
    FAILURE: https://jenkins.canonical.com/libertine/job/build/388/console
    None: https://jenkins.canonical.com/libertine/job/lp-generic-update-mp/296/console
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-0-fetch/390
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-1-sourcepkg/release=vivid+overlay/372
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-1-sourcepkg/release=xenial+overlay/372
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-1-sourcepkg/release=yakkety/372
    FAILURE: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=vivid+overlay/371/console
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=xenial+overlay/371
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=xenial+overlay/371/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=yakkety/371
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=yakkety/371/artifact/output/*zip*/output.zip
    FAILURE: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=vivid+overlay/371/console
    FAILURE: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=xenial+overlay/371/console
    FAILURE: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=yakkety/371/console

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

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

Update .desktop file as well

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

FAILED: Continuous integration, rev:334
https://jenkins.canonical.com/libertine/job/lp-libertine-ci/156/
Executed test runs:
    FAILURE: https://jenkins.canonical.com/libertine/job/build/389/console
    None: https://jenkins.canonical.com/libertine/job/lp-generic-update-mp/297/console
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-0-fetch/391
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-1-sourcepkg/release=vivid+overlay/373
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-1-sourcepkg/release=xenial+overlay/373
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-1-sourcepkg/release=yakkety/373
    FAILURE: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=vivid+overlay/372/console
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=xenial+overlay/372
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=xenial+overlay/372/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=yakkety/372
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=yakkety/372/artifact/output/*zip*/output.zip
    FAILURE: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=vivid+overlay/372/console
    FAILURE: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=xenial+overlay/372/console
    FAILURE: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=yakkety/372/console

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

review: Needs Fixing (continuous-integration)
Revision history for this message
Stephen M. Webb (bregma) wrote :

Packaging looks OK but please run "wrap-and-sort -a" to keep the formatting and ordering in the control files.

review: Needs Fixing
335. By Larry Price

Fix bad link

336. By Larry Price

Apply wrap-and-sort

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

PASSED: Continuous integration, rev:335
https://jenkins.canonical.com/libertine/job/lp-libertine-ci/157/
Executed test runs:
    SUCCESS: https://jenkins.canonical.com/libertine/job/build/390
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=amd64,release=vivid+overlay,testname=default/309
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=amd64,release=xenial+overlay,testname=default/309
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=amd64,release=yakkety,testname=default/309
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=i386,release=vivid+overlay,testname=default/309
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=i386,release=xenial+overlay,testname=default/309
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=i386,release=yakkety,testname=default/309
    None: https://jenkins.canonical.com/libertine/job/lp-generic-update-mp/298/console
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-0-fetch/392
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-1-sourcepkg/release=vivid+overlay/374
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-1-sourcepkg/release=xenial+overlay/374
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-1-sourcepkg/release=yakkety/374
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=vivid+overlay/373
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=vivid+overlay/373/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=xenial+overlay/373
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=xenial+overlay/373/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=yakkety/373
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=yakkety/373/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=vivid+overlay/373
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=vivid+overlay/373/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=xenial+overlay/373
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=xenial+overlay/373/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=yakkety/373
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=yakkety/373/artifact/output/*zip*/output.zip

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

review: Approve (continuous-integration)
Revision history for this message
Stephen M. Webb (bregma) wrote :

OK

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

PASSED: Continuous integration, rev:336
https://jenkins.canonical.com/libertine/job/lp-libertine-ci/158/
Executed test runs:
    SUCCESS: https://jenkins.canonical.com/libertine/job/build/391
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=amd64,release=vivid+overlay,testname=default/310
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=amd64,release=xenial+overlay,testname=default/310
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=amd64,release=yakkety,testname=default/310
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=i386,release=vivid+overlay,testname=default/310
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=i386,release=xenial+overlay,testname=default/310
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=i386,release=yakkety,testname=default/310
    None: https://jenkins.canonical.com/libertine/job/lp-generic-update-mp/299/console
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-0-fetch/393
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-1-sourcepkg/release=vivid+overlay/375
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-1-sourcepkg/release=xenial+overlay/375
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-1-sourcepkg/release=yakkety/375
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=vivid+overlay/374
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=vivid+overlay/374/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=xenial+overlay/374
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=xenial+overlay/374/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=yakkety/374
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=yakkety/374/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=vivid+overlay/374
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=vivid+overlay/374/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=xenial+overlay/374
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=xenial+overlay/374/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=yakkety/374
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=yakkety/374/artifact/output/*zip*/output.zip

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

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

Commonize the ListView used to show containers

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

PASSED: Continuous integration, rev:337
https://jenkins.canonical.com/libertine/job/lp-libertine-ci/159/
Executed test runs:
    SUCCESS: https://jenkins.canonical.com/libertine/job/build/392
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=amd64,release=vivid+overlay,testname=default/311
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=amd64,release=xenial+overlay,testname=default/311
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=amd64,release=yakkety,testname=default/311
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=i386,release=vivid+overlay,testname=default/311
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=i386,release=xenial+overlay,testname=default/311
    SUCCESS: https://jenkins.canonical.com/libertine/job/test-0-autopkgtest/label=i386,release=yakkety,testname=default/311
    None: https://jenkins.canonical.com/libertine/job/lp-generic-update-mp/300/console
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-0-fetch/394
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-1-sourcepkg/release=vivid+overlay/376
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-1-sourcepkg/release=xenial+overlay/376
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-1-sourcepkg/release=yakkety/376
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=vivid+overlay/375
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=vivid+overlay/375/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=xenial+overlay/375
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=xenial+overlay/375/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=yakkety/375
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=amd64,release=yakkety/375/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=vivid+overlay/375
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=vivid+overlay/375/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=xenial+overlay/375
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=xenial+overlay/375/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=yakkety/375
        deb: https://jenkins.canonical.com/libertine/job/build-2-binpkg/arch=i386,release=yakkety/375/artifact/output/*zip*/output.zip

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

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

Ok, this all looks good to me. Thanks!

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'CMakeLists.txt'
--- CMakeLists.txt 2016-09-13 18:17:52 +0000
+++ CMakeLists.txt 2016-10-11 17:13:48 +0000
@@ -1,7 +1,7 @@
1cmake_minimum_required(VERSION 3.0.2)1cmake_minimum_required(VERSION 3.0.2)
2cmake_policy(SET CMP0048 NEW)2cmake_policy(SET CMP0048 NEW)
33
4project(libertine 4project(libertine
5 VERSION 1.4.1)5 VERSION 1.4.1)
66
7set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake" "${CMAKE_MODULE_PATH}")7set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake" "${CMAKE_MODULE_PATH}")
@@ -32,13 +32,21 @@
3232
33set(CMAKE_AUTOMOC ON)33set(CMAKE_AUTOMOC ON)
3434
35set(LIBERTINE_COMMON libertine-common)
36set(LIBERTINE_CORE libertine)
37set(LIBERTINE_EXE_NAME libertine-manager-app)
38set(LIBERTINE_QML_PATH ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_DATAROOTDIR}/${CMAKE_PROJECT_NAME}/qml)
39
40add_subdirectory(qml)
41add_subdirectory(liblibertine)
42add_subdirectory(common)
35add_subdirectory(libertine)43add_subdirectory(libertine)
44add_subdirectory(system-settings-plugin)
36add_subdirectory(python)45add_subdirectory(python)
37add_subdirectory(data)46add_subdirectory(data)
38add_subdirectory(tools)47add_subdirectory(tools)
39add_subdirectory(liblibertine)48add_subdirectory(pasted)
40add_subdirectory(po)49add_subdirectory(po)
41add_subdirectory(pasted)
4250
43include(CTest)51include(CTest)
44add_subdirectory(tests)52add_subdirectory(tests)
@@ -50,4 +58,3 @@
50 | xz >${CMAKE_BINARY_DIR}/${ARCHIVE_NAME}.tar.xz58 | xz >${CMAKE_BINARY_DIR}/${ARCHIVE_NAME}.tar.xz
51 && rm .gitattributes59 && rm .gitattributes
52 WORKING_DIRECTORY ${CMAKE_SOURCE_DIR})60 WORKING_DIRECTORY ${CMAKE_SOURCE_DIR})
53
5461
=== added directory 'common'
=== added file 'common/CMakeLists.txt'
--- common/CMakeLists.txt 1970-01-01 00:00:00 +0000
+++ common/CMakeLists.txt 2016-10-11 17:13:48 +0000
@@ -0,0 +1,13 @@
1add_library(${LIBERTINE_COMMON}
2 ContainerAppsList.cpp
3 ContainerArchivesList.cpp
4 ContainerConfig.cpp
5 ContainerConfigList.cpp
6 ContainerManager.cpp
7 LibertineConfig.cpp
8 PackageOperationDetails.cpp
9)
10
11target_link_libraries(${LIBERTINE_COMMON} ${LIBERTINE_CORE} Qt5::Core)
12
13install(TARGETS ${LIBERTINE_COMMON_NAME} LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR})
014
=== renamed file 'libertine/ContainerAppsList.cpp' => 'common/ContainerAppsList.cpp'
--- libertine/ContainerAppsList.cpp 2016-08-12 19:39:50 +0000
+++ common/ContainerAppsList.cpp 2016-10-11 17:13:48 +0000
@@ -16,8 +16,10 @@
16 * You should have received a copy of the GNU General Public License16 * You should have received a copy of the GNU General Public License
17 * along with this program. If not, see <http://www.gnu.org/licenses/>.17 * along with this program. If not, see <http://www.gnu.org/licenses/>.
18 */18 */
19#include "libertine/ContainerAppsList.h"19#include "common/ContainerAppsList.h"
20#include "libertine/ContainerConfigList.h"20
21#include "common/ContainerConfig.h"
22#include "common/ContainerConfigList.h"
2123
22ContainerAppsList::24ContainerAppsList::
23ContainerAppsList(ContainerConfigList* container_config_list,25ContainerAppsList(ContainerConfigList* container_config_list,
2426
=== renamed file 'libertine/ContainerAppsList.h' => 'common/ContainerAppsList.h'
--- libertine/ContainerAppsList.h 2016-08-12 19:39:50 +0000
+++ common/ContainerAppsList.h 2016-10-11 17:13:48 +0000
@@ -3,7 +3,7 @@
3 * @brief Libertine Manager list of container applications3 * @brief Libertine Manager list of container applications
4 */4 */
5/*5/*
6 * Copyright 2015 Canonical Ltd6 * Copyright 2015-2016 Canonical Ltd
7 *7 *
8 * Libertine is free software: you can redistribute it and/or modify it under8 * Libertine 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 the9 * the terms of the GNU General Public License, version 3, as published by the
@@ -19,8 +19,6 @@
19#ifndef _CONTAINER_APPS_LIST_H_19#ifndef _CONTAINER_APPS_LIST_H_
20#define _CONTAINER_APPS_LIST_H_20#define _CONTAINER_APPS_LIST_H_
2121
22#include "libertine/ContainerConfig.h"
23
24#include <QtCore/QAbstractListModel>22#include <QtCore/QAbstractListModel>
25#include <QtCore/QList>23#include <QtCore/QList>
26#include <QtCore/QObject>24#include <QtCore/QObject>
@@ -30,6 +28,7 @@
30class ContainerApps;28class ContainerApps;
31class ContainerConfigList;29class ContainerConfigList;
3230
31
33class ContainerAppsList32class ContainerAppsList
34: public QAbstractListModel33: public QAbstractListModel
35{34{
3635
=== renamed file 'libertine/ContainerArchivesList.cpp' => 'common/ContainerArchivesList.cpp'
--- libertine/ContainerArchivesList.cpp 2016-08-12 19:39:50 +0000
+++ common/ContainerArchivesList.cpp 2016-10-11 17:13:48 +0000
@@ -16,8 +16,10 @@
16 * You should have received a copy of the GNU General Public License16 * You should have received a copy of the GNU General Public License
17 * along with this program. If not, see <http://www.gnu.org/licenses/>.17 * along with this program. If not, see <http://www.gnu.org/licenses/>.
18 */18 */
19#include "libertine/ContainerArchivesList.h"19#include "common/ContainerArchivesList.h"
20#include "libertine/ContainerConfigList.h"20
21#include "common/ContainerConfig.h"
22#include "common/ContainerConfigList.h"
2123
22ContainerArchivesList::24ContainerArchivesList::
23ContainerArchivesList(ContainerConfigList* container_config_list,25ContainerArchivesList(ContainerConfigList* container_config_list,
2426
=== renamed file 'libertine/ContainerArchivesList.h' => 'common/ContainerArchivesList.h'
--- libertine/ContainerArchivesList.h 2016-08-12 19:39:50 +0000
+++ common/ContainerArchivesList.h 2016-10-11 17:13:48 +0000
@@ -19,8 +19,6 @@
19#ifndef _CONTAINER_ARCHIVES_LIST_H_19#ifndef _CONTAINER_ARCHIVES_LIST_H_
20#define _CONTAINER_ARCHIVES_LIST_H_20#define _CONTAINER_ARCHIVES_LIST_H_
2121
22#include "libertine/ContainerConfig.h"
23
24#include <QtCore/QAbstractListModel>22#include <QtCore/QAbstractListModel>
25#include <QtCore/QList>23#include <QtCore/QList>
26#include <QtCore/QObject>24#include <QtCore/QObject>
2725
=== renamed file 'libertine/ContainerConfig.cpp' => 'common/ContainerConfig.cpp'
--- libertine/ContainerConfig.cpp 2016-04-13 18:02:56 +0000
+++ common/ContainerConfig.cpp 2016-10-11 17:13:48 +0000
@@ -16,7 +16,7 @@
16 * You should have received a copy of the GNU General Public License16 * You should have received a copy of the GNU General Public License
17 * along with this program. If not, see <http://www.gnu.org/licenses/>.17 * along with this program. If not, see <http://www.gnu.org/licenses/>.
18 */18 */
19#include "libertine/ContainerConfig.h"19#include "common/ContainerConfig.h"
2020
21#include <QtCore/QDebug>21#include <QtCore/QDebug>
22#include <QtCore/QJsonArray>22#include <QtCore/QJsonArray>
@@ -73,7 +73,7 @@
73 }73 }
74 }74 }
75 }75 }
76 76
77 return name;77 return name;
78 }78 }
7979
8080
=== renamed file 'libertine/ContainerConfig.h' => 'common/ContainerConfig.h'
=== renamed file 'libertine/ContainerConfigList.cpp' => 'common/ContainerConfigList.cpp'
--- libertine/ContainerConfigList.cpp 2016-08-22 18:20:43 +0000
+++ common/ContainerConfigList.cpp 2016-10-11 17:13:48 +0000
@@ -16,12 +16,11 @@
16 * You should have received a copy of the GNU General Public License16 * You should have received a copy of the GNU General Public License
17 * along with this program. If not, see <http://www.gnu.org/licenses/>.17 * along with this program. If not, see <http://www.gnu.org/licenses/>.
18 */18 */
19#include "libertine/ContainerManager.h"19#include "common/ContainerConfigList.h"
20#include "libertine/ContainerConfigList.h"
21#include "libertine/LibertineConfig.h"
2220
21#include "common/ContainerConfig.h"
22#include "common/LibertineConfig.h"
23#include <algorithm>23#include <algorithm>
24#include "libertine/ContainerConfig.h"
25#include <QtCore/QDebug>24#include <QtCore/QDebug>
26#include <QtCore/QDir>25#include <QtCore/QDir>
27#include <QtCore/QFile>26#include <QtCore/QFile>
@@ -95,7 +94,7 @@
95reloadContainerList()94reloadContainerList()
96{95{
97 beginResetModel();96 beginResetModel();
98 endResetModel(); 97 endResetModel();
99}98}
10099
101100
@@ -128,7 +127,7 @@
128deleteContainer()127deleteContainer()
129{128{
130 beginResetModel();129 beginResetModel();
131 endResetModel(); 130 endResetModel();
132}131}
133132
134133
@@ -360,7 +359,7 @@
360getHostDistroDescription()359getHostDistroDescription()
361{360{
362 QSettings distro_info("/etc/lsb-release", QSettings::NativeFormat);361 QSettings distro_info("/etc/lsb-release", QSettings::NativeFormat);
363 362
364 return distro_info.value("DISTRIB_DESCRIPTION").toString().section(' ', 0, 2);363 return distro_info.value("DISTRIB_DESCRIPTION").toString().section(' ', 0, 2);
365}364}
366365
367366
=== renamed file 'libertine/ContainerConfigList.h' => 'common/ContainerConfigList.h'
=== renamed file 'libertine/ContainerManager.cpp' => 'common/ContainerManager.cpp'
--- libertine/ContainerManager.cpp 2016-09-30 18:55:22 +0000
+++ common/ContainerManager.cpp 2016-10-11 17:13:48 +0000
@@ -16,7 +16,8 @@
16 * You should have received a copy of the GNU General Public License16 * You should have received a copy of the GNU General Public License
17 * along with this program. If not, see <http://www.gnu.org/licenses/>.17 * along with this program. If not, see <http://www.gnu.org/licenses/>.
18 */18 */
19#include "libertine/ContainerManager.h"19#include "common/ContainerManager.h"
20
20#include <QTemporaryFile>21#include <QTemporaryFile>
2122
2223
@@ -32,6 +33,7 @@
32static const QString RUN_COMMAND_FAILED = QObject::tr("Running command %1 failed");33static const QString RUN_COMMAND_FAILED = QObject::tr("Running command %1 failed");
33static const QString CONTAINER_CONFIGURE_FAILED = QObject::tr("Attempt to configure container %1 failed");34static const QString CONTAINER_CONFIGURE_FAILED = QObject::tr("Attempt to configure container %1 failed");
34static const QString SET_DEFAULT_CONTAINER_FAILED = QObject::tr("Attempt to set container as default failed");35static const QString SET_DEFAULT_CONTAINER_FAILED = QObject::tr("Attempt to set container as default failed");
36static const QString GENERAL_ERROR = QObject::tr("An error occurred");
35constexpr auto libertine_container_manager_tool = "libertine-container-manager";37constexpr auto libertine_container_manager_tool = "libertine-container-manager";
3638
3739
@@ -66,6 +68,15 @@
66ContainerManagerWorker()68ContainerManagerWorker()
67{69{
68 connect(&process_, static_cast<void(QProcess::*)(int, QProcess::ExitStatus)>(&QProcess::finished), this, &QObject::deleteLater);70 connect(&process_, static_cast<void(QProcess::*)(int, QProcess::ExitStatus)>(&QProcess::finished), this, &QObject::deleteLater);
71 connect(&process_,
72#if QT_VERSION >= QT_VERSION_CHECK(5, 6, 0)
73 &QProcess::errorOccurred,
74#else
75 static_cast<void(QProcess::*)(QProcess::ProcessError)>(&QProcess::error),
76#endif
77 [=](QProcess::ProcessError) {
78 emit error(GENERAL_ERROR, process_.errorString());
79 });
69}80}
7081
7182
7283
=== renamed file 'libertine/ContainerManager.h' => 'common/ContainerManager.h'
=== renamed file 'libertine/LibertineConfig.cpp' => 'common/LibertineConfig.cpp'
--- libertine/LibertineConfig.cpp 2016-04-06 19:14:10 +0000
+++ common/LibertineConfig.cpp 2016-10-11 17:13:48 +0000
@@ -16,38 +16,13 @@
16 * You should have received a copy of the GNU General Public License16 * You should have received a copy of the GNU General Public License
17 * along with this program. If not, see <http://www.gnu.org/licenses/>.17 * along with this program. If not, see <http://www.gnu.org/licenses/>.
18 */18 */
19#include "libertine/LibertineConfig.h"19#include "common/LibertineConfig.h"
2020
21#include "libertine/libertine.h"
22#include <QtCore/QCommandLineParser>
23#include <QtCore/QDir>21#include <QtCore/QDir>
24#include <QtCore/QFile>22#include <QtCore/QFile>
25#include <QtCore/QStandardPaths>23#include <QtCore/QStandardPaths>
2624
2725
28LibertineConfig::
29LibertineConfig(Libertine const& libertine)
30{
31 QCommandLineParser commandlineParser;
32 commandlineParser.setApplicationDescription("manage sandboxes for running legacy DEB-packaged X11-based applications");
33 commandlineParser.addHelpOption();
34 commandlineParser.addVersionOption();
35 commandlineParser.process(libertine);
36}
37
38
39LibertineConfig::
40LibertineConfig()
41{
42}
43
44
45LibertineConfig::
46~LibertineConfig()
47{
48}
49
50
51QString LibertineConfig::26QString LibertineConfig::
52containers_config_file_name() const27containers_config_file_name() const
53{28{
@@ -67,6 +42,6 @@
67 file.open(QIODevice::WriteOnly);42 file.open(QIODevice::WriteOnly);
68 file.close();43 file.close();
69 }44 }
70 45
71 return file_name;46 return file_name;
72}47}
7348
=== renamed file 'libertine/LibertineConfig.h' => 'common/LibertineConfig.h'
--- libertine/LibertineConfig.h 2015-06-22 12:31:13 +0000
+++ common/LibertineConfig.h 2016-10-11 17:13:48 +0000
@@ -3,7 +3,7 @@
3 * @brief Libertine Manager application-wide configuration module3 * @brief Libertine Manager application-wide configuration module
4 */4 */
5/*5/*
6 * Copyright 2015 Canonical Ltd6 * Copyright 2015-2016 Canonical Ltd
7 *7 *
8 * Libertine is free software: you can redistribute it and/or modify it under8 * Libertine 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 the9 * the terms of the GNU General Public License, version 3, as published by the
@@ -22,18 +22,14 @@
22#include <QtCore/QString>22#include <QtCore/QString>
2323
2424
25class Libertine;
26
27
28/**25/**
29 * The runtime configuration of the Libertine tools.26 * The runtime configuration of the Libertine tools.
30 */27 */
31class LibertineConfig28class LibertineConfig
32{29{
33public:30public:
34 LibertineConfig(Libertine const& libertine);31 explicit LibertineConfig() = default;
35 LibertineConfig();32 virtual ~LibertineConfig() = default;
36 ~LibertineConfig();
3733
38 QString34 QString
39 containers_config_file_name() const;35 containers_config_file_name() const;
4036
=== added file 'common/PackageOperationDetails.cpp'
--- common/PackageOperationDetails.cpp 1970-01-01 00:00:00 +0000
+++ common/PackageOperationDetails.cpp 2016-10-11 17:13:48 +0000
@@ -0,0 +1,78 @@
1/*
2 * Copyright 2016 Canonical Ltd
3 *
4 * Libertine 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 * Libertine is distributed in the hope that it will be useful, but WITHOUT ANY
9 * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
10 * A PARTICULAR PURPOSE. See the 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 */
15
16
17#include "PackageOperationDetails.h"
18
19namespace
20{
21static bool has_key(QMap<QString, QMap<QString, QString> > details,
22 QString const& container_id, QString const& package_id)
23{
24 return details.constFind(container_id) != details.constEnd() &&
25 details[container_id].constFind(package_id) != details[container_id].constEnd();
26}
27}
28
29
30PackageOperationDetails::
31PackageOperationDetails(QObject* parent)
32 : QObject(parent)
33{
34}
35
36
37QString PackageOperationDetails::
38details(QString const& container_id, QString const& package_id) const
39{
40 if (has_key(details_, container_id, package_id))
41 {
42 return details_[container_id][package_id];
43 }
44 return "";
45}
46
47
48void PackageOperationDetails::
49clear(QString const& container_id, QString const& package_id)
50{
51 if (has_key(details_, container_id, package_id))
52 {
53 details_[container_id].remove(package_id);
54 if (details_[container_id].empty())
55 {
56 details_.remove(container_id);
57 }
58 }
59}
60
61
62void PackageOperationDetails::
63update(QString const& container_id, QString const& package_id, QString const& new_details)
64{
65 if (has_key(details_, container_id, package_id))
66 {
67 details_[container_id][package_id] += new_details;
68 }
69 else
70 {
71 if (details_.constFind(container_id) == details_.constEnd())
72 {
73 details_[container_id] = QMap<QString, QString>{{package_id, new_details}};
74 }
75 }
76
77 emit updated(container_id, package_id, new_details);
78}
079
=== added file 'common/PackageOperationDetails.h'
--- common/PackageOperationDetails.h 1970-01-01 00:00:00 +0000
+++ common/PackageOperationDetails.h 2016-10-11 17:13:48 +0000
@@ -0,0 +1,43 @@
1/*
2 * Copyright 2016 Canonical Ltd
3 *
4 * Libertine 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 * Libertine is distributed in the hope that it will be useful, but WITHOUT ANY
9 * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
10 * A PARTICULAR PURPOSE. See the 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 */
15
16#pragma once
17
18#include <QObject>
19#include <QMap>
20
21
22class PackageOperationDetails : public QObject
23{
24 Q_OBJECT
25
26public:
27 explicit PackageOperationDetails(QObject* parent = nullptr);
28 virtual ~PackageOperationDetails() = default;
29
30 Q_INVOKABLE QString details(QString const& container_id, QString const& package_id) const;
31 Q_INVOKABLE void clear(QString const& container_id, QString const& package_id);
32
33public slots:
34 void update(QString const& container_id, QString const& package_id, QString const& new_details);
35
36signals:
37 void updated(QString const& container_id, QString const& package_id, QString const& new_details);
38 void send(QString const& input);
39 void error(QString const& short_description, QString const& details);
40
41private:
42 QMap<QString, QMap<QString, QString> > details_;
43};
044
=== modified file 'data/CMakeLists.txt'
--- data/CMakeLists.txt 2016-09-06 12:36:47 +0000
+++ data/CMakeLists.txt 2016-10-11 17:13:48 +0000
@@ -1,6 +1,6 @@
1set(CMAKE_INSTALL_SYSCONFDIR "/etc")1set(CMAKE_INSTALL_SYSCONFDIR "/etc")
22
3install(FILES libertine.desktop3install(FILES libertine-manager-app.desktop
4 DESTINATION ${CMAKE_INSTALL_DATADIR}/applications)4 DESTINATION ${CMAKE_INSTALL_DATADIR}/applications)
5install(FILES libertine_64.png libertine-lxc.conf5install(FILES libertine_64.png libertine-lxc.conf
6 DESTINATION ${CMAKE_INSTALL_DATADIR}/${CMAKE_PROJECT_NAME})6 DESTINATION ${CMAKE_INSTALL_DATADIR}/${CMAKE_PROJECT_NAME})
77
=== renamed file 'data/libertine.desktop' => 'data/libertine-manager-app.desktop'
--- data/libertine.desktop 2016-02-20 22:23:41 +0000
+++ data/libertine-manager-app.desktop 2016-10-11 17:13:48 +0000
@@ -1,8 +1,8 @@
1[Desktop Entry]1[Desktop Entry]
2Version=1.02Version=1.0
3Name=Libertine3Name=Libertine Manager
4Comment=Legacy Application Sandbox4Comment=Legacy Application Sandbox
5Exec=libertine5Exec=libertine-manager-app
6Terminal=false6Terminal=false
7Type=Application7Type=Application
8Icon=/usr/share/libertine/libertine_64.png8Icon=/usr/share/libertine/libertine_64.png
99
=== modified file 'debian/control'
--- debian/control 2016-09-12 17:59:56 +0000
+++ debian/control 2016-10-11 17:13:48 +0000
@@ -13,9 +13,12 @@
13 libgirepository1.0-dev,13 libgirepository1.0-dev,
14 libglib2.0-dev,14 libglib2.0-dev,
15 libgtest-dev,15 libgtest-dev,
16 libsystemsettings-dev,
16 libx11-dev,17 libx11-dev,
17 lsb-release,18 lsb-release,
19 pkg-config,
18 python3-apt,20 python3-apt,
21 python3-dbus,
19 python3-dev,22 python3-dev,
20 python3-distro-info,23 python3-distro-info,
21 python3-gi,24 python3-gi,
@@ -23,23 +26,61 @@
23 python3-psutil,26 python3-psutil,
24 python3-testtools,27 python3-testtools,
25 python3-xdg,28 python3-xdg,
26 python3-dbus,
27 qtdeclarative5-dev29 qtdeclarative5-dev
28Standards-Version: 3.9.630Standards-Version: 3.9.8
29Homepage: https://launchpad.net/libertine31Homepage: https://launchpad.net/libertine
3032
31Package: libertine33Package: libertine-manager-app
32Architecture: any34Architecture: any
33Depends: libertine-tools,35Replaces: libertine (<< 1.4.2-1~)
36Breaks: libertine (<< 1.4.2-1~)
37Depends: libertine-qt-common,
38 libertine-tools,
34 python3-libertine-lxc,39 python3-libertine-lxc,
35 qml-module-qtquick2,40 qml-module-qtquick2,
36 qtdeclarative5-ubuntu-ui-toolkit-plugin,41 qtdeclarative5-ubuntu-ui-toolkit-plugin,
37 ${misc:Depends},42 ${misc:Depends},
38 ${shlibs:Depends}43 ${shlibs:Depends}
39Description: sandbox for running deb-packaged X11 apps on Ubuntu Personal44Description: sandbox for running deb-packaged X11 apps on Ubuntu Personal
40 Provides a container and releated tools to be able to create, maintain, and45 Provides a container and related tools to be able to create, maintain, and
41 integrate legacy deb-packaged applications generally based around the X1146 integrate legacy deb-packaged applications generally based around the X11
42 display manager on a Ubuntu "Snappy Personal" system.47 display manager on an Ubuntu "Snappy Personal" system.
48
49Package: libertine
50Depends: libertine-manager-app,
51 ${misc:Depends}
52Architecture: all
53Priority: extra
54Section: oldlibs
55Description: transitional dummy package for libertine-manager-app
56 This is a transitional package to rename libertine as libertine-manager-app.
57 It can safely be removed.
58
59Package: ubuntu-system-settings-libertine
60Architecture: any
61Depends: libertine-qt-common,
62 libertine-tools,
63 python3-libertine-lxc,
64 qml-module-qtquick2,
65 qtdeclarative5-ubuntu-ui-toolkit-plugin,
66 ${misc:Depends},
67 ${shlibs:Depends}
68Enhances: ubuntu-system-settings
69Description: system settings plugin for managing container-based applications
70 System Settings graphical interface to assist in the maintenance of legacy
71 deb-packaged applications generally based around the X11 display manager on
72 an Ubuntu "Snappy Personal" system.
73
74Package: libertine-qt-common
75Architecture: any
76Depends: qml-module-qtquick2,
77 qtdeclarative5-ubuntu-ui-toolkit-plugin,
78 ${misc:Depends},
79 ${shlibs:Depends}
80Description: common files for qt-based libertine applications
81 Common QML source files and translations for managing libertine containers
82 and packages used in the standalone libertine application and system settings
83 plugin.
4384
44Package: libertine-tools85Package: libertine-tools
45Architecture: any86Architecture: any
4687
=== renamed file 'debian/libertine.install' => 'debian/libertine-manager-app.install'
--- debian/libertine.install 2016-05-02 20:45:21 +0000
+++ debian/libertine-manager-app.install 2016-10-11 17:13:48 +0000
@@ -1,5 +1,4 @@
1usr/bin/libertine1usr/bin/libertine-manager-app
2usr/share/applications/libertine.desktop2usr/share/applications/libertine-manager-app.desktop
3usr/share/libertine/libertine_64.png3usr/share/libertine/libertine_64.png
4usr/share/libertine/qml/*4usr/share/libertine/qml/gui/*
5usr/share/locale/*/LC_MESSAGES
65
=== added file 'debian/libertine-qt-common.install'
--- debian/libertine-qt-common.install 1970-01-01 00:00:00 +0000
+++ debian/libertine-qt-common.install 2016-10-11 17:13:48 +0000
@@ -0,0 +1,2 @@
1usr/share/libertine/qml/common/*
2usr/share/locale/*/LC_MESSAGES
03
=== modified file 'debian/libertine-tools.install'
--- debian/libertine-tools.install 2016-09-06 12:36:47 +0000
+++ debian/libertine-tools.install 2016-10-11 17:13:48 +0000
@@ -1,5 +1,5 @@
1usr/bin/libertine-container-manager
1usr/bin/libertine-launch2usr/bin/libertine-launch
2usr/bin/libertine-container-manager
3usr/bin/libertine-xmir3usr/bin/libertine-xmir
4usr/bin/pasted4usr/bin/pasted
5usr/share/bash-completion/completions/libertine-container-manager5usr/share/bash-completion/completions/libertine-container-manager
66
=== modified file 'debian/python3-libertine-chroot.install'
--- debian/python3-libertine-chroot.install 2016-09-06 12:36:47 +0000
+++ debian/python3-libertine-chroot.install 2016-10-11 17:13:48 +0000
@@ -1,2 +1,2 @@
1usr/lib/*/libertine/update-puritine-containers
1usr/lib/python*/*/libertine/ChrootContainer.py2usr/lib/python*/*/libertine/ChrootContainer.py
2usr/lib/*/libertine/update-puritine-containers
33
=== modified file 'debian/python3-libertine-lxc.install'
--- debian/python3-libertine-lxc.install 2016-08-19 13:33:27 +0000
+++ debian/python3-libertine-lxc.install 2016-10-11 17:13:48 +0000
@@ -1,6 +1,6 @@
1etc/sudoers.d/libertine-lxc-sudo
2usr/bin/libertine-lxc-manager
3usr/bin/libertine-lxc-setup
1usr/lib/python*/*/libertine/LxcContainer.py4usr/lib/python*/*/libertine/LxcContainer.py
2usr/bin/libertine-lxc-manager
3usr/share/dbus-1/services/com.canonical.libertine.LxcManager.service5usr/share/dbus-1/services/com.canonical.libertine.LxcManager.service
4usr/share/libertine/libertine-lxc.conf6usr/share/libertine/libertine-lxc.conf
5etc/sudoers.d/libertine-lxc-sudo
6usr/bin/libertine-lxc-setup
77
=== modified file 'debian/python3-libertine.install'
--- debian/python3-libertine.install 2016-06-28 14:30:01 +0000
+++ debian/python3-libertine.install 2016-10-11 17:13:48 +0000
@@ -1,6 +1,6 @@
1usr/lib/python*/*/libertine/AppDiscovery.py1usr/lib/python*/*/libertine/AppDiscovery.py
2usr/lib/python*/*/libertine/Libertine.py
3usr/lib/python*/*/libertine/ContainersConfig.py2usr/lib/python*/*/libertine/ContainersConfig.py
4usr/lib/python*/*/libertine/HostInfo.py3usr/lib/python*/*/libertine/HostInfo.py
4usr/lib/python*/*/libertine/Libertine.py
5usr/lib/python*/*/libertine/__init__.py
5usr/lib/python*/*/libertine/utils.py6usr/lib/python*/*/libertine/utils.py
6usr/lib/python*/*/libertine/__init__.py
77
=== added file 'debian/ubuntu-system-settings-libertine.install'
--- debian/ubuntu-system-settings-libertine.install 1970-01-01 00:00:00 +0000
+++ debian/ubuntu-system-settings-libertine.install 2016-10-11 17:13:48 +0000
@@ -0,0 +1,4 @@
1usr/lib/*/ubuntu-system-settings/liblibertine-plugin.so*
2usr/share/libertine/qml/plugin/*
3usr/share/ubuntu/settings/system/icons/libertine-plugin.png
4usr/share/ubuntu/settings/system/libertine.settings
05
=== modified file 'libertine/CMakeLists.txt'
--- libertine/CMakeLists.txt 2015-10-07 18:59:50 +0000
+++ libertine/CMakeLists.txt 2016-10-11 17:13:48 +0000
@@ -1,14 +1,19 @@
1configure_file(config.h.in config.h)1configure_file(config.h.in config.h)
22
3file(GLOB_RECURSE QML_SRC *.qml *.js *.json)3file(GLOB_RECURSE QML_SRC
4 ${CMAKE_SOURCE_DIR}/qml/common/*.qml
5 ${CMAKE_SOURCE_DIR}/qml/gui/*.qml
6)
4set(libertine_SRC7set(libertine_SRC
5 libertine.cpp8 libertine.cpp
6 main.cpp9 main.cpp
7 ${QML_SRC}10
11 ${QML_SRC} # so the QML files show up in Qt Creator
8)12)
913
10add_executable(libertine ${libertine_SRC})14add_executable(${LIBERTINE_EXE_NAME} ${libertine_SRC})
11target_link_libraries(libertine libertine-common Qt5::Core Qt5::Quick Qt5::Gui)15target_link_libraries(${LIBERTINE_EXE_NAME} ${LIBERTINE_COMMON} ${LIBERTINE_CORE} Qt5::Core Qt5::Quick Qt5::Gui)
1216
13install(DIRECTORY qml DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/${CMAKE_PROJECT_NAME})17install(DIRECTORY qml DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/${CMAKE_PROJECT_NAME})
14install(TARGETS libertine RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})18
19install(TARGETS ${LIBERTINE_EXE_NAME} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
1520
=== modified file 'libertine/config.h.in'
--- libertine/config.h.in 2015-06-02 02:33:28 +0000
+++ libertine/config.h.in 2016-10-11 17:13:48 +0000
@@ -19,6 +19,6 @@
19 * along with this program. If not, see <http://www.gnu.org/licenses/>.19 * along with this program. If not, see <http://www.gnu.org/licenses/>.
20 */20 */
2121
22#define LIBERTINE_APPLICATION_NAME "@PROJECT_NAME@"22#define LIBERTINE_APPLICATION_NAME "@LIBERTINE_EXE_NAME@"
23#define LIBERTINE_VERSION "@PROJECT_VERSION@"23#define LIBERTINE_VERSION "@PROJECT_VERSION@"
2424
2525
=== modified file 'libertine/libertine.cpp'
--- libertine/libertine.cpp 2016-10-03 15:54:26 +0000
+++ libertine/libertine.cpp 2016-10-11 17:13:48 +0000
@@ -3,7 +3,7 @@
3 * @brief Libertine app wrapper3 * @brief Libertine app wrapper
4 */4 */
5/*5/*
6 * Copyright 2015 Canonical Ltd6 * Copyright 2015-2016 Canonical Ltd
7 *7 *
8 * Libertine is free software: you can redistribute it and/or modify it under8 * Libertine 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 the9 * the terms of the GNU General Public License, version 3, as published by the
@@ -16,16 +16,18 @@
16 * You should have received a copy of the GNU General Public License16 * You should have received a copy of the GNU General Public License
17 * along with this program. If not, see <http://www.gnu.org/licenses/>.17 * along with this program. If not, see <http://www.gnu.org/licenses/>.
18 */18 */
19#include "libertine/libertine.h"
20
21#include "common/ContainerManager.h"
22#include "common/ContainerAppsList.h"
23#include "common/ContainerArchivesList.h"
24#include "common/ContainerConfig.h"
25#include "common/ContainerConfigList.h"
26#include "common/LibertineConfig.h"
27#include "common/PackageOperationDetails.h"
19#include "libertine/config.h"28#include "libertine/config.h"
20
21#include <cstdlib>29#include <cstdlib>
22#include "libertine/ContainerManager.h"30#include <QtCore/QCommandLineParser>
23#include "libertine/ContainerAppsList.h"
24#include "libertine/ContainerArchivesList.h"
25#include "libertine/ContainerConfig.h"
26#include "libertine/ContainerConfigList.h"
27#include "libertine/libertine.h"
28#include "libertine/LibertineConfig.h"
29#include <QtCore/QDebug>31#include <QtCore/QDebug>
30#include <QtCore/QDir>32#include <QtCore/QDir>
31#include <QtCore/QFile>33#include <QtCore/QFile>
@@ -38,7 +40,7 @@
3840
39namespace41namespace
40{42{
41static QString const s_main_QML_source_file = "qml/libertine.qml";43static QString const s_main_QML_source_file = "qml/gui/libertine.qml";
4244
43/**45/**
44 * Searches for the main QML source file.46 * Searches for the main QML source file.
@@ -55,7 +57,7 @@
55find_main_qml_source_file()57find_main_qml_source_file()
56{58{
57 static const QStringList sub_paths = { "", "libertine/" };59 static const QStringList sub_paths = { "", "libertine/" };
58 QStringList paths = QStandardPaths::standardLocations(QStandardPaths::DataLocation);60 auto paths = QStandardPaths::standardLocations(QStandardPaths::GenericDataLocation);
59 paths.prepend(QDir::currentPath());61 paths.prepend(QDir::currentPath());
60 paths.prepend(QCoreApplication::applicationDirPath());62 paths.prepend(QCoreApplication::applicationDirPath());
61 for (auto const& path: paths)63 for (auto const& path: paths)
@@ -88,11 +90,20 @@
88: QGuiApplication(argc, argv)90: QGuiApplication(argc, argv)
89, main_qml_source_file_(find_main_qml_source_file())91, main_qml_source_file_(find_main_qml_source_file())
90{92{
93 qmlRegisterType<ContainerConfig>("Libertine", 1, 0, "ContainerConfig");
94 qmlRegisterType<ContainerManagerWorker>("Libertine", 1, 0, "ContainerManagerWorker");
95 qmlRegisterType<PackageOperationDetails>("Libertine", 1, 0, "PackageOperationDetails");
96
91 setApplicationName(LIBERTINE_APPLICATION_NAME);97 setApplicationName(LIBERTINE_APPLICATION_NAME);
92 setApplicationVersion(LIBERTINE_VERSION);98 setApplicationVersion(LIBERTINE_VERSION);
93 config_.reset(new LibertineConfig(*this));99
94 qmlRegisterType<ContainerConfig>("Libertine", 1, 0, "ContainerConfig");100 QCommandLineParser commandlineParser;
95 qmlRegisterType<ContainerManagerWorker>("Libertine", 1, 0, "ContainerManagerWorker");101 commandlineParser.setApplicationDescription("manage sandboxes for running legacy DEB-packaged X11-based applications");
102 commandlineParser.addHelpOption();
103 commandlineParser.addVersionOption();
104 commandlineParser.process(*this);
105
106 config_.reset(new LibertineConfig());
96107
97 watcher_.addPath(config_.data()->containers_config_file_name());108 watcher_.addPath(config_.data()->containers_config_file_name());
98 connect(&watcher_, SIGNAL(fileChanged(QString)), SLOT(reload_config(QString)));109 connect(&watcher_, SIGNAL(fileChanged(QString)), SLOT(reload_config(QString)));
@@ -105,6 +116,7 @@
105 containers_ = new ContainerConfigList(config_.data(), this);116 containers_ = new ContainerConfigList(config_.data(), this);
106 container_apps_ = new ContainerAppsList(containers_, this);117 container_apps_ = new ContainerAppsList(containers_, this);
107 container_archives_ = new ContainerArchivesList(containers_, this);118 container_archives_ = new ContainerArchivesList(containers_, this);
119 package_operation_details_ = new PackageOperationDetails(this);
108120
109 initialize_view();121 initialize_view();
110 view_.show();122 view_.show();
@@ -131,6 +143,7 @@
131 ctxt->setContextProperty("containerConfigList", containers_);143 ctxt->setContextProperty("containerConfigList", containers_);
132 ctxt->setContextProperty("containerAppsList", container_apps_);144 ctxt->setContextProperty("containerAppsList", container_apps_);
133 ctxt->setContextProperty("containerArchivesList", container_archives_);145 ctxt->setContextProperty("containerArchivesList", container_archives_);
146 ctxt->setContextProperty("packageOperationDetails", package_operation_details_);
134147
135 view_.setSource(QUrl::fromLocalFile(main_qml_source_file_));148 view_.setSource(QUrl::fromLocalFile(main_qml_source_file_));
136 connect(view_.engine(), SIGNAL(quit()), SLOT(quit()));149 connect(view_.engine(), SIGNAL(quit()), SLOT(quit()));
137150
=== modified file 'libertine/libertine.h'
--- libertine/libertine.h 2016-10-03 15:48:22 +0000
+++ libertine/libertine.h 2016-10-11 17:13:48 +0000
@@ -30,6 +30,7 @@
30class LibertineConfig;30class LibertineConfig;
31class ContainerAppsList;31class ContainerAppsList;
32class ContainerArchivesList;32class ContainerArchivesList;
33class PackageOperationDetails;
3334
3435
35class Libertine36class Libertine
@@ -56,6 +57,7 @@
56 ContainerConfigList* containers_;57 ContainerConfigList* containers_;
57 ContainerAppsList* container_apps_;58 ContainerAppsList* container_apps_;
58 ContainerArchivesList* container_archives_;59 ContainerArchivesList* container_archives_;
60 PackageOperationDetails* package_operation_details_;
59 QQuickView view_;61 QQuickView view_;
60};62};
6163
6264
=== modified file 'liblibertine/CMakeLists.txt'
--- liblibertine/CMakeLists.txt 2016-09-06 12:36:47 +0000
+++ liblibertine/CMakeLists.txt 2016-10-11 17:13:48 +0000
@@ -1,32 +1,31 @@
1set(API_VERSION 1)1set(API_VERSION 1)
2set(ABI_VERSION 1)2set(ABI_VERSION 1)
33
4set(libertine_src ${CMAKE_SOURCE_DIR}/libertine)4set(COMMON_DIR ${CMAKE_SOURCE_DIR}/common)
55
6add_library(6add_library(
7 libertine-common SHARED7 ${LIBERTINE_CORE} SHARED
8 libertine.cpp8 libertine.cpp
9 ${libertine_src}/ContainerConfigList.cpp9
10 ${libertine_src}/LibertineConfig.cpp10 ${COMMON_DIR}/ContainerConfig.cpp
11 ${libertine_src}/ContainerConfig.cpp11 ${COMMON_DIR}/ContainerConfigList.cpp
12 ${libertine_src}/ContainerManager.cpp12 ${COMMON_DIR}/LibertineConfig.cpp
13 ${libertine_src}/ContainerAppsList.cpp
14 ${libertine_src}/ContainerArchivesList.cpp
15)13)
16set_target_properties(libertine-common PROPERTIES14
15set_target_properties(${LIBERTINE_CORE} PROPERTIES
17 VERSION ${ABI_VERSION}.0.016 VERSION ${ABI_VERSION}.0.0
18 SOVERSION ${ABI_VERSION}17 SOVERSION ${ABI_VERSION}
19 OUTPUT_NAME "libertine"18 OUTPUT_NAME "libertine"
20)19)
21target_link_libraries(libertine-common20
21target_link_libraries(${LIBERTINE_CORE}
22 ${GLIB2_LIBRARIES}22 ${GLIB2_LIBRARIES}
23 ${PYTHON3_LIBRARIES}23 ${PYTHON3_LIBRARIES}
24 Qt5::Core24 Qt5::Core
25)25)
2626
27set(liblibertine_headers_path "${CMAKE_INSTALL_FULL_INCLUDEDIR}/liblibertine")27install(FILES libertine.h DESTINATION "${CMAKE_INSTALL_FULL_INCLUDEDIR}/liblibertine")
28install(FILES libertine.h DESTINATION ${liblibertine_headers_path})28install(TARGETS ${LIBERTINE_CORE} LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR})
29install(TARGETS libertine-common LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR})
3029
31configure_file(libertine.pc.in ${CMAKE_BINARY_DIR}/libertine.pc @ONLY)30configure_file(libertine.pc.in ${CMAKE_BINARY_DIR}/libertine.pc @ONLY)
32install(FILES ${CMAKE_BINARY_DIR}/libertine.pc31install(FILES ${CMAKE_BINARY_DIR}/libertine.pc
3332
=== modified file 'liblibertine/libertine.cpp'
--- liblibertine/libertine.cpp 2016-09-06 12:36:47 +0000
+++ liblibertine/libertine.cpp 2016-10-11 17:13:48 +0000
@@ -18,8 +18,9 @@
18 * along with this program. If not, see <http://www.gnu.org/licenses/>.18 * along with this program. If not, see <http://www.gnu.org/licenses/>.
19 */19 */
20#include "liblibertine/libertine.h"20#include "liblibertine/libertine.h"
21#include "libertine/ContainerConfigList.h"21
22#include "libertine/LibertineConfig.h"22#include "common/ContainerConfigList.h"
23#include "common/LibertineConfig.h"
2324
2425
25namespace26namespace
2627
=== added directory 'qml'
=== added file 'qml/CMakeLists.txt'
--- qml/CMakeLists.txt 1970-01-01 00:00:00 +0000
+++ qml/CMakeLists.txt 2016-10-11 17:13:48 +0000
@@ -0,0 +1,3 @@
1install(DIRECTORY common DESTINATION ${LIBERTINE_QML_PATH})
2install(DIRECTORY gui DESTINATION ${LIBERTINE_QML_PATH})
3install(DIRECTORY plugin DESTINATION ${LIBERTINE_QML_PATH})
04
=== added directory 'qml/common'
=== renamed file 'libertine/qml/AddExtraArchiveView.qml' => 'qml/common/AddExtraArchiveView.qml'
--- libertine/qml/AddExtraArchiveView.qml 2016-07-13 19:48:48 +0000
+++ qml/common/AddExtraArchiveView.qml 2016-10-11 17:13:48 +0000
@@ -28,6 +28,8 @@
28 }28 }
29 property string currentContainer: ""29 property string currentContainer: ""
3030
31 signal error(string short_description, string details)
32
31 Column {33 Column {
32 spacing: units.gu(2)34 spacing: units.gu(2)
3335
@@ -96,9 +98,9 @@
96 }98 }
9799
98 function addArchive() {100 function addArchive() {
99 var worker = Qt.createComponent("ContainerManager.qml").createObject(mainView)101 var worker = Qt.createComponent("ContainerManager.qml").createObject(parent)
100 worker.finishedConfigure.connect(finishedConfigure)102 worker.finishedConfigure.connect(finishedConfigure)
101 worker.error.connect(mainView.error)103 worker.error.connect(addExtraArchiveView.error)
102 worker.addArchive(currentContainer, containerConfigList.getContainerName(currentContainer),104 worker.addArchive(currentContainer, containerConfigList.getContainerName(currentContainer),
103 extraArchiveString.text, publicSigningKey.text.trim())105 extraArchiveString.text, publicSigningKey.text.trim())
104106
105107
=== renamed file 'libertine/qml/HomeView.qml' => 'qml/common/ContainerEditView.qml'
--- libertine/qml/HomeView.qml 2016-07-06 14:17:46 +0000
+++ qml/common/ContainerEditView.qml 2016-10-11 17:13:48 +0000
@@ -26,7 +26,7 @@
26 id: homeView26 id: homeView
27 header: PageHeader {27 header: PageHeader {
28 id: pageHeader28 id: pageHeader
29 title: i18n.tr("Classic Apps - %1").arg(containerConfigList.getContainerName(currentContainer))29 title: i18n.tr("%1 - All Apps").arg(containerConfigList.getContainerName(currentContainer))
30 trailingActionBar.actions: [30 trailingActionBar.actions: [
31 Action {31 Action {
32 id: settingsButton32 id: settingsButton
@@ -153,7 +153,7 @@
153 width: parent.width153 width: parent.width
154 onClicked: {154 onClicked: {
155 PopupUtils.close(addAppsDialog)155 PopupUtils.close(addAppsDialog)
156 PopupUtils.open(Qt.resolvedUrl("SearchPackagesDialog.qml"))156 PopupUtils.open(Qt.resolvedUrl("SearchPackagesDialog.qml"), {currentContainer: currentContainer})
157 }157 }
158 }158 }
159 }159 }
@@ -249,12 +249,11 @@
249 }249 }
250250
251 function operationSetup() {251 function operationSetup() {
252 var comp = Qt.createComponent("ContainerManager.qml")252 var worker = Qt.createComponent("ContainerManager.qml").createObject(parent)
253 var worker = comp.createObject(mainView)253 worker.error.connect(packageOperationDetails.error)
254 worker.error.connect(mainView.error)254 worker.updateOperationDetails.connect(packageOperationDetails.update)
255 worker.updateOperationDetails.connect(mainView.updateOperationDetails)255 packageOperationDetails.send.connect(worker.packageOperationInteraction)
256 mainView.packageOperationInteraction.connect(worker.packageOperationInteraction)256 worker.operationFinished.connect(packageOperationDetails.clear)
257 worker.operationFinished.connect(mainView.resetOperationDetails)
258 return worker257 return worker
259 }258 }
260259
261260
=== renamed file 'libertine/qml/ContainerInfoView.qml' => 'qml/common/ContainerInfoView.qml'
--- libertine/qml/ContainerInfoView.qml 2016-06-09 18:20:19 +0000
+++ qml/common/ContainerInfoView.qml 2016-10-11 17:13:48 +0000
@@ -27,7 +27,7 @@
27 id: containerInfoView27 id: containerInfoView
28 header: PageHeader {28 header: PageHeader {
29 id: pageHeader29 id: pageHeader
30 title: i18n.tr("Container information for %1").arg(containerConfigList.getContainerName(currentContainer))30 title: i18n.tr("Container Info: %1").arg(containerConfigList.getContainerName(currentContainer))
31 }31 }
3232
33 property string currentContainer: null33 property string currentContainer: null
@@ -114,19 +114,17 @@
114 Component.onCompleted: {114 Component.onCompleted: {
115 containerConfigList.configChanged.connect(reloadStatus)115 containerConfigList.configChanged.connect(reloadStatus)
116116
117 var worker = Qt.createComponent("ContainerManager.qml").createObject(mainView)117 var worker = Qt.createComponent("ContainerManager.qml").createObject(parent)
118 operationDetails = packageOperationDetails.details(currentContainer, "")
119 packageOperationDetails.updated.connect(updateDetails)
118120
119 operationDetails = mainView.getOperationDetails(currentContainer)
120 operationDetailsView.cursorPosition = operationDetailsView.length121 operationDetailsView.cursorPosition = operationDetailsView.length
121 if (operationDetails != "") {122 if (operationDetails !== "") {
122 showDetails = !showDetails123 showDetails = !showDetails
123 }124 }
124
125 mainView.operationDetailsUpdated.connect(updateDetails)
126 }125 }
127126
128 Component.onDestruction: {127 Component.onDestruction: {
129 mainView.operationDetailsUpdated.disconnect(updateDetails)
130 containerConfigList.configChanged.disconnect(reloadStatus)128 containerConfigList.configChanged.disconnect(reloadStatus)
131 }129 }
132130
133131
=== renamed file 'libertine/qml/ContainerManager.qml' => 'qml/common/ContainerManager.qml'
=== renamed file 'libertine/qml/ContainerOptionsDialog.qml' => 'qml/common/ContainerOptionsDialog.qml'
--- libertine/qml/ContainerOptionsDialog.qml 2016-09-02 18:26:25 +0000
+++ qml/common/ContainerOptionsDialog.qml 2016-10-11 17:13:48 +0000
@@ -30,7 +30,7 @@
30 signal onCreateInitialized()30 signal onCreateInitialized()
3131
32 Row {32 Row {
33 visible: containerConfigList.getHostArchitecture() == 'x86_64' ? true : false33 visible: containerConfigList.getHostArchitecture() === 'x86_64' ? true : false
34 spacing: units.gu(1)34 spacing: units.gu(1)
35 CheckBox {35 CheckBox {
36 id: enableMultiarchCheckbox36 id: enableMultiarchCheckbox
@@ -97,11 +97,11 @@
9797
98 function createContainer() {98 function createContainer() {
99 var container_id = containerConfigList.addNewContainer("lxc", containerNameInput.text)99 var container_id = containerConfigList.addNewContainer("lxc", containerNameInput.text)
100 var worker = Qt.createComponent("ContainerManager.qml").createObject(mainView)100 var worker = Qt.createComponent("ContainerManager.qml").createObject(parent)
101101
102 worker.updateOperationDetails.connect(mainView.updateOperationDetails)102 worker.updateOperationDetails.connect(packageOperationDetails.update)
103 worker.operationFinished.connect(mainView.resetOperationDetails)103 worker.operationFinished.connect(packageOperationDetails.clear)
104 worker.error.connect(mainView.error)104 worker.error.connect(packageOperationDetails.error)
105105
106 worker.createContainer(container_id,106 worker.createContainer(container_id,
107 containerConfigList.getContainerName(container_id),107 containerConfigList.getContainerName(container_id),
108108
=== added file 'qml/common/ContainersList.qml'
--- qml/common/ContainersList.qml 1970-01-01 00:00:00 +0000
+++ qml/common/ContainersList.qml 2016-10-11 17:13:48 +0000
@@ -0,0 +1,131 @@
1/**
2 * @file ContainersListView.qml
3 * @brief Libertine containers view
4 */
5/*
6 * Copyright 2016 Canonical Ltd
7 *
8 * Libertine 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 * Libertine is distributed in the hope that it will be useful, but WITHOUT ANY
13 * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
14 * A PARTICULAR PURPOSE. See the GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program. If not, see <http://www.gnu.org/licenses/>.
18 */
19import Libertine 1.0
20import QtQuick 2.4
21import Ubuntu.Components 1.3
22import Ubuntu.Components.Popups 1.3
23
24
25/**
26 * Component providing a list of available containers and their (possibly animated)
27 * states.
28 */
29Item {
30 property string currentContainer
31
32 UbuntuListView {
33 id: containersList
34 anchors {
35 fill: parent
36 }
37 model: containerConfigList
38
39 function edit(id, status) {
40 if (status === "removing") {
41 packageOperationDetails.error(i18n.tr("Container Unavailable"), i18n.tr("Container is being destroyed and is no longer editable."))
42 return
43 }
44 currentContainer = id
45 containerAppsList.setContainerApps(currentContainer)
46 pageStack.push(Qt.resolvedUrl("../common/ContainerEditView.qml"), {currentContainer: currentContainer})
47 }
48
49 delegate: ListItem {
50 Label {
51 text: name
52 anchors {
53 verticalCenter: parent.verticalCenter
54 left: parent.left
55 leftMargin: units.gu(2)
56 }
57 }
58 ActivityIndicator {
59 id: containerActivity
60 anchors {
61 verticalCenter: parent.verticalCenter
62 right: parent.right
63 rightMargin: units.gu(2)
64 }
65 visible: installStatus === i18n.tr("installing") ||
66 installStatus === i18n.tr("removing")
67 running: containerActivity.visible
68 }
69
70 onClicked: { containersList.edit(containerId, installStatus) }
71
72 leadingActions: ListItemActions {
73 actions: [
74 Action {
75 iconName: "delete"
76 text: i18n.tr("delete")
77 description: i18n.tr("Delete Container")
78 onTriggered: {
79 var worker = Qt.createComponent("../common/ContainerManager.qml").createObject(parent)
80 worker.error.connect(packageOperationDetails.error)
81 worker.destroyContainer(containerId)
82 }
83 }
84 ]
85 }
86
87 trailingActions: ListItemActions {
88 actions: [
89 Action {
90 iconName: "info"
91 text: i18n.tr("info")
92 description: i18n.tr("Container Info")
93 onTriggered: {
94 currentContainer = containerId
95 pageStack.push(Qt.resolvedUrl("../common/ContainerInfoView.qml"), {currentContainer: containerId})
96 }
97 },
98 Action {
99 iconName: "edit"
100 text: i18n.tr("edit")
101 description: i18n.tr("Container Apps")
102 visible: installStatus === i18n.tr("ready") ||
103 installStatus === i18n.tr("updating")
104 onTriggered: {
105 containersList.edit(containerId, installStatus)
106 }
107 }
108 ]
109 }
110 }
111 }
112
113 Component.onCompleted: {
114 containerConfigList.configChanged.connect(updateContainerList)
115 }
116
117 Component.onDestruction: {
118 containerConfigList.configChanged.disconnect(updateContainerList)
119 }
120
121 function updateContainerList() {
122 containerConfigList.reloadContainerList()
123
124 if (currentContainer && !containerConfigList.getContainerStatus(currentContainer) && pageStack.currentPage !== containersView) {
125 pageStack.pop()
126 currentContainer = ""
127 packageOperationDetails.error(i18n.tr("Container Unavailable"),
128 i18n.tr("This container has been destroyed and is no longer valid. You have been returned to the containers overview."))
129 }
130 }
131}
0132
=== renamed file 'libertine/qml/DebianPackagePicker.qml' => 'qml/common/DebianPackagePicker.qml'
=== renamed file 'libertine/qml/ExtraArchivesView.qml' => 'qml/common/ExtraArchivesView.qml'
--- libertine/qml/ExtraArchivesView.qml 2016-09-29 15:40:02 +0000
+++ qml/common/ExtraArchivesView.qml 2016-10-11 17:13:48 +0000
@@ -96,7 +96,7 @@
96 function deleteArchive(archive) {96 function deleteArchive(archive) {
97 var worker = Qt.createComponent("ContainerManager.qml").createObject(mainView)97 var worker = Qt.createComponent("ContainerManager.qml").createObject(mainView)
98 worker.finishedConfigure.connect(finishedConfigure)98 worker.finishedConfigure.connect(finishedConfigure)
99 worker.error.connect(mainView.error)99 worker.error.connect(packageOperationDetails.error)
100 worker.configureContainer(currentContainer, containerConfigList.getContainerName(currentContainer), ["--archive", "remove", "--archive-name", "\"" + archive + "\""])100 worker.configureContainer(currentContainer, containerConfigList.getContainerName(currentContainer), ["--archive", "remove", "--archive-name", "\"" + archive + "\""])
101 }101 }
102102
103103
=== renamed file 'libertine/qml/GenericErrorDialog.qml' => 'qml/common/GenericErrorDialog.qml'
=== renamed file 'libertine/qml/ManageContainer.qml' => 'qml/common/ManageContainer.qml'
--- libertine/qml/ManageContainer.qml 2016-07-11 14:35:11 +0000
+++ qml/common/ManageContainer.qml 2016-10-11 17:13:48 +0000
@@ -46,14 +46,14 @@
46 anchors.right: parent.right46 anchors.right: parent.right
4747
48 ListItem.Standard {48 ListItem.Standard {
49 visible: containerConfigList.getHostArchitecture() == 'x86_64' ? true : false49 visible: containerConfigList.getHostArchitecture() === 'x86_64' ? true : false
50 control: CheckBox {50 control: CheckBox {
51 checked: isMultiarchEnabled51 checked: isMultiarchEnabled
52 onClicked: {52 onClicked: {
53 var worker = Qt.createComponent("ContainerManager.qml").createObject(mainView)53 var worker = Qt.createComponent("ContainerManager.qml").createObject(parent)
5454
55 worker.updateOperationDetails.connect(mainView.updateOperationDetails)55 worker.updateOperationDetails.connect(packageOperationDetails.update)
56 worker.operationFinished.connect(mainView.resetOperationDetails)56 worker.operationFinished.connect(packageOperationDetails.clear)
5757
58 if (checked) {58 if (checked) {
59 worker.configureContainer(currentContainer,59 worker.configureContainer(currentContainer,
@@ -105,12 +105,14 @@
105 control: CheckBox {105 control: CheckBox {
106 checked: isDefaultContainer106 checked: isDefaultContainer
107 onClicked: {107 onClicked: {
108 var worker = Qt.createComponent("ContainerManager.qml").createObject(mainView)108 var worker = Qt.createComponent("ContainerManager.qml").createObject(parent)
109 worker.error.connect(mainView.error)109 worker.error.connect(packageOperationDetails.error)
110
110 var fallback = checked111 var fallback = checked
111 worker.error.connect(function() {112 worker.error.connect(function() {
112 checked = fallback113 checked = fallback
113 })114 })
115
114 worker.setDefaultContainer(currentContainer, !checked)116 worker.setDefaultContainer(currentContainer, !checked)
115 }117 }
116 }118 }
@@ -129,11 +131,11 @@
129 }131 }
130132
131 function updateContainer() {133 function updateContainer() {
132 var worker = Qt.createComponent("ContainerManager.qml").createObject(mainView)134 var worker = Qt.createComponent("ContainerManager.qml").createObject(parent)
133 worker.error.connect(mainView.error);135 worker.error.connect(packageOperationDetails.error);
134136
135 worker.updateOperationDetails.connect(mainView.updateOperationDetails)137 worker.updateOperationDetails.connect(packageOperationDetails.update)
136 worker.operationFinished.connect(mainView.resetOperationDetails)138 worker.operationFinished.connect(packageOperationDetails.clear)
137139
138 worker.updateContainer(currentContainer, containerConfigList.getContainerName(currentContainer))140 worker.updateContainer(currentContainer, containerConfigList.getContainerName(currentContainer))
139 }141 }
140142
=== renamed file 'libertine/qml/PackageExistsDialog.qml' => 'qml/common/PackageExistsDialog.qml'
=== renamed file 'libertine/qml/PackageInfoView.qml' => 'qml/common/PackageInfoView.qml'
--- libertine/qml/PackageInfoView.qml 2016-06-10 13:22:16 +0000
+++ qml/common/PackageInfoView.qml 2016-10-11 17:13:48 +0000
@@ -27,19 +27,18 @@
27 id: packageInfoView27 id: packageInfoView
28 header: PageHeader {28 header: PageHeader {
29 id: pageHeader29 id: pageHeader
30 title: i18n.tr("Information for the %1 package").arg(currentPackage)30 title: i18n.tr("%1 - %2").arg(currentContainer).arg(currentPackage)
31 }31 }
32 property string currentContainer: null32 property string currentContainer: null
33 property var currentPackage: null33 property var currentPackage: null
34 property var statusText: containerConfigList.getAppStatus(currentContainer, currentPackage)34 property var statusText: containerConfigList.getAppStatus(currentContainer, currentPackage)
35 property var packageVersionText: i18n.tr("Obtaining package version…")35 property var packageVersionText: i18n.tr("Obtaining package version…")
36 property string packageOperationDetails: ""36 property string currentDetails: ""
37 property var worker: null37 property var worker: null
38 property bool showDetails: false38 property bool showDetails: false
3939
40 signal sendOperationInteraction(string text)40 signal sendOperationInteraction(string text)
4141
42
43 Flickable {42 Flickable {
44 anchors {43 anchors {
45 topMargin: pageHeader.height44 topMargin: pageHeader.height
@@ -77,7 +76,7 @@
77 text: enabled ?76 text: enabled ?
78 showDetails ? i18n.tr('Hide') : i18n.tr('Show')77 showDetails ? i18n.tr('Hide') : i18n.tr('Show')
79 : i18n.tr('None')78 : i18n.tr('None')
80 enabled: packageOperationDetails != ""79 enabled: currentDetails != ""
81 onClicked: {80 onClicked: {
82 showDetails = !showDetails81 showDetails = !showDetails
83 }82 }
@@ -92,7 +91,7 @@
92 anchors.right: parent.right91 anchors.right: parent.right
93 height: Math.max(packageInfoView.height - pageHeader.height - packageListItem.height - showDetailsView.height - statusListItem.height - 35, units.gu(35))92 height: Math.max(packageInfoView.height - pageHeader.height - packageListItem.height - showDetailsView.height - statusListItem.height - 35, units.gu(35))
94 readOnly: true93 readOnly: true
95 text: packageOperationDetails94 text: currentDetails
96 }95 }
9796
98 TextField {97 TextField {
@@ -112,17 +111,17 @@
112 Component.onCompleted: {111 Component.onCompleted: {
113 containerConfigList.configChanged.connect(reloadStatus)112 containerConfigList.configChanged.connect(reloadStatus)
114 var command = "apt-cache policy " + currentPackage113 var command = "apt-cache policy " + currentPackage
115 var worker = Qt.createComponent("ContainerManager.qml").createObject(mainView)114 var worker = Qt.createComponent("ContainerManager.qml").createObject(parent)
116 worker.finishedCommand.connect(getPackageVersion)115 worker.finishedCommand.connect(getPackageVersion)
117116
118 packageOperationDetails = mainView.getOperationDetails(currentContainer, currentPackage)117 currentDetails = packageOperationDetails.details(currentContainer, currentPackage)
119 packageDetailsView.cursorPosition = packageDetailsView.length118 packageDetailsView.cursorPosition = packageDetailsView.length
120 if (packageOperationDetails != "") {119 if (currentDetails != "") {
121 showDetails = !showDetails120 showDetails = !showDetails
122 }121 }
123122
124 mainView.operationDetailsUpdated.connect(updatePackageDetails)123 packageOperationDetails.updated.connect(updatePackageDetails)
125 sendOperationInteraction.connect(mainView.packageOperationInteraction)124 sendOperationInteraction.connect(packageOperationDetails.send)
126125
127 worker.error.connect(onError)126 worker.error.connect(onError)
128 worker.runCommand(currentContainer, containerConfigList.getContainerName(currentContainer), command)127 worker.runCommand(currentContainer, containerConfigList.getContainerName(currentContainer), command)
@@ -130,13 +129,13 @@
130129
131 Component.onDestruction: {130 Component.onDestruction: {
132 containerConfigList.configChanged.disconnect(reloadStatus)131 containerConfigList.configChanged.disconnect(reloadStatus)
133 mainView.operationDetailsUpdated.disconnect(updatePackageDetails)132 packageOperationDetails.updated.disconnect(updatePackageDetails)
134 sendOperationInteraction.disconnect(mainView.packageOperationInteraction)133 sendOperationInteraction.disconnect(packageOperationDetails.send)
135 }134 }
136135
137 function updatePackageDetails(container_id, package_name, details) {136 function updatePackageDetails(container_id, package_name, details) {
138 if (container_id === currentContainer && package_name === currentPackage) {137 if (container_id === currentContainer && package_name === currentPackage) {
139 packageOperationDetails += details138 currentDetails += details
140 packageDetailsView.cursorPosition = packageDetailsView.length139 packageDetailsView.cursorPosition = packageDetailsView.length
141 }140 }
142 }141 }
143142
=== renamed file 'libertine/qml/SearchPackagesDialog.qml' => 'qml/common/SearchPackagesDialog.qml'
--- libertine/qml/SearchPackagesDialog.qml 2016-05-06 21:13:01 +0000
+++ qml/common/SearchPackagesDialog.qml 2016-10-11 17:13:48 +0000
@@ -25,6 +25,7 @@
25 id: searchPackageDialog25 id: searchPackageDialog
26 title: i18n.tr("Search for packages")26 title: i18n.tr("Search for packages")
27 text: i18n.tr("Search archives for packages")27 text: i18n.tr("Search archives for packages")
28 property string currentContainer: null
2829
29 TextField {30 TextField {
30 id: searchPackageInput31 id: searchPackageInput
@@ -42,11 +43,11 @@
42 onClicked: {43 onClicked: {
43 if (searchPackageInput.text != "") {44 if (searchPackageInput.text != "") {
44 PopupUtils.close(searchPackageDialog)45 PopupUtils.close(searchPackageDialog)
45 if (pageStack.currentPage.objectName == "searchResultsView") {46 if (pageStack.currentPage.objectName === "searchResultsView") {
46 pageStack.currentPage.searchForPackages(searchPackageInput.text)47 pageStack.currentPage.searchForPackages(searchPackageInput.text)
47 }48 }
48 else {49 else {
49 pageStack.push(Qt.resolvedUrl("SearchResultsView.qml"), {search_string : searchPackageInput.text})50 pageStack.push(Qt.resolvedUrl("SearchResultsView.qml"), {search_string : searchPackageInput.text, currentContainer: currentContainer})
50 }51 }
51 }52 }
52 }53 }
5354
=== renamed file 'libertine/qml/SearchResults.qml' => 'qml/common/SearchResults.qml'
--- libertine/qml/SearchResults.qml 2016-05-10 19:26:22 +0000
+++ qml/common/SearchResults.qml 2016-10-11 17:13:48 +0000
@@ -28,8 +28,10 @@
28 fill: parent28 fill: parent
29 }29 }
3030
31 property var currentContainer: null
32
31 function install(packageName) {33 function install(packageName) {
32 if (!containerConfigList.isAppInstalled(mainView.currentContainer, packageName)) {34 if (!containerConfigList.isAppInstalled(currentContainer, packageName)) {
33 pageStack.pop()35 pageStack.pop()
34 pageStack.currentPage.installPackage(packageName)36 pageStack.currentPage.installPackage(packageName)
35 }37 }
3638
=== renamed file 'libertine/qml/SearchResultsView.qml' => 'qml/common/SearchResultsView.qml'
--- libertine/qml/SearchResultsView.qml 2016-05-19 17:56:43 +0000
+++ qml/common/SearchResultsView.qml 2016-10-11 17:13:48 +0000
@@ -43,6 +43,8 @@
43 property var search_string: null43 property var search_string: null
44 property var search_comp: null44 property var search_comp: null
45 property var search_obj: null45 property var search_obj: null
46 property var currentContainer: null
47
46 signal doSearch48 signal doSearch
4749
48 Component {50 Component {
@@ -50,7 +52,7 @@
50 Dialog {52 Dialog {
51 id: noResultsDialog53 id: noResultsDialog
52 title: i18n.tr("No Search Results Found")54 title: i18n.tr("No Search Results Found")
53 property var returnHome: false55 property bool returnHome: false
5456
55 Button {57 Button {
56 id: searchAgain58 id: searchAgain
@@ -58,7 +60,7 @@
58 color: UbuntuColors.green60 color: UbuntuColors.green
59 onClicked: {61 onClicked: {
60 PopupUtils.close(noResultsDialog)62 PopupUtils.close(noResultsDialog)
61 PopupUtils.open(Qt.resolvedUrl("SearchPackagesDialog.qml"))63 PopupUtils.open(Qt.resolvedUrl("SearchPackagesDialog.qml"), {currentContainer: currentContainer})
62 }64 }
63 }65 }
6466
@@ -118,11 +120,11 @@
118 }120 }
119 packageListModel.clear()121 packageListModel.clear()
120122
121 var comp = Qt.createComponent("ContainerManager.qml")123 var worker = Qt.createComponent("ContainerManager.qml").createObject(parent)
122 var worker = comp.createObject()
123 worker.finishedSearch.connect(finishedSearch)124 worker.finishedSearch.connect(finishedSearch)
124 worker.error.connect(mainView.error)125 worker.error.connect(packageOperationDetails.error)
125 worker.searchPackageCache(mainView.currentContainer, search_string)126
127 worker.searchPackageCache(currentContainer, search_string)
126 }128 }
127129
128 function finishedSearch(packageList) {130 function finishedSearch(packageList) {
@@ -133,14 +135,14 @@
133 packageListModel.append({"package_desc": packageList[i], "package_name": packageList[i].split(' ')[0]})135 packageListModel.append({"package_desc": packageList[i], "package_name": packageList[i].split(' ')[0]})
134 }136 }
135 if (!search_comp) {137 if (!search_comp) {
136 search_comp = Qt.createComponent("SearchResults.qml")138 search_comp = Qt.createComponent("SearchResults.qml", {currentContainer: currentContainer})
137 }139 }
138 search_obj = search_comp.createObject(searchResultsView, {"model": packageListModel})140 search_obj = search_comp.createObject(parent, {"model": packageListModel})
139 }141 }
140 else {142 else {
141 PopupUtils.open(noResultsPopup)143 PopupUtils.open(noResultsPopup)
142 }144 }
143 }145 }
144146
145 onDoSearch: PopupUtils.open(Qt.resolvedUrl("SearchPackagesDialog.qml"))147 onDoSearch: PopupUtils.open(Qt.resolvedUrl("SearchPackagesDialog.qml"), {currentContainer: currentContainer})
146}148}
147149
=== added directory 'qml/gui'
=== renamed file 'libertine/qml/ContainersView.qml' => 'qml/gui/ContainersView.qml'
--- libertine/qml/ContainersView.qml 2016-08-22 18:20:43 +0000
+++ qml/gui/ContainersView.qml 2016-10-11 17:13:48 +0000
@@ -20,6 +20,7 @@
20import QtQuick 2.420import QtQuick 2.4
21import Ubuntu.Components 1.321import Ubuntu.Components 1.3
22import Ubuntu.Components.Popups 1.322import Ubuntu.Components.Popups 1.3
23import "../common"
2324
2425
25/**26/**
@@ -35,115 +36,19 @@
35 Action {36 Action {
36 iconName: "add"37 iconName: "add"
37 onTriggered: {38 onTriggered: {
38 PopupUtils.open(Qt.resolvedUrl("ContainerOptionsDialog.qml"))39 PopupUtils.open(Qt.resolvedUrl("../common/ContainerOptionsDialog.qml"))
39 }40 }
40 }41 }
41 ]42 ]
42 leadingActionBar.actions: [
43 Action {
44 iconName: "back"
45 visible: false
46 }
47 ]
48 }43 }
44 property string currentContainer
4945
50 UbuntuListView {46 ContainersList {
51 id: containersList
52 anchors {47 anchors {
53 topMargin: pageHeader.height48 topMargin: pageHeader.height
54 fill: parent49 fill: containersView
55 }50 }
56 model: containerConfigList51
5752 currentContainer: containersView.currentContainer
58 function edit(id, status) {
59 if (status === "removing") {
60 mainView.error(i18n.tr("Container Unavailable"), i18n.tr("Container is being destroyed and is no longer editable."))
61 return
62 }
63 mainView.currentContainer = id
64 containerAppsList.setContainerApps(mainView.currentContainer)
65 pageStack.push(Qt.resolvedUrl("HomeView.qml"), {"currentContainer": mainView.currentContainer})
66 }
67
68 delegate: ListItem {
69 Label {
70 text: name
71 anchors {
72 verticalCenter: parent.verticalCenter
73 left: parent.left
74 leftMargin: units.gu(2)
75 }
76 }
77 ActivityIndicator {
78 id: containerActivity
79 anchors {
80 verticalCenter: parent.verticalCenter
81 right: parent.right
82 rightMargin: units.gu(2)
83 }
84 visible: (installStatus === i18n.tr("installing") ||
85 installStatus === i18n.tr("removing")) ? true : false
86 running: containerActivity.visible
87 }
88
89 onClicked: { containersList.edit(containerId, installStatus) }
90
91 leadingActions: ListItemActions {
92 actions: [
93 Action {
94 iconName: "delete"
95 text: i18n.tr("delete")
96 description: i18n.tr("Delete Container")
97 onTriggered: {
98 var worker = Qt.createComponent("ContainerManager.qml").createObject(mainView)
99 worker.error.connect(mainView.error)
100 worker.destroyContainer(containerId)
101 }
102 }
103 ]
104 }
105
106 trailingActions: ListItemActions {
107 actions: [
108 Action {
109 iconName: "info"
110 text: i18n.tr("info")
111 description: i18n.tr("Container Info")
112 onTriggered: {
113 mainView.currentContainer = containerId
114 pageStack.push(Qt.resolvedUrl("ContainerInfoView.qml"), {currentContainer: containerId})
115 }
116 },
117 Action {
118 iconName: "edit"
119 text: i18n.tr("edit")
120 description: i18n.tr("Container Apps")
121 visible: (installStatus === i18n.tr("ready") ||
122 installStatus === i18n.tr("updating")) ? true : false
123 onTriggered: {
124 containersList.edit(containerId, installStatus)
125 }
126 }
127 ]
128 }
129 }
130 }
131
132 Component.onCompleted: {
133 containerConfigList.configChanged.connect(updateContainerList)
134 }
135
136 Component.onDestruction: {
137 containerConfigList.configChanged.disconnect(updateContainerList)
138 }
139
140 function updateContainerList() {
141 containerConfigList.reloadContainerList()
142
143 if (mainView.currentContainer && !containerConfigList.getContainerStatus(mainView.currentContainer) && pageStack.currentPage !== containersView) {
144 pageStack.pop()
145 mainView.currentContainer = ""
146 mainView.error(i18n.tr("Container Unavailable"), i18n.tr("This container has been destroyed and is no longer valid. You have been returned to the containers overview."))
147 }
148 }53 }
149}54}
15055
=== renamed file 'libertine/qml/WelcomeView.qml' => 'qml/gui/WelcomeView.qml'
--- libertine/qml/WelcomeView.qml 2016-09-07 20:43:08 +0000
+++ qml/gui/WelcomeView.qml 2016-10-11 17:13:48 +0000
@@ -49,6 +49,7 @@
4949
50 text: i18n.tr("Welcome to the Ubuntu Legacy Application Support Manager.")50 text: i18n.tr("Welcome to the Ubuntu Legacy Application Support Manager.")
51 }51 }
52
52 Label {53 Label {
53 id: warningMessage54 id: warningMessage
54 Layout.fillWidth: true55 Layout.fillWidth: true
@@ -67,13 +68,13 @@
67 color: UbuntuColors.green68 color: UbuntuColors.green
6869
69 onClicked: {70 onClicked: {
70 var dialog = PopupUtils.open(Qt.resolvedUrl("ContainerOptionsDialog.qml"))71 var dialog = PopupUtils.open(Qt.resolvedUrl("../common/ContainerOptionsDialog.qml"))
71 dialog.onCreateInitialized.connect(createInitialized)72 dialog.onCreateInitialized.connect(createInitialized)
72 }73 }
73 }74 }
74 }75 }
7576
76 function createInitialized() {77 function createInitialized() {
77 pageStack.push(Qt.resolvedUrl("ContainersView.qml"))78 pageStack.push(Qt.resolvedUrl("ContainersView.qml"), {currentContainer: ""})
78 }79 }
79}80}
8081
=== renamed file 'libertine/qml/libertine.qml' => 'qml/gui/libertine.qml'
--- libertine/qml/libertine.qml 2016-06-09 18:20:19 +0000
+++ qml/gui/libertine.qml 2016-10-11 17:13:48 +0000
@@ -28,7 +28,6 @@
28 applicationName: "libertine"28 applicationName: "libertine"
29 width: units.gu(90)29 width: units.gu(90)
30 height: units.gu(75)30 height: units.gu(75)
31 property var currentContainer: undefined
32 property var operationDetails: undefined31 property var operationDetails: undefined
3332
34 signal error(string short_description, string details)33 signal error(string short_description, string details)
@@ -40,15 +39,17 @@
40 }39 }
4140
42 Component.onCompleted: {41 Component.onCompleted: {
43 Qt.createComponent("ContainerManager.qml").createObject(mainView).fixIntegrity()42 packageOperationDetails.error.connect(error)
4443
45 mainView.currentContainer = containerConfigList.defaultContainerId44 Qt.createComponent("../common/ContainerManager.qml").createObject(mainView).fixIntegrity()
45
46 var currentContainer = containerConfigList.defaultContainerId
4647
47 if (!containerConfigList.empty()) {48 if (!containerConfigList.empty()) {
48 pageStack.push(Qt.resolvedUrl("ContainersView.qml"))49 pageStack.push(Qt.resolvedUrl("ContainersView.qml"), {currentContainer: currentContainer})
49 if (mainView.currentContainer) {50 if (currentContainer) {
50 containerAppsList.setContainerApps(mainView.currentContainer)51 containerAppsList.setContainerApps(currentContainer)
51 pageStack.push(Qt.resolvedUrl("HomeView.qml"), {currentContainer: mainView.currentContainer})52 pageStack.push(Qt.resolvedUrl("../common/ContainerEditView.qml"), {currentContainer: currentContainer})
52 }53 }
53 }54 }
54 else {55 else {
@@ -57,7 +58,7 @@
57 }58 }
5859
59 onError: {60 onError: {
60 PopupUtils.open(Qt.resolvedUrl("GenericErrorDialog.qml"), null,61 PopupUtils.open(Qt.resolvedUrl("../common/GenericErrorDialog.qml"), null,
61 {"short_description": short_description, "details": details})62 {"short_description": short_description, "details": details})
62 }63 }
6364
6465
=== added directory 'qml/plugin'
=== added file 'qml/plugin/MainSettingsPage.qml'
--- qml/plugin/MainSettingsPage.qml 1970-01-01 00:00:00 +0000
+++ qml/plugin/MainSettingsPage.qml 2016-10-11 17:13:48 +0000
@@ -0,0 +1,58 @@
1/*
2 * Copyright (C) 2016 Canonical Ltd.
3 *
4 * This program is free software: you can redistribute it and/or modify it
5 * under the terms of the GNU General Public License version 3, as published
6 * by the Free Software Foundation.
7 *
8 * This program is distributed in the hope that it will be useful, but
9 * WITHOUT ANY WARRANTY; without even the implied warranties of
10 * MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR
11 * PURPOSE. See the GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License along
14 * with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16
17import QtQuick 2.4
18import Ubuntu.Components 1.3
19import Ubuntu.Components.Popups 1.3
20import SystemSettings 1.0
21import Libertine 1.0
22import "../common"
23
24ItemPage {
25 id: mainView
26
27 header: PageHeader {
28 id: pageHeader
29 title: i18n.tr("Manage Libertine Containers")
30 trailingActionBar.actions: [
31 Action {
32 iconName: "add"
33 onTriggered: {
34 PopupUtils.open(Qt.resolvedUrl("../common/ContainerOptionsDialog.qml"))
35 }
36 }
37 ]
38 }
39
40 property string currentContainer
41 property var operationDetails
42
43 signal error(string short_description, string details)
44
45 ContainersList {
46 anchors {
47 topMargin: pageHeader.height
48 fill: containersView
49 }
50
51 currentContainer: mainView.currentContainer
52 }
53
54 onError: {
55 PopupUtils.open(Qt.resolvedUrl("../common/GenericErrorDialog.qml"), null,
56 {"short_description": short_description, "details": details})
57 }
58}
059
=== added directory 'system-settings-plugin'
=== added file 'system-settings-plugin/CMakeLists.txt'
--- system-settings-plugin/CMakeLists.txt 1970-01-01 00:00:00 +0000
+++ system-settings-plugin/CMakeLists.txt 2016-10-11 17:13:48 +0000
@@ -0,0 +1,38 @@
1set(PLUGIN_MANIFEST_DIR_BASE share/ubuntu/settings/system)
2set(PLUGIN_MODULE_DIR_BASE ubuntu-system-settings)
3
4set(PLUGIN_MANIFEST_DIR "${CMAKE_INSTALL_PREFIX}/${PLUGIN_MANIFEST_DIR_BASE}")
5set(PLUGIN_MODULE_DIR "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}/${PLUGIN_MODULE_DIR_BASE}")
6set(PLUGIN_QML_DIR "${CMAKE_INSTALL_PREFIX}/share/ubuntu/settings/system/qml-plugins/libertine")
7
8SET(CMAKE_INSTALL_RPATH "${PLUGIN_MODULE_DIR}")
9
10configure_file(config.h.in config.h)
11
12set(LIBERTINE_PLUGIN_ICON_PATH "${PLUGIN_MANIFEST_DIR}/icons")
13set(PLUGIN_SETTINGS_TARGET libertine.settings)
14configure_file(${PLUGIN_SETTINGS_TARGET}.in ${PLUGIN_SETTINGS_TARGET})
15
16set (CMAKE_INCLUDE_CURRENT_DIR ON)
17set (CMAKE_AUTOMOC ON)
18
19# For some reason, building on vivid seems to require that we manually
20# add /usr/include to the include directories when using automoc here.
21set (CMAKE_AUTOMOC_MOC_OPTIONS -I/usr/include)
22
23pkg_check_modules(SYSTEM_SETTINGS REQUIRED SystemSettings)
24
25file(GLOB_RECURSE PLUGIN_QML_SRC
26 ${CMAKE_SOURCE_DIR}/qml/common/*.qml
27 ${CMAKE_SOURCE_DIR}/qml/plugin/*.qml
28)
29
30add_library(libertine-plugin MODULE plugin.cpp plugin.h ${PLUGIN_QML_SRC})
31qt5_use_modules(libertine-plugin Qml Quick)
32
33include_directories(${SYSTEM_SETTINGS_INCLUDE_DIRS} ${CMAKE_SOURCE_DIR}/libertine)
34target_link_libraries(libertine-plugin ${LIBERTINE_COMMON} ${SYSTEM_SETTINGS_LIBRARIES})
35
36install(TARGETS libertine-plugin LIBRARY DESTINATION ${PLUGIN_MODULE_DIR} NAMELINK_SKIP)
37install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${PLUGIN_SETTINGS_TARGET} DESTINATION ${PLUGIN_MANIFEST_DIR})
38install(FILES libertine-plugin.png DESTINATION ${LIBERTINE_PLUGIN_ICON_PATH})
039
=== added file 'system-settings-plugin/config.h.in'
--- system-settings-plugin/config.h.in 1970-01-01 00:00:00 +0000
+++ system-settings-plugin/config.h.in 2016-10-11 17:13:48 +0000
@@ -0,0 +1,16 @@
1/*
2 * Copyright 2016 Canonical Ltd
3 *
4 * Libertine 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 * Libertine is distributed in the hope that it will be useful, but WITHOUT ANY
9 * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
10 * A PARTICULAR PURPOSE. See the 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 */
15
16#define LIBERTINE_PLUGIN_QML_DIR "@LIBERTINE_QML_PATH@/plugin"
017
=== added file 'system-settings-plugin/libertine-plugin.png'
1Binary files system-settings-plugin/libertine-plugin.png 1970-01-01 00:00:00 +0000 and system-settings-plugin/libertine-plugin.png 2016-10-11 17:13:48 +0000 differ18Binary files system-settings-plugin/libertine-plugin.png 1970-01-01 00:00:00 +0000 and system-settings-plugin/libertine-plugin.png 2016-10-11 17:13:48 +0000 differ
=== added file 'system-settings-plugin/libertine.settings.in'
--- system-settings-plugin/libertine.settings.in 1970-01-01 00:00:00 +0000
+++ system-settings-plugin/libertine.settings.in 2016-10-11 17:13:48 +0000
@@ -0,0 +1,14 @@
1{
2 "name": "Libertine",
3 "icon": "${LIBERTINE_PLUGIN_ICON_PATH}/libertine-plugin.png",
4 "translations": "libertine",
5 "category": "system",
6 "keywords": [
7 "libertine",
8 "legacy",
9 "x11"
10 ],
11 "has-dynamic-keywords": false,
12 "has-dynamic-visibility": false,
13 "plugin": "libertine-plugin"
14}
015
=== added file 'system-settings-plugin/plugin.cpp'
--- system-settings-plugin/plugin.cpp 1970-01-01 00:00:00 +0000
+++ system-settings-plugin/plugin.cpp 2016-10-11 17:13:48 +0000
@@ -0,0 +1,105 @@
1/*
2 * Copyright (C) 2016 Canonical Ltd.
3 *
4 * This program is free software: you can redistribute it and/or modify it
5 * under the terms of the GNU General Public License version 3, as published
6 * by the Free Software Foundation.
7 *
8 * This program is distributed in the hope that it will be useful, but
9 * WITHOUT ANY WARRANTY; without even the implied warranties of
10 * MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR
11 * PURPOSE. See the GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License along
14 * with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16
17#include "plugin.h"
18
19#include "config.h"
20#include "common/ContainerManager.h"
21#include "common/ContainerAppsList.h"
22#include "common/ContainerArchivesList.h"
23#include "common/ContainerConfigList.h"
24#include "common/LibertineConfig.h"
25#include "common/ContainerConfig.h"
26#include "common/PackageOperationDetails.h"
27#include <memory>
28#include <QQmlEngine>
29#include <QQmlContext>
30#include <QFileSystemWatcher>
31#include <SystemSettings/ItemBase>
32
33using namespace SystemSettings;
34
35class LibertineItem: public ItemBase
36{
37 Q_OBJECT
38
39public:
40 explicit LibertineItem(const QVariantMap &staticData, QObject *parent = 0);
41 virtual ~LibertineItem() = default;
42
43 virtual QQmlComponent* pageComponent(QQmlEngine *engine,
44 QObject *parent = 0) override;
45
46private:
47 std::unique_ptr<LibertineConfig> config_;
48 ContainerConfigList* containers_;
49 ContainerAppsList* container_apps_;
50 ContainerArchivesList* container_archives_;
51 PackageOperationDetails* package_operation_details_;
52 QFileSystemWatcher watcher_;
53
54private slots:
55 void reload_config(QString const&);
56};
57
58LibertineItem::
59LibertineItem(const QVariantMap &staticData, QObject *parent)
60 : ItemBase(staticData, parent)
61 , config_(new LibertineConfig())
62 , containers_(new ContainerConfigList(config_.get(), this))
63 , container_apps_(new ContainerAppsList(containers_, this))
64 , container_archives_(new ContainerArchivesList(containers_, this))
65 , package_operation_details_(new PackageOperationDetails(this))
66 , watcher_({config_->containers_config_file_name()})
67{
68 qmlRegisterType<ContainerConfig>("Libertine", 1, 0, "ContainerConfig");
69 qmlRegisterType<ContainerManagerWorker>("Libertine", 1, 0, "ContainerManagerWorker");
70 qmlRegisterType<PackageOperationDetails>("Libertine", 1, 0, "PackageOperationDetails");
71
72 connect(&watcher_, &QFileSystemWatcher::fileChanged, this, &LibertineItem::reload_config);
73}
74
75QQmlComponent *LibertineItem::
76pageComponent(QQmlEngine *engine, QObject *parent)
77{
78 auto ctxt = engine->rootContext();
79 ctxt->setContextProperty("containerConfigList", containers_);
80 ctxt->setContextProperty("containerAppsList", container_apps_);
81 ctxt->setContextProperty("containerArchivesList", container_archives_);
82 ctxt->setContextProperty("packageOperationDetails", package_operation_details_);
83
84 auto component = new QQmlComponent(engine,
85 QUrl(LIBERTINE_PLUGIN_QML_DIR "/MainSettingsPage.qml"),
86 parent);
87 return component;
88}
89
90
91void LibertineItem::
92reload_config(QString const&)
93{
94 containers_->reloadConfigs();
95}
96
97
98ItemBase *LibertinePlugin::
99createItem(const QVariantMap &staticData,
100 QObject *parent)
101{
102 return new LibertineItem(staticData, parent);
103}
104
105#include "plugin.moc"
0106
=== added file 'system-settings-plugin/plugin.h'
--- system-settings-plugin/plugin.h 1970-01-01 00:00:00 +0000
+++ system-settings-plugin/plugin.h 2016-10-11 17:13:48 +0000
@@ -0,0 +1,34 @@
1/*
2 * Copyright (C) 2016 Canonical Ltd.
3 *
4 * This program is free software: you can redistribute it and/or modify it
5 * under the terms of the GNU General Public License version 3, as published
6 * by the Free Software Foundation.
7 *
8 * This program is distributed in the hope that it will be useful, but
9 * WITHOUT ANY WARRANTY; without even the implied warranties of
10 * MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR
11 * PURPOSE. See the GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License along
14 * with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16#pragma once
17
18#include <QObject>
19#include <SystemSettings/PluginInterface>
20
21class LibertinePlugin:
22 public QObject,
23 public SystemSettings::PluginInterface2
24{
25 Q_OBJECT
26 Q_PLUGIN_METADATA(IID "com.ubuntu.SystemSettings.PluginInterface/2.0")
27 Q_INTERFACES(SystemSettings::PluginInterface2)
28
29public:
30 explicit LibertinePlugin() = default;
31
32 SystemSettings::ItemBase *createItem(const QVariantMap &staticData,
33 QObject *parent = 0);
34};
035
=== modified file 'tests/unit/ContainerConfigListTests.cpp'
--- tests/unit/ContainerConfigListTests.cpp 2015-09-15 15:03:38 +0000
+++ tests/unit/ContainerConfigListTests.cpp 2016-10-11 17:13:48 +0000
@@ -19,7 +19,7 @@
19 */19 */
20#include <gtest/gtest.h>20#include <gtest/gtest.h>
2121
22#include "libertine/ContainerConfigList.h"22#include "common/ContainerConfigList.h"
23#include <QtCore/QByteArray>23#include <QtCore/QByteArray>
24#include <QtCore/QJsonDocument>24#include <QtCore/QJsonDocument>
25#include <QtCore/QJsonParseError>25#include <QtCore/QJsonParseError>
2626
=== modified file 'tests/unit/ContainerConfigTests.cpp'
--- tests/unit/ContainerConfigTests.cpp 2016-01-21 21:42:28 +0000
+++ tests/unit/ContainerConfigTests.cpp 2016-10-11 17:13:48 +0000
@@ -19,7 +19,7 @@
19 */19 */
20#include <gtest/gtest.h>20#include <gtest/gtest.h>
2121
22#include "libertine/ContainerConfig.h"22#include "common/ContainerConfig.h"
23#include <QtCore/QByteArray>23#include <QtCore/QByteArray>
24#include <QtCore/QJsonDocument>24#include <QtCore/QJsonDocument>
25#include <QtCore/QJsonParseError>25#include <QtCore/QJsonParseError>

Subscribers

People subscribed via source and target branches