Merge lp:~townsend/libertine/release-1.3 into lp:libertine/trunk

Proposed by Christopher Townsend
Status: Merged
Approved by: Larry Price
Approved revision: 141
Merged at revision: 141
Proposed branch: lp:~townsend/libertine/release-1.3
Merge into: lp:libertine/trunk
Diff against target: 3963 lines (+1319/-1135)
38 files modified
data/CMakeLists.txt (+4/-0)
data/libertine-lxc-sudo (+1/-0)
debian/changelog (+22/-0)
debian/control (+2/-0)
debian/libertine-tools.install (+0/-3)
debian/python3-libertine-lxc.install (+5/-0)
libertine/ContainerManager.cpp (+32/-5)
libertine/ContainerManager.h (+1/-0)
libertine/PasswordHelper.cpp (+0/-123)
libertine/PasswordHelper.h (+0/-43)
libertine/libertine.cpp (+0/-4)
libertine/libertine.h (+0/-2)
libertine/qml/AddExtraArchiveView.qml (+117/-0)
libertine/qml/ContainerOptionsDialog.qml (+30/-8)
libertine/qml/ContainerPasswordDialog.qml (+0/-98)
libertine/qml/ContainersView.qml (+1/-2)
libertine/qml/ExtraArchivesView.qml (+13/-61)
libertine/qml/ManageContainer.qml (+1/-1)
libertine/qml/WelcomeView.qml (+1/-2)
liblibertine/CMakeLists.txt (+0/-1)
po/en_GB.po (+91/-52)
po/en_US.po (+388/-336)
po/es.po (+96/-54)
po/it.po (+79/-54)
po/libertine.pot (+120/-100)
python/libertine/ContainersConfig.py (+8/-5)
python/libertine/Libertine.py (+119/-36)
python/libertine/LxcContainer.py (+3/-10)
python/libertine/__init__.py (+2/-1)
tests/unit/CMakeLists.txt (+7/-11)
tests/unit/libertine_launch_tests.py (+12/-34)
tools/CMakeLists.txt (+1/-1)
tools/libertine-container-manager (+64/-41)
tools/libertine-container-manager.1 (+13/-8)
tools/libertine-launch (+5/-20)
tools/libertine-lxc-setup (+9/-0)
tools/libertine-session-bridge (+6/-1)
tools/update-puritine-containers (+66/-18)
To merge this branch: bzr merge lp:~townsend/libertine/release-1.3
Reviewer Review Type Date Requested Status
Larry Price Approve
Review via email: mp+300494@code.launchpad.net

Commit message

* This creates a LibertineApplication which wraps up the starting of a container. This way we can mock creations of an Application.
* Rework the whole way we handle updating the necessary system files for unprivileged LXC's: (LP: #1598785)
  - Add new script that does the updates.
  - Add sudoers file for this script.
  - Remove the password dialog in the UI.
* Add functionality to "favorite" the Libertine scope upon first installation of the Puritine click package. (LP: #1602397)
* Bump version to 1.3.
* Allow adding all forms of additional archives to containers.
* Support adding private PPAs inside of a container. (LP: #1599882)

To post a comment you must log in.
Revision history for this message
Larry Price (larryprice) wrote :

lgtm

review: Approve
lp:~townsend/libertine/release-1.3 updated
142. By Christopher Townsend

Merge lp:libertine for replaces/breaks.

143. By Christopher Townsend

Merge lp:libertine for fix in using the wrong version number in previous merge.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'data/CMakeLists.txt'
--- data/CMakeLists.txt 2016-05-19 14:29:57 +0000
+++ data/CMakeLists.txt 2016-07-21 17:26:05 +0000
@@ -1,3 +1,5 @@
1set(CMAKE_INSTALL_SYSCONFDIR "/etc")
2
1install(FILES libertine.desktop3install(FILES libertine.desktop
2 DESTINATION ${CMAKE_INSTALL_DATADIR}/applications)4 DESTINATION ${CMAKE_INSTALL_DATADIR}/applications)
3install(FILES libertine_64.png libertine-lxc.conf5install(FILES libertine_64.png libertine-lxc.conf
@@ -6,6 +8,8 @@
6 DESTINATION ${CMAKE_INSTALL_DATADIR}/upstart/sessions)8 DESTINATION ${CMAKE_INSTALL_DATADIR}/upstart/sessions)
7install(FILES puritine-15.04.1.framework9install(FILES puritine-15.04.1.framework
8 DESTINATION ${CMAKE_INSTALL_DATADIR}/click/frameworks)10 DESTINATION ${CMAKE_INSTALL_DATADIR}/click/frameworks)
11install(FILES libertine-lxc-sudo
12 DESTINATION ${CMAKE_INSTALL_SYSCONFDIR}/sudoers.d)
913
10configure_file("libertine-tools.click-hook.in"14configure_file("libertine-tools.click-hook.in"
11 "${CMAKE_SOURCE_DIR}/debian/libertine-tools.click-hook"15 "${CMAKE_SOURCE_DIR}/debian/libertine-tools.click-hook"
1216
=== added file 'data/libertine-lxc-sudo'
--- data/libertine-lxc-sudo 1970-01-01 00:00:00 +0000
+++ data/libertine-lxc-sudo 2016-07-21 17:26:05 +0000
@@ -0,0 +1,1 @@
1ALL ALL=(ALL) NOPASSWD:/usr/bin/libertine-lxc-setup
02
=== modified file 'debian/changelog'
--- debian/changelog 2016-07-07 20:17:22 +0000
+++ debian/changelog 2016-07-21 17:26:05 +0000
@@ -1,3 +1,25 @@
1libertine (1.3-0ubuntu1) UNRELEASED; urgency=medium
2
3 [ Brandon Schaefer ]
4 * This creates a LibertineApplication which wraps up the starting of a
5 container. This way we can mock creations of an Application.
6
7 [ Chris Townsend ]
8 * Rework the whole way we handle updating the necessary system files for
9 unprivileged LXC's: (LP: #1598785)
10 - Add new script that does the updates.
11 - Add sudoers file for this script.
12 - Remove the password dialog in the UI.
13 * Add functionality to "favorite" the Libertine scope upon first
14 installation of the Puritine click package. (LP: #1602397)
15 * Bump version to 1.3.
16
17 [ Larry Price ]
18 * Allow adding all forms of additional archives to containers.
19 * Support adding private PPAs inside of a container. (LP: #1599882)
20
21 -- Chris Townsend <christopher.townsend@canonical.com> Tue, 19 Jul 2016 11:28:00 -0400
22
1libertine (1.2.2+16.10.20160707-0ubuntu1) yakkety; urgency=medium23libertine (1.2.2+16.10.20160707-0ubuntu1) yakkety; urgency=medium
224
3 [ Brandon Schaefer ]25 [ Brandon Schaefer ]
426
=== modified file 'debian/control'
--- debian/control 2016-06-15 14:48:27 +0000
+++ debian/control 2016-07-21 17:26:05 +0000
@@ -116,6 +116,8 @@
116 uidmap,116 uidmap,
117 ${misc:Depends},117 ${misc:Depends},
118 ${python3:Depends}118 ${python3:Depends}
119Replaces: libertine-tools (<< 1.3)
120Breaks: libertine-tools (<< 1.3)
119Description: Python3 scripts for the Libertine application sandbox121Description: Python3 scripts for the Libertine application sandbox
120 This package provides the LXC-based container back end module for the122 This package provides the LXC-based container back end module for the
121 Libertine sandbox. It requires support for unprivileged LXC containers in the123 Libertine sandbox. It requires support for unprivileged LXC containers in the
122124
=== modified file 'debian/libertine-tools.install'
--- debian/libertine-tools.install 2016-06-07 19:49:27 +0000
+++ debian/libertine-tools.install 2016-07-21 17:26:05 +0000
@@ -1,12 +1,9 @@
1usr/bin/libertine-launch1usr/bin/libertine-launch
2usr/bin/libertine-session-bridge2usr/bin/libertine-session-bridge
3usr/bin/libertine-container-manager3usr/bin/libertine-container-manager
4usr/bin/libertine-lxc-manager
5usr/bin/libertine-xmir4usr/bin/libertine-xmir
6usr/share/bash-completion/completions/libertine-container-manager5usr/share/bash-completion/completions/libertine-container-manager
7usr/lib/*/libertine/update-puritine-containers6usr/lib/*/libertine/update-puritine-containers
8usr/share/man7usr/share/man
9usr/share/libertine/libertine-lxc.conf
10usr/share/upstart/sessions/libertine-lxc-manager.conf
11usr/share/upstart/sessions/libertine-xmir.conf8usr/share/upstart/sessions/libertine-xmir.conf
12usr/share/click/frameworks/puritine-15.04.1.framework9usr/share/click/frameworks/puritine-15.04.1.framework
1310
=== modified file 'debian/python3-libertine-lxc.install'
--- debian/python3-libertine-lxc.install 2015-11-30 14:37:36 +0000
+++ debian/python3-libertine-lxc.install 2016-07-21 17:26:05 +0000
@@ -1,1 +1,6 @@
1usr/lib/python*/*/libertine/LxcContainer.py1usr/lib/python*/*/libertine/LxcContainer.py
2usr/bin/libertine-lxc-manager
3usr/share/libertine/libertine-lxc.conf
4usr/share/upstart/sessions/libertine-lxc-manager.conf
5etc/sudoers.d/libertine-lxc-sudo
6usr/bin/libertine-lxc-setup
27
=== modified file 'libertine/ContainerManager.cpp'
--- libertine/ContainerManager.cpp 2016-06-08 21:56:53 +0000
+++ libertine/ContainerManager.cpp 2016-07-21 17:26:05 +0000
@@ -17,6 +17,7 @@
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 "libertine/ContainerManager.h"
20#include <QTemporaryFile>
2021
2122
22namespace23namespace
@@ -34,10 +35,12 @@
34constexpr auto libertine_container_manager_tool = "libertine-container-manager";35constexpr auto libertine_container_manager_tool = "libertine-container-manager";
3536
3637
37static const QString readAllStdOutOrStdErr(QProcess& proc)38static const QString readAllStdOutOrStdErr(QProcess& proc, const QString& default_output = "")
38{39{
39 auto out = proc.readAllStandardOutput();40 QByteArray out = proc.readAllStandardOutput(),
40 return out.isEmpty() ? proc.readAllStandardError() : out;41 err = proc.readAllStandardError();
42 return !out.isEmpty() ? out
43 : !err.isEmpty() ? err : default_output;
41}44}
4245
4346
@@ -175,7 +178,7 @@
175 [=](int exitCode, QProcess::ExitStatus){178 [=](int exitCode, QProcess::ExitStatus){
176 if (exitCode != 0)179 if (exitCode != 0)
177 {180 {
178 emit error(PACKAGE_INSTALLATION_FAILED.arg(package_name), process_output_.isEmpty() ? process_.readAllStandardError() : process_output_);181 emit error(PACKAGE_INSTALLATION_FAILED.arg(package_name), readAllStdOutOrStdErr(process_, process_output_));
179 }182 }
180 emit operationFinished(container_id, package_name);183 emit operationFinished(container_id, package_name);
181 });184 });
@@ -268,13 +271,14 @@
268 if (!output.isEmpty())271 if (!output.isEmpty())
269 {272 {
270 emit updateOperationDetails(container_id, "", output);273 emit updateOperationDetails(container_id, "", output);
274 process_output_ += output;
271 }275 }
272 });276 });
273 connect(&process_, static_cast<void(QProcess::*)(int, QProcess::ExitStatus)>(&QProcess::finished),277 connect(&process_, static_cast<void(QProcess::*)(int, QProcess::ExitStatus)>(&QProcess::finished),
274 [=](int exitCode, QProcess::ExitStatus){278 [=](int exitCode, QProcess::ExitStatus){
275 if (exitCode != 0)279 if (exitCode != 0)
276 {280 {
277 emit error(CONTAINER_CONFIGURE_FAILED.arg(container_name), readAllStdOutOrStdErr(process_));281 emit error(CONTAINER_CONFIGURE_FAILED.arg(container_name), readAllStdOutOrStdErr(process_, process_output_));
278 }282 }
279 else283 else
280 {284 {
@@ -290,6 +294,29 @@
290294
291295
292void ContainerManagerWorker::296void ContainerManagerWorker::
297addArchive(const QString& container_id, const QString& container_name, const QString& archive, const QByteArray& signing_key)
298{
299 QStringList command{"--archive", "add", "--archive-name", archive};
300 if (!signing_key.isEmpty())
301 {
302 QTemporaryFile keyfile;
303 if (!keyfile.open())
304 {
305 emit error(CONTAINER_CONFIGURE_FAILED.arg(container_name), keyfile.errorString());
306 return;
307 }
308
309 keyfile.setAutoRemove(false);
310 keyfile.write(signing_key);
311
312 command << "--public-key-file" << keyfile.fileName();
313 }
314
315 configureContainer(container_id, container_name, command);
316}
317
318
319void ContainerManagerWorker::
293fixIntegrity()320fixIntegrity()
294{321{
295 process_.start(libertine_container_manager_tool, QStringList{"fix-integrity"});322 process_.start(libertine_container_manager_tool, QStringList{"fix-integrity"});
296323
=== modified file 'libertine/ContainerManager.h'
--- libertine/ContainerManager.h 2016-06-08 21:12:57 +0000
+++ libertine/ContainerManager.h 2016-07-21 17:26:05 +0000
@@ -42,6 +42,7 @@
42 Q_INVOKABLE void updateContainer(const QString& container_id, const QString& container_name);42 Q_INVOKABLE void updateContainer(const QString& container_id, const QString& container_name);
43 Q_INVOKABLE void runCommand(const QString& container_id, const QString& container_name, const QString& command_line);43 Q_INVOKABLE void runCommand(const QString& container_id, const QString& container_name, const QString& command_line);
44 Q_INVOKABLE void configureContainer(const QString& container_id, const QString& container_name, const QStringList& configure_command);44 Q_INVOKABLE void configureContainer(const QString& container_id, const QString& container_name, const QStringList& configure_command);
45 Q_INVOKABLE void addArchive(const QString& container_id, const QString& container_name, const QString& archive, const QByteArray& signing_key);
45 Q_INVOKABLE void fixIntegrity();46 Q_INVOKABLE void fixIntegrity();
46 Q_INVOKABLE void setDefaultContainer(const QString& container_id, bool should_clear);47 Q_INVOKABLE void setDefaultContainer(const QString& container_id, bool should_clear);
4748
4849
=== removed file 'libertine/PasswordHelper.cpp'
--- libertine/PasswordHelper.cpp 2016-04-21 13:43:38 +0000
+++ libertine/PasswordHelper.cpp 1970-01-01 00:00:00 +0000
@@ -1,123 +0,0 @@
1/**
2 * @file PasswordHelper.cpp
3 * @brief Helper class for managing password entry
4 */
5/*
6 * Copyright 2015 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 */
19#include "libertine/PasswordHelper.h"
20
21#include <iostream>
22#include <termios.h>
23#include <unistd.h>
24
25using namespace std;
26
27namespace
28{
29
30struct pam_response *reply;
31
32int function_conversation(int, const struct pam_message**, struct pam_response **resp, void*)
33{
34 *resp = reply;
35 return PAM_SUCCESS;
36}
37
38void set_stdin_echo(bool enable = true)
39{
40 struct termios tty;
41
42 tcgetattr(STDIN_FILENO, &tty);
43 if (!enable)
44 tty.c_lflag &= ~ECHO;
45 else
46 tty.c_lflag |= ECHO;
47
48 (void) tcsetattr(STDIN_FILENO, TCSANOW, &tty);
49}
50
51} // anonymous namespace
52
53
54PasswordHelper::
55PasswordHelper()
56{
57}
58
59
60PasswordHelper::
61~PasswordHelper()
62{
63}
64
65
66QString PasswordHelper::
67GetPassword()
68{
69 string password;
70
71 cout << "Please enter your password:" << endl;
72
73 set_stdin_echo(false);
74 getline(cin, password);
75 set_stdin_echo(true);
76
77 if (cin.fail() || cin.eof())
78 {
79 return nullptr;
80 }
81 else
82 {
83 return QString::fromStdString(password);
84 }
85}
86
87
88bool PasswordHelper::
89VerifyUserPassword(QString const& password)
90{
91 char *username = getenv("USER");
92 int retval;
93
94 const struct pam_conv local_conversation = { function_conversation, NULL };
95 pam_handle_t *local_auth_handle = NULL;
96
97 retval = pam_start("common_auth", username, &local_conversation, &local_auth_handle);
98
99 if (retval != PAM_SUCCESS)
100 {
101 return false;
102 }
103
104 reply = (struct pam_response *)malloc(sizeof(struct pam_response));
105
106 reply[0].resp = strdup(password.toStdString().c_str());
107 reply[0].resp_retcode = 0;
108
109 retval = pam_authenticate(local_auth_handle, 0);
110
111 if (retval != PAM_SUCCESS)
112 {
113 return false;
114 }
115
116 retval = pam_end(local_auth_handle, retval);
117
118 if (retval != PAM_SUCCESS)
119 {
120 return false;
121 }
122 return true;
123}
1240
=== removed file 'libertine/PasswordHelper.h'
--- libertine/PasswordHelper.h 2015-09-02 18:58:33 +0000
+++ libertine/PasswordHelper.h 1970-01-01 00:00:00 +0000
@@ -1,43 +0,0 @@
1/**
2 * @file PasswordHelper.h
3 * @brief Helper class for managing password entry
4 */
5/*
6 * Copyright 2015 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 */
19#ifndef LIBERTINE_PASSWORD_HELPER_H_
20#define LIBERTINE_PASSWORD_HELPER_H_
21
22#include <iostream>
23#include <security/pam_appl.h>
24#include <QtCore/QObject>
25#include <QtCore/QString>
26
27class PasswordHelper
28: public QObject
29{
30 Q_OBJECT
31
32public:
33 PasswordHelper();
34 ~PasswordHelper();
35
36 QString
37 GetPassword();
38
39 Q_INVOKABLE bool
40 VerifyUserPassword(QString const& password);
41};
42
43#endif /* LIBERTINE_PASSWORD_HELPER_H_ */
440
=== modified file 'libertine/libertine.cpp'
--- libertine/libertine.cpp 2016-03-09 15:09:05 +0000
+++ libertine/libertine.cpp 2016-07-21 17:26:05 +0000
@@ -26,7 +26,6 @@
26#include "libertine/ContainerConfigList.h"26#include "libertine/ContainerConfigList.h"
27#include "libertine/libertine.h"27#include "libertine/libertine.h"
28#include "libertine/LibertineConfig.h"28#include "libertine/LibertineConfig.h"
29#include "libertine/PasswordHelper.h"
30#include <QtCore/QDebug>29#include <QtCore/QDebug>
31#include <QtCore/QDir>30#include <QtCore/QDir>
32#include <QtCore/QFile>31#include <QtCore/QFile>
@@ -94,7 +93,6 @@
94 config_.reset(new LibertineConfig(*this));93 config_.reset(new LibertineConfig(*this));
95 qmlRegisterType<ContainerConfig>("Libertine", 1, 0, "ContainerConfig");94 qmlRegisterType<ContainerConfig>("Libertine", 1, 0, "ContainerConfig");
96 qmlRegisterType<ContainerManagerWorker>("Libertine", 1, 0, "ContainerManagerWorker");95 qmlRegisterType<ContainerManagerWorker>("Libertine", 1, 0, "ContainerManagerWorker");
97 qmlRegisterType<PasswordHelper>("Libertine", 1, 0, "PasswordHelper");
9896
99 watcher_.addPath(config_.data()->containers_config_file_name());97 watcher_.addPath(config_.data()->containers_config_file_name());
100 connect(&watcher_, SIGNAL(fileChanged(QString)), SLOT(reload_config(QString)));98 connect(&watcher_, SIGNAL(fileChanged(QString)), SLOT(reload_config(QString)));
@@ -107,7 +105,6 @@
107 containers_ = new ContainerConfigList(config_.data(), this);105 containers_ = new ContainerConfigList(config_.data(), this);
108 container_apps_ = new ContainerAppsList(containers_, this);106 container_apps_ = new ContainerAppsList(containers_, this);
109 container_archives_ = new ContainerArchivesList(containers_, this);107 container_archives_ = new ContainerArchivesList(containers_, this);
110 password_helper_ = new PasswordHelper();
111108
112 initialize_view();109 initialize_view();
113 view_.show();110 view_.show();
@@ -134,7 +131,6 @@
134 ctxt->setContextProperty("containerConfigList", containers_);131 ctxt->setContextProperty("containerConfigList", containers_);
135 ctxt->setContextProperty("containerAppsList", container_apps_);132 ctxt->setContextProperty("containerAppsList", container_apps_);
136 ctxt->setContextProperty("containerArchivesList", container_archives_);133 ctxt->setContextProperty("containerArchivesList", container_archives_);
137 ctxt->setContextProperty("passwordHelper", password_helper_);
138134
139 view_.setSource(QUrl::fromLocalFile(main_qml_source_file_));135 view_.setSource(QUrl::fromLocalFile(main_qml_source_file_));
140 connect(view_.engine(), SIGNAL(quit()), SLOT(quit()));136 connect(view_.engine(), SIGNAL(quit()), SLOT(quit()));
141137
=== modified file 'libertine/libertine.h'
--- libertine/libertine.h 2016-03-09 15:09:05 +0000
+++ libertine/libertine.h 2016-07-21 17:26:05 +0000
@@ -28,7 +28,6 @@
2828
29class ContainerConfigList;29class ContainerConfigList;
30class LibertineConfig;30class LibertineConfig;
31class PasswordHelper;
32class ContainerAppsList;31class ContainerAppsList;
33class ContainerArchivesList;32class ContainerArchivesList;
3433
@@ -57,7 +56,6 @@
57 ContainerConfigList* containers_;56 ContainerConfigList* containers_;
58 ContainerAppsList* container_apps_;57 ContainerAppsList* container_apps_;
59 ContainerArchivesList* container_archives_;58 ContainerArchivesList* container_archives_;
60 PasswordHelper* password_helper_;
61 QQuickView view_;59 QQuickView view_;
62};60};
6361
6462
=== added file 'libertine/qml/AddExtraArchiveView.qml'
--- libertine/qml/AddExtraArchiveView.qml 1970-01-01 00:00:00 +0000
+++ libertine/qml/AddExtraArchiveView.qml 2016-07-21 17:26:05 +0000
@@ -0,0 +1,117 @@
1/**
2 * @file AddExtraArchiveView.qml
3 * @brief Libertine container add archive 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
22
23Page {
24 id: addExtraArchiveView
25 header: PageHeader {
26 id: pageHeader
27 title: i18n.tr("Add Archive")
28 }
29 property string currentContainer: ""
30
31 Column {
32 spacing: units.gu(2)
33
34 anchors {
35 topMargin: pageHeader.height + units.gu(2)
36 leftMargin: units.gu(2)
37 rightMargin: units.gu(2)
38 fill: parent
39 }
40
41 Label {
42 text: i18n.tr("New archive identifier, e.g.")
43 anchors {
44 left: parent.left
45 right: parent.right
46 }
47 }
48
49 TextEdit {
50 text: i18n.tr("multiverse\nppa:user/repository\ndeb http://myserver/repo stable repo")
51 anchors {
52 left: parent.left
53 right: parent.right
54 leftMargin: units.gu(4)
55 }
56
57 readOnly: true
58 color: UbuntuColors.darkGrey
59 }
60
61 TextField {
62 id: extraArchiveString
63 anchors {
64 left: parent.left
65 right: parent.right
66 }
67 onAccepted: {
68 addArchive()
69 }
70 }
71
72 Label {
73 text: i18n.tr("(Optional) Public signing key for archive")
74 anchors {
75 left: parent.left
76 right: parent.right
77 }
78 }
79
80 TextArea {
81 id: publicSigningKey
82 anchors {
83 left: parent.left
84 right: parent.right
85 }
86 height: Math.max(addExtraArchiveView.height/3, units.gu(6))
87 }
88
89 Button {
90 text: i18n.tr("Add")
91 color: UbuntuColors.green
92 onClicked: {
93 addArchive()
94 }
95 }
96 }
97
98 function addArchive() {
99 var worker = Qt.createComponent("ContainerManager.qml").createObject(mainView)
100 worker.finishedConfigure.connect(finishedConfigure)
101 worker.error.connect(mainView.error)
102 worker.addArchive(currentContainer, containerConfigList.getContainerName(currentContainer),
103 extraArchiveString.text, publicSigningKey.text.trim())
104
105 pageStack.pop()
106 }
107
108 Component.onCompleted: {
109 extraArchiveString.forceActiveFocus()
110 }
111
112 function finishedConfigure() {
113 if (addExtraArchiveView) {
114 containerArchivesList.setContainerArchives(currentContainer)
115 }
116 }
117}
0118
=== modified file 'libertine/qml/ContainerOptionsDialog.qml'
--- libertine/qml/ContainerOptionsDialog.qml 2016-05-06 21:13:01 +0000
+++ libertine/qml/ContainerOptionsDialog.qml 2016-07-21 17:26:05 +0000
@@ -26,10 +26,9 @@
26 id: containerOptionsDialog26 id: containerOptionsDialog
27 title: i18n.tr("Container Options")27 title: i18n.tr("Container Options")
28 text: i18n.tr("Configure options for container creation.")28 text: i18n.tr("Configure options for container creation.")
29 property var showPasswordDialog: false
30 signal passwordDialogSignal(var enableMultiarch, var containerName)
3129
32 Row {30 Row {
31 visible: containerConfigList.getHostArchitecture() == 'x86_64' ? true : false
33 spacing: units.gu(1)32 spacing: units.gu(1)
34 CheckBox {33 CheckBox {
35 id: enableMultiarchCheckbox34 id: enableMultiarchCheckbox
@@ -47,7 +46,7 @@
4746
48 Label {47 Label {
49 id: containerNameText48 id: containerNameText
50 text: i18n.tr("Enter or name for the container or leave blank for default name")49 text: i18n.tr("Enter a name for the container or leave blank for default name:")
51 wrapMode: Text.Wrap50 wrapMode: Text.Wrap
52 }51 }
5352
@@ -57,6 +56,20 @@
57 onAccepted: okButton.clicked()56 onAccepted: okButton.clicked()
58 }57 }
5958
59 Label {
60 id: containerPasswordText
61 visible: true
62 text: i18n.tr("Enter password for your user in the Libertine container or leave blank for no password:")
63 wrapMode: Text.Wrap
64 }
65
66 TextField {
67 id: containerPasswordInput
68 visible: containerPasswordText.visible
69 placeholderText: i18n.tr("password")
70 echoMode: TextInput.Password
71 }
72
60 Row {73 Row {
61 spacing: units.gu(1)74 spacing: units.gu(1)
62 Button {75 Button {
@@ -65,7 +78,7 @@
65 color: UbuntuColors.green78 color: UbuntuColors.green
66 width: (parent.width - parent.spacing) / 279 width: (parent.width - parent.spacing) / 2
67 onClicked: {80 onClicked: {
68 showPasswordDialog = true81 createContainer()
69 PopupUtils.close(containerOptionsDialog)82 PopupUtils.close(containerOptionsDialog)
70 }83 }
71 }84 }
@@ -79,9 +92,18 @@
79 }92 }
80 }93 }
8194
82 Component.onDestruction: {95 function createContainer() {
83 if (showPasswordDialog) {96 var container_id = containerConfigList.addNewContainer("lxc", containerNameInput.text)
84 passwordDialogSignal(enableMultiarchCheckbox.checked, containerNameInput.text)97 var worker = Qt.createComponent("ContainerManager.qml").createObject(mainView)
85 }98
99 worker.updateOperationDetails.connect(mainView.updateOperationDetails)
100 worker.operationFinished.connect(mainView.resetOperationDetails)
101 worker.error.connect(mainView.error)
102
103 worker.createContainer(container_id,
104 containerConfigList.getContainerName(container_id),
105 containerConfigList.getContainerDistro(container_id),
106 enableMultiarchCheckbox.checked,
107 containerPasswordInput.text)
86 }108 }
87}109}
88110
=== removed file 'libertine/qml/ContainerPasswordDialog.qml'
--- libertine/qml/ContainerPasswordDialog.qml 2016-06-10 13:22:16 +0000
+++ libertine/qml/ContainerPasswordDialog.qml 1970-01-01 00:00:00 +0000
@@ -1,98 +0,0 @@
1/**
2 * @file ContainerPasswordDialog.qml
3 * @brief Libertine container password dialog
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
25Dialog {
26 id: passwordDialog
27 title: i18n.tr("Authentication required")
28 text: i18n.tr("Password is required to create a Libertine container")
29 property var enableMultiarch: false
30 property var containerName: null
31 property var switchPage: false
32
33 Label {
34 id: invalidPasswordText
35 visible: false
36 text: i18n.tr("Invalid password entered")
37 }
38
39 TextField {
40 id: passwordInput
41 placeholderText: i18n.tr("password")
42 echoMode: TextInput.Password
43
44 onAccepted: okButton.clicked()
45 }
46
47 Row {
48 spacing: units.gu(1)
49
50 Button {
51 id: okButton
52 text: i18n.tr("OK")
53 color: UbuntuColors.green
54 width: (parent.width - parent.spacing) / 2
55 onClicked: {
56 if (passwordHelper.VerifyUserPassword(passwordInput.text)) {
57 passwordAccepted(text)
58 switchPage = true
59 PopupUtils.close(passwordDialog)
60 }
61 else {
62 invalidPasswordText.visible = true
63 }
64 passwordInput.text = ""
65 }
66 }
67
68 Button {
69 id: cancelButton
70 text: i18n.tr("Cancel")
71 color: UbuntuColors.red
72 width: (parent.width - parent.spacing) / 2
73 onClicked: PopupUtils.close(passwordDialog)
74 }
75 }
76
77 Component.onCompleted: passwordInput.forceActiveFocus()
78
79 Component.onDestruction: {
80 if (switchPage) {
81 pageStack.clear()
82 pageStack.push(Qt.resolvedUrl("ContainersView.qml"))
83 }
84 }
85
86 function passwordAccepted(password) {
87 var container_id = containerConfigList.addNewContainer("lxc", containerName)
88 var comp = Qt.createComponent("ContainerManager.qml")
89 var worker = comp.createObject(mainView)
90
91 worker.updateOperationDetails.connect(mainView.updateOperationDetails)
92 worker.operationFinished.connect(mainView.resetOperationDetails)
93 worker.error.connect(mainView.error)
94
95 worker.createContainer(container_id, containerConfigList.getContainerName(container_id),
96 containerConfigList.getContainerDistro(container_id), enableMultiarch, password)
97 }
98}
990
=== modified file 'libertine/qml/ContainersView.qml'
--- libertine/qml/ContainersView.qml 2016-06-08 21:36:14 +0000
+++ libertine/qml/ContainersView.qml 2016-07-21 17:26:05 +0000
@@ -35,8 +35,7 @@
35 Action {35 Action {
36 iconName: "add"36 iconName: "add"
37 onTriggered: {37 onTriggered: {
38 var popup = PopupUtils.open(Qt.resolvedUrl("ContainerOptionsDialog.qml"))38 PopupUtils.open(Qt.resolvedUrl("ContainerOptionsDialog.qml"))
39 popup.passwordDialogSignal.connect(showPasswordDialog)
40 }39 }
41 }40 }
42 ]41 ]
4342
=== modified file 'libertine/qml/ExtraArchivesView.qml'
--- libertine/qml/ExtraArchivesView.qml 2016-06-27 14:43:49 +0000
+++ libertine/qml/ExtraArchivesView.qml 2016-07-21 17:26:05 +0000
@@ -1,6 +1,6 @@
1/**1/**
2 * @file ExtraArchiveView.qml2 * @file ExtraArchiveView.qml
3 * @brief Libertine container add archive view3 * @brief Libertine container extra archive view
4 */4 */
5/*5/*
6 * Copyright 2016 Canonical Ltd6 * Copyright 2016 Canonical Ltd
@@ -19,59 +19,25 @@
19import Libertine 1.019import Libertine 1.0
20import QtQuick 2.420import QtQuick 2.4
21import Ubuntu.Components 1.321import Ubuntu.Components 1.3
22import Ubuntu.Components.Popups 1.3
2322
24Page {23Page {
25 id: extraArchiveView24 id: extraArchiveView
26 header: PageHeader {25 header: PageHeader {
27 id: pageHeader26 id: pageHeader
28 title: i18n.tr("Additional Archives and PPAs")27 title: i18n.tr("Additional Archives")
29 trailingActionBar.actions: [28 trailingActionBar.actions: [
30 Action {29 Action {
31 iconName: "add"30 iconName: "add"
32 text: i18n.tr("add")31 text: i18n.tr("add")
33 description: i18n.tr("Add a new PPA")32 description: i18n.tr("Add a new archive")
34 onTriggered: PopupUtils.open(addArchivePopup)33 onTriggered: pageStack.push(Qt.resolvedUrl("AddExtraArchiveView.qml"), {currentContainer: currentContainer})
35 }34 }
36 ]35 ]
37 }36 }
38 property var archive_name: null37 property string currentContainer: ""
39 property var worker: null38
40 signal error(string description, string details)39 signal error(string description, string details)
4140
42 Component {
43 id: addArchivePopup
44 Dialog {
45 id: addArchiveDialog
46 title: i18n.tr("Add additional PPA")
47 text: i18n.tr("Enter name of PPA in the form ppa:user/ppa-name:")
48
49 TextField {
50 id: extraArchiveString
51 onAccepted: {
52 PopupUtils.close(addArchiveDialog)
53 addArchive(text)
54 }
55 }
56 Button {
57 text: i18n.tr("OK")
58 color: UbuntuColors.green
59 onClicked: {
60 PopupUtils.close(addArchiveDialog)
61 addArchive(extraArchiveString.text)
62 }
63 }
64 Button {
65 text: i18n.tr("Cancel")
66 color: UbuntuColors.red
67 onClicked: PopupUtils.close(addArchiveDialog)
68 }
69 Component.onCompleted: {
70 extraArchiveString.forceActiveFocus()
71 }
72 }
73 }
74
75 UbuntuListView {41 UbuntuListView {
76 id: extraArchiveList42 id: extraArchiveList
77 anchors {43 anchors {
@@ -88,6 +54,8 @@
88 leftMargin: units.gu(2)54 leftMargin: units.gu(2)
89 }55 }
90 text: archiveName56 text: archiveName
57 width: parent.width - units.gu(8)
58 elide: Text.ElideMiddle
91 }59 }
92 ActivityIndicator {60 ActivityIndicator {
93 id: extraArchiveActivity61 id: extraArchiveActivity
@@ -125,18 +93,11 @@
125 text: i18n.tr("No additional archives and PPA's have been added")93 text: i18n.tr("No additional archives and PPA's have been added")
126 }94 }
12795
128 function addArchive(archive) {
129 var worker = Qt.createComponent("ContainerManager.qml").createObject(mainView)
130 worker.finishedConfigure.connect(finishedConfigure)
131 worker.error.connect(sendAddError)
132 worker.configureContainer(mainView.currentContainer, containerConfigList.getContainerName(mainView.currentContainer), ["--add-archive", archive])
133 }
134
135 function deleteArchive(archive) {96 function deleteArchive(archive) {
136 var worker = Qt.createComponent("ContainerManager.qml").createObject(mainView)97 var worker = Qt.createComponent("ContainerManager.qml").createObject(mainView)
137 worker.finishedConfigure.connect(finishedConfigure)98 worker.finishedConfigure.connect(finishedConfigure)
138 worker.error.connect(sendDeleteError)99 worker.error.connect(sendDeleteError)
139 worker.configureContainer(mainView.currentContainer, containerConfigList.getContainerName(mainView.currentContainer), ["--delete-archive", archive])100 worker.configureContainer(currentContainer, containerConfigList.getContainerName(currentContainer), ["--archive", "remove", "--archive-name", "\"" + archive + "\""])
140 }101 }
141102
142 Component.onCompleted: {103 Component.onCompleted: {
@@ -146,28 +107,19 @@
146107
147 Component.onDestruction: {108 Component.onDestruction: {
148 containerConfigList.configChanged.disconnect(reloadArchives)109 containerConfigList.configChanged.disconnect(reloadArchives)
149
150 error.disconnect(mainView.error)110 error.disconnect(mainView.error)
151
152 if (worker) {
153 worker.finishedConfigure.disconnect(finishedConfigure)
154 worker.error.disconnect(sendAddError)
155 worker.error.disconnect(sendDeleteError)
156 }
157 }111 }
158112
159 function reloadArchives() {113 function reloadArchives() {
160 containerArchivesList.setContainerArchives(mainView.currentContainer)114 containerArchivesList.setContainerArchives(currentContainer)
161115
162 extraArchiveList.visible = !containerArchivesList.empty() ? true : false116 extraArchiveList.visible = !containerArchivesList.empty() ? true : false
163 }117 }
164118
165 function finishedConfigure() {119 function finishedConfigure() {
166 containerArchivesList.setContainerArchives(mainView.currentContainer)120 if (extraArchiveView) {
167 }121 containerArchivesList.setContainerArchives(currentContainer)
168122 }
169 function sendAddError(desc, details) {
170 error(i18n.tr("Adding archive failed"), details)
171 }123 }
172124
173 function sendDeleteError(desc, details) {125 function sendDeleteError(desc, details) {
174126
=== modified file 'libertine/qml/ManageContainer.qml'
--- libertine/qml/ManageContainer.qml 2016-06-08 21:56:53 +0000
+++ libertine/qml/ManageContainer.qml 2016-07-21 17:26:05 +0000
@@ -74,7 +74,7 @@
74 progression: true74 progression: true
75 onClicked: {75 onClicked: {
76 containerArchivesList.setContainerArchives(currentContainer)76 containerArchivesList.setContainerArchives(currentContainer)
77 pageStack.push(Qt.resolvedUrl("ExtraArchivesView.qml"))77 pageStack.push(Qt.resolvedUrl("ExtraArchivesView.qml"), {currentContainer: currentContainer})
78 }78 }
79 }79 }
8080
8181
=== modified file 'libertine/qml/WelcomeView.qml'
--- libertine/qml/WelcomeView.qml 2016-05-09 13:24:23 +0000
+++ libertine/qml/WelcomeView.qml 2016-07-21 17:26:05 +0000
@@ -67,8 +67,7 @@
67 color: UbuntuColors.green67 color: UbuntuColors.green
6868
69 onClicked: {69 onClicked: {
70 var popup = PopupUtils.open(Qt.resolvedUrl("ContainerOptionsDialog.qml"))70 PopupUtils.open(Qt.resolvedUrl("ContainerOptionsDialog.qml"))
71 popup.passwordDialogSignal.connect(showPasswordDialog)
72 }71 }
73 }72 }
74 }73 }
7574
=== modified file 'liblibertine/CMakeLists.txt'
--- liblibertine/CMakeLists.txt 2016-03-09 15:09:05 +0000
+++ liblibertine/CMakeLists.txt 2016-07-21 17:26:05 +0000
@@ -12,7 +12,6 @@
12 ${libertine_src}/ContainerManager.cpp12 ${libertine_src}/ContainerManager.cpp
13 ${libertine_src}/ContainerAppsList.cpp13 ${libertine_src}/ContainerAppsList.cpp
14 ${libertine_src}/ContainerArchivesList.cpp14 ${libertine_src}/ContainerArchivesList.cpp
15 ${libertine_src}/PasswordHelper.cpp
16)15)
17set_target_properties(libertine-common PROPERTIES16set_target_properties(libertine-common PROPERTIES
18 VERSION ${ABI_VERSION}.0.017 VERSION ${ABI_VERSION}.0.0
1918
=== modified file 'po/en_GB.po'
--- po/en_GB.po 2016-07-15 05:42:05 +0000
+++ po/en_GB.po 2016-07-21 17:26:05 +0000
@@ -6,15 +6,16 @@
6msgid ""6msgid ""
7msgstr ""7msgstr ""
8"Project-Id-Version: libertine\n"8"Project-Id-Version: libertine\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"9"Report-Msgid-Bugs-To: \n"
10"POT-Creation-Date: 2016-06-07 07:58-0400\n"10"POT-Creation-Date: 2016-06-07 07:58-0400\n"
11"PO-Revision-Date: 2016-05-20 16:53+0000\n"11"PO-Revision-Date: 2016-05-20 16:53+0000\n"
12"Last-Translator: Andi Chandler <Unknown>\n"12"Last-Translator: Andi Chandler <Unknown>\n"
13"Language-Team: English (United Kingdom) <en_GB@li.org>\n"13"Language-Team: English (United Kingdom) <en_GB@li.org>\n"
14"Language: \n"
14"MIME-Version: 1.0\n"15"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"16"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"17"Content-Transfer-Encoding: 8bit\n"
17"X-Launchpad-Export-Date: 2016-07-15 05:42+0000\n"18"X-Launchpad-Export-Date: 2016-07-01 06:06+0000\n"
18"X-Generator: Launchpad (build 18115)\n"19"X-Generator: Launchpad (build 18115)\n"
1920
20#: ../libertine/ContainerConfig.cpp:147 ../libertine/ContainerConfig.cpp:18421#: ../libertine/ContainerConfig.cpp:147 ../libertine/ContainerConfig.cpp:184
@@ -22,32 +23,32 @@
22msgstr "new"23msgstr "new"
2324
24#: ../libertine/ContainerConfig.cpp:148 ../libertine/ContainerConfig.cpp:18525#: ../libertine/ContainerConfig.cpp:148 ../libertine/ContainerConfig.cpp:185
25#: ../libertine/qml/ContainersView.qml:8126#: ../libertine/qml/ContainersView.qml:81 ../libertine/qml/HomeView.qml:197
26#: ../libertine/qml/ExtraArchivesView.qml:106 ../libertine/qml/HomeView.qml:20527#: ../libertine/qml/ExtraArchivesView.qml:99
27msgid "installing"28msgid "installing"
28msgstr "installing"29msgstr "installing"
2930
30#: ../libertine/ContainerConfig.cpp:149 ../libertine/qml/ContainersView.qml:11831#: ../libertine/ContainerConfig.cpp:149 ../libertine/qml/ContainersView.qml:119
31#: ../libertine/qml/ManageContainer.qml:8532#: ../libertine/qml/ManageContainer.qml:79
32#: ../libertine/qml/ManageContainer.qml:15233#: ../libertine/qml/ManageContainer.qml:119
33msgid "ready"34msgid "ready"
34msgstr "ready"35msgstr "ready"
3536
36#: ../libertine/ContainerConfig.cpp:150 ../libertine/qml/ContainersView.qml:11937#: ../libertine/ContainerConfig.cpp:150 ../libertine/qml/ContainersView.qml:120
37#: ../libertine/qml/ManageContainer.qml:9738#: ../libertine/qml/ManageContainer.qml:91
38#: ../libertine/qml/ManageContainer.qml:14839#: ../libertine/qml/ManageContainer.qml:115
39msgid "updating"40msgid "updating"
40msgstr "updating"41msgstr "updating"
4142
42#: ../libertine/ContainerConfig.cpp:151 ../libertine/ContainerConfig.cpp:18843#: ../libertine/ContainerConfig.cpp:151 ../libertine/ContainerConfig.cpp:188
43#: ../libertine/qml/ContainersView.qml:8244#: ../libertine/qml/ContainersView.qml:82 ../libertine/qml/HomeView.qml:198
44#: ../libertine/qml/ExtraArchivesView.qml:107 ../libertine/qml/HomeView.qml:20645#: ../libertine/qml/ExtraArchivesView.qml:100
45msgid "removing"46msgid "removing"
46msgstr "removing"47msgstr "removing"
4748
48#: ../libertine/ContainerConfig.cpp:152 ../libertine/ContainerConfig.cpp:18949#: ../libertine/ContainerConfig.cpp:152 ../libertine/ContainerConfig.cpp:189
49#: ../libertine/qml/ContainerInfoView.qml:14350#: ../libertine/qml/PackageInfoView.qml:131
50#: ../libertine/qml/PackageInfoView.qml:14851#: ../libertine/qml/ContainerInfoView.qml:93
51msgid "removed"52msgid "removed"
52msgstr "removed"53msgstr "removed"
5354
@@ -115,7 +116,7 @@
115msgid "My Containers"116msgid "My Containers"
116msgstr "My Containers"117msgstr "My Containers"
117118
118#: ../libertine/qml/ContainersView.qml:92 ../libertine/qml/HomeView.qml:218119#: ../libertine/qml/ContainersView.qml:92 ../libertine/qml/HomeView.qml:210
119msgid "delete"120msgid "delete"
120msgstr "delete"121msgstr "delete"
121122
@@ -123,19 +124,19 @@
123msgid "Delete Container"124msgid "Delete Container"
124msgstr "Delete Container"125msgstr "Delete Container"
125126
126#: ../libertine/qml/ContainersView.qml:107 ../libertine/qml/HomeView.qml:230127#: ../libertine/qml/ContainersView.qml:108 ../libertine/qml/HomeView.qml:222
127msgid "info"128msgid "info"
128msgstr "info"129msgstr "info"
129130
130#: ../libertine/qml/ContainersView.qml:108131#: ../libertine/qml/ContainersView.qml:109
131msgid "Container Info"132msgid "Container Info"
132msgstr "Container Info"133msgstr "Container Info"
133134
134#: ../libertine/qml/ContainersView.qml:116135#: ../libertine/qml/ContainersView.qml:117
135msgid "edit"136msgid "edit"
136msgstr "edit"137msgstr "edit"
137138
138#: ../libertine/qml/ContainersView.qml:117139#: ../libertine/qml/ContainersView.qml:118
139msgid "Container Apps"140msgid "Container Apps"
140msgstr "Container Apps"141msgstr "Container Apps"
141142
@@ -152,17 +153,17 @@
152msgid "search"153msgid "search"
153msgstr "search"154msgstr "search"
154155
156#: ../libertine/qml/SearchPackagesDialog.qml:39
157#: ../libertine/qml/ContainerPasswordDialog.qml:52
158#: ../libertine/qml/HomeView.qml:68 ../libertine/qml/ExtraArchivesView.qml:57
155#: ../libertine/qml/ContainerOptionsDialog.qml:64159#: ../libertine/qml/ContainerOptionsDialog.qml:64
156#: ../libertine/qml/ContainerPasswordDialog.qml:52
157#: ../libertine/qml/ExtraArchivesView.qml:64 ../libertine/qml/HomeView.qml:68
158#: ../libertine/qml/SearchPackagesDialog.qml:39
159msgid "OK"160msgid "OK"
160msgstr "OK"161msgstr "OK"
161162
163#: ../libertine/qml/SearchPackagesDialog.qml:57
164#: ../libertine/qml/ContainerPasswordDialog.qml:70
165#: ../libertine/qml/HomeView.qml:88 ../libertine/qml/ExtraArchivesView.qml:65
162#: ../libertine/qml/ContainerOptionsDialog.qml:75166#: ../libertine/qml/ContainerOptionsDialog.qml:75
163#: ../libertine/qml/ContainerPasswordDialog.qml:70
164#: ../libertine/qml/ExtraArchivesView.qml:72 ../libertine/qml/HomeView.qml:88
165#: ../libertine/qml/SearchPackagesDialog.qml:57
166msgid "Cancel"167msgid "Cancel"
167msgstr "Cancel"168msgstr "Cancel"
168169
@@ -174,15 +175,15 @@
174msgid "Obtaining package version…"175msgid "Obtaining package version…"
175msgstr "Obtaining package version…"176msgstr "Obtaining package version…"
176177
177#: ../libertine/qml/PackageInfoView.qml:60178#: ../libertine/qml/PackageInfoView.qml:59
178msgid "Package version"179msgid "Package version"
179msgstr "Package version"180msgstr "Package version"
180181
181#: ../libertine/qml/PackageInfoView.qml:68182#: ../libertine/qml/PackageInfoView.qml:67
182msgid "Install status"183msgid "Install status"
183msgstr "Install status"184msgstr "Install status"
184185
185#: ../libertine/qml/PackageInfoView.qml:159186#: ../libertine/qml/PackageInfoView.qml:140
186msgid "Unknown"187msgid "Unknown"
187msgstr "Unknown"188msgstr "Unknown"
188189
@@ -210,8 +211,8 @@
210msgid "Searching for packages…"211msgid "Searching for packages…"
211msgstr "Searching for packages…"212msgstr "Searching for packages…"
212213
214#: ../libertine/qml/SearchResults.qml:60
213#: ../libertine/qml/DebianPackagePicker.qml:70215#: ../libertine/qml/DebianPackagePicker.qml:70
214#: ../libertine/qml/SearchResults.qml:60
215msgid "Install Package"216msgid "Install Package"
216msgstr "Install Package"217msgstr "Install Package"
217218
@@ -219,20 +220,20 @@
219msgid "Manage %1"220msgid "Manage %1"
220msgstr "Manage %1"221msgstr "Manage %1"
221222
223#: ../libertine/qml/ManageContainer.qml:63
222#: ../libertine/qml/ContainerOptionsDialog.qml:40224#: ../libertine/qml/ContainerOptionsDialog.qml:40
223#: ../libertine/qml/ManageContainer.qml:69
224msgid "i386 multiarch support"225msgid "i386 multiarch support"
225msgstr "i386 multiarch support"226msgstr "i386 multiarch support"
226227
227#: ../libertine/qml/ManageContainer.qml:73228#: ../libertine/qml/ManageContainer.qml:67
228msgid "Additional archives and PPAs"229msgid "Additional archives and PPAs"
229msgstr "Additional archives and PPAs"230msgstr "Additional archives and PPAs"
230231
231#: ../libertine/qml/ManageContainer.qml:84232#: ../libertine/qml/ManageContainer.qml:78
232msgid "Update…"233msgid "Update…"
233msgstr "Update…"234msgstr "Update…"
234235
235#: ../libertine/qml/ManageContainer.qml:100236#: ../libertine/qml/ManageContainer.qml:94
236msgid "Update container"237msgid "Update container"
237msgstr "Update container"238msgstr "Update container"
238239
@@ -282,39 +283,39 @@
282msgstr ""283msgstr ""
283"The %1 package is already installed. Please try a different package name."284"The %1 package is already installed. Please try a different package name."
284285
285#: ../libertine/qml/HomeView.qml:105286#: ../libertine/qml/HomeView.qml:104
286msgid "Manage Container"287msgid "Manage Container"
287msgstr "Manage Container"288msgstr "Manage Container"
288289
289#: ../libertine/qml/HomeView.qml:112290#: ../libertine/qml/HomeView.qml:110
290msgid "Container Information"291msgid "Container Information"
291msgstr "Container Information"292msgstr "Container Information"
292293
293#: ../libertine/qml/HomeView.qml:119294#: ../libertine/qml/HomeView.qml:116
294msgid "Switch Container"295msgid "Switch Container"
295msgstr "Switch Container"296msgstr "Switch Container"
296297
297#: ../libertine/qml/HomeView.qml:135298#: ../libertine/qml/HomeView.qml:132
298msgid "Enter package name or Debian file"299msgid "Enter package name or Debian file"
299msgstr "Enter package name or Debian file"300msgstr "Enter package name or Debian file"
300301
301#: ../libertine/qml/HomeView.qml:143302#: ../libertine/qml/HomeView.qml:138
302msgid "Choose Debian package to install"303msgid "Choose Debian package to install"
303msgstr "Choose Debian package to install"304msgstr "Choose Debian package to install"
304305
305#: ../libertine/qml/HomeView.qml:152306#: ../libertine/qml/HomeView.qml:145
306msgid "Search archives for a package"307msgid "Search archives for a package"
307msgstr "Search archives for a package"308msgstr "Search archives for a package"
308309
309#: ../libertine/qml/HomeView.qml:219310#: ../libertine/qml/HomeView.qml:211
310msgid "Remove Package"311msgid "Remove Package"
311msgstr "Remove Package"312msgstr "Remove Package"
312313
313#: ../libertine/qml/HomeView.qml:231314#: ../libertine/qml/HomeView.qml:223
314msgid "Package Info"315msgid "Package Info"
315msgstr "Package Info"316msgstr "Package Info"
316317
317#: ../libertine/qml/HomeView.qml:248318#: ../libertine/qml/HomeView.qml:240
318msgid "No packages are installed"319msgid "No packages are installed"
319msgstr "No packages are installed"320msgstr "No packages are installed"
320321
@@ -338,27 +339,27 @@
338msgid "Enter name of PPA in the form ppa:user/ppa-name:"339msgid "Enter name of PPA in the form ppa:user/ppa-name:"
339msgstr "Enter name of PPA in the form ppa:user/ppa-name:"340msgstr "Enter name of PPA in the form ppa:user/ppa-name:"
340341
341#: ../libertine/qml/ExtraArchivesView.qml:114342#: ../libertine/qml/ExtraArchivesView.qml:107
342msgid "remove"343msgid "remove"
343msgstr "remove"344msgstr "remove"
344345
345#: ../libertine/qml/ExtraArchivesView.qml:115346#: ../libertine/qml/ExtraArchivesView.qml:108
346msgid "Remove extra archive"347msgid "Remove extra archive"
347msgstr "Remove extra archive"348msgstr "Remove extra archive"
348349
349#: ../libertine/qml/ExtraArchivesView.qml:132350#: ../libertine/qml/ExtraArchivesView.qml:125
350msgid "No additional archives and PPA's have been added"351msgid "No additional archives and PPA's have been added"
351msgstr "No additional archives and PPAs have been added"352msgstr "No additional archives and PPAs have been added"
352353
353#: ../libertine/qml/ExtraArchivesView.qml:177354#: ../libertine/qml/ExtraArchivesView.qml:173
354msgid "Adding archive failed"355msgid "Adding archive failed"
355msgstr "Adding archive failed"356msgstr "Adding archive failed"
356357
357#: ../libertine/qml/ExtraArchivesView.qml:181358#: ../libertine/qml/ExtraArchivesView.qml:177
358msgid "Deleting archive failed"359msgid "Deleting archive failed"
359msgstr "Deleting archive failed"360msgstr "Deleting archive failed"
360361
361#: ../libertine/qml/GenericErrorDialog.qml:46362#: ../libertine/qml/GenericErrorDialog.qml:32
362msgid "Dismiss"363msgid "Dismiss"
363msgstr "Dismiss"364msgstr "Dismiss"
364365
@@ -388,19 +389,19 @@
388msgid "Container information for %1"389msgid "Container information for %1"
389msgstr "Container information for %1"390msgstr "Container information for %1"
390391
391#: ../libertine/qml/ContainerInfoView.qml:56392#: ../libertine/qml/ContainerInfoView.qml:53
392msgid "ID"393msgid "ID"
393msgstr "ID"394msgstr "ID"
394395
395#: ../libertine/qml/ContainerInfoView.qml:64396#: ../libertine/qml/ContainerInfoView.qml:60
396msgid "Name"397msgid "Name"
397msgstr "Name"398msgstr "Name"
398399
399#: ../libertine/qml/ContainerInfoView.qml:72400#: ../libertine/qml/ContainerInfoView.qml:67
400msgid "Distribution"401msgid "Distribution"
401msgstr "Distribution"402msgstr "Distribution"
402403
403#: ../libertine/qml/ContainerInfoView.qml:80404#: ../libertine/qml/ContainerInfoView.qml:74
404msgid "Status"405msgid "Status"
405msgstr "Status"406msgstr "Status"
406407
@@ -419,3 +420,41 @@
419#: ../libertine/qml/ContainerOptionsDialog.qml:56420#: ../libertine/qml/ContainerOptionsDialog.qml:56
420msgid "container name"421msgid "container name"
421msgstr "container name"422msgstr "container name"
423
424#, fuzzy
425#~ msgid "Add"
426#~ msgstr "add"
427
428#, fuzzy
429#~ msgid "Add Archive"
430#~ msgstr "Adding archive failed"
431
432#, fuzzy
433#~ msgid "Add a new archive"
434#~ msgstr "Add additional PPA"
435
436#, fuzzy
437#~ msgid "Additional Archives"
438#~ msgstr "Add additional PPA"
439
440#, fuzzy
441#~ msgid "Attempt to set container as default failed"
442#~ msgstr "Attempt to configure container %1 failed"
443
444#, fuzzy
445#~ msgid "Default container"
446#~ msgstr "Delete Container"
447
448#, fuzzy
449#~ msgid "Enter a name for the container or leave blank for default name:"
450#~ msgstr "Enter or name for the container or leave blank for default name"
451
452#, fuzzy
453#~ msgid ""
454#~ "Enter password for your user in the Libertine container or leave blank "
455#~ "for no password:"
456#~ msgstr "Enter or name for the container or leave blank for default name"
457
458#, fuzzy
459#~ msgid "new archive name"
460#~ msgstr "Adding archive failed"
422461
=== modified file 'po/en_US.po'
--- po/en_US.po 2016-06-10 12:07:31 +0000
+++ po/en_US.po 2016-07-21 17:26:05 +0000
@@ -7,7 +7,7 @@
7msgstr ""7msgstr ""
8"Project-Id-Version: PACKAGE VERSION\n"8"Project-Id-Version: PACKAGE VERSION\n"
9"Report-Msgid-Bugs-To: \n"9"Report-Msgid-Bugs-To: \n"
10"POT-Creation-Date: 2016-06-07 07:58-0400\n"10"POT-Creation-Date: 2016-07-15 14:24-0400\n"
11"PO-Revision-Date: 2016-03-21 10:21-0400\n"11"PO-Revision-Date: 2016-03-21 10:21-0400\n"
12"Last-Translator: Chris Townsend <christopher.townsend@canonical.com>\n"12"Last-Translator: Chris Townsend <christopher.townsend@canonical.com>\n"
13"Language-Team: English\n"13"Language-Team: English\n"
@@ -17,348 +17,332 @@
17"Content-Transfer-Encoding: 8bit\n"17"Content-Transfer-Encoding: 8bit\n"
18"Plural-Forms: nplurals=2; plural=(n != 1);\n"18"Plural-Forms: nplurals=2; plural=(n != 1);\n"
1919
20#: ../libertine/ContainerConfig.cpp:147 ../libertine/ContainerConfig.cpp:18420#: ../libertine/ContainerManager.cpp:25
21msgid "new"
22msgstr "new"
23
24#: ../libertine/ContainerConfig.cpp:148 ../libertine/ContainerConfig.cpp:185
25#: ../libertine/qml/ContainersView.qml:81 ../libertine/qml/HomeView.qml:197
26#: ../libertine/qml/ExtraArchivesView.qml:99
27msgid "installing"
28msgstr "installing"
29
30#: ../libertine/ContainerConfig.cpp:149 ../libertine/qml/ContainersView.qml:119
31#: ../libertine/qml/ManageContainer.qml:79
32#: ../libertine/qml/ManageContainer.qml:119
33msgid "ready"
34msgstr "ready"
35
36#: ../libertine/ContainerConfig.cpp:150 ../libertine/qml/ContainersView.qml:120
37#: ../libertine/qml/ManageContainer.qml:91
38#: ../libertine/qml/ManageContainer.qml:115
39msgid "updating"
40msgstr "updating"
41
42#: ../libertine/ContainerConfig.cpp:151 ../libertine/ContainerConfig.cpp:188
43#: ../libertine/qml/ContainersView.qml:82 ../libertine/qml/HomeView.qml:198
44#: ../libertine/qml/ExtraArchivesView.qml:100
45msgid "removing"
46msgstr "removing"
47
48#: ../libertine/ContainerConfig.cpp:152 ../libertine/ContainerConfig.cpp:189
49#: ../libertine/qml/PackageInfoView.qml:131
50#: ../libertine/qml/ContainerInfoView.qml:93
51msgid "removed"
52msgstr "removed"
53
54#: ../libertine/ContainerConfig.cpp:153 ../libertine/ContainerConfig.cpp:187
55msgid "failed"
56msgstr "failed"
57
58#: ../libertine/ContainerConfig.cpp:186
59msgid "installed"
60msgstr "installed"
61
62#: ../libertine/ContainerManager.cpp:24
63msgid "%1 failed to start"21msgid "%1 failed to start"
64msgstr "%1 failed to start"22msgstr "%1 failed to start"
6523
66#: ../libertine/ContainerManager.cpp:2524#: ../libertine/qml/AddExtraArchiveView.qml:73
67msgid "Installation of package %1 failed"25msgid "(Optional) Public signing key for archive"
68msgstr "Installation of package %1 failed"26msgstr ""
6927
70#: ../libertine/ContainerManager.cpp:2628#: ../libertine/qml/AddExtraArchiveView.qml:90
71msgid "Removal of package %1 failed"29#, fuzzy
72msgstr "Removal of package %1 failed"30msgid "Add"
7331msgstr "add"
74#: ../libertine/ContainerManager.cpp:2732
75msgid "Searching for query %1 failed"33#: ../libertine/qml/AddExtraArchiveView.qml:27
76msgstr "Searching for query %1 failed"34#, fuzzy
7735msgid "Add Archive"
78#: ../libertine/ContainerManager.cpp:2836msgstr "Adding archive failed"
79msgid "Updating container %1 failed"37
80msgstr "Updating container %1 failed"38#: ../libertine/qml/ExtraArchivesView.qml:32
8139#, fuzzy
82#: ../libertine/ContainerManager.cpp:2940msgid "Add a new archive"
41msgstr "Add additional PPA"
42
43#: ../libertine/qml/ExtraArchivesView.qml:27
44#, fuzzy
45msgid "Additional Archives"
46msgstr "Add additional PPA"
47
48#: ../libertine/qml/ManageContainer.qml:73
49msgid "Additional archives and PPAs"
50msgstr "Additional archives and PPAs"
51
52#: ../libertine/ContainerManager.cpp:33
53msgid "Attempt to configure container %1 failed"
54msgstr "Attempt to configure container %1 failed"
55
56#: ../libertine/ContainerManager.cpp:34
57#, fuzzy
58msgid "Attempt to set container as default failed"
59msgstr "Attempt to configure container %1 failed"
60
61#: ../libertine/qml/DebianPackagePicker.qml:28
62msgid "Available Debian Packages to Install"
63msgstr "Available Debian Packages to Install"
64
65#: ../libertine/qml/SearchPackagesDialog.qml:57
66#: ../libertine/qml/HomeView.qml:88
67#: ../libertine/qml/ContainerOptionsDialog.qml:88
68msgid "Cancel"
69msgstr "Cancel"
70
71#: ../libertine/qml/HomeView.qml:143
72msgid "Choose Debian package to install"
73msgstr "Choose Debian package to install"
74
75#: ../libertine/qml/HomeView.qml:29
76msgid "Classic Apps - %1"
77msgstr "Classic Apps - %1"
78
79#: ../libertine/qml/ContainerOptionsDialog.qml:28
80msgid "Configure options for container creation."
81msgstr "Configure options for container creation."
82
83#: ../libertine/qml/ContainersView.qml:116
84msgid "Container Apps"
85msgstr "Container Apps"
86
87#: ../libertine/qml/ContainersView.qml:107
88msgid "Container Info"
89msgstr "Container Info"
90
91#: ../libertine/qml/HomeView.qml:112
92msgid "Container Information"
93msgstr "Container Information"
94
95#: ../libertine/qml/ContainerOptionsDialog.qml:27
96msgid "Container Options"
97msgstr "Container Options"
98
99#: ../libertine/qml/ContainerInfoView.qml:30
100msgid "Container information for %1"
101msgstr "Container information for %1"
102
103#: ../libertine/qml/GenericErrorDialog.qml:39
104msgid "Copy to Clipboard"
105msgstr ""
106
107#: ../libertine/ContainerManager.cpp:30
83msgid "Creating container %1 failed"108msgid "Creating container %1 failed"
84msgstr "Creating container %1 failed"109msgstr "Creating container %1 failed"
85110
86#: ../libertine/ContainerManager.cpp:30111#: ../libertine/qml/ManageContainer.qml:117
112#, fuzzy
113msgid "Default container"
114msgstr "Delete Container"
115
116#: ../libertine/qml/ContainersView.qml:92
117msgid "Delete Container"
118msgstr "Delete Container"
119
120#: ../libertine/qml/ExtraArchivesView.qml:126
121msgid "Deleting archive failed"
122msgstr "Deleting archive failed"
123
124#: ../libertine/ContainerManager.cpp:31
87msgid "Destroying container %1 failed"125msgid "Destroying container %1 failed"
88msgstr "Destroying container %1 failed"126msgstr "Destroying container %1 failed"
89127
90#: ../libertine/ContainerManager.cpp:31128#: ../libertine/qml/GenericErrorDialog.qml:46
91msgid "Running command %1 failed"129msgid "Dismiss"
92msgstr "Running command %1 failed"130msgstr "Dismiss"
93131
94#: ../libertine/ContainerManager.cpp:32132#: ../libertine/qml/ContainerInfoView.qml:72
95msgid "Attempt to configure container %1 failed"133msgid "Distribution"
96msgstr "Attempt to configure container %1 failed"134msgstr "Distribution"
97135
98#: ../libertine/qml/PackageExistsDialog.qml:28136#: ../libertine/qml/ContainerOptionsDialog.qml:49
99msgid "The %1 package is already installed."137#, fuzzy
100msgstr "The %1 package is already installed."138msgid "Enter a name for the container or leave blank for default name:"
101139msgstr "Enter or name for the container or leave blank for default name"
102#: .:./libertine/qml/PackageExistsDialog.qml:29140
103msgid "Search again or return to search results."141#: ../libertine/qml/HomeView.qml:49
104msgstr "Search again or return to search results."142msgid "Enter exact package name or full path to a Debian package file"
105143msgstr "Enter exact package name or full path to a Debian package file"
106#: ../libertine/qml/PackageExistsDialog.qml:33144
107msgid "Search again"145#: ../libertine/qml/HomeView.qml:135
108msgstr "Search again"146msgid "Enter package name or Debian file"
109147msgstr "Enter package name or Debian file"
110#: ../libertine/qml/PackageExistsDialog.qml:43148
111msgid "Return to search results"149#: ../libertine/qml/ContainerOptionsDialog.qml:62
112msgstr "Return to search results"150#, fuzzy
151msgid ""
152"Enter password for your user in the Libertine container or leave blank for "
153"no password:"
154msgstr "Enter or name for the container or leave blank for default name"
155
156#: ../libertine/qml/ContainerInfoView.qml:56
157msgid "ID"
158msgstr "ID"
159
160#: ../libertine/qml/PackageInfoView.qml:30
161msgid "Information for the %1 package"
162msgstr "Information for the %1 package"
163
164#: ../libertine/qml/WelcomeView.qml:66
165msgid "Install"
166msgstr "Install"
167
168#: ../libertine/qml/SearchResults.qml:60
169#: ../libertine/qml/DebianPackagePicker.qml:70
170msgid "Install Package"
171msgstr "Install Package"
172
173#: ../libertine/qml/HomeView.qml:48
174msgid "Install new package"
175msgstr "Install new package"
176
177#: ../libertine/qml/PackageInfoView.qml:68
178msgid "Install status"
179msgstr "Install status"
180
181#: ../libertine/ContainerManager.cpp:26
182msgid "Installation of package %1 failed"
183msgstr "Installation of package %1 failed"
184
185#: ../libertine/qml/ManageContainer.qml:29
186msgid "Manage %1"
187msgstr "Manage %1"
188
189#: ../libertine/qml/HomeView.qml:105
190msgid "Manage Container"
191msgstr "Manage Container"
113192
114#: ../libertine/qml/ContainersView.qml:33193#: ../libertine/qml/ContainersView.qml:33
115msgid "My Containers"194msgid "My Containers"
116msgstr "My Containers"195msgstr "My Containers"
117196
118#: ../libertine/qml/ContainersView.qml:92 ../libertine/qml/HomeView.qml:210197#: ../libertine/qml/ContainerInfoView.qml:64
119msgid "delete"198msgid "Name"
120msgstr "delete"199msgstr "Name"
121200
122#: ../libertine/qml/ContainersView.qml:93201#: ../libertine/qml/AddExtraArchiveView.qml:42
123msgid "Delete Container"202msgid "New archive identifier, e.g."
124msgstr "Delete Container"203msgstr ""
125204
126#: ../libertine/qml/ContainersView.qml:108 ../libertine/qml/HomeView.qml:222205#: ../libertine/qml/DebianPackagePicker.qml:87
127msgid "info"206msgid "No Debian packages available"
128msgstr "info"207msgstr "No Debian packages available"
129208
130#: ../libertine/qml/ContainersView.qml:109209#: ../libertine/qml/SearchResultsView.qml:52
131msgid "Container Info"210msgid "No Search Results Found"
132msgstr "Container Info"211msgstr "No Search Results Found"
133212
134#: ../libertine/qml/ContainersView.qml:117213#: ../libertine/qml/ExtraArchivesView.qml:93
135msgid "edit"214msgid "No additional archives and PPA's have been added"
136msgstr "edit"215msgstr "No additional archives and PPA's have been added"
137216
138#: ../libertine/qml/ContainersView.qml:118217#: ../libertine/qml/HomeView.qml:248
139msgid "Container Apps"218msgid "No packages are installed"
140msgstr "Container Apps"219msgstr "No packages are installed"
141
142#: ../libertine/qml/SearchPackagesDialog.qml:26
143#: ../libertine/qml/SearchResultsView.qml:36
144msgid "Search for packages"
145msgstr "Search for packages"
146
147#: ../libertine/qml/SearchPackagesDialog.qml:27
148msgid "Search archives for packages"
149msgstr "Search archives for packages"
150
151#: ../libertine/qml/SearchPackagesDialog.qml:31
152msgid "search"
153msgstr "search"
154220
155#: ../libertine/qml/SearchPackagesDialog.qml:39221#: ../libertine/qml/SearchPackagesDialog.qml:39
156#: ../libertine/qml/ContainerPasswordDialog.qml:52222#: ../libertine/qml/HomeView.qml:68
157#: ../libertine/qml/HomeView.qml:68 ../libertine/qml/ExtraArchivesView.qml:57223#: ../libertine/qml/ContainerOptionsDialog.qml:77
158#: ../libertine/qml/ContainerOptionsDialog.qml:64
159msgid "OK"224msgid "OK"
160msgstr "OK"225msgstr "OK"
161226
162#: ../libertine/qml/SearchPackagesDialog.qml:57
163#: ../libertine/qml/ContainerPasswordDialog.qml:70
164#: ../libertine/qml/HomeView.qml:88 ../libertine/qml/ExtraArchivesView.qml:65
165#: ../libertine/qml/ContainerOptionsDialog.qml:75
166msgid "Cancel"
167msgstr "Cancel"
168
169#: ../libertine/qml/PackageInfoView.qml:30
170msgid "Information for the %1 package"
171msgstr "Information for the %1 package"
172
173#: ../libertine/qml/PackageInfoView.qml:35227#: ../libertine/qml/PackageInfoView.qml:35
174msgid "Obtaining package version…"228msgid "Obtaining package version…"
175msgstr "Obtaining package version…"229msgstr "Obtaining package version…"
176230
177#: ../libertine/qml/PackageInfoView.qml:59231#: ../libertine/qml/PackageInfoView.qml:85
178msgid "Package version"232#: ../libertine/qml/ContainerInfoView.qml:97
179msgstr "Package version"233msgid "Operation details"
180234msgstr ""
181#: ../libertine/qml/PackageInfoView.qml:67235
182msgid "Install status"236#: ../libertine/qml/HomeView.qml:231
183msgstr "Install status"237msgid "Package Info"
184238msgstr "Package Info"
185#: ../libertine/qml/PackageInfoView.qml:140
186msgid "Unknown"
187msgstr "Unknown"
188239
189#: ../libertine/qml/SearchResultsView.qml:31240#: ../libertine/qml/SearchResultsView.qml:31
190msgid "Package Search Results"241msgid "Package Search Results"
191msgstr "Package Search Results"242msgstr "Package Search Results"
192243
244#: ../libertine/qml/HomeView.qml:59
245msgid "Package name or Debian package path"
246msgstr "Package name or Debian package path"
247
248#: ../libertine/qml/PackageInfoView.qml:60
249msgid "Package version"
250msgstr "Package version"
251
252#: ../libertine/ContainerManager.cpp:27
253msgid "Removal of package %1 failed"
254msgstr "Removal of package %1 failed"
255
256#: ../libertine/qml/HomeView.qml:219
257msgid "Remove Package"
258msgstr "Remove Package"
259
260#: ../libertine/qml/ExtraArchivesView.qml:76
261msgid "Remove extra archive"
262msgstr "Remove extra archive"
263
264#: ../libertine/qml/SearchResultsView.qml:67
265msgid "Return to Apps Page"
266msgstr "Return to Apps Page"
267
268#: ../libertine/qml/PackageExistsDialog.qml:43
269msgid "Return to search results"
270msgstr "Return to search results"
271
272#: ../libertine/ContainerManager.cpp:32
273msgid "Running command %1 failed"
274msgstr "Running command %1 failed"
275
193#: ../libertine/qml/SearchResultsView.qml:35276#: ../libertine/qml/SearchResultsView.qml:35
194msgid "Search"277msgid "Search"
195msgstr "Search"278msgstr "Search"
196279
197#: ../libertine/qml/SearchResultsView.qml:52
198msgid "No Search Results Found"
199msgstr "No Search Results Found"
200
201#: ../libertine/qml/SearchResultsView.qml:57280#: ../libertine/qml/SearchResultsView.qml:57
202msgid "Search Again"281msgid "Search Again"
203msgstr "Search Again"282msgstr "Search Again"
204283
205#: ../libertine/qml/SearchResultsView.qml:67284#: ../libertine/qml/PackageExistsDialog.qml:33
206msgid "Return to Apps Page"285msgid "Search again"
207msgstr "Return to Apps Page"286msgstr "Search again"
287
288#: ../libertine/qml/PackageExistsDialog.qml:29
289msgid "Search again or return to search results."
290msgstr "Search again or return to search results."
291
292#: ../libertine/qml/HomeView.qml:152
293msgid "Search archives for a package"
294msgstr "Search archives for a package"
295
296#: ../libertine/qml/SearchPackagesDialog.qml:27
297msgid "Search archives for packages"
298msgstr "Search archives for packages"
299
300#: ../libertine/qml/SearchPackagesDialog.qml:26
301#: ../libertine/qml/SearchResultsView.qml:36
302msgid "Search for packages"
303msgstr "Search for packages"
208304
209#: ../libertine/qml/SearchResultsView.qml:95305#: ../libertine/qml/SearchResultsView.qml:95
210msgid "Searching for packages…"306msgid "Searching for packages…"
211msgstr "Searching for packages…"307msgstr "Searching for packages…"
212308
213#: ../libertine/qml/SearchResults.qml:60309#: ../libertine/ContainerManager.cpp:28
214#: ../libertine/qml/DebianPackagePicker.qml:70310msgid "Searching for query %1 failed"
215msgid "Install Package"311msgstr "Searching for query %1 failed"
216msgstr "Install Package"312
217313#: ../libertine/qml/ContainerInfoView.qml:80
218#: ../libertine/qml/ManageContainer.qml:29314msgid "Status"
219msgid "Manage %1"315msgstr "Status"
220msgstr "Manage %1"316
221317#: ../libertine/qml/HomeView.qml:119
222#: ../libertine/qml/ManageContainer.qml:63318msgid "Switch Container"
223#: ../libertine/qml/ContainerOptionsDialog.qml:40319msgstr "Switch Container"
224msgid "i386 multiarch support"320
225msgstr "i386 multiarch support"321#: ../libertine/qml/PackageExistsDialog.qml:28
226322msgid "The %1 package is already installed."
227#: ../libertine/qml/ManageContainer.qml:67323msgstr "The %1 package is already installed."
228msgid "Additional archives and PPAs"324
229msgstr "Additional archives and PPAs"325#: ../libertine/qml/HomeView.qml:78
230326msgid ""
231#: ../libertine/qml/ManageContainer.qml:78327"The %1 package is already installed. Please try a different package name."
328msgstr ""
329"The %1 package is already installed. Please try a different package name."
330
331#: ../libertine/qml/PackageInfoView.qml:159
332msgid "Unknown"
333msgstr "Unknown"
334
335#: ../libertine/qml/ManageContainer.qml:100
336msgid "Update container"
337msgstr "Update container"
338
339#: ../libertine/qml/ManageContainer.qml:84
232msgid "Update…"340msgid "Update…"
233msgstr "Update…"341msgstr "Update…"
234342
235#: ../libertine/qml/ManageContainer.qml:94343#: ../libertine/ContainerManager.cpp:29
236msgid "Update container"344msgid "Updating container %1 failed"
237msgstr "Update container"345msgstr "Updating container %1 failed"
238
239#: ../libertine/qml/DebianPackagePicker.qml:28
240msgid "Available Debian Packages to Install"
241msgstr "Available Debian Packages to Install"
242
243#: ../libertine/qml/DebianPackagePicker.qml:87
244msgid "No Debian packages available"
245msgstr "No Debian packages available"
246
247#: ../libertine/qml/ContainerPasswordDialog.qml:27
248msgid "Authentication required"
249msgstr "Authentication required"
250
251#: ../libertine/qml/ContainerPasswordDialog.qml:28
252msgid "Password is required to create a Libertine container"
253msgstr "Password is required to create a Libertine container"
254
255#: ../libertine/qml/ContainerPasswordDialog.qml:36
256msgid "Invalid password entered"
257msgstr "Invalid password entered"
258
259#: ../libertine/qml/ContainerPasswordDialog.qml:41
260msgid "password"
261msgstr "password"
262
263#: ../libertine/qml/HomeView.qml:29
264msgid "Classic Apps - %1"
265msgstr "Classic Apps - %1"
266
267#: ../libertine/qml/HomeView.qml:48
268msgid "Install new package"
269msgstr "Install new package"
270
271#: ../libertine/qml/HomeView.qml:49
272msgid "Enter exact package name or full path to a Debian package file"
273msgstr "Enter exact package name or full path to a Debian package file"
274
275#: ../libertine/qml/HomeView.qml:59
276msgid "Package name or Debian package path"
277msgstr "Package name or Debian package path"
278
279#: ../libertine/qml/HomeView.qml:78
280msgid "The %1 package is already installed. Please try a different package name."
281msgstr "The %1 package is already installed. Please try a different package name."
282
283#: ../libertine/qml/HomeView.qml:104
284msgid "Manage Container"
285msgstr "Manage Container"
286
287#: ../libertine/qml/HomeView.qml:110
288msgid "Container Information"
289msgstr "Container Information"
290
291#: ../libertine/qml/HomeView.qml:116
292msgid "Switch Container"
293msgstr "Switch Container"
294
295#: ../libertine/qml/HomeView.qml:132
296msgid "Enter package name or Debian file"
297msgstr "Enter package name or Debian file"
298
299#: ../libertine/qml/HomeView.qml:138
300msgid "Choose Debian package to install"
301msgstr "Choose Debian package to install"
302
303#: ../libertine/qml/HomeView.qml:145
304msgid "Search archives for a package"
305msgstr "Search archives for a package"
306
307#: ../libertine/qml/HomeView.qml:211
308msgid "Remove Package"
309msgstr "Remove Package"
310
311#: ../libertine/qml/HomeView.qml:223
312msgid "Package Info"
313msgstr "Package Info"
314
315#: ../libertine/qml/HomeView.qml:240
316msgid "No packages are installed"
317msgstr "No packages are installed"
318
319#: ../libertine/qml/ExtraArchivesView.qml:28
320msgid "Additional Archives and PPAs"
321msgstr "Additional Archives and PPAs"
322
323#: ../libertine/qml/ExtraArchivesView.qml:32
324msgid "add"
325msgstr "add"
326
327#: ../libertine/qml/ExtraArchivesView.qml:33
328msgid "Add a new PPA"
329msgstr "Add a new PPA"
330
331#: ../libertine/qml/ExtraArchivesView.qml:46
332msgid "Add additional PPA"
333msgstr "Add additional PPA"
334
335#: ../libertine/qml/ExtraArchivesView.qml:47
336msgid "Enter name of PPA in the form ppa:user/ppa-name:"
337msgstr "Enter name of PPA in the form ppa:user/ppa-name:"
338
339#: ../libertine/qml/ExtraArchivesView.qml:107
340msgid "remove"
341msgstr "remove"
342
343#: ../libertine/qml/ExtraArchivesView.qml:108
344msgid "Remove extra archive"
345msgstr "Remove extra archive"
346
347#: ../libertine/qml/ExtraArchivesView.qml:125
348msgid "No additional archives and PPA's have been added"
349msgstr "No additional archives and PPA's have been added"
350
351#: ../libertine/qml/ExtraArchivesView.qml:173
352msgid "Adding archive failed"
353msgstr "Adding archive failed"
354
355#: ../libertine/qml/ExtraArchivesView.qml:177
356msgid "Deleting archive failed"
357msgstr "Deleting archive failed"
358
359#: ../libertine/qml/GenericErrorDialog.qml:32
360msgid "Dismiss"
361msgstr "Dismiss"
362346
363#: ../libertine/qml/WelcomeView.qml:28347#: ../libertine/qml/WelcomeView.qml:28
364msgid "Welcome"348msgid "Welcome"
@@ -378,52 +362,110 @@
378"Downloading and setting up the required environment takes some time and "362"Downloading and setting up the required environment takes some time and "
379"network bandwidth."363"network bandwidth."
380364
381#: ../libertine/qml/WelcomeView.qml:66365#: ../libertine/qml/ExtraArchivesView.qml:31
382msgid "Install"366msgid "add"
383msgstr "Install"367msgstr "add"
384368
385#: ../libertine/qml/ContainerInfoView.qml:30369#: ../libertine/qml/ContainerOptionsDialog.qml:55
386msgid "Container information for %1"
387msgstr "Container information for %1"
388
389#: ../libertine/qml/ContainerInfoView.qml:53
390msgid "ID"
391msgstr "ID"
392
393#: ../libertine/qml/ContainerInfoView.qml:60
394msgid "Name"
395msgstr "Name"
396
397#: ../libertine/qml/ContainerInfoView.qml:67
398msgid "Distribution"
399msgstr "Distribution"
400
401#: ../libertine/qml/ContainerInfoView.qml:74
402msgid "Status"
403msgstr "Status"
404
405#: ../libertine/qml/ContainerOptionsDialog.qml:27
406msgid "Container Options"
407msgstr "Container Options"
408
409#: ../libertine/qml/ContainerOptionsDialog.qml:28
410msgid "Configure options for container creation."
411msgstr "Configure options for container creation."
412
413#: ../libertine/qml/ContainerOptionsDialog.qml:50
414msgid "Enter or name for the container or leave blank for default name"
415msgstr "Enter or name for the container or leave blank for default name"
416
417#: ../libertine/qml/ContainerOptionsDialog.qml:56
418msgid "container name"370msgid "container name"
419msgstr "container name"371msgstr "container name"
420372
373#: ../libertine/qml/ContainersView.qml:91 ../libertine/qml/HomeView.qml:218
374msgid "delete"
375msgstr "delete"
376
377#: ../libertine/qml/ContainersView.qml:115
378msgid "edit"
379msgstr "edit"
380
381#: ../libertine/ContainerConfig.cpp:153 ../libertine/ContainerConfig.cpp:187
382msgid "failed"
383msgstr "failed"
384
385#: ../libertine/qml/ManageContainer.qml:69
386#: ../libertine/qml/ContainerOptionsDialog.qml:39
387msgid "i386 multiarch support"
388msgstr "i386 multiarch support"
389
390#: ../libertine/qml/ContainersView.qml:106 ../libertine/qml/HomeView.qml:230
391msgid "info"
392msgstr "info"
393
394#: ../libertine/ContainerConfig.cpp:186
395msgid "installed"
396msgstr "installed"
397
398#: ../libertine/ContainerConfig.cpp:148 ../libertine/ContainerConfig.cpp:185
399#: ../libertine/qml/ContainersView.qml:80 ../libertine/qml/HomeView.qml:205
400#: ../libertine/qml/ExtraArchivesView.qml:67
401msgid "installing"
402msgstr "installing"
403
404#: ../libertine/qml/AddExtraArchiveView.qml:50
405msgid ""
406"multiverse\n"
407"ppa:user/repository\n"
408"deb http://myserver/repo stable repo"
409msgstr ""
410
411#: ../libertine/ContainerConfig.cpp:147 ../libertine/ContainerConfig.cpp:184
412msgid "new"
413msgstr "new"
414
415#: ../libertine/qml/ContainerOptionsDialog.qml:69
416msgid "password"
417msgstr "password"
418
419#: ../libertine/ContainerConfig.cpp:149 ../libertine/qml/ContainersView.qml:117
420#: ../libertine/qml/ManageContainer.qml:85
421#: ../libertine/qml/ManageContainer.qml:152
422msgid "ready"
423msgstr "ready"
424
425#: ../libertine/qml/ExtraArchivesView.qml:75
426msgid "remove"
427msgstr "remove"
428
429#: ../libertine/ContainerConfig.cpp:152 ../libertine/ContainerConfig.cpp:189
430#: ../libertine/qml/PackageInfoView.qml:148
431#: ../libertine/qml/ContainerInfoView.qml:143
432msgid "removed"
433msgstr "removed"
434
435#: ../libertine/ContainerConfig.cpp:151 ../libertine/ContainerConfig.cpp:188
436#: ../libertine/qml/ContainersView.qml:81 ../libertine/qml/HomeView.qml:206
437#: ../libertine/qml/ExtraArchivesView.qml:68
438msgid "removing"
439msgstr "removing"
440
441#: ../libertine/qml/SearchPackagesDialog.qml:31
442msgid "search"
443msgstr "search"
444
445#: ../libertine/ContainerConfig.cpp:150 ../libertine/qml/ContainersView.qml:118
446#: ../libertine/qml/ManageContainer.qml:97
447#: ../libertine/qml/ManageContainer.qml:148
448msgid "updating"
449msgstr "updating"
450
451#~ msgid "Add a new PPA"
452#~ msgstr "Add a new PPA"
453
454#~ msgid "Additional Archives and PPAs"
455#~ msgstr "Additional Archives and PPAs"
456
457#~ msgid "Authentication required"
458#~ msgstr "Authentication required"
459
421#~ msgid "Configure %1"460#~ msgid "Configure %1"
422#~ msgstr "Configure %1"461#~ msgstr "Configure %1"
423462
424#~ msgid "Configure Container"463#~ msgid "Configure Container"
425#~ msgstr "Configure Container"464#~ msgstr "Configure Container"
426465
466#~ msgid "Enter name of PPA in the form ppa:user/ppa-name:"
467#~ msgstr "Enter name of PPA in the form ppa:user/ppa-name:"
468
427#, fuzzy469#, fuzzy
428#~ msgid "Failure %1 the %2 package."470#~ msgid "Failure %1 the %2 package."
429#~ msgstr "Information for the %1 package"471#~ msgstr "Information for the %1 package"
@@ -434,6 +476,12 @@
434#~ msgid "Install Apps"476#~ msgid "Install Apps"
435#~ msgstr "Install Apps"477#~ msgstr "Install Apps"
436478
479#~ msgid "Invalid password entered"
480#~ msgstr "Invalid password entered"
481
482#~ msgid "Password is required to create a Libertine container"
483#~ msgstr "Password is required to create a Libertine container"
484
437#~ msgid "Please enter a package name to search for:"485#~ msgid "Please enter a package name to search for:"
438#~ msgstr "Please enter a package name to search for:"486#~ msgstr "Please enter a package name to search for:"
439487
@@ -443,3 +491,7 @@
443#, fuzzy491#, fuzzy
444#~ msgid "finding information for"492#~ msgid "finding information for"
445#~ msgstr "Container information for %1"493#~ msgstr "Container information for %1"
494
495#, fuzzy
496#~ msgid "new archive name"
497#~ msgstr "Adding archive failed"
446498
=== modified file 'po/es.po'
--- po/es.po 2016-07-15 05:42:05 +0000
+++ po/es.po 2016-07-21 17:26:05 +0000
@@ -6,15 +6,16 @@
6msgid ""6msgid ""
7msgstr ""7msgstr ""
8"Project-Id-Version: libertine\n"8"Project-Id-Version: libertine\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"9"Report-Msgid-Bugs-To: \n"
10"POT-Creation-Date: 2016-06-07 07:58-0400\n"10"POT-Creation-Date: 2016-06-07 07:58-0400\n"
11"PO-Revision-Date: 2016-06-12 08:23+0000\n"11"PO-Revision-Date: 2016-06-12 08:23+0000\n"
12"Last-Translator: Adolfo Jayme <fitoschido@gmail.com>\n"12"Last-Translator: Adolfo Jayme <fitoschido@gmail.com>\n"
13"Language-Team: Spanish <es@li.org>\n"13"Language-Team: Spanish <es@li.org>\n"
14"Language: es\n"
14"MIME-Version: 1.0\n"15"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"16"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"17"Content-Transfer-Encoding: 8bit\n"
17"X-Launchpad-Export-Date: 2016-07-15 05:42+0000\n"18"X-Launchpad-Export-Date: 2016-07-01 06:06+0000\n"
18"X-Generator: Launchpad (build 18115)\n"19"X-Generator: Launchpad (build 18115)\n"
1920
20#: ../libertine/ContainerConfig.cpp:147 ../libertine/ContainerConfig.cpp:18421#: ../libertine/ContainerConfig.cpp:147 ../libertine/ContainerConfig.cpp:184
@@ -22,32 +23,32 @@
22msgstr "nuevo"23msgstr "nuevo"
2324
24#: ../libertine/ContainerConfig.cpp:148 ../libertine/ContainerConfig.cpp:18525#: ../libertine/ContainerConfig.cpp:148 ../libertine/ContainerConfig.cpp:185
25#: ../libertine/qml/ContainersView.qml:8126#: ../libertine/qml/ContainersView.qml:81 ../libertine/qml/HomeView.qml:197
26#: ../libertine/qml/ExtraArchivesView.qml:106 ../libertine/qml/HomeView.qml:20527#: ../libertine/qml/ExtraArchivesView.qml:99
27msgid "installing"28msgid "installing"
28msgstr "instalando"29msgstr "instalando"
2930
30#: ../libertine/ContainerConfig.cpp:149 ../libertine/qml/ContainersView.qml:11831#: ../libertine/ContainerConfig.cpp:149 ../libertine/qml/ContainersView.qml:119
31#: ../libertine/qml/ManageContainer.qml:8532#: ../libertine/qml/ManageContainer.qml:79
32#: ../libertine/qml/ManageContainer.qml:15233#: ../libertine/qml/ManageContainer.qml:119
33msgid "ready"34msgid "ready"
34msgstr "preparado"35msgstr "preparado"
3536
36#: ../libertine/ContainerConfig.cpp:150 ../libertine/qml/ContainersView.qml:11937#: ../libertine/ContainerConfig.cpp:150 ../libertine/qml/ContainersView.qml:120
37#: ../libertine/qml/ManageContainer.qml:9738#: ../libertine/qml/ManageContainer.qml:91
38#: ../libertine/qml/ManageContainer.qml:14839#: ../libertine/qml/ManageContainer.qml:115
39msgid "updating"40msgid "updating"
40msgstr "actualizando"41msgstr "actualizando"
4142
42#: ../libertine/ContainerConfig.cpp:151 ../libertine/ContainerConfig.cpp:18843#: ../libertine/ContainerConfig.cpp:151 ../libertine/ContainerConfig.cpp:188
43#: ../libertine/qml/ContainersView.qml:8244#: ../libertine/qml/ContainersView.qml:82 ../libertine/qml/HomeView.qml:198
44#: ../libertine/qml/ExtraArchivesView.qml:107 ../libertine/qml/HomeView.qml:20645#: ../libertine/qml/ExtraArchivesView.qml:100
45msgid "removing"46msgid "removing"
46msgstr "desinstalando"47msgstr "desinstalando"
4748
48#: ../libertine/ContainerConfig.cpp:152 ../libertine/ContainerConfig.cpp:18949#: ../libertine/ContainerConfig.cpp:152 ../libertine/ContainerConfig.cpp:189
49#: ../libertine/qml/ContainerInfoView.qml:14350#: ../libertine/qml/PackageInfoView.qml:131
50#: ../libertine/qml/PackageInfoView.qml:14851#: ../libertine/qml/ContainerInfoView.qml:93
51msgid "removed"52msgid "removed"
52msgstr "desinstalado"53msgstr "desinstalado"
5354
@@ -115,7 +116,7 @@
115msgid "My Containers"116msgid "My Containers"
116msgstr "Mis contenedores"117msgstr "Mis contenedores"
117118
118#: ../libertine/qml/ContainersView.qml:92 ../libertine/qml/HomeView.qml:218119#: ../libertine/qml/ContainersView.qml:92 ../libertine/qml/HomeView.qml:210
119msgid "delete"120msgid "delete"
120msgstr "eliminar"121msgstr "eliminar"
121122
@@ -123,19 +124,19 @@
123msgid "Delete Container"124msgid "Delete Container"
124msgstr "Eliminar contenedor"125msgstr "Eliminar contenedor"
125126
126#: ../libertine/qml/ContainersView.qml:107 ../libertine/qml/HomeView.qml:230127#: ../libertine/qml/ContainersView.qml:108 ../libertine/qml/HomeView.qml:222
127msgid "info"128msgid "info"
128msgstr "información"129msgstr "información"
129130
130#: ../libertine/qml/ContainersView.qml:108131#: ../libertine/qml/ContainersView.qml:109
131msgid "Container Info"132msgid "Container Info"
132msgstr "Información del contenedor"133msgstr "Información del contenedor"
133134
134#: ../libertine/qml/ContainersView.qml:116135#: ../libertine/qml/ContainersView.qml:117
135msgid "edit"136msgid "edit"
136msgstr "editar"137msgstr "editar"
137138
138#: ../libertine/qml/ContainersView.qml:117139#: ../libertine/qml/ContainersView.qml:118
139msgid "Container Apps"140msgid "Container Apps"
140msgstr "Aplicaciones del contenedor"141msgstr "Aplicaciones del contenedor"
141142
@@ -152,17 +153,17 @@
152msgid "search"153msgid "search"
153msgstr "buscar"154msgstr "buscar"
154155
156#: ../libertine/qml/SearchPackagesDialog.qml:39
157#: ../libertine/qml/ContainerPasswordDialog.qml:52
158#: ../libertine/qml/HomeView.qml:68 ../libertine/qml/ExtraArchivesView.qml:57
155#: ../libertine/qml/ContainerOptionsDialog.qml:64159#: ../libertine/qml/ContainerOptionsDialog.qml:64
156#: ../libertine/qml/ContainerPasswordDialog.qml:52
157#: ../libertine/qml/ExtraArchivesView.qml:64 ../libertine/qml/HomeView.qml:68
158#: ../libertine/qml/SearchPackagesDialog.qml:39
159msgid "OK"160msgid "OK"
160msgstr "Aceptar"161msgstr "Aceptar"
161162
163#: ../libertine/qml/SearchPackagesDialog.qml:57
164#: ../libertine/qml/ContainerPasswordDialog.qml:70
165#: ../libertine/qml/HomeView.qml:88 ../libertine/qml/ExtraArchivesView.qml:65
162#: ../libertine/qml/ContainerOptionsDialog.qml:75166#: ../libertine/qml/ContainerOptionsDialog.qml:75
163#: ../libertine/qml/ContainerPasswordDialog.qml:70
164#: ../libertine/qml/ExtraArchivesView.qml:72 ../libertine/qml/HomeView.qml:88
165#: ../libertine/qml/SearchPackagesDialog.qml:57
166msgid "Cancel"167msgid "Cancel"
167msgstr "Cancelar"168msgstr "Cancelar"
168169
@@ -174,15 +175,15 @@
174msgid "Obtaining package version…"175msgid "Obtaining package version…"
175msgstr "Obteniendo la versión del paquete…"176msgstr "Obteniendo la versión del paquete…"
176177
177#: ../libertine/qml/PackageInfoView.qml:60178#: ../libertine/qml/PackageInfoView.qml:59
178msgid "Package version"179msgid "Package version"
179msgstr "Versión del paquete"180msgstr "Versión del paquete"
180181
181#: ../libertine/qml/PackageInfoView.qml:68182#: ../libertine/qml/PackageInfoView.qml:67
182msgid "Install status"183msgid "Install status"
183msgstr "Estado de la instalación"184msgstr "Estado de la instalación"
184185
185#: ../libertine/qml/PackageInfoView.qml:159186#: ../libertine/qml/PackageInfoView.qml:140
186msgid "Unknown"187msgid "Unknown"
187msgstr "Desconocido"188msgstr "Desconocido"
188189
@@ -210,8 +211,8 @@
210msgid "Searching for packages…"211msgid "Searching for packages…"
211msgstr "Buscando paquetes…"212msgstr "Buscando paquetes…"
212213
214#: ../libertine/qml/SearchResults.qml:60
213#: ../libertine/qml/DebianPackagePicker.qml:70215#: ../libertine/qml/DebianPackagePicker.qml:70
214#: ../libertine/qml/SearchResults.qml:60
215msgid "Install Package"216msgid "Install Package"
216msgstr "Instalar paquete"217msgstr "Instalar paquete"
217218
@@ -219,20 +220,20 @@
219msgid "Manage %1"220msgid "Manage %1"
220msgstr "Gestionar %1"221msgstr "Gestionar %1"
221222
223#: ../libertine/qml/ManageContainer.qml:63
222#: ../libertine/qml/ContainerOptionsDialog.qml:40224#: ../libertine/qml/ContainerOptionsDialog.qml:40
223#: ../libertine/qml/ManageContainer.qml:69
224msgid "i386 multiarch support"225msgid "i386 multiarch support"
225msgstr "Compatibilidad con i386 multiarquitectura"226msgstr "Compatibilidad con i386 multiarquitectura"
226227
227#: ../libertine/qml/ManageContainer.qml:73228#: ../libertine/qml/ManageContainer.qml:67
228msgid "Additional archives and PPAs"229msgid "Additional archives and PPAs"
229msgstr "Archivos y PPA adicionales"230msgstr "Archivos y PPA adicionales"
230231
231#: ../libertine/qml/ManageContainer.qml:84232#: ../libertine/qml/ManageContainer.qml:78
232msgid "Update…"233msgid "Update…"
233msgstr "Actualizar…"234msgstr "Actualizar…"
234235
235#: ../libertine/qml/ManageContainer.qml:100236#: ../libertine/qml/ManageContainer.qml:94
236msgid "Update container"237msgid "Update container"
237msgstr "Actualizar contenedor"238msgstr "Actualizar contenedor"
238239
@@ -281,42 +282,41 @@
281#: ../libertine/qml/HomeView.qml:78282#: ../libertine/qml/HomeView.qml:78
282msgid ""283msgid ""
283"The %1 package is already installed. Please try a different package name."284"The %1 package is already installed. Please try a different package name."
284msgstr ""285msgstr "El paquete «%1» ya está instalado. Pruebe con otro nombre de paquete."
285"El paquete «%1» ya está instalado. Pruebe con otro nombre de paquete."
286286
287#: ../libertine/qml/HomeView.qml:105287#: ../libertine/qml/HomeView.qml:104
288msgid "Manage Container"288msgid "Manage Container"
289msgstr "Gestionar contenedor"289msgstr "Gestionar contenedor"
290290
291#: ../libertine/qml/HomeView.qml:112291#: ../libertine/qml/HomeView.qml:110
292msgid "Container Information"292msgid "Container Information"
293msgstr "Información del contenedor"293msgstr "Información del contenedor"
294294
295#: ../libertine/qml/HomeView.qml:119295#: ../libertine/qml/HomeView.qml:116
296msgid "Switch Container"296msgid "Switch Container"
297msgstr "Cambiar de contenedor"297msgstr "Cambiar de contenedor"
298298
299#: ../libertine/qml/HomeView.qml:135299#: ../libertine/qml/HomeView.qml:132
300msgid "Enter package name or Debian file"300msgid "Enter package name or Debian file"
301msgstr "Escriba el nombre de un paquete o indique un archivo de Debian"301msgstr "Escriba el nombre de un paquete o indique un archivo de Debian"
302302
303#: ../libertine/qml/HomeView.qml:143303#: ../libertine/qml/HomeView.qml:138
304msgid "Choose Debian package to install"304msgid "Choose Debian package to install"
305msgstr "Elija el paquete de Debian que se instalará"305msgstr "Elija el paquete de Debian que se instalará"
306306
307#: ../libertine/qml/HomeView.qml:152307#: ../libertine/qml/HomeView.qml:145
308msgid "Search archives for a package"308msgid "Search archives for a package"
309msgstr "Buscar un paquete en los archivos"309msgstr "Buscar un paquete en los archivos"
310310
311#: ../libertine/qml/HomeView.qml:219311#: ../libertine/qml/HomeView.qml:211
312msgid "Remove Package"312msgid "Remove Package"
313msgstr "Desinstalar paquete"313msgstr "Desinstalar paquete"
314314
315#: ../libertine/qml/HomeView.qml:231315#: ../libertine/qml/HomeView.qml:223
316msgid "Package Info"316msgid "Package Info"
317msgstr "Información del paquete"317msgstr "Información del paquete"
318318
319#: ../libertine/qml/HomeView.qml:248319#: ../libertine/qml/HomeView.qml:240
320msgid "No packages are installed"320msgid "No packages are installed"
321msgstr "No hay ningún paquete instalado"321msgstr "No hay ningún paquete instalado"
322322
@@ -341,27 +341,27 @@
341msgstr ""341msgstr ""
342"Escriba el nombre del PPA según el formato «ppa:usuario/nombre-de-ppa»:"342"Escriba el nombre del PPA según el formato «ppa:usuario/nombre-de-ppa»:"
343343
344#: ../libertine/qml/ExtraArchivesView.qml:114344#: ../libertine/qml/ExtraArchivesView.qml:107
345msgid "remove"345msgid "remove"
346msgstr "quitar"346msgstr "quitar"
347347
348#: ../libertine/qml/ExtraArchivesView.qml:115348#: ../libertine/qml/ExtraArchivesView.qml:108
349msgid "Remove extra archive"349msgid "Remove extra archive"
350msgstr "quitar archivo adicional"350msgstr "quitar archivo adicional"
351351
352#: ../libertine/qml/ExtraArchivesView.qml:132352#: ../libertine/qml/ExtraArchivesView.qml:125
353msgid "No additional archives and PPA's have been added"353msgid "No additional archives and PPA's have been added"
354msgstr "No se ha añadido ningún archivo ni PPA adicional"354msgstr "No se ha añadido ningún archivo ni PPA adicional"
355355
356#: ../libertine/qml/ExtraArchivesView.qml:177356#: ../libertine/qml/ExtraArchivesView.qml:173
357msgid "Adding archive failed"357msgid "Adding archive failed"
358msgstr "Falló la adición del archivo"358msgstr "Falló la adición del archivo"
359359
360#: ../libertine/qml/ExtraArchivesView.qml:181360#: ../libertine/qml/ExtraArchivesView.qml:177
361msgid "Deleting archive failed"361msgid "Deleting archive failed"
362msgstr "Falló la eliminación del archivo"362msgstr "Falló la eliminación del archivo"
363363
364#: ../libertine/qml/GenericErrorDialog.qml:46364#: ../libertine/qml/GenericErrorDialog.qml:32
365msgid "Dismiss"365msgid "Dismiss"
366msgstr "Descartar"366msgstr "Descartar"
367367
@@ -392,19 +392,19 @@
392msgid "Container information for %1"392msgid "Container information for %1"
393msgstr "Información del contenedor «%1»"393msgstr "Información del contenedor «%1»"
394394
395#: ../libertine/qml/ContainerInfoView.qml:56395#: ../libertine/qml/ContainerInfoView.qml:53
396msgid "ID"396msgid "ID"
397msgstr "Id."397msgstr "Id."
398398
399#: ../libertine/qml/ContainerInfoView.qml:64399#: ../libertine/qml/ContainerInfoView.qml:60
400msgid "Name"400msgid "Name"
401msgstr "Nombre"401msgstr "Nombre"
402402
403#: ../libertine/qml/ContainerInfoView.qml:72403#: ../libertine/qml/ContainerInfoView.qml:67
404msgid "Distribution"404msgid "Distribution"
405msgstr "Distribución"405msgstr "Distribución"
406406
407#: ../libertine/qml/ContainerInfoView.qml:80407#: ../libertine/qml/ContainerInfoView.qml:74
408msgid "Status"408msgid "Status"
409msgstr "Estado"409msgstr "Estado"
410410
@@ -424,3 +424,45 @@
424#: ../libertine/qml/ContainerOptionsDialog.qml:56424#: ../libertine/qml/ContainerOptionsDialog.qml:56
425msgid "container name"425msgid "container name"
426msgstr "nombre del contenedor"426msgstr "nombre del contenedor"
427
428#, fuzzy
429#~ msgid "Add"
430#~ msgstr "añadir"
431
432#, fuzzy
433#~ msgid "Add Archive"
434#~ msgstr "Falló la adición del archivo"
435
436#, fuzzy
437#~ msgid "Add a new archive"
438#~ msgstr "Añadir un PPA adicional"
439
440#, fuzzy
441#~ msgid "Additional Archives"
442#~ msgstr "Añadir un PPA adicional"
443
444#, fuzzy
445#~ msgid "Attempt to set container as default failed"
446#~ msgstr "Falló el intento de configuración del contenedor «%1»"
447
448#, fuzzy
449#~ msgid "Default container"
450#~ msgstr "Eliminar contenedor"
451
452#, fuzzy
453#~ msgid "Enter a name for the container or leave blank for default name:"
454#~ msgstr ""
455#~ "Escriba el nombre del contenedor o déjelo vacío para usar el "
456#~ "predeterminado"
457
458#, fuzzy
459#~ msgid ""
460#~ "Enter password for your user in the Libertine container or leave blank "
461#~ "for no password:"
462#~ msgstr ""
463#~ "Escriba el nombre del contenedor o déjelo vacío para usar el "
464#~ "predeterminado"
465
466#, fuzzy
467#~ msgid "new archive name"
468#~ msgstr "Falló la adición del archivo"
427469
=== modified file 'po/it.po'
--- po/it.po 2016-07-15 05:42:05 +0000
+++ po/it.po 2016-07-21 17:26:05 +0000
@@ -6,15 +6,16 @@
6msgid ""6msgid ""
7msgstr ""7msgstr ""
8"Project-Id-Version: libertine\n"8"Project-Id-Version: libertine\n"
9"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"9"Report-Msgid-Bugs-To: \n"
10"POT-Creation-Date: 2016-06-07 07:58-0400\n"10"POT-Creation-Date: 2016-06-07 07:58-0400\n"
11"PO-Revision-Date: 2016-06-10 13:00+0000\n"11"PO-Revision-Date: 2016-06-10 13:00+0000\n"
12"Last-Translator: Emanuele Antonio Faraone <emanueleant03@gmail.com>\n"12"Last-Translator: Emanuele Antonio Faraone <emanueleant03@gmail.com>\n"
13"Language-Team: Italian <it@li.org>\n"13"Language-Team: Italian <it@li.org>\n"
14"Language: it\n"
14"MIME-Version: 1.0\n"15"MIME-Version: 1.0\n"
15"Content-Type: text/plain; charset=UTF-8\n"16"Content-Type: text/plain; charset=UTF-8\n"
16"Content-Transfer-Encoding: 8bit\n"17"Content-Transfer-Encoding: 8bit\n"
17"X-Launchpad-Export-Date: 2016-07-15 05:42+0000\n"18"X-Launchpad-Export-Date: 2016-07-01 06:06+0000\n"
18"X-Generator: Launchpad (build 18115)\n"19"X-Generator: Launchpad (build 18115)\n"
1920
20#: ../libertine/ContainerConfig.cpp:147 ../libertine/ContainerConfig.cpp:18421#: ../libertine/ContainerConfig.cpp:147 ../libertine/ContainerConfig.cpp:184
@@ -22,32 +23,32 @@
22msgstr "nuovo"23msgstr "nuovo"
2324
24#: ../libertine/ContainerConfig.cpp:148 ../libertine/ContainerConfig.cpp:18525#: ../libertine/ContainerConfig.cpp:148 ../libertine/ContainerConfig.cpp:185
25#: ../libertine/qml/ContainersView.qml:8126#: ../libertine/qml/ContainersView.qml:81 ../libertine/qml/HomeView.qml:197
26#: ../libertine/qml/ExtraArchivesView.qml:106 ../libertine/qml/HomeView.qml:20527#: ../libertine/qml/ExtraArchivesView.qml:99
27msgid "installing"28msgid "installing"
28msgstr "installando"29msgstr "installando"
2930
30#: ../libertine/ContainerConfig.cpp:149 ../libertine/qml/ContainersView.qml:11831#: ../libertine/ContainerConfig.cpp:149 ../libertine/qml/ContainersView.qml:119
31#: ../libertine/qml/ManageContainer.qml:8532#: ../libertine/qml/ManageContainer.qml:79
32#: ../libertine/qml/ManageContainer.qml:15233#: ../libertine/qml/ManageContainer.qml:119
33msgid "ready"34msgid "ready"
34msgstr "pronto"35msgstr "pronto"
3536
36#: ../libertine/ContainerConfig.cpp:150 ../libertine/qml/ContainersView.qml:11937#: ../libertine/ContainerConfig.cpp:150 ../libertine/qml/ContainersView.qml:120
37#: ../libertine/qml/ManageContainer.qml:9738#: ../libertine/qml/ManageContainer.qml:91
38#: ../libertine/qml/ManageContainer.qml:14839#: ../libertine/qml/ManageContainer.qml:115
39msgid "updating"40msgid "updating"
40msgstr "aggiornando"41msgstr "aggiornando"
4142
42#: ../libertine/ContainerConfig.cpp:151 ../libertine/ContainerConfig.cpp:18843#: ../libertine/ContainerConfig.cpp:151 ../libertine/ContainerConfig.cpp:188
43#: ../libertine/qml/ContainersView.qml:8244#: ../libertine/qml/ContainersView.qml:82 ../libertine/qml/HomeView.qml:198
44#: ../libertine/qml/ExtraArchivesView.qml:107 ../libertine/qml/HomeView.qml:20645#: ../libertine/qml/ExtraArchivesView.qml:100
45msgid "removing"46msgid "removing"
46msgstr "rimozione"47msgstr "rimozione"
4748
48#: ../libertine/ContainerConfig.cpp:152 ../libertine/ContainerConfig.cpp:18949#: ../libertine/ContainerConfig.cpp:152 ../libertine/ContainerConfig.cpp:189
49#: ../libertine/qml/ContainerInfoView.qml:14350#: ../libertine/qml/PackageInfoView.qml:131
50#: ../libertine/qml/PackageInfoView.qml:14851#: ../libertine/qml/ContainerInfoView.qml:93
51msgid "removed"52msgid "removed"
52msgstr "rimosso"53msgstr "rimosso"
5354
@@ -115,7 +116,7 @@
115msgid "My Containers"116msgid "My Containers"
116msgstr "Miei Contenitori"117msgstr "Miei Contenitori"
117118
118#: ../libertine/qml/ContainersView.qml:92 ../libertine/qml/HomeView.qml:218119#: ../libertine/qml/ContainersView.qml:92 ../libertine/qml/HomeView.qml:210
119msgid "delete"120msgid "delete"
120msgstr "elimina"121msgstr "elimina"
121122
@@ -123,19 +124,19 @@
123msgid "Delete Container"124msgid "Delete Container"
124msgstr "Elimina Contenitore"125msgstr "Elimina Contenitore"
125126
126#: ../libertine/qml/ContainersView.qml:107 ../libertine/qml/HomeView.qml:230127#: ../libertine/qml/ContainersView.qml:108 ../libertine/qml/HomeView.qml:222
127msgid "info"128msgid "info"
128msgstr "Informazioni"129msgstr "Informazioni"
129130
130#: ../libertine/qml/ContainersView.qml:108131#: ../libertine/qml/ContainersView.qml:109
131msgid "Container Info"132msgid "Container Info"
132msgstr "Informazioni Contenitore"133msgstr "Informazioni Contenitore"
133134
134#: ../libertine/qml/ContainersView.qml:116135#: ../libertine/qml/ContainersView.qml:117
135msgid "edit"136msgid "edit"
136msgstr "modifica"137msgstr "modifica"
137138
138#: ../libertine/qml/ContainersView.qml:117139#: ../libertine/qml/ContainersView.qml:118
139msgid "Container Apps"140msgid "Container Apps"
140msgstr "Contenitori App"141msgstr "Contenitori App"
141142
@@ -152,17 +153,17 @@
152msgid "search"153msgid "search"
153msgstr "Cerca"154msgstr "Cerca"
154155
156#: ../libertine/qml/SearchPackagesDialog.qml:39
157#: ../libertine/qml/ContainerPasswordDialog.qml:52
158#: ../libertine/qml/HomeView.qml:68 ../libertine/qml/ExtraArchivesView.qml:57
155#: ../libertine/qml/ContainerOptionsDialog.qml:64159#: ../libertine/qml/ContainerOptionsDialog.qml:64
156#: ../libertine/qml/ContainerPasswordDialog.qml:52
157#: ../libertine/qml/ExtraArchivesView.qml:64 ../libertine/qml/HomeView.qml:68
158#: ../libertine/qml/SearchPackagesDialog.qml:39
159msgid "OK"160msgid "OK"
160msgstr "Ok"161msgstr "Ok"
161162
163#: ../libertine/qml/SearchPackagesDialog.qml:57
164#: ../libertine/qml/ContainerPasswordDialog.qml:70
165#: ../libertine/qml/HomeView.qml:88 ../libertine/qml/ExtraArchivesView.qml:65
162#: ../libertine/qml/ContainerOptionsDialog.qml:75166#: ../libertine/qml/ContainerOptionsDialog.qml:75
163#: ../libertine/qml/ContainerPasswordDialog.qml:70
164#: ../libertine/qml/ExtraArchivesView.qml:72 ../libertine/qml/HomeView.qml:88
165#: ../libertine/qml/SearchPackagesDialog.qml:57
166msgid "Cancel"167msgid "Cancel"
167msgstr "Annulla"168msgstr "Annulla"
168169
@@ -174,15 +175,15 @@
174msgid "Obtaining package version…"175msgid "Obtaining package version…"
175msgstr ""176msgstr ""
176177
177#: ../libertine/qml/PackageInfoView.qml:60178#: ../libertine/qml/PackageInfoView.qml:59
178msgid "Package version"179msgid "Package version"
179msgstr "Versione pacchetto"180msgstr "Versione pacchetto"
180181
181#: ../libertine/qml/PackageInfoView.qml:68182#: ../libertine/qml/PackageInfoView.qml:67
182msgid "Install status"183msgid "Install status"
183msgstr "Stato installazione"184msgstr "Stato installazione"
184185
185#: ../libertine/qml/PackageInfoView.qml:159186#: ../libertine/qml/PackageInfoView.qml:140
186msgid "Unknown"187msgid "Unknown"
187msgstr "Sconosciuto"188msgstr "Sconosciuto"
188189
@@ -210,8 +211,8 @@
210msgid "Searching for packages…"211msgid "Searching for packages…"
211msgstr "Cercando nei pacchetti..."212msgstr "Cercando nei pacchetti..."
212213
214#: ../libertine/qml/SearchResults.qml:60
213#: ../libertine/qml/DebianPackagePicker.qml:70215#: ../libertine/qml/DebianPackagePicker.qml:70
214#: ../libertine/qml/SearchResults.qml:60
215msgid "Install Package"216msgid "Install Package"
216msgstr "Installa pacchetto"217msgstr "Installa pacchetto"
217218
@@ -219,20 +220,20 @@
219msgid "Manage %1"220msgid "Manage %1"
220msgstr ""221msgstr ""
221222
223#: ../libertine/qml/ManageContainer.qml:63
222#: ../libertine/qml/ContainerOptionsDialog.qml:40224#: ../libertine/qml/ContainerOptionsDialog.qml:40
223#: ../libertine/qml/ManageContainer.qml:69
224msgid "i386 multiarch support"225msgid "i386 multiarch support"
225msgstr "Supporto i386 multiarchitettura"226msgstr "Supporto i386 multiarchitettura"
226227
227#: ../libertine/qml/ManageContainer.qml:73228#: ../libertine/qml/ManageContainer.qml:67
228msgid "Additional archives and PPAs"229msgid "Additional archives and PPAs"
229msgstr "Archivi e PPA addizionali"230msgstr "Archivi e PPA addizionali"
230231
231#: ../libertine/qml/ManageContainer.qml:84232#: ../libertine/qml/ManageContainer.qml:78
232msgid "Update…"233msgid "Update…"
233msgstr "Aggiorno..."234msgstr "Aggiorno..."
234235
235#: ../libertine/qml/ManageContainer.qml:100236#: ../libertine/qml/ManageContainer.qml:94
236msgid "Update container"237msgid "Update container"
237msgstr "Aggiorna contenitore"238msgstr "Aggiorna contenitore"
238239
@@ -281,39 +282,39 @@
281"The %1 package is already installed. Please try a different package name."282"The %1 package is already installed. Please try a different package name."
282msgstr ""283msgstr ""
283284
284#: ../libertine/qml/HomeView.qml:105285#: ../libertine/qml/HomeView.qml:104
285msgid "Manage Container"286msgid "Manage Container"
286msgstr ""287msgstr ""
287288
288#: ../libertine/qml/HomeView.qml:112289#: ../libertine/qml/HomeView.qml:110
289msgid "Container Information"290msgid "Container Information"
290msgstr "Informazioni Contenitore"291msgstr "Informazioni Contenitore"
291292
292#: ../libertine/qml/HomeView.qml:119293#: ../libertine/qml/HomeView.qml:116
293msgid "Switch Container"294msgid "Switch Container"
294msgstr "Cambia contenitore"295msgstr "Cambia contenitore"
295296
296#: ../libertine/qml/HomeView.qml:135297#: ../libertine/qml/HomeView.qml:132
297msgid "Enter package name or Debian file"298msgid "Enter package name or Debian file"
298msgstr ""299msgstr ""
299300
300#: ../libertine/qml/HomeView.qml:143301#: ../libertine/qml/HomeView.qml:138
301msgid "Choose Debian package to install"302msgid "Choose Debian package to install"
302msgstr ""303msgstr ""
303304
304#: ../libertine/qml/HomeView.qml:152305#: ../libertine/qml/HomeView.qml:145
305msgid "Search archives for a package"306msgid "Search archives for a package"
306msgstr ""307msgstr ""
307308
308#: ../libertine/qml/HomeView.qml:219309#: ../libertine/qml/HomeView.qml:211
309msgid "Remove Package"310msgid "Remove Package"
310msgstr "Rimuovi pacchetto"311msgstr "Rimuovi pacchetto"
311312
312#: ../libertine/qml/HomeView.qml:231313#: ../libertine/qml/HomeView.qml:223
313msgid "Package Info"314msgid "Package Info"
314msgstr "Informazioni pacchetto"315msgstr "Informazioni pacchetto"
315316
316#: ../libertine/qml/HomeView.qml:248317#: ../libertine/qml/HomeView.qml:240
317msgid "No packages are installed"318msgid "No packages are installed"
318msgstr "Nessun pacchetto installato"319msgstr "Nessun pacchetto installato"
319320
@@ -337,27 +338,27 @@
337msgid "Enter name of PPA in the form ppa:user/ppa-name:"338msgid "Enter name of PPA in the form ppa:user/ppa-name:"
338msgstr ""339msgstr ""
339340
340#: ../libertine/qml/ExtraArchivesView.qml:114341#: ../libertine/qml/ExtraArchivesView.qml:107
341msgid "remove"342msgid "remove"
342msgstr "rimuovi"343msgstr "rimuovi"
343344
344#: ../libertine/qml/ExtraArchivesView.qml:115345#: ../libertine/qml/ExtraArchivesView.qml:108
345msgid "Remove extra archive"346msgid "Remove extra archive"
346msgstr ""347msgstr ""
347348
348#: ../libertine/qml/ExtraArchivesView.qml:132349#: ../libertine/qml/ExtraArchivesView.qml:125
349msgid "No additional archives and PPA's have been added"350msgid "No additional archives and PPA's have been added"
350msgstr ""351msgstr ""
351352
353#: ../libertine/qml/ExtraArchivesView.qml:173
354msgid "Adding archive failed"
355msgstr ""
356
352#: ../libertine/qml/ExtraArchivesView.qml:177357#: ../libertine/qml/ExtraArchivesView.qml:177
353msgid "Adding archive failed"
354msgstr ""
355
356#: ../libertine/qml/ExtraArchivesView.qml:181
357msgid "Deleting archive failed"358msgid "Deleting archive failed"
358msgstr ""359msgstr ""
359360
360#: ../libertine/qml/GenericErrorDialog.qml:46361#: ../libertine/qml/GenericErrorDialog.qml:32
361msgid "Dismiss"362msgid "Dismiss"
362msgstr "Declina"363msgstr "Declina"
363364
@@ -384,19 +385,19 @@
384msgid "Container information for %1"385msgid "Container information for %1"
385msgstr ""386msgstr ""
386387
387#: ../libertine/qml/ContainerInfoView.qml:56388#: ../libertine/qml/ContainerInfoView.qml:53
388msgid "ID"389msgid "ID"
389msgstr "ID"390msgstr "ID"
390391
391#: ../libertine/qml/ContainerInfoView.qml:64392#: ../libertine/qml/ContainerInfoView.qml:60
392msgid "Name"393msgid "Name"
393msgstr "Nome"394msgstr "Nome"
394395
395#: ../libertine/qml/ContainerInfoView.qml:72396#: ../libertine/qml/ContainerInfoView.qml:67
396msgid "Distribution"397msgid "Distribution"
397msgstr "Distribuzione"398msgstr "Distribuzione"
398399
399#: ../libertine/qml/ContainerInfoView.qml:80400#: ../libertine/qml/ContainerInfoView.qml:74
400msgid "Status"401msgid "Status"
401msgstr "Stato"402msgstr "Stato"
402403
@@ -415,3 +416,27 @@
415#: ../libertine/qml/ContainerOptionsDialog.qml:56416#: ../libertine/qml/ContainerOptionsDialog.qml:56
416msgid "container name"417msgid "container name"
417msgstr "nome contenitore"418msgstr "nome contenitore"
419
420#, fuzzy
421#~ msgid "Add"
422#~ msgstr "aggiungi"
423
424#, fuzzy
425#~ msgid "Add Archive"
426#~ msgstr "Aggiungi PPA addizionale"
427
428#, fuzzy
429#~ msgid "Add a new archive"
430#~ msgstr "Aggiungi PPA addizionale"
431
432#, fuzzy
433#~ msgid "Additional Archives"
434#~ msgstr "Aggiungi PPA addizionale"
435
436#, fuzzy
437#~ msgid "Default container"
438#~ msgstr "Elimina Contenitore"
439
440#, fuzzy
441#~ msgid "new archive name"
442#~ msgstr "nome contenitore"
418443
=== modified file 'po/libertine.pot'
--- po/libertine.pot 2016-06-10 12:07:31 +0000
+++ po/libertine.pot 2016-07-21 17:26:05 +0000
@@ -8,7 +8,7 @@
8msgstr ""8msgstr ""
9"Project-Id-Version: PACKAGE VERSION\n"9"Project-Id-Version: PACKAGE VERSION\n"
10"Report-Msgid-Bugs-To: \n"10"Report-Msgid-Bugs-To: \n"
11"POT-Creation-Date: 2016-06-07 07:58-0400\n"11"POT-Creation-Date: 2016-07-15 14:24-0400\n"
12"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"12"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
13"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"13"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
14"Language-Team: LANGUAGE <LL@li.org>\n"14"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -22,32 +22,32 @@
22msgstr ""22msgstr ""
2323
24#: ../libertine/ContainerConfig.cpp:148 ../libertine/ContainerConfig.cpp:18524#: ../libertine/ContainerConfig.cpp:148 ../libertine/ContainerConfig.cpp:185
25#: ../libertine/qml/ContainersView.qml:81 ../libertine/qml/HomeView.qml:19725#: ../libertine/qml/ContainersView.qml:80 ../libertine/qml/HomeView.qml:205
26#: ../libertine/qml/ExtraArchivesView.qml:9926#: ../libertine/qml/ExtraArchivesView.qml:67
27msgid "installing"27msgid "installing"
28msgstr ""28msgstr ""
2929
30#: ../libertine/ContainerConfig.cpp:149 ../libertine/qml/ContainersView.qml:11930#: ../libertine/ContainerConfig.cpp:149 ../libertine/qml/ContainersView.qml:117
31#: ../libertine/qml/ManageContainer.qml:7931#: ../libertine/qml/ManageContainer.qml:85
32#: ../libertine/qml/ManageContainer.qml:11932#: ../libertine/qml/ManageContainer.qml:152
33msgid "ready"33msgid "ready"
34msgstr ""34msgstr ""
3535
36#: ../libertine/ContainerConfig.cpp:150 ../libertine/qml/ContainersView.qml:12036#: ../libertine/ContainerConfig.cpp:150 ../libertine/qml/ContainersView.qml:118
37#: ../libertine/qml/ManageContainer.qml:9137#: ../libertine/qml/ManageContainer.qml:97
38#: ../libertine/qml/ManageContainer.qml:11538#: ../libertine/qml/ManageContainer.qml:148
39msgid "updating"39msgid "updating"
40msgstr ""40msgstr ""
4141
42#: ../libertine/ContainerConfig.cpp:151 ../libertine/ContainerConfig.cpp:18842#: ../libertine/ContainerConfig.cpp:151 ../libertine/ContainerConfig.cpp:188
43#: ../libertine/qml/ContainersView.qml:82 ../libertine/qml/HomeView.qml:19843#: ../libertine/qml/ContainersView.qml:81 ../libertine/qml/HomeView.qml:206
44#: ../libertine/qml/ExtraArchivesView.qml:10044#: ../libertine/qml/ExtraArchivesView.qml:68
45msgid "removing"45msgid "removing"
46msgstr ""46msgstr ""
4747
48#: ../libertine/ContainerConfig.cpp:152 ../libertine/ContainerConfig.cpp:18948#: ../libertine/ContainerConfig.cpp:152 ../libertine/ContainerConfig.cpp:189
49#: ../libertine/qml/PackageInfoView.qml:13149#: ../libertine/qml/PackageInfoView.qml:148
50#: ../libertine/qml/ContainerInfoView.qml:9350#: ../libertine/qml/ContainerInfoView.qml:143
51msgid "removed"51msgid "removed"
52msgstr ""52msgstr ""
5353
@@ -59,42 +59,46 @@
59msgid "installed"59msgid "installed"
60msgstr ""60msgstr ""
6161
62#: ../libertine/ContainerManager.cpp:2462#: ../libertine/ContainerManager.cpp:25
63msgid "%1 failed to start"63msgid "%1 failed to start"
64msgstr ""64msgstr ""
6565
66#: ../libertine/ContainerManager.cpp:2566#: ../libertine/ContainerManager.cpp:26
67msgid "Installation of package %1 failed"67msgid "Installation of package %1 failed"
68msgstr ""68msgstr ""
6969
70#: ../libertine/ContainerManager.cpp:2670#: ../libertine/ContainerManager.cpp:27
71msgid "Removal of package %1 failed"71msgid "Removal of package %1 failed"
72msgstr ""72msgstr ""
7373
74#: ../libertine/ContainerManager.cpp:2774#: ../libertine/ContainerManager.cpp:28
75msgid "Searching for query %1 failed"75msgid "Searching for query %1 failed"
76msgstr ""76msgstr ""
7777
78#: ../libertine/ContainerManager.cpp:2878#: ../libertine/ContainerManager.cpp:29
79msgid "Updating container %1 failed"79msgid "Updating container %1 failed"
80msgstr ""80msgstr ""
8181
82#: ../libertine/ContainerManager.cpp:2982#: ../libertine/ContainerManager.cpp:30
83msgid "Creating container %1 failed"83msgid "Creating container %1 failed"
84msgstr ""84msgstr ""
8585
86#: ../libertine/ContainerManager.cpp:3086#: ../libertine/ContainerManager.cpp:31
87msgid "Destroying container %1 failed"87msgid "Destroying container %1 failed"
88msgstr ""88msgstr ""
8989
90#: ../libertine/ContainerManager.cpp:3190#: ../libertine/ContainerManager.cpp:32
91msgid "Running command %1 failed"91msgid "Running command %1 failed"
92msgstr ""92msgstr ""
9393
94#: ../libertine/ContainerManager.cpp:3294#: ../libertine/ContainerManager.cpp:33
95msgid "Attempt to configure container %1 failed"95msgid "Attempt to configure container %1 failed"
96msgstr ""96msgstr ""
9797
98#: ../libertine/ContainerManager.cpp:34
99msgid "Attempt to set container as default failed"
100msgstr ""
101
98#: ../libertine/qml/PackageExistsDialog.qml:28102#: ../libertine/qml/PackageExistsDialog.qml:28
99msgid "The %1 package is already installed."103msgid "The %1 package is already installed."
100msgstr ""104msgstr ""
@@ -115,27 +119,27 @@
115msgid "My Containers"119msgid "My Containers"
116msgstr ""120msgstr ""
117121
118#: ../libertine/qml/ContainersView.qml:92 ../libertine/qml/HomeView.qml:210122#: ../libertine/qml/ContainersView.qml:91 ../libertine/qml/HomeView.qml:218
119msgid "delete"123msgid "delete"
120msgstr ""124msgstr ""
121125
122#: ../libertine/qml/ContainersView.qml:93126#: ../libertine/qml/ContainersView.qml:92
123msgid "Delete Container"127msgid "Delete Container"
124msgstr ""128msgstr ""
125129
126#: ../libertine/qml/ContainersView.qml:108 ../libertine/qml/HomeView.qml:222130#: ../libertine/qml/ContainersView.qml:106 ../libertine/qml/HomeView.qml:230
127msgid "info"131msgid "info"
128msgstr ""132msgstr ""
129133
130#: ../libertine/qml/ContainersView.qml:109134#: ../libertine/qml/ContainersView.qml:107
131msgid "Container Info"135msgid "Container Info"
132msgstr ""136msgstr ""
133137
134#: ../libertine/qml/ContainersView.qml:117138#: ../libertine/qml/ContainersView.qml:115
135msgid "edit"139msgid "edit"
136msgstr ""140msgstr ""
137141
138#: ../libertine/qml/ContainersView.qml:118142#: ../libertine/qml/ContainersView.qml:116
139msgid "Container Apps"143msgid "Container Apps"
140msgstr ""144msgstr ""
141145
@@ -153,16 +157,14 @@
153msgstr ""157msgstr ""
154158
155#: ../libertine/qml/SearchPackagesDialog.qml:39159#: ../libertine/qml/SearchPackagesDialog.qml:39
156#: ../libertine/qml/ContainerPasswordDialog.qml:52160#: ../libertine/qml/HomeView.qml:68
157#: ../libertine/qml/HomeView.qml:68 ../libertine/qml/ExtraArchivesView.qml:57161#: ../libertine/qml/ContainerOptionsDialog.qml:77
158#: ../libertine/qml/ContainerOptionsDialog.qml:64
159msgid "OK"162msgid "OK"
160msgstr ""163msgstr ""
161164
162#: ../libertine/qml/SearchPackagesDialog.qml:57165#: ../libertine/qml/SearchPackagesDialog.qml:57
163#: ../libertine/qml/ContainerPasswordDialog.qml:70166#: ../libertine/qml/HomeView.qml:88
164#: ../libertine/qml/HomeView.qml:88 ../libertine/qml/ExtraArchivesView.qml:65167#: ../libertine/qml/ContainerOptionsDialog.qml:88
165#: ../libertine/qml/ContainerOptionsDialog.qml:75
166msgid "Cancel"168msgid "Cancel"
167msgstr ""169msgstr ""
168170
@@ -174,15 +176,20 @@
174msgid "Obtaining package version…"176msgid "Obtaining package version…"
175msgstr ""177msgstr ""
176178
177#: ../libertine/qml/PackageInfoView.qml:59179#: ../libertine/qml/PackageInfoView.qml:60
178msgid "Package version"180msgid "Package version"
179msgstr ""181msgstr ""
180182
181#: ../libertine/qml/PackageInfoView.qml:67183#: ../libertine/qml/PackageInfoView.qml:68
182msgid "Install status"184msgid "Install status"
183msgstr ""185msgstr ""
184186
185#: ../libertine/qml/PackageInfoView.qml:140187#: ../libertine/qml/PackageInfoView.qml:85
188#: ../libertine/qml/ContainerInfoView.qml:97
189msgid "Operation details"
190msgstr ""
191
192#: ../libertine/qml/PackageInfoView.qml:159
186msgid "Unknown"193msgid "Unknown"
187msgstr ""194msgstr ""
188195
@@ -219,23 +226,27 @@
219msgid "Manage %1"226msgid "Manage %1"
220msgstr ""227msgstr ""
221228
222#: ../libertine/qml/ManageContainer.qml:63229#: ../libertine/qml/ManageContainer.qml:69
223#: ../libertine/qml/ContainerOptionsDialog.qml:40230#: ../libertine/qml/ContainerOptionsDialog.qml:39
224msgid "i386 multiarch support"231msgid "i386 multiarch support"
225msgstr ""232msgstr ""
226233
227#: ../libertine/qml/ManageContainer.qml:67234#: ../libertine/qml/ManageContainer.qml:73
228msgid "Additional archives and PPAs"235msgid "Additional archives and PPAs"
229msgstr ""236msgstr ""
230237
231#: ../libertine/qml/ManageContainer.qml:78238#: ../libertine/qml/ManageContainer.qml:84
232msgid "Update…"239msgid "Update…"
233msgstr ""240msgstr ""
234241
235#: ../libertine/qml/ManageContainer.qml:94242#: ../libertine/qml/ManageContainer.qml:100
236msgid "Update container"243msgid "Update container"
237msgstr ""244msgstr ""
238245
246#: ../libertine/qml/ManageContainer.qml:117
247msgid "Default container"
248msgstr ""
249
239#: ../libertine/qml/DebianPackagePicker.qml:28250#: ../libertine/qml/DebianPackagePicker.qml:28
240msgid "Available Debian Packages to Install"251msgid "Available Debian Packages to Install"
241msgstr ""252msgstr ""
@@ -244,22 +255,6 @@
244msgid "No Debian packages available"255msgid "No Debian packages available"
245msgstr ""256msgstr ""
246257
247#: ../libertine/qml/ContainerPasswordDialog.qml:27
248msgid "Authentication required"
249msgstr ""
250
251#: ../libertine/qml/ContainerPasswordDialog.qml:28
252msgid "Password is required to create a Libertine container"
253msgstr ""
254
255#: ../libertine/qml/ContainerPasswordDialog.qml:36
256msgid "Invalid password entered"
257msgstr ""
258
259#: ../libertine/qml/ContainerPasswordDialog.qml:41
260msgid "password"
261msgstr ""
262
263#: ../libertine/qml/HomeView.qml:29258#: ../libertine/qml/HomeView.qml:29
264msgid "Classic Apps - %1"259msgid "Classic Apps - %1"
265msgstr ""260msgstr ""
@@ -281,83 +276,75 @@
281"The %1 package is already installed. Please try a different package name."276"The %1 package is already installed. Please try a different package name."
282msgstr ""277msgstr ""
283278
284#: ../libertine/qml/HomeView.qml:104279#: ../libertine/qml/HomeView.qml:105
285msgid "Manage Container"280msgid "Manage Container"
286msgstr ""281msgstr ""
287282
288#: ../libertine/qml/HomeView.qml:110283#: ../libertine/qml/HomeView.qml:112
289msgid "Container Information"284msgid "Container Information"
290msgstr ""285msgstr ""
291286
292#: ../libertine/qml/HomeView.qml:116287#: ../libertine/qml/HomeView.qml:119
293msgid "Switch Container"288msgid "Switch Container"
294msgstr ""289msgstr ""
295290
296#: ../libertine/qml/HomeView.qml:132291#: ../libertine/qml/HomeView.qml:135
297msgid "Enter package name or Debian file"292msgid "Enter package name or Debian file"
298msgstr ""293msgstr ""
299294
300#: ../libertine/qml/HomeView.qml:138295#: ../libertine/qml/HomeView.qml:143
301msgid "Choose Debian package to install"296msgid "Choose Debian package to install"
302msgstr ""297msgstr ""
303298
304#: ../libertine/qml/HomeView.qml:145299#: ../libertine/qml/HomeView.qml:152
305msgid "Search archives for a package"300msgid "Search archives for a package"
306msgstr ""301msgstr ""
307302
308#: ../libertine/qml/HomeView.qml:211303#: ../libertine/qml/HomeView.qml:219
309msgid "Remove Package"304msgid "Remove Package"
310msgstr ""305msgstr ""
311306
312#: ../libertine/qml/HomeView.qml:223307#: ../libertine/qml/HomeView.qml:231
313msgid "Package Info"308msgid "Package Info"
314msgstr ""309msgstr ""
315310
316#: ../libertine/qml/HomeView.qml:240311#: ../libertine/qml/HomeView.qml:248
317msgid "No packages are installed"312msgid "No packages are installed"
318msgstr ""313msgstr ""
319314
320#: ../libertine/qml/ExtraArchivesView.qml:28315#: ../libertine/qml/ExtraArchivesView.qml:27
321msgid "Additional Archives and PPAs"316msgid "Additional Archives"
317msgstr ""
318
319#: ../libertine/qml/ExtraArchivesView.qml:31
320msgid "add"
322msgstr ""321msgstr ""
323322
324#: ../libertine/qml/ExtraArchivesView.qml:32323#: ../libertine/qml/ExtraArchivesView.qml:32
325msgid "add"324msgid "Add a new archive"
326msgstr ""325msgstr ""
327326
328#: ../libertine/qml/ExtraArchivesView.qml:33327#: ../libertine/qml/ExtraArchivesView.qml:75
329msgid "Add a new PPA"
330msgstr ""
331
332#: ../libertine/qml/ExtraArchivesView.qml:46
333msgid "Add additional PPA"
334msgstr ""
335
336#: ../libertine/qml/ExtraArchivesView.qml:47
337msgid "Enter name of PPA in the form ppa:user/ppa-name:"
338msgstr ""
339
340#: ../libertine/qml/ExtraArchivesView.qml:107
341msgid "remove"328msgid "remove"
342msgstr ""329msgstr ""
343330
344#: ../libertine/qml/ExtraArchivesView.qml:108331#: ../libertine/qml/ExtraArchivesView.qml:76
345msgid "Remove extra archive"332msgid "Remove extra archive"
346msgstr ""333msgstr ""
347334
348#: ../libertine/qml/ExtraArchivesView.qml:125335#: ../libertine/qml/ExtraArchivesView.qml:93
349msgid "No additional archives and PPA's have been added"336msgid "No additional archives and PPA's have been added"
350msgstr ""337msgstr ""
351338
352#: ../libertine/qml/ExtraArchivesView.qml:173339#: ../libertine/qml/ExtraArchivesView.qml:126
353msgid "Adding archive failed"
354msgstr ""
355
356#: ../libertine/qml/ExtraArchivesView.qml:177
357msgid "Deleting archive failed"340msgid "Deleting archive failed"
358msgstr ""341msgstr ""
359342
360#: ../libertine/qml/GenericErrorDialog.qml:32343#: ../libertine/qml/GenericErrorDialog.qml:39
344msgid "Copy to Clipboard"
345msgstr ""
346
347#: ../libertine/qml/GenericErrorDialog.qml:46
361msgid "Dismiss"348msgid "Dismiss"
362msgstr ""349msgstr ""
363350
@@ -384,22 +371,45 @@
384msgid "Container information for %1"371msgid "Container information for %1"
385msgstr ""372msgstr ""
386373
387#: ../libertine/qml/ContainerInfoView.qml:53374#: ../libertine/qml/ContainerInfoView.qml:56
388msgid "ID"375msgid "ID"
389msgstr ""376msgstr ""
390377
391#: ../libertine/qml/ContainerInfoView.qml:60378#: ../libertine/qml/ContainerInfoView.qml:64
392msgid "Name"379msgid "Name"
393msgstr ""380msgstr ""
394381
395#: ../libertine/qml/ContainerInfoView.qml:67382#: ../libertine/qml/ContainerInfoView.qml:72
396msgid "Distribution"383msgid "Distribution"
397msgstr ""384msgstr ""
398385
399#: ../libertine/qml/ContainerInfoView.qml:74386#: ../libertine/qml/ContainerInfoView.qml:80
400msgid "Status"387msgid "Status"
401msgstr ""388msgstr ""
402389
390#: ../libertine/qml/AddExtraArchiveView.qml:27
391msgid "Add Archive"
392msgstr ""
393
394#: ../libertine/qml/AddExtraArchiveView.qml:42
395msgid "New archive identifier, e.g."
396msgstr ""
397
398#: ../libertine/qml/AddExtraArchiveView.qml:50
399msgid ""
400"multiverse\n"
401"ppa:user/repository\n"
402"deb http://myserver/repo stable repo"
403msgstr ""
404
405#: ../libertine/qml/AddExtraArchiveView.qml:73
406msgid "(Optional) Public signing key for archive"
407msgstr ""
408
409#: ../libertine/qml/AddExtraArchiveView.qml:90
410msgid "Add"
411msgstr ""
412
403#: ../libertine/qml/ContainerOptionsDialog.qml:27413#: ../libertine/qml/ContainerOptionsDialog.qml:27
404msgid "Container Options"414msgid "Container Options"
405msgstr ""415msgstr ""
@@ -408,10 +418,20 @@
408msgid "Configure options for container creation."418msgid "Configure options for container creation."
409msgstr ""419msgstr ""
410420
411#: ../libertine/qml/ContainerOptionsDialog.qml:50421#: ../libertine/qml/ContainerOptionsDialog.qml:49
412msgid "Enter or name for the container or leave blank for default name"422msgid "Enter a name for the container or leave blank for default name:"
413msgstr ""423msgstr ""
414424
415#: ../libertine/qml/ContainerOptionsDialog.qml:56425#: ../libertine/qml/ContainerOptionsDialog.qml:55
416msgid "container name"426msgid "container name"
417msgstr ""427msgstr ""
428
429#: ../libertine/qml/ContainerOptionsDialog.qml:62
430msgid ""
431"Enter password for your user in the Libertine container or leave blank for "
432"no password:"
433msgstr ""
434
435#: ../libertine/qml/ContainerOptionsDialog.qml:69
436msgid "password"
437msgstr ""
418438
=== modified file 'python/libertine/ContainersConfig.py'
--- python/libertine/ContainersConfig.py 2016-06-27 20:32:33 +0000
+++ python/libertine/ContainersConfig.py 2016-07-21 17:26:05 +0000
@@ -115,7 +115,7 @@
115 if item[object_key] == value:115 if item[object_key] == value:
116 container[array_key].remove(item)116 container[array_key].remove(item)
117 write_container_config_file(self.container_list)117 write_container_config_file(self.container_list)
118 return 118 return
119119
120 def _test_key_value_exists(self, container_id, key, value=None):120 def _test_key_value_exists(self, container_id, key, value=None):
121 key_value = self._get_value_by_key(container_id, key)121 key_value = self._get_value_by_key(container_id, key)
@@ -149,7 +149,7 @@
149 if container['id'] == container_id:149 if container['id'] == container_id:
150 return container150 return container
151151
152 return None 152 return None
153153
154 def merge_container_config_files(self, filepath):154 def merge_container_config_files(self, filepath):
155 merged_json = []155 merged_json = []
@@ -199,7 +199,7 @@
199 self.container_list.pop('defaultContainer', None)199 self.container_list.pop('defaultContainer', None)
200200
201 if write_json:201 if write_json:
202 write_container_config_file(self.container_list) 202 write_container_config_file(self.container_list)
203203
204 """204 """
205 Operations for the container itself.205 Operations for the container itself.
@@ -261,7 +261,7 @@
261 """261 """
262 def add_container_archive(self, container_id, archive_name):262 def add_container_archive(self, container_id, archive_name):
263 archive_obj = {'archiveName': archive_name, 'archiveStatus': 'new'}263 archive_obj = {'archiveName': archive_name, 'archiveStatus': 'new'}
264 self._set_value_by_key(container_id, 'extraArchives', archive_obj) 264 self._set_value_by_key(container_id, 'extraArchives', archive_obj)
265265
266 def delete_container_archive(self, container_id, archive_name):266 def delete_container_archive(self, container_id, archive_name):
267 self._delete_array_object_by_key_value(container_id, 'extraArchives',267 self._delete_array_object_by_key_value(container_id, 'extraArchives',
@@ -271,6 +271,10 @@
271 self._set_array_object_value_by_key(container_id, 'extraArchives', 'archiveName',271 self._set_array_object_value_by_key(container_id, 'extraArchives', 'archiveName',
272 archive_name, 'archiveStatus', new_status)272 archive_name, 'archiveStatus', new_status)
273273
274 def get_archive_install_status(self, container_id, archive_name):
275 return self._get_array_object_value_by_key(container_id, 'extraArchives', 'archiveName',
276 archive_name, 'archiveStatus')
277
274 def archive_exists(self, container_id, archive_name):278 def archive_exists(self, container_id, archive_name):
275 return self._test_array_object_key_value_exists(container_id, 'extraArchives', 'archiveName',279 return self._test_array_object_key_value_exists(container_id, 'extraArchives', 'archiveName',
276 archive_name)280 archive_name)
@@ -306,4 +310,3 @@
306310
307 def get_container_type(self, container_id):311 def get_container_type(self, container_id):
308 return self._get_value_by_key(container_id, 'type')312 return self._get_value_by_key(container_id, 'type')
309
310313
=== modified file 'python/libertine/Libertine.py'
--- python/libertine/Libertine.py 2016-07-07 15:59:49 +0000
+++ python/libertine/Libertine.py 2016-07-21 17:26:05 +0000
@@ -18,7 +18,9 @@
18import contextlib18import contextlib
19import libertine.utils19import libertine.utils
20import os20import os
21import psutil
21import shutil22import shutil
23import shlex
2224
23from libertine.ContainersConfig import ContainersConfig25from libertine.ContainersConfig import ContainersConfig
24from libertine.HostInfo import HostInfo26from libertine.HostInfo import HostInfo
@@ -61,7 +63,6 @@
61 self.root_path = libertine.utils.get_libertine_container_rootfs_path(self.container_id)63 self.root_path = libertine.utils.get_libertine_container_rootfs_path(self.container_id)
62 self.default_packages = ['matchbox',64 self.default_packages = ['matchbox',
63 'libnss-extrausers',65 'libnss-extrausers',
64 'software-properties-common',
65 'humanity-icon-theme',66 'humanity-icon-theme',
66 'maliit-inputcontext-gtk2',67 'maliit-inputcontext-gtk2',
67 'maliit-inputcontext-gtk3',68 'maliit-inputcontext-gtk3',
@@ -161,32 +162,52 @@
161 os.environ['DEBIAN_FRONTEND'] = 'readline'162 os.environ['DEBIAN_FRONTEND'] = 'readline'
162 return self.run_in_container(apt_command_prefix(verbosity) + " install '" + package_name + "'") == 0163 return self.run_in_container(apt_command_prefix(verbosity) + " install '" + package_name + "'") == 0
163164
164 def configure_command(self, command, *args, verbosity=1):165 def configure_multiarch(self, should_enable, verbosity=1):
165 """166 """
166 Configures the container based on what the command is.167 Enables or disables multiarch repositories.
167168
168 :param command: The configuration command to run.169 :param should_enable: Whether or not to enable multiarch support.
169 :param *args: List of arguments used for the given configuration command170 :param verbosity: the chattiness of the output on a range from 0 to 2
170 """171 """
171 if command == 'multiarch':172 if should_enable:
172 if args[0] == 'enable':173 ret = self.run_in_container("dpkg --add-architecture i386")
173 ret = self.run_in_container("dpkg --add-architecture i386")174 if ret or ret == 0:
174 if ret or ret == 0:175 self.run_in_container(apt_command_prefix(verbosity) + '--force-yes update')
175 self.run_in_container(apt_command_prefix(verbosity) + '--force-yes update')176 return ret
176 return ret177 else:
177 else:178 self.run_in_container(apt_command_prefix(verbosity) + "purge \".*:i386\"")
178 self.run_in_container(apt_command_prefix(verbosity) + "purge \".*:i386\"")179 return self.run_in_container("dpkg --remove-architecture i386")
179 return self.run_in_container("dpkg --remove-architecture i386")180
180181 def configure_add_archive(self, archive, public_key_file, verbosity=1):
181 elif command == 'add-archive':182 """
182 if not os.path.exists(os.path.join(self.root_path, 'usr', 'bin', 'add-apt-repository')):183 Adds the given archive. If this archive requires a key, prompt user.
183 self.update_packages(verbosity)184
184 self.install_package("software-properties-common", verbosity)185 :param archive: The configuration command to run.
185186 :param public_key_file: file containing the public key used to sign this archive
186 return self.run_in_container("add-apt-repository -y " + args[0])187 :param verbosity: the chattiness of the output on a range from 0 to 2
187188 """
188 elif command == 'delete-archive':189 if not os.path.exists(os.path.join(self.root_path, 'usr', 'bin', 'add-apt-repository')):
189 return self.run_in_container("add-apt-repository -y -r " + args[0])190 self.update_packages(verbosity)
191 self.install_package("software-properties-common", verbosity)
192 if 'https://' in archive and not os.path.exists(os.path.join(self.root_path, 'usr', 'lib', 'apt', 'methods', 'https')):
193 self.update_packages(verbosity)
194 self.install_package("apt-transport-https", verbosity)
195
196 retcode = self.run_in_container("add-apt-repository -y " + archive)
197 if retcode is 0 and public_key_file is not None:
198 with open(public_key_file, 'r') as keyfile:
199 return self.run_in_container("bash -c 'echo \"%s\" | apt-key add -'" % keyfile.read())
200
201 return retcode
202
203 def configure_remove_archive(self, archive, verbosity=1):
204 """
205 Removes the given archive.
206
207 :param archive: The configuration command to run.
208 :param verbosity: the chattiness of the output on a range from 0 to 2
209 """
210 return self.run_in_container("add-apt-repository -y -r " + archive)
190211
191 @property212 @property
192 def name(self):213 def name(self):
@@ -247,7 +268,9 @@
247 """268 """
248 super().__init__()269 super().__init__()
249270
250 container_type = ContainersConfig().get_container_type(container_id)271 self.containers_config = ContainersConfig()
272
273 container_type = self.containers_config.get_container_type(container_id)
251274
252 if container_type == None or container_type == "lxc":275 if container_type == None or container_type == "lxc":
253 from libertine.LxcContainer import LibertineLXC276 from libertine.LxcContainer import LibertineLXC
@@ -287,7 +310,7 @@
287 Creates the container.310 Creates the container.
288 """311 """
289 self.container.architecture = HostInfo().get_host_architecture()312 self.container.architecture = HostInfo().get_host_architecture()
290 self.container.installed_release = ContainersConfig().get_container_distro(self.container_id)313 self.container.installed_release = self.containers_config.get_container_distro(self.container_id)
291314
292 return self.container.create_libertine_container(password, multiarch, verbosity)315 return self.container.create_libertine_container(password, multiarch, verbosity)
293316
@@ -349,7 +372,7 @@
349 :param app_exec_line: the application exec line as passed in by372 :param app_exec_line: the application exec line as passed in by
350 ubuntu-app-launch373 ubuntu-app-launch
351 """374 """
352 if ContainersConfig().container_exists(self.container.container_id):375 if self.containers_config.container_exists(self.container.container_id):
353 # Update $PATH as necessary376 # Update $PATH as necessary
354 if '/usr/games' not in os.environ['PATH']:377 if '/usr/games' not in os.environ['PATH']:
355 os.environ['PATH'] = os.environ['PATH'] + ":/usr/games"378 os.environ['PATH'] = os.environ['PATH'] + ":/usr/games"
@@ -390,9 +413,69 @@
390 except RuntimeError as e:413 except RuntimeError as e:
391 return handle_runtime_error(e)414 return handle_runtime_error(e)
392415
393 def configure_command(self, command, *args):416 def configure_multiarch(self, should_enable, verbosity=1):
394 try:417 try:
395 with ContainerRunning(self.container):418 with ContainerRunning(self.container):
396 return self.container.configure_command(command, *args)419 return self.container.configure_multiarch(should_enable, verbosity)
397 except RuntimeError as e:420 except RuntimeError as e:
398 return handle_runtime_error(e)421 return handle_runtime_error(e)
422
423 def configure_add_archive(self, archive, key, verbosity):
424 try:
425 with ContainerRunning(self.container):
426 return self.container.configure_add_archive(archive, key, verbosity)
427 except RuntimeError as e:
428 return handle_runtime_error(e)
429
430 def configure_remove_archive(self, archive, verbosity):
431 try:
432 with ContainerRunning(self.container):
433 return self.container.configure_remove_archive(archive, verbosity)
434 except RuntimeError as e:
435 return handle_runtime_error(e)
436
437
438class LibertineApplication(object):
439 """
440 Launches a libertine container with a session bridge for sockets such as dbus
441
442 :param container_id: The container id.
443 "param app_exec_line: The exec line used to start the app in the container.
444 """
445 def __init__(self, container_id, app_exec_line):
446 self.container_id = container_id
447 self.app_exec_line = app_exec_line
448 self.session_bridge = None
449
450 """
451 Launches the libertine session bridge. This creates a proxy socket to read to and from
452 for abstract sockets such as dbus.
453
454 :param session_socket_paths: A list of socket paths the session will create.
455 """
456 def launch_session_bridge(self, session_socket_paths):
457 session_bridge_arguments = ''
458 for paths in session_socket_paths:
459 session_bridge_arguments += paths + ' '
460
461 libertine_session_bridge_cmd = "libertine-session-bridge " + session_bridge_arguments
462
463 args = shlex.split(libertine_session_bridge_cmd)
464 self.session_bridge = psutil.Popen(args)
465
466 """
467 Launches the container from the id and attempts to run the application exec.
468 """
469 def launch_application(self):
470 if not ContainersConfig().container_exists(self.container_id):
471 raise RuntimeError("Container ID %s does not exist." % self.container_id)
472
473 container = LibertineContainer(self.container_id)
474
475 try:
476 container.launch_application(self.app_exec_line)
477 except:
478 raise
479 finally:
480 if self.session_bridge is not None:
481 self.session_bridge.terminate()
399482
=== modified file 'python/libertine/LxcContainer.py'
--- python/libertine/LxcContainer.py 2016-06-29 12:54:58 +0000
+++ python/libertine/LxcContainer.py 2016-07-21 17:26:05 +0000
@@ -41,18 +41,11 @@
41 return found41 return found
4242
4343
44def setup_host_environment(username, password):44def setup_host_environment(username):
45 lxc_net_entry = "%s veth lxcbr0 10" % str(username)45 lxc_net_entry = "%s veth lxcbr0 10" % str(username)
4646
47 if not check_lxc_net_entry(lxc_net_entry):47 if not check_lxc_net_entry(lxc_net_entry):
48 passwd = subprocess.Popen(["sudo", "--stdin", "usermod", "--add-subuids", "100000-165536",48 subprocess.Popen(["sudo", "libertine-lxc-setup", str(username)]).wait()
49 "--add-subgids", "100000-165536", str(username)],
50 stdin=subprocess.PIPE, stdout=subprocess.DEVNULL,
51 stderr=subprocess.STDOUT)
52 passwd.communicate((password + '\n').encode('UTF-8'))
53
54 add_user_cmd = "echo %s | sudo tee -a /etc/lxc/lxc-usernet > /dev/null" % lxc_net_entry
55 subprocess.Popen(add_user_cmd, shell=True)
5649
5750
58def get_lxc_default_config_path():51def get_lxc_default_config_path():
@@ -151,7 +144,7 @@
151 user_id = os.getuid()144 user_id = os.getuid()
152 group_id = os.getgid()145 group_id = os.getgid()
153146
154 setup_host_environment(username, password)147 setup_host_environment(username)
155148
156 # Generate the default lxc default config, if it doesn't exist149 # Generate the default lxc default config, if it doesn't exist
157 config_path = get_lxc_default_config_path()150 config_path = get_lxc_default_config_path()
158151
=== modified file 'python/libertine/__init__.py'
--- python/libertine/__init__.py 2015-11-23 20:04:30 +0000
+++ python/libertine/__init__.py 2016-07-21 17:26:05 +0000
@@ -22,9 +22,10 @@
2222
23__all__ = [23__all__ = [
24 # from Libertine24 # from Libertine
25 'LibertineContainer', 'utils'25 'LibertineContainer', 'utils', 'LibertineApplication'
26 ]26 ]
2727
28__docformat__ = "restructuredtext en"28__docformat__ = "restructuredtext en"
2929
30from libertine.Libertine import LibertineContainer30from libertine.Libertine import LibertineContainer
31from libertine.Libertine import LibertineApplication
3132
=== modified file 'tests/unit/CMakeLists.txt'
--- tests/unit/CMakeLists.txt 2016-06-27 16:41:52 +0000
+++ tests/unit/CMakeLists.txt 2016-07-21 17:26:05 +0000
@@ -44,14 +44,10 @@
44 ENVIRONMENT44 ENVIRONMENT
45 "GI_TYPELIB_PATH=${CMAKE_BINARY_DIR}/liblibertine;LD_LIBRARY_PATH=${CMAKE_BINARY_DIR}/liblibertine:${LD_LIBRARY_PATH};CMAKE_BINARY_DIR=${CMAKE_BINARY_DIR};PYTHONPATH=${CMAKE_CURRENT_SOURCE_DIR}:${CMAKE_SOURCE_DIR}/python;CMAKE_SOURCE_DIR=${CMAKE_SOURCE_DIR}")45 "GI_TYPELIB_PATH=${CMAKE_BINARY_DIR}/liblibertine;LD_LIBRARY_PATH=${CMAKE_BINARY_DIR}/liblibertine:${LD_LIBRARY_PATH};CMAKE_BINARY_DIR=${CMAKE_BINARY_DIR};PYTHONPATH=${CMAKE_CURRENT_SOURCE_DIR}:${CMAKE_SOURCE_DIR}/python;CMAKE_SOURCE_DIR=${CMAKE_SOURCE_DIR}")
4646
47set(DISABLED 1)47add_test(test_libertine_launch
4848 "/usr/bin/python3" "-m" "testtools.run" "libertine_launch_tests"
49if (NOT DISABLED)49)
50 add_test(test_libertine_launch50set_tests_properties(test_libertine_launch
51 "/usr/bin/python3" "-m" "testtools.run" "libertine_launch_tests"51 PROPERTIES
52 )52 ENVIRONMENT
53 set_tests_properties(test_libertine_launch53 "GI_TYPELIB_PATH=${CMAKE_BINARY_DIR}/liblibertine;LD_LIBRARY_PATH=${CMAKE_BINARY_DIR}/liblibertine:${LD_LIBRARY_PATH};CMAKE_BINARY_DIR=${CMAKE_BINARY_DIR};PYTHONPATH=${CMAKE_CURRENT_SOURCE_DIR}:${CMAKE_SOURCE_DIR}/python;CMAKE_SOURCE_DIR=${CMAKE_SOURCE_DIR}")
54 PROPERTIES
55 ENVIRONMENT
56 "GI_TYPELIB_PATH=${CMAKE_BINARY_DIR}/liblibertine;LD_LIBRARY_PATH=${CMAKE_BINARY_DIR}/liblibertine:${LD_LIBRARY_PATH};CMAKE_BINARY_DIR=${CMAKE_BINARY_DIR};PYTHONPATH=${CMAKE_CURRENT_SOURCE_DIR}:${CMAKE_SOURCE_DIR}/python;CMAKE_SOURCE_DIR=${CMAKE_SOURCE_DIR}")
57endif()
5854
=== modified file 'tests/unit/libertine_launch_tests.py'
--- tests/unit/libertine_launch_tests.py 2015-12-18 20:31:46 +0000
+++ tests/unit/libertine_launch_tests.py 2016-07-21 17:26:05 +0000
@@ -18,34 +18,32 @@
18import subprocess18import subprocess
19import tempfile19import tempfile
2020
21from libertine import LibertineApplication
22
21from testtools import TestCase23from testtools import TestCase
22from testtools.matchers import Equals, NotEquals24from testtools.matchers import Equals, NotEquals
2325
24class TestLibertineLaunch(TestCase):26class TestLibertineLaunch(TestCase):
25
26 def setUp(self):27 def setUp(self):
27 super(TestLibertineLaunch, self).setUp()28 super(TestLibertineLaunch, self).setUp()
28 self.cmake_source_dir = os.environ['CMAKE_SOURCE_DIR']29 self.cmake_source_dir = os.environ['CMAKE_SOURCE_DIR']
29 self.cmake_binary_dir = os.environ['CMAKE_BINARY_DIR']30 self.cmake_binary_dir = os.environ['CMAKE_BINARY_DIR']
3031
31 # Set the paths to the config file
32 container_config_path = os.path.join(self.cmake_binary_dir, 'tests', 'unit', 'libertine-config')32 container_config_path = os.path.join(self.cmake_binary_dir, 'tests', 'unit', 'libertine-config')
33 container_config_file = os.path.join(container_config_path, 'libertine', 'ContainersConfig.json')
3433
35 # Set necessary enviroment variables34 # Set necessary enviroment variables
36 os.environ['XDG_DATA_HOME'] = container_config_path35 os.environ['XDG_DATA_HOME'] = container_config_path
37 os.environ['XDG_RUNTIME_DIR'] = tempfile.mkdtemp()36 os.environ['XDG_RUNTIME_DIR'] = tempfile.mkdtemp()
38 os.environ['DISPLAY'] = ':0'
39 os.environ['PATH'] = (self.cmake_source_dir + '/tests/mocks:' +37 os.environ['PATH'] = (self.cmake_source_dir + '/tests/mocks:' +
40 self.cmake_source_dir + '/tools:' + os.environ['PATH'])38 self.cmake_source_dir + '/tools:' + os.environ['PATH'])
4139
42 self.addCleanup(self.cleanup)40 self.addCleanup(self.cleanup)
4341
44 # Make a mock container42 # Lets figure out how to really mock this....
45 cli_cmd = self.cmake_source_dir + '/tools/libertine-container-manager create -i test -n Test -t mock'43 cli_cmd = self.cmake_source_dir + '/tools/libertine-container-manager create -i test -n Test -t mock'
46 args = shlex.split(cli_cmd)44 args = shlex.split(cli_cmd)
47 subprocess.Popen(args).wait()45 subprocess.Popen(args).wait()
48 46
49 def cleanup(self):47 def cleanup(self):
50 shutil.rmtree(os.environ['XDG_RUNTIME_DIR'])48 shutil.rmtree(os.environ['XDG_RUNTIME_DIR'])
5149
@@ -53,46 +51,26 @@
53 '''51 '''
54 Base line test to ensure launching an app in an existing container works.52 Base line test to ensure launching an app in an existing container works.
55 '''53 '''
56 cli_cmd = self.cmake_source_dir + '/tools/libertine-launch test true'54 la = LibertineApplication('test', 'true')
57 args = shlex.split(cli_cmd)55 la.launch_application()
58 p = subprocess.Popen(args)
59 p.wait()
60
61 self.assertThat(p.returncode, Equals(0))
6256
63 def test_launch_app_nonexistent_container(self):57 def test_launch_app_nonexistent_container(self):
64 '''58 '''
65 Test to make sure that things gracefully handle a non-existing container.59 Test to make sure that things gracefully handle a non-existing container.
66 '''60 '''
67 cli_cmd = self.cmake_source_dir + '/tools/libertine-launch test1 true'61 la = LibertineApplication('test1', 'true')
68 args = shlex.split(cli_cmd)62 self.assertRaises(RuntimeError, la.launch_application)
69 p = subprocess.Popen(args)
70 p.wait()
71
72 # Should fail due to nonexistent container
73 self.assertThat(p.returncode, Equals(1))
7463
75 def test_launch_good_app(self):64 def test_launch_good_app(self):
76 '''65 '''
77 Test to make sure that launching an app actually works.66 Test to make sure that launching an app actually works.
78 '''67 '''
79 cli_cmd = self.cmake_source_dir + '/tools/libertine-launch test mock_app'68 la = LibertineApplication('test', 'mock_app')
80 args = shlex.split(cli_cmd)69 la.launch_application()
81 p = subprocess.Popen(args)
82 p.wait()
83
84 self.assertThat(p.returncode, Equals(0))
85 self.assertThat(os.path.exists(os.path.join(os.environ['XDG_RUNTIME_DIR'], 'mock')), Equals(True))
86
87 os.remove(os.path.join(os.path.join(os.environ['XDG_RUNTIME_DIR'], 'mock')))
8870
89 def test_launch_bad_app(self):71 def test_launch_bad_app(self):
90 '''72 '''
91 Test to make sure launching an app that doesn't exist doesn't break things73 Test to make sure launching an app that doesn't exist doesn't break things
92 '''74 '''
93 cli_cmd = self.cmake_source_dir + '/tools/libertine-launch test foo'75 la = LibertineApplication('test', 'foo')
94 args = shlex.split(cli_cmd)76 self.assertRaises(FileNotFoundError, la.launch_application)
95 p = subprocess.Popen(args)
96 p.wait()
97
98 self.assertThat(p.returncode, Equals(1))
9977
=== modified file 'tools/CMakeLists.txt'
--- tools/CMakeLists.txt 2016-06-07 19:49:27 +0000
+++ tools/CMakeLists.txt 2016-07-21 17:26:05 +0000
@@ -1,4 +1,4 @@
1install(PROGRAMS libertine-container-manager libertine-launch libertine-session-bridge libertine-lxc-manager libertine-xmir1install(PROGRAMS libertine-container-manager libertine-launch libertine-session-bridge libertine-lxc-manager libertine-xmir libertine-lxc-setup
2 DESTINATION ${CMAKE_INSTALL_BINDIR})2 DESTINATION ${CMAKE_INSTALL_BINDIR})
3install(FILES libertine-launch.1 libertine-container-manager.1 libertine-session-bridge.1 libertine-lxc-manager.1 libertine-xmir.13install(FILES libertine-launch.1 libertine-container-manager.1 libertine-session-bridge.1 libertine-lxc-manager.1 libertine-xmir.1
4 DESTINATION ${CMAKE_INSTALL_MANDIR}/man14 DESTINATION ${CMAKE_INSTALL_MANDIR}/man1
55
=== modified file 'tools/libertine-container-manager'
--- tools/libertine-container-manager 2016-07-06 18:39:53 +0000
+++ tools/libertine-container-manager 2016-07-21 17:26:05 +0000
@@ -74,7 +74,7 @@
74 if args.password:74 if args.password:
75 password = args.password75 password = args.password
76 elif sys.stdin.isatty():76 elif sys.stdin.isatty():
77 print("Your user password is required for creating a Libertine container.")77 print("Enter password for your user in the Libertine container or leave blank for no password:")
78 password = getpass.getpass()78 password = getpass.getpass()
79 else:79 else:
80 password = sys.stdin.readline().rstrip()80 password = sys.stdin.readline().rstrip()
@@ -206,10 +206,14 @@
206 if not container.exec_command(args.command):206 if not container.exec_command(args.command):
207 sys.exit(1)207 sys.exit(1)
208208
209 def delete_archive_by_name(self, container_id, archive_name):209 def delete_archive_by_name(self, container_id, archive_name, verbosity=1):
210 self.containers_config.update_archive_install_status(container_id, archive_name, 'removing')210 self.containers_config.update_archive_install_status(container_id, archive_name, 'removing')
211 if LibertineContainer(container_id).configure_command('delete-archive', archive_name) is not 0:211 if self.containers_config.get_archive_install_status(container_id, archive_name) == 'installed':
212 return False212 self.containers_config.update_archive_install_status(container_id, archive_name, 'removing')
213 if LibertineContainer(container_id).configure_remove_archive("\"" + archive_name + "\"", verbosity) is not 0:
214 self.containers_config.update_archive_install_status(container_id, archive_name, 'installed')
215 return False
216
213 self.containers_config.delete_container_archive(container_id, archive_name)217 self.containers_config.delete_container_archive(container_id, archive_name)
214 return True218 return True
215219
@@ -228,31 +232,41 @@
228 print("i386 multiarch support is already %s" % multiarch)232 print("i386 multiarch support is already %s" % multiarch)
229 sys.exit(1)233 sys.exit(1)
230234
231 if container.configure_command('multiarch', args.multiarch) is not 0:235 if container.configure_multiarch(args.multiarch, args.verbosity) is not 0:
232 sys.exit(1)236 sys.exit(1)
233237
234 self.containers_config.update_container_multiarch_support(container_id, multiarch)238 self.containers_config.update_container_multiarch_support(container_id, multiarch)
235239
236 elif args.add_archive:240 elif args.archive is not None:
237 if self.containers_config.archive_exists(container_id, args.add_archive):241 archive_name = args.archive_name.strip("\'\"")
238 print("%s already added in container." % args.add_archive)242 archive_name_esc = "\"" + archive_name + "\""
239 sys.exit(1)243
240244 if args.archive == 'add':
241 self.containers_config.add_container_archive(container_id, args.add_archive)245 if self.containers_config.archive_exists(container_id, archive_name):
242 self.containers_config.update_archive_install_status(container_id, args.add_archive, 'installing')246 print("%s already added in container." % archive_name)
243 if container.configure_command('add-archive', args.add_archive) is not 0:247 sys.exit(1)
244 self.containers_config.delete_container_archive(container_id, args.add_archive)248
245 sys.exit(1)249 self.containers_config.add_container_archive(container_id, archive_name)
246250 self.containers_config.update_archive_install_status(container_id, archive_name, 'installing')
247 self.containers_config.update_archive_install_status(container_id, args.add_archive, 'installed')251 if container.configure_add_archive(archive_name_esc, args.public_key_file, args.verbosity) is not 0:
248252 self.containers_config.delete_container_archive(container_id, archive_name)
249 elif args.delete_archive:253 sys.exit(1)
250 if not self.containers_config.archive_exists(container_id, args.delete_archive):254
251 print("%s is not added in container." % args.delete_archive)255 self.containers_config.update_archive_install_status(container_id, archive_name, 'installed')
252 sys.exit(1)256
253257 elif args.archive == 'remove':
254 if not self.delete_archive_by_name(container_id, args.delete_archive):258 if not self.containers_config.archive_exists(container_id, archive_name):
255 sys.exit(1)259 print("%s is not added in container." % archive_name)
260 sys.exit(1)
261
262 if not self.delete_archive_by_name(container_id, archive_name):
263 print("%s was not properly deleted." % archive_name)
264 sys.exit(1)
265
266 else:
267 print("Configure called with no subcommand. See configure --help for usage.")
268 sys.exit(1)
269
256270
257 def merge(self, args):271 def merge(self, args):
258 self.containers_config.merge_container_config_files(args.file)272 self.containers_config.merge_container_config_files(args.file)
@@ -435,22 +449,31 @@
435 parser_configure.add_argument(449 parser_configure.add_argument(
436 '-i', '--id',450 '-i', '--id',
437 help=("Container identifier. Default container is used if omitted."))451 help=("Container identifier. Default container is used if omitted."))
438 parser_configure.add_argument(452 multiarch_group = parser_configure.add_argument_group("Multiarch support",
439 '-m', '--multiarch',453 "Enable or disable multiarch support for a container.")
440 choices=['enable', 'disable'],454 multiarch_group.add_argument(
441 help=("Enables or disables i386 multiarch support for amd64 Libertine "455 '-m', '--multiarch',
442 "containers. This option has no effect when the Libertine "456 choices=['enable', 'disable'],
443 "container is i386."))457 help=("Enables or disables i386 multiarch support for amd64 Libertine "
444 parser_configure.add_argument(458 "containers. This option has no effect when the Libertine "
445 '-a', '--add-archive',459 "container is i386."))
446 metavar='Archive name',460
447 help=("Adds an archive (PPA) in the specified Libertine container. Needs to be "461 archive_group = parser_configure.add_argument_group("Additional archive support",
448 "in the form of \"ppa:user/ppa-name\"."))462 "Add or delete an additional archive (PPA).")
449 parser_configure.add_argument(463 archive_group.add_argument(
450 '-d', '--delete-archive',464 '-a', '--archive',
451 metavar='Archive name',465 choices=['add', 'remove'],
452 help=("Deletes an existing archive (PPA) in the specified Libertine container. "466 help=("Adds or removes an archive (PPA) in the specified Libertine container."))
453 "Needs to be in the form of \"ppa:user/ppa-name\"."))467 archive_group.add_argument(
468 '-n', '--archive-name',
469 metavar='Archive name',
470 help=("Archive name to be added or removed."))
471 archive_group.add_argument(
472 '-k', '--public-key-file',
473 metavar='Public key file',
474 help=("File containing the key used to sign the given archive. "
475 "Useful for third-party or private archives."))
476
454 parser_configure.set_defaults(func=container_manager.configure)477 parser_configure.set_defaults(func=container_manager.configure)
455478
456 # Handle merging another ContainersConfig.json file into the main ContainersConfig.json file479 # Handle merging another ContainersConfig.json file into the main ContainersConfig.json file
457480
=== modified file 'tools/libertine-container-manager.1'
--- tools/libertine-container-manager.1 2016-06-07 14:00:34 +0000
+++ tools/libertine-container-manager.1 2016-07-21 17:26:05 +0000
@@ -265,14 +265,19 @@
265Enable i386 support.265Enable i386 support.
266.RE266.RE
267.IP267.IP
268.BR \-a " ARCHIVE_NAME, " \-\-add-archive " ARCHIVE_NAME" ""268.BR \-a " {add,remove}, " \-\-archive "{add,remove}" ""
269.RS 14269.RS 14
270Adds an archive to the specified container. Format like "ppa:user/ppa-name".270Adds or removes an archive in the specified container.
271.RE271.RE
272.IP272.IP
273.BR \-d " ARCHIVE_NAME, " \-\-delete-archive " ARCHIVE_NAME" ""273.BR \-n " ARCHIVE_NAME, " \-\-archive-name " ARCHIVE_NAME" ""
274.RS 14274.RS 14
275Deletes an archive to the specified container. Format like "ppa:user/ppa-name".275Archive to be added or removed. Examples: 'deb http://myserver/path/to/repo stable myrepo', ppa:user/repository, multiverse
276.RE
277.IP
278.BR \-k " PUBLIC_KEY_FILE, " \-\-public-key-file " PUBLIC_KEY_FILE" ""
279.RS 14
280File containing public key used to sign new archive.
276.RE281.RE
277.TP282.TP
278283
279284
=== modified file 'tools/libertine-launch'
--- tools/libertine-launch 2016-06-28 20:16:55 +0000
+++ tools/libertine-launch 2016-07-21 17:26:05 +0000
@@ -21,11 +21,9 @@
21import random21import random
22import string22import string
23import libertine.utils23import libertine.utils
24import psutil
25import shlex24import shlex
26import time25import time
2726from libertine import LibertineApplication
28from libertine import LibertineContainer
2927
3028
31def get_session_socket_path(session_socket_name):29def get_session_socket_path(session_socket_name):
@@ -60,13 +58,6 @@
60 set_env_socket_path(socket_path, 'MALIIT_SERVER_ADDRESS')58 set_env_socket_path(socket_path, 'MALIIT_SERVER_ADDRESS')
6159
6260
63def launch_libertine_session_bridge(session_socket_path):
64 libertine_session_bridge_cmd = "libertine-session-bridge " + session_socket_path
65
66 args = shlex.split(libertine_session_bridge_cmd)
67 return psutil.Popen(args)
68
69
70def detect_session_bridge_socket(session_socket_path):61def detect_session_bridge_socket(session_socket_path):
71 retries = 062 retries = 0
7263
@@ -87,6 +78,8 @@
87 help='exec line')78 help='exec line')
88 args = arg_parser.parse_args()79 args = arg_parser.parse_args()
8980
81 la = LibertineApplication(args.container_id, args.app_exec_line)
82
90 # remove problematic environment variables83 # remove problematic environment variables
91 for e in ['QT_QPA_PLATFORM', 'LD_LIBRARY_PATH', 'FAKECHROOT_BASE', 'FAKECHROOT_CMD_SUBST']:84 for e in ['QT_QPA_PLATFORM', 'LD_LIBRARY_PATH', 'FAKECHROOT_BASE', 'FAKECHROOT_CMD_SUBST']:
92 if e in os.environ:85 if e in os.environ:
@@ -94,9 +87,8 @@
9487
95 dbus_socket_path = get_dbus_session_socket_path()88 dbus_socket_path = get_dbus_session_socket_path()
96 maliit_socket_path = get_maliit_session_socket_path()89 maliit_socket_path = get_maliit_session_socket_path()
97 session_bridge_arguments = dbus_socket_path + ' ' + maliit_socket_path
9890
99 session_bridge = launch_libertine_session_bridge(session_bridge_arguments)91 la.launch_session_bridge([dbus_socket_path, maliit_socket_path])
10092
101 set_dbus_env_socket_path(dbus_socket_path)93 set_dbus_env_socket_path(dbus_socket_path)
102 set_maliit_env_socket_path(maliit_socket_path)94 set_maliit_env_socket_path(maliit_socket_path)
@@ -104,11 +96,4 @@
104 # should detect the maliit socket, but dont know if its around or not here.96 # should detect the maliit socket, but dont know if its around or not here.
105 detect_session_bridge_socket(dbus_socket_path)97 detect_session_bridge_socket(dbus_socket_path)
10698
107 container = LibertineContainer(args.container_id)99 la.launch_application()
108
109 try:
110 container.launch_application(args.app_exec_line)
111 except:
112 raise
113 finally:
114 session_bridge.terminate()
115100
=== added file 'tools/libertine-lxc-setup'
--- tools/libertine-lxc-setup 1970-01-01 00:00:00 +0000
+++ tools/libertine-lxc-setup 2016-07-21 17:26:05 +0000
@@ -0,0 +1,9 @@
1#!/bin/sh
2
3USERNAME=$1
4
5LXC_USERNET_ENTRY="$USERNAME veth lxcbr0 10"
6
7usermod --add-subuids 100000-165536 --add-subgids 100000-165536 $USERNAME
8
9echo $LXC_USERNET_ENTRY | tee -a /etc/lxc/lxc-usernet > /dev/null
010
=== modified file 'tools/libertine-session-bridge'
--- tools/libertine-session-bridge 2016-06-27 15:59:41 +0000
+++ tools/libertine-session-bridge 2016-07-21 17:26:05 +0000
@@ -123,7 +123,12 @@
123 accept_new_connection(host_session_socket_path_map[sock], sock)123 accept_new_connection(host_session_socket_path_map[sock], sock)
124124
125 else:125 else:
126 data = sock.recv(4096)126 try:
127 data = sock.recv(4096)
128 except:
129 close_connections(sock)
130 continue
131
127 if len(data) == 0:132 if len(data) == 0:
128 close_connections(sock)133 close_connections(sock)
129 continue134 continue
130135
=== modified file 'tools/update-puritine-containers'
--- tools/update-puritine-containers 2016-06-10 20:34:33 +0000
+++ tools/update-puritine-containers 2016-07-21 17:26:05 +0000
@@ -23,10 +23,20 @@
23import shutil23import shutil
24import subprocess24import subprocess
2525
26from gi.repository import GLib, Gio
27
26puritine_hook_dir = os.path.join(os.environ['HOME'], '.cache', 'libertine', 'puritine')28puritine_hook_dir = os.path.join(os.environ['HOME'], '.cache', 'libertine', 'puritine')
27puritine_symlink_farm_file = os.path.join(puritine_hook_dir, 'PuritineSymlinkFarm.json')29puritine_symlink_farm_file = os.path.join(puritine_hook_dir, 'PuritineSymlinkFarm.json')
28puritine_click_config_file = os.path.join('libertine-config', 'libertine', 'ContainersConfig.json')30puritine_click_config_file = os.path.join('libertine-config', 'libertine', 'ContainersConfig.json')
2931
32def symlink_farm_entries_count():
33 if (puritine_symlink_farm_list and
34 puritine_symlink_farm_list['customContainers']):
35 return len(puritine_symlink_farm_list['customContainers'])
36
37 return 0
38
39
30def puritine_symlink_exists(symlink):40def puritine_symlink_exists(symlink):
31 for file in os.listdir(puritine_hook_dir):41 for file in os.listdir(puritine_hook_dir):
32 if file == symlink:42 if file == symlink:
@@ -117,21 +127,59 @@
117 return puritine_symlink_farm_list127 return puritine_symlink_farm_list
118128
119129
120puritine_symlink_farm_list = {}130def favorite_libertine_scope():
121131 libertine_scope_value = 'scope://libertine-scope.ubuntu_libertine-scope'
122if not os.path.exists(puritine_hook_dir):132 click_scope_value = 'scope://clickscope'
123 os.makedirs(puritine_hook_dir)133 schema = 'com.canonical.Unity.Dash'
124134 schema_key = 'favorite-scopes'
125if (os.path.exists(puritine_symlink_farm_file) and135
126 os.path.getsize(puritine_symlink_farm_file) != 0):136 settings = Gio.Settings.new(schema)
127 with open(puritine_symlink_farm_file, 'r') as fd:137
128 puritine_symlink_farm_list = json.load(fd)138 favorites = settings.get_value(schema_key)
129139
130puritine_symlink_farm_list = find_new_or_updated_puritine_symlinks(puritine_symlink_farm_list)140 array = favorites.dup_strv()
131141
132if puritine_symlink_farm_list:142 if not libertine_scope_value in array:
133 puritine_symlink_farm_list = find_removed_puritine_symlinks(puritine_symlink_farm_list)143 array.insert(array.index(click_scope_value) + 1, libertine_scope_value)
134144 new_favorites = GLib.Variant.new_strv(array)
135with open(puritine_symlink_farm_file, 'w') as fd:145 settings.set_value(schema_key, new_favorites)
136 json.dump(puritine_symlink_farm_list, fd, sort_keys=True, indent=4)146 del new_favorites
137 fd.write('\n')147
148 del array
149 del favorites
150 del settings
151
152
153if __name__ == '__main__':
154 puritine_symlink_farm_list = {}
155
156 with open(os.path.join('/', 'run', 'user', str(os.getuid()), 'dbus-session'), 'r') as fd:
157 dbus_session_str = fd.read()
158
159 os.environ['DBUS_SESSION_BUS_ADDRESS'] = dbus_session_str.partition('DBUS_SESSION_BUS_ADDRESS=')[2].rstrip('\n')
160
161 if not os.path.exists(puritine_hook_dir):
162 os.makedirs(puritine_hook_dir)
163
164 if (os.path.exists(puritine_symlink_farm_file) and
165 os.path.getsize(puritine_symlink_farm_file) != 0):
166 with open(puritine_symlink_farm_file, 'r') as fd:
167 puritine_symlink_farm_list = json.load(fd)
168
169 count_at_start = symlink_farm_entries_count()
170
171 puritine_symlink_farm_list = find_new_or_updated_puritine_symlinks(puritine_symlink_farm_list)
172
173 if puritine_symlink_farm_list:
174 puritine_symlink_farm_list = find_removed_puritine_symlinks(puritine_symlink_farm_list)
175
176 count_at_finish = symlink_farm_entries_count()
177
178 with open(puritine_symlink_farm_file, 'w') as fd:
179 json.dump(puritine_symlink_farm_list, fd, sort_keys=True, indent=4)
180 fd.write('\n')
181
182 if count_at_start == 0 and count_at_finish > 0:
183 favorite_libertine_scope()
184
185 libertine.utils.refresh_libertine_scope()

Subscribers

People subscribed via source and target branches