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
1=== modified file 'data/CMakeLists.txt'
2--- data/CMakeLists.txt 2016-05-19 14:29:57 +0000
3+++ data/CMakeLists.txt 2016-07-21 17:26:05 +0000
4@@ -1,3 +1,5 @@
5+set(CMAKE_INSTALL_SYSCONFDIR "/etc")
6+
7 install(FILES libertine.desktop
8 DESTINATION ${CMAKE_INSTALL_DATADIR}/applications)
9 install(FILES libertine_64.png libertine-lxc.conf
10@@ -6,6 +8,8 @@
11 DESTINATION ${CMAKE_INSTALL_DATADIR}/upstart/sessions)
12 install(FILES puritine-15.04.1.framework
13 DESTINATION ${CMAKE_INSTALL_DATADIR}/click/frameworks)
14+install(FILES libertine-lxc-sudo
15+ DESTINATION ${CMAKE_INSTALL_SYSCONFDIR}/sudoers.d)
16
17 configure_file("libertine-tools.click-hook.in"
18 "${CMAKE_SOURCE_DIR}/debian/libertine-tools.click-hook"
19
20=== added file 'data/libertine-lxc-sudo'
21--- data/libertine-lxc-sudo 1970-01-01 00:00:00 +0000
22+++ data/libertine-lxc-sudo 2016-07-21 17:26:05 +0000
23@@ -0,0 +1,1 @@
24+ALL ALL=(ALL) NOPASSWD:/usr/bin/libertine-lxc-setup
25
26=== modified file 'debian/changelog'
27--- debian/changelog 2016-07-07 20:17:22 +0000
28+++ debian/changelog 2016-07-21 17:26:05 +0000
29@@ -1,3 +1,25 @@
30+libertine (1.3-0ubuntu1) UNRELEASED; urgency=medium
31+
32+ [ Brandon Schaefer ]
33+ * This creates a LibertineApplication which wraps up the starting of a
34+ container. This way we can mock creations of an Application.
35+
36+ [ Chris Townsend ]
37+ * Rework the whole way we handle updating the necessary system files for
38+ unprivileged LXC's: (LP: #1598785)
39+ - Add new script that does the updates.
40+ - Add sudoers file for this script.
41+ - Remove the password dialog in the UI.
42+ * Add functionality to "favorite" the Libertine scope upon first
43+ installation of the Puritine click package. (LP: #1602397)
44+ * Bump version to 1.3.
45+
46+ [ Larry Price ]
47+ * Allow adding all forms of additional archives to containers.
48+ * Support adding private PPAs inside of a container. (LP: #1599882)
49+
50+ -- Chris Townsend <christopher.townsend@canonical.com> Tue, 19 Jul 2016 11:28:00 -0400
51+
52 libertine (1.2.2+16.10.20160707-0ubuntu1) yakkety; urgency=medium
53
54 [ Brandon Schaefer ]
55
56=== modified file 'debian/control'
57--- debian/control 2016-06-15 14:48:27 +0000
58+++ debian/control 2016-07-21 17:26:05 +0000
59@@ -116,6 +116,8 @@
60 uidmap,
61 ${misc:Depends},
62 ${python3:Depends}
63+Replaces: libertine-tools (<< 1.3)
64+Breaks: libertine-tools (<< 1.3)
65 Description: Python3 scripts for the Libertine application sandbox
66 This package provides the LXC-based container back end module for the
67 Libertine sandbox. It requires support for unprivileged LXC containers in the
68
69=== modified file 'debian/libertine-tools.install'
70--- debian/libertine-tools.install 2016-06-07 19:49:27 +0000
71+++ debian/libertine-tools.install 2016-07-21 17:26:05 +0000
72@@ -1,12 +1,9 @@
73 usr/bin/libertine-launch
74 usr/bin/libertine-session-bridge
75 usr/bin/libertine-container-manager
76-usr/bin/libertine-lxc-manager
77 usr/bin/libertine-xmir
78 usr/share/bash-completion/completions/libertine-container-manager
79 usr/lib/*/libertine/update-puritine-containers
80 usr/share/man
81-usr/share/libertine/libertine-lxc.conf
82-usr/share/upstart/sessions/libertine-lxc-manager.conf
83 usr/share/upstart/sessions/libertine-xmir.conf
84 usr/share/click/frameworks/puritine-15.04.1.framework
85
86=== modified file 'debian/python3-libertine-lxc.install'
87--- debian/python3-libertine-lxc.install 2015-11-30 14:37:36 +0000
88+++ debian/python3-libertine-lxc.install 2016-07-21 17:26:05 +0000
89@@ -1,1 +1,6 @@
90 usr/lib/python*/*/libertine/LxcContainer.py
91+usr/bin/libertine-lxc-manager
92+usr/share/libertine/libertine-lxc.conf
93+usr/share/upstart/sessions/libertine-lxc-manager.conf
94+etc/sudoers.d/libertine-lxc-sudo
95+usr/bin/libertine-lxc-setup
96
97=== modified file 'libertine/ContainerManager.cpp'
98--- libertine/ContainerManager.cpp 2016-06-08 21:56:53 +0000
99+++ libertine/ContainerManager.cpp 2016-07-21 17:26:05 +0000
100@@ -17,6 +17,7 @@
101 * along with this program. If not, see <http://www.gnu.org/licenses/>.
102 */
103 #include "libertine/ContainerManager.h"
104+#include <QTemporaryFile>
105
106
107 namespace
108@@ -34,10 +35,12 @@
109 constexpr auto libertine_container_manager_tool = "libertine-container-manager";
110
111
112-static const QString readAllStdOutOrStdErr(QProcess& proc)
113+static const QString readAllStdOutOrStdErr(QProcess& proc, const QString& default_output = "")
114 {
115- auto out = proc.readAllStandardOutput();
116- return out.isEmpty() ? proc.readAllStandardError() : out;
117+ QByteArray out = proc.readAllStandardOutput(),
118+ err = proc.readAllStandardError();
119+ return !out.isEmpty() ? out
120+ : !err.isEmpty() ? err : default_output;
121 }
122
123
124@@ -175,7 +178,7 @@
125 [=](int exitCode, QProcess::ExitStatus){
126 if (exitCode != 0)
127 {
128- emit error(PACKAGE_INSTALLATION_FAILED.arg(package_name), process_output_.isEmpty() ? process_.readAllStandardError() : process_output_);
129+ emit error(PACKAGE_INSTALLATION_FAILED.arg(package_name), readAllStdOutOrStdErr(process_, process_output_));
130 }
131 emit operationFinished(container_id, package_name);
132 });
133@@ -268,13 +271,14 @@
134 if (!output.isEmpty())
135 {
136 emit updateOperationDetails(container_id, "", output);
137+ process_output_ += output;
138 }
139 });
140 connect(&process_, static_cast<void(QProcess::*)(int, QProcess::ExitStatus)>(&QProcess::finished),
141 [=](int exitCode, QProcess::ExitStatus){
142 if (exitCode != 0)
143 {
144- emit error(CONTAINER_CONFIGURE_FAILED.arg(container_name), readAllStdOutOrStdErr(process_));
145+ emit error(CONTAINER_CONFIGURE_FAILED.arg(container_name), readAllStdOutOrStdErr(process_, process_output_));
146 }
147 else
148 {
149@@ -290,6 +294,29 @@
150
151
152 void ContainerManagerWorker::
153+addArchive(const QString& container_id, const QString& container_name, const QString& archive, const QByteArray& signing_key)
154+{
155+ QStringList command{"--archive", "add", "--archive-name", archive};
156+ if (!signing_key.isEmpty())
157+ {
158+ QTemporaryFile keyfile;
159+ if (!keyfile.open())
160+ {
161+ emit error(CONTAINER_CONFIGURE_FAILED.arg(container_name), keyfile.errorString());
162+ return;
163+ }
164+
165+ keyfile.setAutoRemove(false);
166+ keyfile.write(signing_key);
167+
168+ command << "--public-key-file" << keyfile.fileName();
169+ }
170+
171+ configureContainer(container_id, container_name, command);
172+}
173+
174+
175+void ContainerManagerWorker::
176 fixIntegrity()
177 {
178 process_.start(libertine_container_manager_tool, QStringList{"fix-integrity"});
179
180=== modified file 'libertine/ContainerManager.h'
181--- libertine/ContainerManager.h 2016-06-08 21:12:57 +0000
182+++ libertine/ContainerManager.h 2016-07-21 17:26:05 +0000
183@@ -42,6 +42,7 @@
184 Q_INVOKABLE void updateContainer(const QString& container_id, const QString& container_name);
185 Q_INVOKABLE void runCommand(const QString& container_id, const QString& container_name, const QString& command_line);
186 Q_INVOKABLE void configureContainer(const QString& container_id, const QString& container_name, const QStringList& configure_command);
187+ Q_INVOKABLE void addArchive(const QString& container_id, const QString& container_name, const QString& archive, const QByteArray& signing_key);
188 Q_INVOKABLE void fixIntegrity();
189 Q_INVOKABLE void setDefaultContainer(const QString& container_id, bool should_clear);
190
191
192=== removed file 'libertine/PasswordHelper.cpp'
193--- libertine/PasswordHelper.cpp 2016-04-21 13:43:38 +0000
194+++ libertine/PasswordHelper.cpp 1970-01-01 00:00:00 +0000
195@@ -1,123 +0,0 @@
196-/**
197- * @file PasswordHelper.cpp
198- * @brief Helper class for managing password entry
199- */
200-/*
201- * Copyright 2015 Canonical Ltd
202- *
203- * Libertine is free software: you can redistribute it and/or modify it under
204- * the terms of the GNU General Public License, version 3, as published by the
205- * Free Software Foundation.
206- *
207- * Libertine is distributed in the hope that it will be useful, but WITHOUT ANY
208- * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
209- * A PARTICULAR PURPOSE. See the GNU General Public License for more details.
210- *
211- * You should have received a copy of the GNU General Public License
212- * along with this program. If not, see <http://www.gnu.org/licenses/>.
213- */
214-#include "libertine/PasswordHelper.h"
215-
216-#include <iostream>
217-#include <termios.h>
218-#include <unistd.h>
219-
220-using namespace std;
221-
222-namespace
223-{
224-
225-struct pam_response *reply;
226-
227-int function_conversation(int, const struct pam_message**, struct pam_response **resp, void*)
228-{
229- *resp = reply;
230- return PAM_SUCCESS;
231-}
232-
233-void set_stdin_echo(bool enable = true)
234-{
235- struct termios tty;
236-
237- tcgetattr(STDIN_FILENO, &tty);
238- if (!enable)
239- tty.c_lflag &= ~ECHO;
240- else
241- tty.c_lflag |= ECHO;
242-
243- (void) tcsetattr(STDIN_FILENO, TCSANOW, &tty);
244-}
245-
246-} // anonymous namespace
247-
248-
249-PasswordHelper::
250-PasswordHelper()
251-{
252-}
253-
254-
255-PasswordHelper::
256-~PasswordHelper()
257-{
258-}
259-
260-
261-QString PasswordHelper::
262-GetPassword()
263-{
264- string password;
265-
266- cout << "Please enter your password:" << endl;
267-
268- set_stdin_echo(false);
269- getline(cin, password);
270- set_stdin_echo(true);
271-
272- if (cin.fail() || cin.eof())
273- {
274- return nullptr;
275- }
276- else
277- {
278- return QString::fromStdString(password);
279- }
280-}
281-
282-
283-bool PasswordHelper::
284-VerifyUserPassword(QString const& password)
285-{
286- char *username = getenv("USER");
287- int retval;
288-
289- const struct pam_conv local_conversation = { function_conversation, NULL };
290- pam_handle_t *local_auth_handle = NULL;
291-
292- retval = pam_start("common_auth", username, &local_conversation, &local_auth_handle);
293-
294- if (retval != PAM_SUCCESS)
295- {
296- return false;
297- }
298-
299- reply = (struct pam_response *)malloc(sizeof(struct pam_response));
300-
301- reply[0].resp = strdup(password.toStdString().c_str());
302- reply[0].resp_retcode = 0;
303-
304- retval = pam_authenticate(local_auth_handle, 0);
305-
306- if (retval != PAM_SUCCESS)
307- {
308- return false;
309- }
310-
311- retval = pam_end(local_auth_handle, retval);
312-
313- if (retval != PAM_SUCCESS)
314- {
315- return false;
316- }
317- return true;
318-}
319
320=== removed file 'libertine/PasswordHelper.h'
321--- libertine/PasswordHelper.h 2015-09-02 18:58:33 +0000
322+++ libertine/PasswordHelper.h 1970-01-01 00:00:00 +0000
323@@ -1,43 +0,0 @@
324-/**
325- * @file PasswordHelper.h
326- * @brief Helper class for managing password entry
327- */
328-/*
329- * Copyright 2015 Canonical Ltd
330- *
331- * Libertine is free software: you can redistribute it and/or modify it under
332- * the terms of the GNU General Public License, version 3, as published by the
333- * Free Software Foundation.
334- *
335- * Libertine is distributed in the hope that it will be useful, but WITHOUT ANY
336- * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
337- * A PARTICULAR PURPOSE. See the GNU General Public License for more details.
338- *
339- * You should have received a copy of the GNU General Public License
340- * along with this program. If not, see <http://www.gnu.org/licenses/>.
341- */
342-#ifndef LIBERTINE_PASSWORD_HELPER_H_
343-#define LIBERTINE_PASSWORD_HELPER_H_
344-
345-#include <iostream>
346-#include <security/pam_appl.h>
347-#include <QtCore/QObject>
348-#include <QtCore/QString>
349-
350-class PasswordHelper
351-: public QObject
352-{
353- Q_OBJECT
354-
355-public:
356- PasswordHelper();
357- ~PasswordHelper();
358-
359- QString
360- GetPassword();
361-
362- Q_INVOKABLE bool
363- VerifyUserPassword(QString const& password);
364-};
365-
366-#endif /* LIBERTINE_PASSWORD_HELPER_H_ */
367
368=== modified file 'libertine/libertine.cpp'
369--- libertine/libertine.cpp 2016-03-09 15:09:05 +0000
370+++ libertine/libertine.cpp 2016-07-21 17:26:05 +0000
371@@ -26,7 +26,6 @@
372 #include "libertine/ContainerConfigList.h"
373 #include "libertine/libertine.h"
374 #include "libertine/LibertineConfig.h"
375-#include "libertine/PasswordHelper.h"
376 #include <QtCore/QDebug>
377 #include <QtCore/QDir>
378 #include <QtCore/QFile>
379@@ -94,7 +93,6 @@
380 config_.reset(new LibertineConfig(*this));
381 qmlRegisterType<ContainerConfig>("Libertine", 1, 0, "ContainerConfig");
382 qmlRegisterType<ContainerManagerWorker>("Libertine", 1, 0, "ContainerManagerWorker");
383- qmlRegisterType<PasswordHelper>("Libertine", 1, 0, "PasswordHelper");
384
385 watcher_.addPath(config_.data()->containers_config_file_name());
386 connect(&watcher_, SIGNAL(fileChanged(QString)), SLOT(reload_config(QString)));
387@@ -107,7 +105,6 @@
388 containers_ = new ContainerConfigList(config_.data(), this);
389 container_apps_ = new ContainerAppsList(containers_, this);
390 container_archives_ = new ContainerArchivesList(containers_, this);
391- password_helper_ = new PasswordHelper();
392
393 initialize_view();
394 view_.show();
395@@ -134,7 +131,6 @@
396 ctxt->setContextProperty("containerConfigList", containers_);
397 ctxt->setContextProperty("containerAppsList", container_apps_);
398 ctxt->setContextProperty("containerArchivesList", container_archives_);
399- ctxt->setContextProperty("passwordHelper", password_helper_);
400
401 view_.setSource(QUrl::fromLocalFile(main_qml_source_file_));
402 connect(view_.engine(), SIGNAL(quit()), SLOT(quit()));
403
404=== modified file 'libertine/libertine.h'
405--- libertine/libertine.h 2016-03-09 15:09:05 +0000
406+++ libertine/libertine.h 2016-07-21 17:26:05 +0000
407@@ -28,7 +28,6 @@
408
409 class ContainerConfigList;
410 class LibertineConfig;
411-class PasswordHelper;
412 class ContainerAppsList;
413 class ContainerArchivesList;
414
415@@ -57,7 +56,6 @@
416 ContainerConfigList* containers_;
417 ContainerAppsList* container_apps_;
418 ContainerArchivesList* container_archives_;
419- PasswordHelper* password_helper_;
420 QQuickView view_;
421 };
422
423
424=== added file 'libertine/qml/AddExtraArchiveView.qml'
425--- libertine/qml/AddExtraArchiveView.qml 1970-01-01 00:00:00 +0000
426+++ libertine/qml/AddExtraArchiveView.qml 2016-07-21 17:26:05 +0000
427@@ -0,0 +1,117 @@
428+/**
429+ * @file AddExtraArchiveView.qml
430+ * @brief Libertine container add archive view
431+ */
432+/*
433+ * Copyright 2016 Canonical Ltd
434+ *
435+ * Libertine is free software: you can redistribute it and/or modify it under
436+ * the terms of the GNU General Public License, version 3, as published by the
437+ * Free Software Foundation.
438+ *
439+ * Libertine is distributed in the hope that it will be useful, but WITHOUT ANY
440+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
441+ * A PARTICULAR PURPOSE. See the GNU General Public License for more details.
442+ *
443+ * You should have received a copy of the GNU General Public License
444+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
445+ */
446+import Libertine 1.0
447+import QtQuick 2.4
448+import Ubuntu.Components 1.3
449+
450+Page {
451+ id: addExtraArchiveView
452+ header: PageHeader {
453+ id: pageHeader
454+ title: i18n.tr("Add Archive")
455+ }
456+ property string currentContainer: ""
457+
458+ Column {
459+ spacing: units.gu(2)
460+
461+ anchors {
462+ topMargin: pageHeader.height + units.gu(2)
463+ leftMargin: units.gu(2)
464+ rightMargin: units.gu(2)
465+ fill: parent
466+ }
467+
468+ Label {
469+ text: i18n.tr("New archive identifier, e.g.")
470+ anchors {
471+ left: parent.left
472+ right: parent.right
473+ }
474+ }
475+
476+ TextEdit {
477+ text: i18n.tr("multiverse\nppa:user/repository\ndeb http://myserver/repo stable repo")
478+ anchors {
479+ left: parent.left
480+ right: parent.right
481+ leftMargin: units.gu(4)
482+ }
483+
484+ readOnly: true
485+ color: UbuntuColors.darkGrey
486+ }
487+
488+ TextField {
489+ id: extraArchiveString
490+ anchors {
491+ left: parent.left
492+ right: parent.right
493+ }
494+ onAccepted: {
495+ addArchive()
496+ }
497+ }
498+
499+ Label {
500+ text: i18n.tr("(Optional) Public signing key for archive")
501+ anchors {
502+ left: parent.left
503+ right: parent.right
504+ }
505+ }
506+
507+ TextArea {
508+ id: publicSigningKey
509+ anchors {
510+ left: parent.left
511+ right: parent.right
512+ }
513+ height: Math.max(addExtraArchiveView.height/3, units.gu(6))
514+ }
515+
516+ Button {
517+ text: i18n.tr("Add")
518+ color: UbuntuColors.green
519+ onClicked: {
520+ addArchive()
521+ }
522+ }
523+ }
524+
525+ function addArchive() {
526+ var worker = Qt.createComponent("ContainerManager.qml").createObject(mainView)
527+ worker.finishedConfigure.connect(finishedConfigure)
528+ worker.error.connect(mainView.error)
529+ worker.addArchive(currentContainer, containerConfigList.getContainerName(currentContainer),
530+ extraArchiveString.text, publicSigningKey.text.trim())
531+
532+ pageStack.pop()
533+ }
534+
535+ Component.onCompleted: {
536+ extraArchiveString.forceActiveFocus()
537+ }
538+
539+ function finishedConfigure() {
540+ if (addExtraArchiveView) {
541+ containerArchivesList.setContainerArchives(currentContainer)
542+ }
543+ }
544+}
545
546=== modified file 'libertine/qml/ContainerOptionsDialog.qml'
547--- libertine/qml/ContainerOptionsDialog.qml 2016-05-06 21:13:01 +0000
548+++ libertine/qml/ContainerOptionsDialog.qml 2016-07-21 17:26:05 +0000
549@@ -26,10 +26,9 @@
550 id: containerOptionsDialog
551 title: i18n.tr("Container Options")
552 text: i18n.tr("Configure options for container creation.")
553- property var showPasswordDialog: false
554- signal passwordDialogSignal(var enableMultiarch, var containerName)
555
556 Row {
557+ visible: containerConfigList.getHostArchitecture() == 'x86_64' ? true : false
558 spacing: units.gu(1)
559 CheckBox {
560 id: enableMultiarchCheckbox
561@@ -47,7 +46,7 @@
562
563 Label {
564 id: containerNameText
565- text: i18n.tr("Enter or name for the container or leave blank for default name")
566+ text: i18n.tr("Enter a name for the container or leave blank for default name:")
567 wrapMode: Text.Wrap
568 }
569
570@@ -57,6 +56,20 @@
571 onAccepted: okButton.clicked()
572 }
573
574+ Label {
575+ id: containerPasswordText
576+ visible: true
577+ text: i18n.tr("Enter password for your user in the Libertine container or leave blank for no password:")
578+ wrapMode: Text.Wrap
579+ }
580+
581+ TextField {
582+ id: containerPasswordInput
583+ visible: containerPasswordText.visible
584+ placeholderText: i18n.tr("password")
585+ echoMode: TextInput.Password
586+ }
587+
588 Row {
589 spacing: units.gu(1)
590 Button {
591@@ -65,7 +78,7 @@
592 color: UbuntuColors.green
593 width: (parent.width - parent.spacing) / 2
594 onClicked: {
595- showPasswordDialog = true
596+ createContainer()
597 PopupUtils.close(containerOptionsDialog)
598 }
599 }
600@@ -79,9 +92,18 @@
601 }
602 }
603
604- Component.onDestruction: {
605- if (showPasswordDialog) {
606- passwordDialogSignal(enableMultiarchCheckbox.checked, containerNameInput.text)
607- }
608+ function createContainer() {
609+ var container_id = containerConfigList.addNewContainer("lxc", containerNameInput.text)
610+ var worker = Qt.createComponent("ContainerManager.qml").createObject(mainView)
611+
612+ worker.updateOperationDetails.connect(mainView.updateOperationDetails)
613+ worker.operationFinished.connect(mainView.resetOperationDetails)
614+ worker.error.connect(mainView.error)
615+
616+ worker.createContainer(container_id,
617+ containerConfigList.getContainerName(container_id),
618+ containerConfigList.getContainerDistro(container_id),
619+ enableMultiarchCheckbox.checked,
620+ containerPasswordInput.text)
621 }
622 }
623
624=== removed file 'libertine/qml/ContainerPasswordDialog.qml'
625--- libertine/qml/ContainerPasswordDialog.qml 2016-06-10 13:22:16 +0000
626+++ libertine/qml/ContainerPasswordDialog.qml 1970-01-01 00:00:00 +0000
627@@ -1,98 +0,0 @@
628-/**
629- * @file ContainerPasswordDialog.qml
630- * @brief Libertine container password dialog
631- */
632-/*
633- * Copyright 2016 Canonical Ltd
634- *
635- * Libertine is free software: you can redistribute it and/or modify it under
636- * the terms of the GNU General Public License, version 3, as published by the
637- * Free Software Foundation.
638- *
639- * Libertine is distributed in the hope that it will be useful, but WITHOUT ANY
640- * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
641- * A PARTICULAR PURPOSE. See the GNU General Public License for more details.
642- *
643- * You should have received a copy of the GNU General Public License
644- * along with this program. If not, see <http://www.gnu.org/licenses/>.
645- */
646-import Libertine 1.0
647-import QtQuick 2.4
648-import Ubuntu.Components 1.3
649-import Ubuntu.Components.Popups 1.3
650-
651-
652-Dialog {
653- id: passwordDialog
654- title: i18n.tr("Authentication required")
655- text: i18n.tr("Password is required to create a Libertine container")
656- property var enableMultiarch: false
657- property var containerName: null
658- property var switchPage: false
659-
660- Label {
661- id: invalidPasswordText
662- visible: false
663- text: i18n.tr("Invalid password entered")
664- }
665-
666- TextField {
667- id: passwordInput
668- placeholderText: i18n.tr("password")
669- echoMode: TextInput.Password
670-
671- onAccepted: okButton.clicked()
672- }
673-
674- Row {
675- spacing: units.gu(1)
676-
677- Button {
678- id: okButton
679- text: i18n.tr("OK")
680- color: UbuntuColors.green
681- width: (parent.width - parent.spacing) / 2
682- onClicked: {
683- if (passwordHelper.VerifyUserPassword(passwordInput.text)) {
684- passwordAccepted(text)
685- switchPage = true
686- PopupUtils.close(passwordDialog)
687- }
688- else {
689- invalidPasswordText.visible = true
690- }
691- passwordInput.text = ""
692- }
693- }
694-
695- Button {
696- id: cancelButton
697- text: i18n.tr("Cancel")
698- color: UbuntuColors.red
699- width: (parent.width - parent.spacing) / 2
700- onClicked: PopupUtils.close(passwordDialog)
701- }
702- }
703-
704- Component.onCompleted: passwordInput.forceActiveFocus()
705-
706- Component.onDestruction: {
707- if (switchPage) {
708- pageStack.clear()
709- pageStack.push(Qt.resolvedUrl("ContainersView.qml"))
710- }
711- }
712-
713- function passwordAccepted(password) {
714- var container_id = containerConfigList.addNewContainer("lxc", containerName)
715- var comp = Qt.createComponent("ContainerManager.qml")
716- var worker = comp.createObject(mainView)
717-
718- worker.updateOperationDetails.connect(mainView.updateOperationDetails)
719- worker.operationFinished.connect(mainView.resetOperationDetails)
720- worker.error.connect(mainView.error)
721-
722- worker.createContainer(container_id, containerConfigList.getContainerName(container_id),
723- containerConfigList.getContainerDistro(container_id), enableMultiarch, password)
724- }
725-}
726
727=== modified file 'libertine/qml/ContainersView.qml'
728--- libertine/qml/ContainersView.qml 2016-06-08 21:36:14 +0000
729+++ libertine/qml/ContainersView.qml 2016-07-21 17:26:05 +0000
730@@ -35,8 +35,7 @@
731 Action {
732 iconName: "add"
733 onTriggered: {
734- var popup = PopupUtils.open(Qt.resolvedUrl("ContainerOptionsDialog.qml"))
735- popup.passwordDialogSignal.connect(showPasswordDialog)
736+ PopupUtils.open(Qt.resolvedUrl("ContainerOptionsDialog.qml"))
737 }
738 }
739 ]
740
741=== modified file 'libertine/qml/ExtraArchivesView.qml'
742--- libertine/qml/ExtraArchivesView.qml 2016-06-27 14:43:49 +0000
743+++ libertine/qml/ExtraArchivesView.qml 2016-07-21 17:26:05 +0000
744@@ -1,6 +1,6 @@
745 /**
746 * @file ExtraArchiveView.qml
747- * @brief Libertine container add archive view
748+ * @brief Libertine container extra archive view
749 */
750 /*
751 * Copyright 2016 Canonical Ltd
752@@ -19,59 +19,25 @@
753 import Libertine 1.0
754 import QtQuick 2.4
755 import Ubuntu.Components 1.3
756-import Ubuntu.Components.Popups 1.3
757
758 Page {
759 id: extraArchiveView
760 header: PageHeader {
761 id: pageHeader
762- title: i18n.tr("Additional Archives and PPAs")
763+ title: i18n.tr("Additional Archives")
764 trailingActionBar.actions: [
765 Action {
766 iconName: "add"
767 text: i18n.tr("add")
768- description: i18n.tr("Add a new PPA")
769- onTriggered: PopupUtils.open(addArchivePopup)
770+ description: i18n.tr("Add a new archive")
771+ onTriggered: pageStack.push(Qt.resolvedUrl("AddExtraArchiveView.qml"), {currentContainer: currentContainer})
772 }
773 ]
774 }
775- property var archive_name: null
776- property var worker: null
777+ property string currentContainer: ""
778+
779 signal error(string description, string details)
780
781- Component {
782- id: addArchivePopup
783- Dialog {
784- id: addArchiveDialog
785- title: i18n.tr("Add additional PPA")
786- text: i18n.tr("Enter name of PPA in the form ppa:user/ppa-name:")
787-
788- TextField {
789- id: extraArchiveString
790- onAccepted: {
791- PopupUtils.close(addArchiveDialog)
792- addArchive(text)
793- }
794- }
795- Button {
796- text: i18n.tr("OK")
797- color: UbuntuColors.green
798- onClicked: {
799- PopupUtils.close(addArchiveDialog)
800- addArchive(extraArchiveString.text)
801- }
802- }
803- Button {
804- text: i18n.tr("Cancel")
805- color: UbuntuColors.red
806- onClicked: PopupUtils.close(addArchiveDialog)
807- }
808- Component.onCompleted: {
809- extraArchiveString.forceActiveFocus()
810- }
811- }
812- }
813-
814 UbuntuListView {
815 id: extraArchiveList
816 anchors {
817@@ -88,6 +54,8 @@
818 leftMargin: units.gu(2)
819 }
820 text: archiveName
821+ width: parent.width - units.gu(8)
822+ elide: Text.ElideMiddle
823 }
824 ActivityIndicator {
825 id: extraArchiveActivity
826@@ -125,18 +93,11 @@
827 text: i18n.tr("No additional archives and PPA's have been added")
828 }
829
830- function addArchive(archive) {
831- var worker = Qt.createComponent("ContainerManager.qml").createObject(mainView)
832- worker.finishedConfigure.connect(finishedConfigure)
833- worker.error.connect(sendAddError)
834- worker.configureContainer(mainView.currentContainer, containerConfigList.getContainerName(mainView.currentContainer), ["--add-archive", archive])
835- }
836-
837 function deleteArchive(archive) {
838 var worker = Qt.createComponent("ContainerManager.qml").createObject(mainView)
839 worker.finishedConfigure.connect(finishedConfigure)
840 worker.error.connect(sendDeleteError)
841- worker.configureContainer(mainView.currentContainer, containerConfigList.getContainerName(mainView.currentContainer), ["--delete-archive", archive])
842+ worker.configureContainer(currentContainer, containerConfigList.getContainerName(currentContainer), ["--archive", "remove", "--archive-name", "\"" + archive + "\""])
843 }
844
845 Component.onCompleted: {
846@@ -146,28 +107,19 @@
847
848 Component.onDestruction: {
849 containerConfigList.configChanged.disconnect(reloadArchives)
850-
851 error.disconnect(mainView.error)
852-
853- if (worker) {
854- worker.finishedConfigure.disconnect(finishedConfigure)
855- worker.error.disconnect(sendAddError)
856- worker.error.disconnect(sendDeleteError)
857- }
858 }
859
860 function reloadArchives() {
861- containerArchivesList.setContainerArchives(mainView.currentContainer)
862+ containerArchivesList.setContainerArchives(currentContainer)
863
864 extraArchiveList.visible = !containerArchivesList.empty() ? true : false
865 }
866
867 function finishedConfigure() {
868- containerArchivesList.setContainerArchives(mainView.currentContainer)
869- }
870-
871- function sendAddError(desc, details) {
872- error(i18n.tr("Adding archive failed"), details)
873+ if (extraArchiveView) {
874+ containerArchivesList.setContainerArchives(currentContainer)
875+ }
876 }
877
878 function sendDeleteError(desc, details) {
879
880=== modified file 'libertine/qml/ManageContainer.qml'
881--- libertine/qml/ManageContainer.qml 2016-06-08 21:56:53 +0000
882+++ libertine/qml/ManageContainer.qml 2016-07-21 17:26:05 +0000
883@@ -74,7 +74,7 @@
884 progression: true
885 onClicked: {
886 containerArchivesList.setContainerArchives(currentContainer)
887- pageStack.push(Qt.resolvedUrl("ExtraArchivesView.qml"))
888+ pageStack.push(Qt.resolvedUrl("ExtraArchivesView.qml"), {currentContainer: currentContainer})
889 }
890 }
891
892
893=== modified file 'libertine/qml/WelcomeView.qml'
894--- libertine/qml/WelcomeView.qml 2016-05-09 13:24:23 +0000
895+++ libertine/qml/WelcomeView.qml 2016-07-21 17:26:05 +0000
896@@ -67,8 +67,7 @@
897 color: UbuntuColors.green
898
899 onClicked: {
900- var popup = PopupUtils.open(Qt.resolvedUrl("ContainerOptionsDialog.qml"))
901- popup.passwordDialogSignal.connect(showPasswordDialog)
902+ PopupUtils.open(Qt.resolvedUrl("ContainerOptionsDialog.qml"))
903 }
904 }
905 }
906
907=== modified file 'liblibertine/CMakeLists.txt'
908--- liblibertine/CMakeLists.txt 2016-03-09 15:09:05 +0000
909+++ liblibertine/CMakeLists.txt 2016-07-21 17:26:05 +0000
910@@ -12,7 +12,6 @@
911 ${libertine_src}/ContainerManager.cpp
912 ${libertine_src}/ContainerAppsList.cpp
913 ${libertine_src}/ContainerArchivesList.cpp
914- ${libertine_src}/PasswordHelper.cpp
915 )
916 set_target_properties(libertine-common PROPERTIES
917 VERSION ${ABI_VERSION}.0.0
918
919=== modified file 'po/en_GB.po'
920--- po/en_GB.po 2016-07-15 05:42:05 +0000
921+++ po/en_GB.po 2016-07-21 17:26:05 +0000
922@@ -6,15 +6,16 @@
923 msgid ""
924 msgstr ""
925 "Project-Id-Version: libertine\n"
926-"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
927+"Report-Msgid-Bugs-To: \n"
928 "POT-Creation-Date: 2016-06-07 07:58-0400\n"
929 "PO-Revision-Date: 2016-05-20 16:53+0000\n"
930 "Last-Translator: Andi Chandler <Unknown>\n"
931 "Language-Team: English (United Kingdom) <en_GB@li.org>\n"
932+"Language: \n"
933 "MIME-Version: 1.0\n"
934 "Content-Type: text/plain; charset=UTF-8\n"
935 "Content-Transfer-Encoding: 8bit\n"
936-"X-Launchpad-Export-Date: 2016-07-15 05:42+0000\n"
937+"X-Launchpad-Export-Date: 2016-07-01 06:06+0000\n"
938 "X-Generator: Launchpad (build 18115)\n"
939
940 #: ../libertine/ContainerConfig.cpp:147 ../libertine/ContainerConfig.cpp:184
941@@ -22,32 +23,32 @@
942 msgstr "new"
943
944 #: ../libertine/ContainerConfig.cpp:148 ../libertine/ContainerConfig.cpp:185
945-#: ../libertine/qml/ContainersView.qml:81
946-#: ../libertine/qml/ExtraArchivesView.qml:106 ../libertine/qml/HomeView.qml:205
947+#: ../libertine/qml/ContainersView.qml:81 ../libertine/qml/HomeView.qml:197
948+#: ../libertine/qml/ExtraArchivesView.qml:99
949 msgid "installing"
950 msgstr "installing"
951
952-#: ../libertine/ContainerConfig.cpp:149 ../libertine/qml/ContainersView.qml:118
953-#: ../libertine/qml/ManageContainer.qml:85
954-#: ../libertine/qml/ManageContainer.qml:152
955+#: ../libertine/ContainerConfig.cpp:149 ../libertine/qml/ContainersView.qml:119
956+#: ../libertine/qml/ManageContainer.qml:79
957+#: ../libertine/qml/ManageContainer.qml:119
958 msgid "ready"
959 msgstr "ready"
960
961-#: ../libertine/ContainerConfig.cpp:150 ../libertine/qml/ContainersView.qml:119
962-#: ../libertine/qml/ManageContainer.qml:97
963-#: ../libertine/qml/ManageContainer.qml:148
964+#: ../libertine/ContainerConfig.cpp:150 ../libertine/qml/ContainersView.qml:120
965+#: ../libertine/qml/ManageContainer.qml:91
966+#: ../libertine/qml/ManageContainer.qml:115
967 msgid "updating"
968 msgstr "updating"
969
970 #: ../libertine/ContainerConfig.cpp:151 ../libertine/ContainerConfig.cpp:188
971-#: ../libertine/qml/ContainersView.qml:82
972-#: ../libertine/qml/ExtraArchivesView.qml:107 ../libertine/qml/HomeView.qml:206
973+#: ../libertine/qml/ContainersView.qml:82 ../libertine/qml/HomeView.qml:198
974+#: ../libertine/qml/ExtraArchivesView.qml:100
975 msgid "removing"
976 msgstr "removing"
977
978 #: ../libertine/ContainerConfig.cpp:152 ../libertine/ContainerConfig.cpp:189
979-#: ../libertine/qml/ContainerInfoView.qml:143
980-#: ../libertine/qml/PackageInfoView.qml:148
981+#: ../libertine/qml/PackageInfoView.qml:131
982+#: ../libertine/qml/ContainerInfoView.qml:93
983 msgid "removed"
984 msgstr "removed"
985
986@@ -115,7 +116,7 @@
987 msgid "My Containers"
988 msgstr "My Containers"
989
990-#: ../libertine/qml/ContainersView.qml:92 ../libertine/qml/HomeView.qml:218
991+#: ../libertine/qml/ContainersView.qml:92 ../libertine/qml/HomeView.qml:210
992 msgid "delete"
993 msgstr "delete"
994
995@@ -123,19 +124,19 @@
996 msgid "Delete Container"
997 msgstr "Delete Container"
998
999-#: ../libertine/qml/ContainersView.qml:107 ../libertine/qml/HomeView.qml:230
1000+#: ../libertine/qml/ContainersView.qml:108 ../libertine/qml/HomeView.qml:222
1001 msgid "info"
1002 msgstr "info"
1003
1004-#: ../libertine/qml/ContainersView.qml:108
1005+#: ../libertine/qml/ContainersView.qml:109
1006 msgid "Container Info"
1007 msgstr "Container Info"
1008
1009-#: ../libertine/qml/ContainersView.qml:116
1010+#: ../libertine/qml/ContainersView.qml:117
1011 msgid "edit"
1012 msgstr "edit"
1013
1014-#: ../libertine/qml/ContainersView.qml:117
1015+#: ../libertine/qml/ContainersView.qml:118
1016 msgid "Container Apps"
1017 msgstr "Container Apps"
1018
1019@@ -152,17 +153,17 @@
1020 msgid "search"
1021 msgstr "search"
1022
1023+#: ../libertine/qml/SearchPackagesDialog.qml:39
1024+#: ../libertine/qml/ContainerPasswordDialog.qml:52
1025+#: ../libertine/qml/HomeView.qml:68 ../libertine/qml/ExtraArchivesView.qml:57
1026 #: ../libertine/qml/ContainerOptionsDialog.qml:64
1027-#: ../libertine/qml/ContainerPasswordDialog.qml:52
1028-#: ../libertine/qml/ExtraArchivesView.qml:64 ../libertine/qml/HomeView.qml:68
1029-#: ../libertine/qml/SearchPackagesDialog.qml:39
1030 msgid "OK"
1031 msgstr "OK"
1032
1033+#: ../libertine/qml/SearchPackagesDialog.qml:57
1034+#: ../libertine/qml/ContainerPasswordDialog.qml:70
1035+#: ../libertine/qml/HomeView.qml:88 ../libertine/qml/ExtraArchivesView.qml:65
1036 #: ../libertine/qml/ContainerOptionsDialog.qml:75
1037-#: ../libertine/qml/ContainerPasswordDialog.qml:70
1038-#: ../libertine/qml/ExtraArchivesView.qml:72 ../libertine/qml/HomeView.qml:88
1039-#: ../libertine/qml/SearchPackagesDialog.qml:57
1040 msgid "Cancel"
1041 msgstr "Cancel"
1042
1043@@ -174,15 +175,15 @@
1044 msgid "Obtaining package version…"
1045 msgstr "Obtaining package version…"
1046
1047-#: ../libertine/qml/PackageInfoView.qml:60
1048+#: ../libertine/qml/PackageInfoView.qml:59
1049 msgid "Package version"
1050 msgstr "Package version"
1051
1052-#: ../libertine/qml/PackageInfoView.qml:68
1053+#: ../libertine/qml/PackageInfoView.qml:67
1054 msgid "Install status"
1055 msgstr "Install status"
1056
1057-#: ../libertine/qml/PackageInfoView.qml:159
1058+#: ../libertine/qml/PackageInfoView.qml:140
1059 msgid "Unknown"
1060 msgstr "Unknown"
1061
1062@@ -210,8 +211,8 @@
1063 msgid "Searching for packages…"
1064 msgstr "Searching for packages…"
1065
1066+#: ../libertine/qml/SearchResults.qml:60
1067 #: ../libertine/qml/DebianPackagePicker.qml:70
1068-#: ../libertine/qml/SearchResults.qml:60
1069 msgid "Install Package"
1070 msgstr "Install Package"
1071
1072@@ -219,20 +220,20 @@
1073 msgid "Manage %1"
1074 msgstr "Manage %1"
1075
1076+#: ../libertine/qml/ManageContainer.qml:63
1077 #: ../libertine/qml/ContainerOptionsDialog.qml:40
1078-#: ../libertine/qml/ManageContainer.qml:69
1079 msgid "i386 multiarch support"
1080 msgstr "i386 multiarch support"
1081
1082-#: ../libertine/qml/ManageContainer.qml:73
1083+#: ../libertine/qml/ManageContainer.qml:67
1084 msgid "Additional archives and PPAs"
1085 msgstr "Additional archives and PPAs"
1086
1087-#: ../libertine/qml/ManageContainer.qml:84
1088+#: ../libertine/qml/ManageContainer.qml:78
1089 msgid "Update…"
1090 msgstr "Update…"
1091
1092-#: ../libertine/qml/ManageContainer.qml:100
1093+#: ../libertine/qml/ManageContainer.qml:94
1094 msgid "Update container"
1095 msgstr "Update container"
1096
1097@@ -282,39 +283,39 @@
1098 msgstr ""
1099 "The %1 package is already installed. Please try a different package name."
1100
1101-#: ../libertine/qml/HomeView.qml:105
1102+#: ../libertine/qml/HomeView.qml:104
1103 msgid "Manage Container"
1104 msgstr "Manage Container"
1105
1106-#: ../libertine/qml/HomeView.qml:112
1107+#: ../libertine/qml/HomeView.qml:110
1108 msgid "Container Information"
1109 msgstr "Container Information"
1110
1111-#: ../libertine/qml/HomeView.qml:119
1112+#: ../libertine/qml/HomeView.qml:116
1113 msgid "Switch Container"
1114 msgstr "Switch Container"
1115
1116-#: ../libertine/qml/HomeView.qml:135
1117+#: ../libertine/qml/HomeView.qml:132
1118 msgid "Enter package name or Debian file"
1119 msgstr "Enter package name or Debian file"
1120
1121-#: ../libertine/qml/HomeView.qml:143
1122+#: ../libertine/qml/HomeView.qml:138
1123 msgid "Choose Debian package to install"
1124 msgstr "Choose Debian package to install"
1125
1126-#: ../libertine/qml/HomeView.qml:152
1127+#: ../libertine/qml/HomeView.qml:145
1128 msgid "Search archives for a package"
1129 msgstr "Search archives for a package"
1130
1131-#: ../libertine/qml/HomeView.qml:219
1132+#: ../libertine/qml/HomeView.qml:211
1133 msgid "Remove Package"
1134 msgstr "Remove Package"
1135
1136-#: ../libertine/qml/HomeView.qml:231
1137+#: ../libertine/qml/HomeView.qml:223
1138 msgid "Package Info"
1139 msgstr "Package Info"
1140
1141-#: ../libertine/qml/HomeView.qml:248
1142+#: ../libertine/qml/HomeView.qml:240
1143 msgid "No packages are installed"
1144 msgstr "No packages are installed"
1145
1146@@ -338,27 +339,27 @@
1147 msgid "Enter name of PPA in the form ppa:user/ppa-name:"
1148 msgstr "Enter name of PPA in the form ppa:user/ppa-name:"
1149
1150-#: ../libertine/qml/ExtraArchivesView.qml:114
1151+#: ../libertine/qml/ExtraArchivesView.qml:107
1152 msgid "remove"
1153 msgstr "remove"
1154
1155-#: ../libertine/qml/ExtraArchivesView.qml:115
1156+#: ../libertine/qml/ExtraArchivesView.qml:108
1157 msgid "Remove extra archive"
1158 msgstr "Remove extra archive"
1159
1160-#: ../libertine/qml/ExtraArchivesView.qml:132
1161+#: ../libertine/qml/ExtraArchivesView.qml:125
1162 msgid "No additional archives and PPA's have been added"
1163 msgstr "No additional archives and PPAs have been added"
1164
1165-#: ../libertine/qml/ExtraArchivesView.qml:177
1166+#: ../libertine/qml/ExtraArchivesView.qml:173
1167 msgid "Adding archive failed"
1168 msgstr "Adding archive failed"
1169
1170-#: ../libertine/qml/ExtraArchivesView.qml:181
1171+#: ../libertine/qml/ExtraArchivesView.qml:177
1172 msgid "Deleting archive failed"
1173 msgstr "Deleting archive failed"
1174
1175-#: ../libertine/qml/GenericErrorDialog.qml:46
1176+#: ../libertine/qml/GenericErrorDialog.qml:32
1177 msgid "Dismiss"
1178 msgstr "Dismiss"
1179
1180@@ -388,19 +389,19 @@
1181 msgid "Container information for %1"
1182 msgstr "Container information for %1"
1183
1184-#: ../libertine/qml/ContainerInfoView.qml:56
1185+#: ../libertine/qml/ContainerInfoView.qml:53
1186 msgid "ID"
1187 msgstr "ID"
1188
1189-#: ../libertine/qml/ContainerInfoView.qml:64
1190+#: ../libertine/qml/ContainerInfoView.qml:60
1191 msgid "Name"
1192 msgstr "Name"
1193
1194-#: ../libertine/qml/ContainerInfoView.qml:72
1195+#: ../libertine/qml/ContainerInfoView.qml:67
1196 msgid "Distribution"
1197 msgstr "Distribution"
1198
1199-#: ../libertine/qml/ContainerInfoView.qml:80
1200+#: ../libertine/qml/ContainerInfoView.qml:74
1201 msgid "Status"
1202 msgstr "Status"
1203
1204@@ -419,3 +420,41 @@
1205 #: ../libertine/qml/ContainerOptionsDialog.qml:56
1206 msgid "container name"
1207 msgstr "container name"
1208+
1209+#, fuzzy
1210+#~ msgid "Add"
1211+#~ msgstr "add"
1212+
1213+#, fuzzy
1214+#~ msgid "Add Archive"
1215+#~ msgstr "Adding archive failed"
1216+
1217+#, fuzzy
1218+#~ msgid "Add a new archive"
1219+#~ msgstr "Add additional PPA"
1220+
1221+#, fuzzy
1222+#~ msgid "Additional Archives"
1223+#~ msgstr "Add additional PPA"
1224+
1225+#, fuzzy
1226+#~ msgid "Attempt to set container as default failed"
1227+#~ msgstr "Attempt to configure container %1 failed"
1228+
1229+#, fuzzy
1230+#~ msgid "Default container"
1231+#~ msgstr "Delete Container"
1232+
1233+#, fuzzy
1234+#~ msgid "Enter a name for the container or leave blank for default name:"
1235+#~ msgstr "Enter or name for the container or leave blank for default name"
1236+
1237+#, fuzzy
1238+#~ msgid ""
1239+#~ "Enter password for your user in the Libertine container or leave blank "
1240+#~ "for no password:"
1241+#~ msgstr "Enter or name for the container or leave blank for default name"
1242+
1243+#, fuzzy
1244+#~ msgid "new archive name"
1245+#~ msgstr "Adding archive failed"
1246
1247=== modified file 'po/en_US.po'
1248--- po/en_US.po 2016-06-10 12:07:31 +0000
1249+++ po/en_US.po 2016-07-21 17:26:05 +0000
1250@@ -7,7 +7,7 @@
1251 msgstr ""
1252 "Project-Id-Version: PACKAGE VERSION\n"
1253 "Report-Msgid-Bugs-To: \n"
1254-"POT-Creation-Date: 2016-06-07 07:58-0400\n"
1255+"POT-Creation-Date: 2016-07-15 14:24-0400\n"
1256 "PO-Revision-Date: 2016-03-21 10:21-0400\n"
1257 "Last-Translator: Chris Townsend <christopher.townsend@canonical.com>\n"
1258 "Language-Team: English\n"
1259@@ -17,348 +17,332 @@
1260 "Content-Transfer-Encoding: 8bit\n"
1261 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
1262
1263-#: ../libertine/ContainerConfig.cpp:147 ../libertine/ContainerConfig.cpp:184
1264-msgid "new"
1265-msgstr "new"
1266-
1267-#: ../libertine/ContainerConfig.cpp:148 ../libertine/ContainerConfig.cpp:185
1268-#: ../libertine/qml/ContainersView.qml:81 ../libertine/qml/HomeView.qml:197
1269-#: ../libertine/qml/ExtraArchivesView.qml:99
1270-msgid "installing"
1271-msgstr "installing"
1272-
1273-#: ../libertine/ContainerConfig.cpp:149 ../libertine/qml/ContainersView.qml:119
1274-#: ../libertine/qml/ManageContainer.qml:79
1275-#: ../libertine/qml/ManageContainer.qml:119
1276-msgid "ready"
1277-msgstr "ready"
1278-
1279-#: ../libertine/ContainerConfig.cpp:150 ../libertine/qml/ContainersView.qml:120
1280-#: ../libertine/qml/ManageContainer.qml:91
1281-#: ../libertine/qml/ManageContainer.qml:115
1282-msgid "updating"
1283-msgstr "updating"
1284-
1285-#: ../libertine/ContainerConfig.cpp:151 ../libertine/ContainerConfig.cpp:188
1286-#: ../libertine/qml/ContainersView.qml:82 ../libertine/qml/HomeView.qml:198
1287-#: ../libertine/qml/ExtraArchivesView.qml:100
1288-msgid "removing"
1289-msgstr "removing"
1290-
1291-#: ../libertine/ContainerConfig.cpp:152 ../libertine/ContainerConfig.cpp:189
1292-#: ../libertine/qml/PackageInfoView.qml:131
1293-#: ../libertine/qml/ContainerInfoView.qml:93
1294-msgid "removed"
1295-msgstr "removed"
1296-
1297-#: ../libertine/ContainerConfig.cpp:153 ../libertine/ContainerConfig.cpp:187
1298-msgid "failed"
1299-msgstr "failed"
1300-
1301-#: ../libertine/ContainerConfig.cpp:186
1302-msgid "installed"
1303-msgstr "installed"
1304-
1305-#: ../libertine/ContainerManager.cpp:24
1306+#: ../libertine/ContainerManager.cpp:25
1307 msgid "%1 failed to start"
1308 msgstr "%1 failed to start"
1309
1310-#: ../libertine/ContainerManager.cpp:25
1311-msgid "Installation of package %1 failed"
1312-msgstr "Installation of package %1 failed"
1313-
1314-#: ../libertine/ContainerManager.cpp:26
1315-msgid "Removal of package %1 failed"
1316-msgstr "Removal of package %1 failed"
1317-
1318-#: ../libertine/ContainerManager.cpp:27
1319-msgid "Searching for query %1 failed"
1320-msgstr "Searching for query %1 failed"
1321-
1322-#: ../libertine/ContainerManager.cpp:28
1323-msgid "Updating container %1 failed"
1324-msgstr "Updating container %1 failed"
1325-
1326-#: ../libertine/ContainerManager.cpp:29
1327+#: ../libertine/qml/AddExtraArchiveView.qml:73
1328+msgid "(Optional) Public signing key for archive"
1329+msgstr ""
1330+
1331+#: ../libertine/qml/AddExtraArchiveView.qml:90
1332+#, fuzzy
1333+msgid "Add"
1334+msgstr "add"
1335+
1336+#: ../libertine/qml/AddExtraArchiveView.qml:27
1337+#, fuzzy
1338+msgid "Add Archive"
1339+msgstr "Adding archive failed"
1340+
1341+#: ../libertine/qml/ExtraArchivesView.qml:32
1342+#, fuzzy
1343+msgid "Add a new archive"
1344+msgstr "Add additional PPA"
1345+
1346+#: ../libertine/qml/ExtraArchivesView.qml:27
1347+#, fuzzy
1348+msgid "Additional Archives"
1349+msgstr "Add additional PPA"
1350+
1351+#: ../libertine/qml/ManageContainer.qml:73
1352+msgid "Additional archives and PPAs"
1353+msgstr "Additional archives and PPAs"
1354+
1355+#: ../libertine/ContainerManager.cpp:33
1356+msgid "Attempt to configure container %1 failed"
1357+msgstr "Attempt to configure container %1 failed"
1358+
1359+#: ../libertine/ContainerManager.cpp:34
1360+#, fuzzy
1361+msgid "Attempt to set container as default failed"
1362+msgstr "Attempt to configure container %1 failed"
1363+
1364+#: ../libertine/qml/DebianPackagePicker.qml:28
1365+msgid "Available Debian Packages to Install"
1366+msgstr "Available Debian Packages to Install"
1367+
1368+#: ../libertine/qml/SearchPackagesDialog.qml:57
1369+#: ../libertine/qml/HomeView.qml:88
1370+#: ../libertine/qml/ContainerOptionsDialog.qml:88
1371+msgid "Cancel"
1372+msgstr "Cancel"
1373+
1374+#: ../libertine/qml/HomeView.qml:143
1375+msgid "Choose Debian package to install"
1376+msgstr "Choose Debian package to install"
1377+
1378+#: ../libertine/qml/HomeView.qml:29
1379+msgid "Classic Apps - %1"
1380+msgstr "Classic Apps - %1"
1381+
1382+#: ../libertine/qml/ContainerOptionsDialog.qml:28
1383+msgid "Configure options for container creation."
1384+msgstr "Configure options for container creation."
1385+
1386+#: ../libertine/qml/ContainersView.qml:116
1387+msgid "Container Apps"
1388+msgstr "Container Apps"
1389+
1390+#: ../libertine/qml/ContainersView.qml:107
1391+msgid "Container Info"
1392+msgstr "Container Info"
1393+
1394+#: ../libertine/qml/HomeView.qml:112
1395+msgid "Container Information"
1396+msgstr "Container Information"
1397+
1398+#: ../libertine/qml/ContainerOptionsDialog.qml:27
1399+msgid "Container Options"
1400+msgstr "Container Options"
1401+
1402+#: ../libertine/qml/ContainerInfoView.qml:30
1403+msgid "Container information for %1"
1404+msgstr "Container information for %1"
1405+
1406+#: ../libertine/qml/GenericErrorDialog.qml:39
1407+msgid "Copy to Clipboard"
1408+msgstr ""
1409+
1410+#: ../libertine/ContainerManager.cpp:30
1411 msgid "Creating container %1 failed"
1412 msgstr "Creating container %1 failed"
1413
1414-#: ../libertine/ContainerManager.cpp:30
1415+#: ../libertine/qml/ManageContainer.qml:117
1416+#, fuzzy
1417+msgid "Default container"
1418+msgstr "Delete Container"
1419+
1420+#: ../libertine/qml/ContainersView.qml:92
1421+msgid "Delete Container"
1422+msgstr "Delete Container"
1423+
1424+#: ../libertine/qml/ExtraArchivesView.qml:126
1425+msgid "Deleting archive failed"
1426+msgstr "Deleting archive failed"
1427+
1428+#: ../libertine/ContainerManager.cpp:31
1429 msgid "Destroying container %1 failed"
1430 msgstr "Destroying container %1 failed"
1431
1432-#: ../libertine/ContainerManager.cpp:31
1433-msgid "Running command %1 failed"
1434-msgstr "Running command %1 failed"
1435-
1436-#: ../libertine/ContainerManager.cpp:32
1437-msgid "Attempt to configure container %1 failed"
1438-msgstr "Attempt to configure container %1 failed"
1439-
1440-#: ../libertine/qml/PackageExistsDialog.qml:28
1441-msgid "The %1 package is already installed."
1442-msgstr "The %1 package is already installed."
1443-
1444-#: .:./libertine/qml/PackageExistsDialog.qml:29
1445-msgid "Search again or return to search results."
1446-msgstr "Search again or return to search results."
1447-
1448-#: ../libertine/qml/PackageExistsDialog.qml:33
1449-msgid "Search again"
1450-msgstr "Search again"
1451-
1452-#: ../libertine/qml/PackageExistsDialog.qml:43
1453-msgid "Return to search results"
1454-msgstr "Return to search results"
1455+#: ../libertine/qml/GenericErrorDialog.qml:46
1456+msgid "Dismiss"
1457+msgstr "Dismiss"
1458+
1459+#: ../libertine/qml/ContainerInfoView.qml:72
1460+msgid "Distribution"
1461+msgstr "Distribution"
1462+
1463+#: ../libertine/qml/ContainerOptionsDialog.qml:49
1464+#, fuzzy
1465+msgid "Enter a name for the container or leave blank for default name:"
1466+msgstr "Enter or name for the container or leave blank for default name"
1467+
1468+#: ../libertine/qml/HomeView.qml:49
1469+msgid "Enter exact package name or full path to a Debian package file"
1470+msgstr "Enter exact package name or full path to a Debian package file"
1471+
1472+#: ../libertine/qml/HomeView.qml:135
1473+msgid "Enter package name or Debian file"
1474+msgstr "Enter package name or Debian file"
1475+
1476+#: ../libertine/qml/ContainerOptionsDialog.qml:62
1477+#, fuzzy
1478+msgid ""
1479+"Enter password for your user in the Libertine container or leave blank for "
1480+"no password:"
1481+msgstr "Enter or name for the container or leave blank for default name"
1482+
1483+#: ../libertine/qml/ContainerInfoView.qml:56
1484+msgid "ID"
1485+msgstr "ID"
1486+
1487+#: ../libertine/qml/PackageInfoView.qml:30
1488+msgid "Information for the %1 package"
1489+msgstr "Information for the %1 package"
1490+
1491+#: ../libertine/qml/WelcomeView.qml:66
1492+msgid "Install"
1493+msgstr "Install"
1494+
1495+#: ../libertine/qml/SearchResults.qml:60
1496+#: ../libertine/qml/DebianPackagePicker.qml:70
1497+msgid "Install Package"
1498+msgstr "Install Package"
1499+
1500+#: ../libertine/qml/HomeView.qml:48
1501+msgid "Install new package"
1502+msgstr "Install new package"
1503+
1504+#: ../libertine/qml/PackageInfoView.qml:68
1505+msgid "Install status"
1506+msgstr "Install status"
1507+
1508+#: ../libertine/ContainerManager.cpp:26
1509+msgid "Installation of package %1 failed"
1510+msgstr "Installation of package %1 failed"
1511+
1512+#: ../libertine/qml/ManageContainer.qml:29
1513+msgid "Manage %1"
1514+msgstr "Manage %1"
1515+
1516+#: ../libertine/qml/HomeView.qml:105
1517+msgid "Manage Container"
1518+msgstr "Manage Container"
1519
1520 #: ../libertine/qml/ContainersView.qml:33
1521 msgid "My Containers"
1522 msgstr "My Containers"
1523
1524-#: ../libertine/qml/ContainersView.qml:92 ../libertine/qml/HomeView.qml:210
1525-msgid "delete"
1526-msgstr "delete"
1527-
1528-#: ../libertine/qml/ContainersView.qml:93
1529-msgid "Delete Container"
1530-msgstr "Delete Container"
1531-
1532-#: ../libertine/qml/ContainersView.qml:108 ../libertine/qml/HomeView.qml:222
1533-msgid "info"
1534-msgstr "info"
1535-
1536-#: ../libertine/qml/ContainersView.qml:109
1537-msgid "Container Info"
1538-msgstr "Container Info"
1539-
1540-#: ../libertine/qml/ContainersView.qml:117
1541-msgid "edit"
1542-msgstr "edit"
1543-
1544-#: ../libertine/qml/ContainersView.qml:118
1545-msgid "Container Apps"
1546-msgstr "Container Apps"
1547-
1548-#: ../libertine/qml/SearchPackagesDialog.qml:26
1549-#: ../libertine/qml/SearchResultsView.qml:36
1550-msgid "Search for packages"
1551-msgstr "Search for packages"
1552-
1553-#: ../libertine/qml/SearchPackagesDialog.qml:27
1554-msgid "Search archives for packages"
1555-msgstr "Search archives for packages"
1556-
1557-#: ../libertine/qml/SearchPackagesDialog.qml:31
1558-msgid "search"
1559-msgstr "search"
1560+#: ../libertine/qml/ContainerInfoView.qml:64
1561+msgid "Name"
1562+msgstr "Name"
1563+
1564+#: ../libertine/qml/AddExtraArchiveView.qml:42
1565+msgid "New archive identifier, e.g."
1566+msgstr ""
1567+
1568+#: ../libertine/qml/DebianPackagePicker.qml:87
1569+msgid "No Debian packages available"
1570+msgstr "No Debian packages available"
1571+
1572+#: ../libertine/qml/SearchResultsView.qml:52
1573+msgid "No Search Results Found"
1574+msgstr "No Search Results Found"
1575+
1576+#: ../libertine/qml/ExtraArchivesView.qml:93
1577+msgid "No additional archives and PPA's have been added"
1578+msgstr "No additional archives and PPA's have been added"
1579+
1580+#: ../libertine/qml/HomeView.qml:248
1581+msgid "No packages are installed"
1582+msgstr "No packages are installed"
1583
1584 #: ../libertine/qml/SearchPackagesDialog.qml:39
1585-#: ../libertine/qml/ContainerPasswordDialog.qml:52
1586-#: ../libertine/qml/HomeView.qml:68 ../libertine/qml/ExtraArchivesView.qml:57
1587-#: ../libertine/qml/ContainerOptionsDialog.qml:64
1588+#: ../libertine/qml/HomeView.qml:68
1589+#: ../libertine/qml/ContainerOptionsDialog.qml:77
1590 msgid "OK"
1591 msgstr "OK"
1592
1593-#: ../libertine/qml/SearchPackagesDialog.qml:57
1594-#: ../libertine/qml/ContainerPasswordDialog.qml:70
1595-#: ../libertine/qml/HomeView.qml:88 ../libertine/qml/ExtraArchivesView.qml:65
1596-#: ../libertine/qml/ContainerOptionsDialog.qml:75
1597-msgid "Cancel"
1598-msgstr "Cancel"
1599-
1600-#: ../libertine/qml/PackageInfoView.qml:30
1601-msgid "Information for the %1 package"
1602-msgstr "Information for the %1 package"
1603-
1604 #: ../libertine/qml/PackageInfoView.qml:35
1605 msgid "Obtaining package version…"
1606 msgstr "Obtaining package version…"
1607
1608-#: ../libertine/qml/PackageInfoView.qml:59
1609-msgid "Package version"
1610-msgstr "Package version"
1611-
1612-#: ../libertine/qml/PackageInfoView.qml:67
1613-msgid "Install status"
1614-msgstr "Install status"
1615-
1616-#: ../libertine/qml/PackageInfoView.qml:140
1617-msgid "Unknown"
1618-msgstr "Unknown"
1619+#: ../libertine/qml/PackageInfoView.qml:85
1620+#: ../libertine/qml/ContainerInfoView.qml:97
1621+msgid "Operation details"
1622+msgstr ""
1623+
1624+#: ../libertine/qml/HomeView.qml:231
1625+msgid "Package Info"
1626+msgstr "Package Info"
1627
1628 #: ../libertine/qml/SearchResultsView.qml:31
1629 msgid "Package Search Results"
1630 msgstr "Package Search Results"
1631
1632+#: ../libertine/qml/HomeView.qml:59
1633+msgid "Package name or Debian package path"
1634+msgstr "Package name or Debian package path"
1635+
1636+#: ../libertine/qml/PackageInfoView.qml:60
1637+msgid "Package version"
1638+msgstr "Package version"
1639+
1640+#: ../libertine/ContainerManager.cpp:27
1641+msgid "Removal of package %1 failed"
1642+msgstr "Removal of package %1 failed"
1643+
1644+#: ../libertine/qml/HomeView.qml:219
1645+msgid "Remove Package"
1646+msgstr "Remove Package"
1647+
1648+#: ../libertine/qml/ExtraArchivesView.qml:76
1649+msgid "Remove extra archive"
1650+msgstr "Remove extra archive"
1651+
1652+#: ../libertine/qml/SearchResultsView.qml:67
1653+msgid "Return to Apps Page"
1654+msgstr "Return to Apps Page"
1655+
1656+#: ../libertine/qml/PackageExistsDialog.qml:43
1657+msgid "Return to search results"
1658+msgstr "Return to search results"
1659+
1660+#: ../libertine/ContainerManager.cpp:32
1661+msgid "Running command %1 failed"
1662+msgstr "Running command %1 failed"
1663+
1664 #: ../libertine/qml/SearchResultsView.qml:35
1665 msgid "Search"
1666 msgstr "Search"
1667
1668-#: ../libertine/qml/SearchResultsView.qml:52
1669-msgid "No Search Results Found"
1670-msgstr "No Search Results Found"
1671-
1672 #: ../libertine/qml/SearchResultsView.qml:57
1673 msgid "Search Again"
1674 msgstr "Search Again"
1675
1676-#: ../libertine/qml/SearchResultsView.qml:67
1677-msgid "Return to Apps Page"
1678-msgstr "Return to Apps Page"
1679+#: ../libertine/qml/PackageExistsDialog.qml:33
1680+msgid "Search again"
1681+msgstr "Search again"
1682+
1683+#: ../libertine/qml/PackageExistsDialog.qml:29
1684+msgid "Search again or return to search results."
1685+msgstr "Search again or return to search results."
1686+
1687+#: ../libertine/qml/HomeView.qml:152
1688+msgid "Search archives for a package"
1689+msgstr "Search archives for a package"
1690+
1691+#: ../libertine/qml/SearchPackagesDialog.qml:27
1692+msgid "Search archives for packages"
1693+msgstr "Search archives for packages"
1694+
1695+#: ../libertine/qml/SearchPackagesDialog.qml:26
1696+#: ../libertine/qml/SearchResultsView.qml:36
1697+msgid "Search for packages"
1698+msgstr "Search for packages"
1699
1700 #: ../libertine/qml/SearchResultsView.qml:95
1701 msgid "Searching for packages…"
1702 msgstr "Searching for packages…"
1703
1704-#: ../libertine/qml/SearchResults.qml:60
1705-#: ../libertine/qml/DebianPackagePicker.qml:70
1706-msgid "Install Package"
1707-msgstr "Install Package"
1708-
1709-#: ../libertine/qml/ManageContainer.qml:29
1710-msgid "Manage %1"
1711-msgstr "Manage %1"
1712-
1713-#: ../libertine/qml/ManageContainer.qml:63
1714-#: ../libertine/qml/ContainerOptionsDialog.qml:40
1715-msgid "i386 multiarch support"
1716-msgstr "i386 multiarch support"
1717-
1718-#: ../libertine/qml/ManageContainer.qml:67
1719-msgid "Additional archives and PPAs"
1720-msgstr "Additional archives and PPAs"
1721-
1722-#: ../libertine/qml/ManageContainer.qml:78
1723+#: ../libertine/ContainerManager.cpp:28
1724+msgid "Searching for query %1 failed"
1725+msgstr "Searching for query %1 failed"
1726+
1727+#: ../libertine/qml/ContainerInfoView.qml:80
1728+msgid "Status"
1729+msgstr "Status"
1730+
1731+#: ../libertine/qml/HomeView.qml:119
1732+msgid "Switch Container"
1733+msgstr "Switch Container"
1734+
1735+#: ../libertine/qml/PackageExistsDialog.qml:28
1736+msgid "The %1 package is already installed."
1737+msgstr "The %1 package is already installed."
1738+
1739+#: ../libertine/qml/HomeView.qml:78
1740+msgid ""
1741+"The %1 package is already installed. Please try a different package name."
1742+msgstr ""
1743+"The %1 package is already installed. Please try a different package name."
1744+
1745+#: ../libertine/qml/PackageInfoView.qml:159
1746+msgid "Unknown"
1747+msgstr "Unknown"
1748+
1749+#: ../libertine/qml/ManageContainer.qml:100
1750+msgid "Update container"
1751+msgstr "Update container"
1752+
1753+#: ../libertine/qml/ManageContainer.qml:84
1754 msgid "Update…"
1755 msgstr "Update…"
1756
1757-#: ../libertine/qml/ManageContainer.qml:94
1758-msgid "Update container"
1759-msgstr "Update container"
1760-
1761-#: ../libertine/qml/DebianPackagePicker.qml:28
1762-msgid "Available Debian Packages to Install"
1763-msgstr "Available Debian Packages to Install"
1764-
1765-#: ../libertine/qml/DebianPackagePicker.qml:87
1766-msgid "No Debian packages available"
1767-msgstr "No Debian packages available"
1768-
1769-#: ../libertine/qml/ContainerPasswordDialog.qml:27
1770-msgid "Authentication required"
1771-msgstr "Authentication required"
1772-
1773-#: ../libertine/qml/ContainerPasswordDialog.qml:28
1774-msgid "Password is required to create a Libertine container"
1775-msgstr "Password is required to create a Libertine container"
1776-
1777-#: ../libertine/qml/ContainerPasswordDialog.qml:36
1778-msgid "Invalid password entered"
1779-msgstr "Invalid password entered"
1780-
1781-#: ../libertine/qml/ContainerPasswordDialog.qml:41
1782-msgid "password"
1783-msgstr "password"
1784-
1785-#: ../libertine/qml/HomeView.qml:29
1786-msgid "Classic Apps - %1"
1787-msgstr "Classic Apps - %1"
1788-
1789-#: ../libertine/qml/HomeView.qml:48
1790-msgid "Install new package"
1791-msgstr "Install new package"
1792-
1793-#: ../libertine/qml/HomeView.qml:49
1794-msgid "Enter exact package name or full path to a Debian package file"
1795-msgstr "Enter exact package name or full path to a Debian package file"
1796-
1797-#: ../libertine/qml/HomeView.qml:59
1798-msgid "Package name or Debian package path"
1799-msgstr "Package name or Debian package path"
1800-
1801-#: ../libertine/qml/HomeView.qml:78
1802-msgid "The %1 package is already installed. Please try a different package name."
1803-msgstr "The %1 package is already installed. Please try a different package name."
1804-
1805-#: ../libertine/qml/HomeView.qml:104
1806-msgid "Manage Container"
1807-msgstr "Manage Container"
1808-
1809-#: ../libertine/qml/HomeView.qml:110
1810-msgid "Container Information"
1811-msgstr "Container Information"
1812-
1813-#: ../libertine/qml/HomeView.qml:116
1814-msgid "Switch Container"
1815-msgstr "Switch Container"
1816-
1817-#: ../libertine/qml/HomeView.qml:132
1818-msgid "Enter package name or Debian file"
1819-msgstr "Enter package name or Debian file"
1820-
1821-#: ../libertine/qml/HomeView.qml:138
1822-msgid "Choose Debian package to install"
1823-msgstr "Choose Debian package to install"
1824-
1825-#: ../libertine/qml/HomeView.qml:145
1826-msgid "Search archives for a package"
1827-msgstr "Search archives for a package"
1828-
1829-#: ../libertine/qml/HomeView.qml:211
1830-msgid "Remove Package"
1831-msgstr "Remove Package"
1832-
1833-#: ../libertine/qml/HomeView.qml:223
1834-msgid "Package Info"
1835-msgstr "Package Info"
1836-
1837-#: ../libertine/qml/HomeView.qml:240
1838-msgid "No packages are installed"
1839-msgstr "No packages are installed"
1840-
1841-#: ../libertine/qml/ExtraArchivesView.qml:28
1842-msgid "Additional Archives and PPAs"
1843-msgstr "Additional Archives and PPAs"
1844-
1845-#: ../libertine/qml/ExtraArchivesView.qml:32
1846-msgid "add"
1847-msgstr "add"
1848-
1849-#: ../libertine/qml/ExtraArchivesView.qml:33
1850-msgid "Add a new PPA"
1851-msgstr "Add a new PPA"
1852-
1853-#: ../libertine/qml/ExtraArchivesView.qml:46
1854-msgid "Add additional PPA"
1855-msgstr "Add additional PPA"
1856-
1857-#: ../libertine/qml/ExtraArchivesView.qml:47
1858-msgid "Enter name of PPA in the form ppa:user/ppa-name:"
1859-msgstr "Enter name of PPA in the form ppa:user/ppa-name:"
1860-
1861-#: ../libertine/qml/ExtraArchivesView.qml:107
1862-msgid "remove"
1863-msgstr "remove"
1864-
1865-#: ../libertine/qml/ExtraArchivesView.qml:108
1866-msgid "Remove extra archive"
1867-msgstr "Remove extra archive"
1868-
1869-#: ../libertine/qml/ExtraArchivesView.qml:125
1870-msgid "No additional archives and PPA's have been added"
1871-msgstr "No additional archives and PPA's have been added"
1872-
1873-#: ../libertine/qml/ExtraArchivesView.qml:173
1874-msgid "Adding archive failed"
1875-msgstr "Adding archive failed"
1876-
1877-#: ../libertine/qml/ExtraArchivesView.qml:177
1878-msgid "Deleting archive failed"
1879-msgstr "Deleting archive failed"
1880-
1881-#: ../libertine/qml/GenericErrorDialog.qml:32
1882-msgid "Dismiss"
1883-msgstr "Dismiss"
1884+#: ../libertine/ContainerManager.cpp:29
1885+msgid "Updating container %1 failed"
1886+msgstr "Updating container %1 failed"
1887
1888 #: ../libertine/qml/WelcomeView.qml:28
1889 msgid "Welcome"
1890@@ -378,52 +362,110 @@
1891 "Downloading and setting up the required environment takes some time and "
1892 "network bandwidth."
1893
1894-#: ../libertine/qml/WelcomeView.qml:66
1895-msgid "Install"
1896-msgstr "Install"
1897-
1898-#: ../libertine/qml/ContainerInfoView.qml:30
1899-msgid "Container information for %1"
1900-msgstr "Container information for %1"
1901-
1902-#: ../libertine/qml/ContainerInfoView.qml:53
1903-msgid "ID"
1904-msgstr "ID"
1905-
1906-#: ../libertine/qml/ContainerInfoView.qml:60
1907-msgid "Name"
1908-msgstr "Name"
1909-
1910-#: ../libertine/qml/ContainerInfoView.qml:67
1911-msgid "Distribution"
1912-msgstr "Distribution"
1913-
1914-#: ../libertine/qml/ContainerInfoView.qml:74
1915-msgid "Status"
1916-msgstr "Status"
1917-
1918-#: ../libertine/qml/ContainerOptionsDialog.qml:27
1919-msgid "Container Options"
1920-msgstr "Container Options"
1921-
1922-#: ../libertine/qml/ContainerOptionsDialog.qml:28
1923-msgid "Configure options for container creation."
1924-msgstr "Configure options for container creation."
1925-
1926-#: ../libertine/qml/ContainerOptionsDialog.qml:50
1927-msgid "Enter or name for the container or leave blank for default name"
1928-msgstr "Enter or name for the container or leave blank for default name"
1929-
1930-#: ../libertine/qml/ContainerOptionsDialog.qml:56
1931+#: ../libertine/qml/ExtraArchivesView.qml:31
1932+msgid "add"
1933+msgstr "add"
1934+
1935+#: ../libertine/qml/ContainerOptionsDialog.qml:55
1936 msgid "container name"
1937 msgstr "container name"
1938
1939+#: ../libertine/qml/ContainersView.qml:91 ../libertine/qml/HomeView.qml:218
1940+msgid "delete"
1941+msgstr "delete"
1942+
1943+#: ../libertine/qml/ContainersView.qml:115
1944+msgid "edit"
1945+msgstr "edit"
1946+
1947+#: ../libertine/ContainerConfig.cpp:153 ../libertine/ContainerConfig.cpp:187
1948+msgid "failed"
1949+msgstr "failed"
1950+
1951+#: ../libertine/qml/ManageContainer.qml:69
1952+#: ../libertine/qml/ContainerOptionsDialog.qml:39
1953+msgid "i386 multiarch support"
1954+msgstr "i386 multiarch support"
1955+
1956+#: ../libertine/qml/ContainersView.qml:106 ../libertine/qml/HomeView.qml:230
1957+msgid "info"
1958+msgstr "info"
1959+
1960+#: ../libertine/ContainerConfig.cpp:186
1961+msgid "installed"
1962+msgstr "installed"
1963+
1964+#: ../libertine/ContainerConfig.cpp:148 ../libertine/ContainerConfig.cpp:185
1965+#: ../libertine/qml/ContainersView.qml:80 ../libertine/qml/HomeView.qml:205
1966+#: ../libertine/qml/ExtraArchivesView.qml:67
1967+msgid "installing"
1968+msgstr "installing"
1969+
1970+#: ../libertine/qml/AddExtraArchiveView.qml:50
1971+msgid ""
1972+"multiverse\n"
1973+"ppa:user/repository\n"
1974+"deb http://myserver/repo stable repo"
1975+msgstr ""
1976+
1977+#: ../libertine/ContainerConfig.cpp:147 ../libertine/ContainerConfig.cpp:184
1978+msgid "new"
1979+msgstr "new"
1980+
1981+#: ../libertine/qml/ContainerOptionsDialog.qml:69
1982+msgid "password"
1983+msgstr "password"
1984+
1985+#: ../libertine/ContainerConfig.cpp:149 ../libertine/qml/ContainersView.qml:117
1986+#: ../libertine/qml/ManageContainer.qml:85
1987+#: ../libertine/qml/ManageContainer.qml:152
1988+msgid "ready"
1989+msgstr "ready"
1990+
1991+#: ../libertine/qml/ExtraArchivesView.qml:75
1992+msgid "remove"
1993+msgstr "remove"
1994+
1995+#: ../libertine/ContainerConfig.cpp:152 ../libertine/ContainerConfig.cpp:189
1996+#: ../libertine/qml/PackageInfoView.qml:148
1997+#: ../libertine/qml/ContainerInfoView.qml:143
1998+msgid "removed"
1999+msgstr "removed"
2000+
2001+#: ../libertine/ContainerConfig.cpp:151 ../libertine/ContainerConfig.cpp:188
2002+#: ../libertine/qml/ContainersView.qml:81 ../libertine/qml/HomeView.qml:206
2003+#: ../libertine/qml/ExtraArchivesView.qml:68
2004+msgid "removing"
2005+msgstr "removing"
2006+
2007+#: ../libertine/qml/SearchPackagesDialog.qml:31
2008+msgid "search"
2009+msgstr "search"
2010+
2011+#: ../libertine/ContainerConfig.cpp:150 ../libertine/qml/ContainersView.qml:118
2012+#: ../libertine/qml/ManageContainer.qml:97
2013+#: ../libertine/qml/ManageContainer.qml:148
2014+msgid "updating"
2015+msgstr "updating"
2016+
2017+#~ msgid "Add a new PPA"
2018+#~ msgstr "Add a new PPA"
2019+
2020+#~ msgid "Additional Archives and PPAs"
2021+#~ msgstr "Additional Archives and PPAs"
2022+
2023+#~ msgid "Authentication required"
2024+#~ msgstr "Authentication required"
2025+
2026 #~ msgid "Configure %1"
2027 #~ msgstr "Configure %1"
2028
2029 #~ msgid "Configure Container"
2030 #~ msgstr "Configure Container"
2031
2032+#~ msgid "Enter name of PPA in the form ppa:user/ppa-name:"
2033+#~ msgstr "Enter name of PPA in the form ppa:user/ppa-name:"
2034+
2035 #, fuzzy
2036 #~ msgid "Failure %1 the %2 package."
2037 #~ msgstr "Information for the %1 package"
2038@@ -434,6 +476,12 @@
2039 #~ msgid "Install Apps"
2040 #~ msgstr "Install Apps"
2041
2042+#~ msgid "Invalid password entered"
2043+#~ msgstr "Invalid password entered"
2044+
2045+#~ msgid "Password is required to create a Libertine container"
2046+#~ msgstr "Password is required to create a Libertine container"
2047+
2048 #~ msgid "Please enter a package name to search for:"
2049 #~ msgstr "Please enter a package name to search for:"
2050
2051@@ -443,3 +491,7 @@
2052 #, fuzzy
2053 #~ msgid "finding information for"
2054 #~ msgstr "Container information for %1"
2055+
2056+#, fuzzy
2057+#~ msgid "new archive name"
2058+#~ msgstr "Adding archive failed"
2059
2060=== modified file 'po/es.po'
2061--- po/es.po 2016-07-15 05:42:05 +0000
2062+++ po/es.po 2016-07-21 17:26:05 +0000
2063@@ -6,15 +6,16 @@
2064 msgid ""
2065 msgstr ""
2066 "Project-Id-Version: libertine\n"
2067-"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
2068+"Report-Msgid-Bugs-To: \n"
2069 "POT-Creation-Date: 2016-06-07 07:58-0400\n"
2070 "PO-Revision-Date: 2016-06-12 08:23+0000\n"
2071 "Last-Translator: Adolfo Jayme <fitoschido@gmail.com>\n"
2072 "Language-Team: Spanish <es@li.org>\n"
2073+"Language: es\n"
2074 "MIME-Version: 1.0\n"
2075 "Content-Type: text/plain; charset=UTF-8\n"
2076 "Content-Transfer-Encoding: 8bit\n"
2077-"X-Launchpad-Export-Date: 2016-07-15 05:42+0000\n"
2078+"X-Launchpad-Export-Date: 2016-07-01 06:06+0000\n"
2079 "X-Generator: Launchpad (build 18115)\n"
2080
2081 #: ../libertine/ContainerConfig.cpp:147 ../libertine/ContainerConfig.cpp:184
2082@@ -22,32 +23,32 @@
2083 msgstr "nuevo"
2084
2085 #: ../libertine/ContainerConfig.cpp:148 ../libertine/ContainerConfig.cpp:185
2086-#: ../libertine/qml/ContainersView.qml:81
2087-#: ../libertine/qml/ExtraArchivesView.qml:106 ../libertine/qml/HomeView.qml:205
2088+#: ../libertine/qml/ContainersView.qml:81 ../libertine/qml/HomeView.qml:197
2089+#: ../libertine/qml/ExtraArchivesView.qml:99
2090 msgid "installing"
2091 msgstr "instalando"
2092
2093-#: ../libertine/ContainerConfig.cpp:149 ../libertine/qml/ContainersView.qml:118
2094-#: ../libertine/qml/ManageContainer.qml:85
2095-#: ../libertine/qml/ManageContainer.qml:152
2096+#: ../libertine/ContainerConfig.cpp:149 ../libertine/qml/ContainersView.qml:119
2097+#: ../libertine/qml/ManageContainer.qml:79
2098+#: ../libertine/qml/ManageContainer.qml:119
2099 msgid "ready"
2100 msgstr "preparado"
2101
2102-#: ../libertine/ContainerConfig.cpp:150 ../libertine/qml/ContainersView.qml:119
2103-#: ../libertine/qml/ManageContainer.qml:97
2104-#: ../libertine/qml/ManageContainer.qml:148
2105+#: ../libertine/ContainerConfig.cpp:150 ../libertine/qml/ContainersView.qml:120
2106+#: ../libertine/qml/ManageContainer.qml:91
2107+#: ../libertine/qml/ManageContainer.qml:115
2108 msgid "updating"
2109 msgstr "actualizando"
2110
2111 #: ../libertine/ContainerConfig.cpp:151 ../libertine/ContainerConfig.cpp:188
2112-#: ../libertine/qml/ContainersView.qml:82
2113-#: ../libertine/qml/ExtraArchivesView.qml:107 ../libertine/qml/HomeView.qml:206
2114+#: ../libertine/qml/ContainersView.qml:82 ../libertine/qml/HomeView.qml:198
2115+#: ../libertine/qml/ExtraArchivesView.qml:100
2116 msgid "removing"
2117 msgstr "desinstalando"
2118
2119 #: ../libertine/ContainerConfig.cpp:152 ../libertine/ContainerConfig.cpp:189
2120-#: ../libertine/qml/ContainerInfoView.qml:143
2121-#: ../libertine/qml/PackageInfoView.qml:148
2122+#: ../libertine/qml/PackageInfoView.qml:131
2123+#: ../libertine/qml/ContainerInfoView.qml:93
2124 msgid "removed"
2125 msgstr "desinstalado"
2126
2127@@ -115,7 +116,7 @@
2128 msgid "My Containers"
2129 msgstr "Mis contenedores"
2130
2131-#: ../libertine/qml/ContainersView.qml:92 ../libertine/qml/HomeView.qml:218
2132+#: ../libertine/qml/ContainersView.qml:92 ../libertine/qml/HomeView.qml:210
2133 msgid "delete"
2134 msgstr "eliminar"
2135
2136@@ -123,19 +124,19 @@
2137 msgid "Delete Container"
2138 msgstr "Eliminar contenedor"
2139
2140-#: ../libertine/qml/ContainersView.qml:107 ../libertine/qml/HomeView.qml:230
2141+#: ../libertine/qml/ContainersView.qml:108 ../libertine/qml/HomeView.qml:222
2142 msgid "info"
2143 msgstr "información"
2144
2145-#: ../libertine/qml/ContainersView.qml:108
2146+#: ../libertine/qml/ContainersView.qml:109
2147 msgid "Container Info"
2148 msgstr "Información del contenedor"
2149
2150-#: ../libertine/qml/ContainersView.qml:116
2151+#: ../libertine/qml/ContainersView.qml:117
2152 msgid "edit"
2153 msgstr "editar"
2154
2155-#: ../libertine/qml/ContainersView.qml:117
2156+#: ../libertine/qml/ContainersView.qml:118
2157 msgid "Container Apps"
2158 msgstr "Aplicaciones del contenedor"
2159
2160@@ -152,17 +153,17 @@
2161 msgid "search"
2162 msgstr "buscar"
2163
2164+#: ../libertine/qml/SearchPackagesDialog.qml:39
2165+#: ../libertine/qml/ContainerPasswordDialog.qml:52
2166+#: ../libertine/qml/HomeView.qml:68 ../libertine/qml/ExtraArchivesView.qml:57
2167 #: ../libertine/qml/ContainerOptionsDialog.qml:64
2168-#: ../libertine/qml/ContainerPasswordDialog.qml:52
2169-#: ../libertine/qml/ExtraArchivesView.qml:64 ../libertine/qml/HomeView.qml:68
2170-#: ../libertine/qml/SearchPackagesDialog.qml:39
2171 msgid "OK"
2172 msgstr "Aceptar"
2173
2174+#: ../libertine/qml/SearchPackagesDialog.qml:57
2175+#: ../libertine/qml/ContainerPasswordDialog.qml:70
2176+#: ../libertine/qml/HomeView.qml:88 ../libertine/qml/ExtraArchivesView.qml:65
2177 #: ../libertine/qml/ContainerOptionsDialog.qml:75
2178-#: ../libertine/qml/ContainerPasswordDialog.qml:70
2179-#: ../libertine/qml/ExtraArchivesView.qml:72 ../libertine/qml/HomeView.qml:88
2180-#: ../libertine/qml/SearchPackagesDialog.qml:57
2181 msgid "Cancel"
2182 msgstr "Cancelar"
2183
2184@@ -174,15 +175,15 @@
2185 msgid "Obtaining package version…"
2186 msgstr "Obteniendo la versión del paquete…"
2187
2188-#: ../libertine/qml/PackageInfoView.qml:60
2189+#: ../libertine/qml/PackageInfoView.qml:59
2190 msgid "Package version"
2191 msgstr "Versión del paquete"
2192
2193-#: ../libertine/qml/PackageInfoView.qml:68
2194+#: ../libertine/qml/PackageInfoView.qml:67
2195 msgid "Install status"
2196 msgstr "Estado de la instalación"
2197
2198-#: ../libertine/qml/PackageInfoView.qml:159
2199+#: ../libertine/qml/PackageInfoView.qml:140
2200 msgid "Unknown"
2201 msgstr "Desconocido"
2202
2203@@ -210,8 +211,8 @@
2204 msgid "Searching for packages…"
2205 msgstr "Buscando paquetes…"
2206
2207+#: ../libertine/qml/SearchResults.qml:60
2208 #: ../libertine/qml/DebianPackagePicker.qml:70
2209-#: ../libertine/qml/SearchResults.qml:60
2210 msgid "Install Package"
2211 msgstr "Instalar paquete"
2212
2213@@ -219,20 +220,20 @@
2214 msgid "Manage %1"
2215 msgstr "Gestionar %1"
2216
2217+#: ../libertine/qml/ManageContainer.qml:63
2218 #: ../libertine/qml/ContainerOptionsDialog.qml:40
2219-#: ../libertine/qml/ManageContainer.qml:69
2220 msgid "i386 multiarch support"
2221 msgstr "Compatibilidad con i386 multiarquitectura"
2222
2223-#: ../libertine/qml/ManageContainer.qml:73
2224+#: ../libertine/qml/ManageContainer.qml:67
2225 msgid "Additional archives and PPAs"
2226 msgstr "Archivos y PPA adicionales"
2227
2228-#: ../libertine/qml/ManageContainer.qml:84
2229+#: ../libertine/qml/ManageContainer.qml:78
2230 msgid "Update…"
2231 msgstr "Actualizar…"
2232
2233-#: ../libertine/qml/ManageContainer.qml:100
2234+#: ../libertine/qml/ManageContainer.qml:94
2235 msgid "Update container"
2236 msgstr "Actualizar contenedor"
2237
2238@@ -281,42 +282,41 @@
2239 #: ../libertine/qml/HomeView.qml:78
2240 msgid ""
2241 "The %1 package is already installed. Please try a different package name."
2242-msgstr ""
2243-"El paquete «%1» ya está instalado. Pruebe con otro nombre de paquete."
2244+msgstr "El paquete «%1» ya está instalado. Pruebe con otro nombre de paquete."
2245
2246-#: ../libertine/qml/HomeView.qml:105
2247+#: ../libertine/qml/HomeView.qml:104
2248 msgid "Manage Container"
2249 msgstr "Gestionar contenedor"
2250
2251-#: ../libertine/qml/HomeView.qml:112
2252+#: ../libertine/qml/HomeView.qml:110
2253 msgid "Container Information"
2254 msgstr "Información del contenedor"
2255
2256-#: ../libertine/qml/HomeView.qml:119
2257+#: ../libertine/qml/HomeView.qml:116
2258 msgid "Switch Container"
2259 msgstr "Cambiar de contenedor"
2260
2261-#: ../libertine/qml/HomeView.qml:135
2262+#: ../libertine/qml/HomeView.qml:132
2263 msgid "Enter package name or Debian file"
2264 msgstr "Escriba el nombre de un paquete o indique un archivo de Debian"
2265
2266-#: ../libertine/qml/HomeView.qml:143
2267+#: ../libertine/qml/HomeView.qml:138
2268 msgid "Choose Debian package to install"
2269 msgstr "Elija el paquete de Debian que se instalará"
2270
2271-#: ../libertine/qml/HomeView.qml:152
2272+#: ../libertine/qml/HomeView.qml:145
2273 msgid "Search archives for a package"
2274 msgstr "Buscar un paquete en los archivos"
2275
2276-#: ../libertine/qml/HomeView.qml:219
2277+#: ../libertine/qml/HomeView.qml:211
2278 msgid "Remove Package"
2279 msgstr "Desinstalar paquete"
2280
2281-#: ../libertine/qml/HomeView.qml:231
2282+#: ../libertine/qml/HomeView.qml:223
2283 msgid "Package Info"
2284 msgstr "Información del paquete"
2285
2286-#: ../libertine/qml/HomeView.qml:248
2287+#: ../libertine/qml/HomeView.qml:240
2288 msgid "No packages are installed"
2289 msgstr "No hay ningún paquete instalado"
2290
2291@@ -341,27 +341,27 @@
2292 msgstr ""
2293 "Escriba el nombre del PPA según el formato «ppa:usuario/nombre-de-ppa»:"
2294
2295-#: ../libertine/qml/ExtraArchivesView.qml:114
2296+#: ../libertine/qml/ExtraArchivesView.qml:107
2297 msgid "remove"
2298 msgstr "quitar"
2299
2300-#: ../libertine/qml/ExtraArchivesView.qml:115
2301+#: ../libertine/qml/ExtraArchivesView.qml:108
2302 msgid "Remove extra archive"
2303 msgstr "quitar archivo adicional"
2304
2305-#: ../libertine/qml/ExtraArchivesView.qml:132
2306+#: ../libertine/qml/ExtraArchivesView.qml:125
2307 msgid "No additional archives and PPA's have been added"
2308 msgstr "No se ha añadido ningún archivo ni PPA adicional"
2309
2310-#: ../libertine/qml/ExtraArchivesView.qml:177
2311+#: ../libertine/qml/ExtraArchivesView.qml:173
2312 msgid "Adding archive failed"
2313 msgstr "Falló la adición del archivo"
2314
2315-#: ../libertine/qml/ExtraArchivesView.qml:181
2316+#: ../libertine/qml/ExtraArchivesView.qml:177
2317 msgid "Deleting archive failed"
2318 msgstr "Falló la eliminación del archivo"
2319
2320-#: ../libertine/qml/GenericErrorDialog.qml:46
2321+#: ../libertine/qml/GenericErrorDialog.qml:32
2322 msgid "Dismiss"
2323 msgstr "Descartar"
2324
2325@@ -392,19 +392,19 @@
2326 msgid "Container information for %1"
2327 msgstr "Información del contenedor «%1»"
2328
2329-#: ../libertine/qml/ContainerInfoView.qml:56
2330+#: ../libertine/qml/ContainerInfoView.qml:53
2331 msgid "ID"
2332 msgstr "Id."
2333
2334-#: ../libertine/qml/ContainerInfoView.qml:64
2335+#: ../libertine/qml/ContainerInfoView.qml:60
2336 msgid "Name"
2337 msgstr "Nombre"
2338
2339-#: ../libertine/qml/ContainerInfoView.qml:72
2340+#: ../libertine/qml/ContainerInfoView.qml:67
2341 msgid "Distribution"
2342 msgstr "Distribución"
2343
2344-#: ../libertine/qml/ContainerInfoView.qml:80
2345+#: ../libertine/qml/ContainerInfoView.qml:74
2346 msgid "Status"
2347 msgstr "Estado"
2348
2349@@ -424,3 +424,45 @@
2350 #: ../libertine/qml/ContainerOptionsDialog.qml:56
2351 msgid "container name"
2352 msgstr "nombre del contenedor"
2353+
2354+#, fuzzy
2355+#~ msgid "Add"
2356+#~ msgstr "añadir"
2357+
2358+#, fuzzy
2359+#~ msgid "Add Archive"
2360+#~ msgstr "Falló la adición del archivo"
2361+
2362+#, fuzzy
2363+#~ msgid "Add a new archive"
2364+#~ msgstr "Añadir un PPA adicional"
2365+
2366+#, fuzzy
2367+#~ msgid "Additional Archives"
2368+#~ msgstr "Añadir un PPA adicional"
2369+
2370+#, fuzzy
2371+#~ msgid "Attempt to set container as default failed"
2372+#~ msgstr "Falló el intento de configuración del contenedor «%1»"
2373+
2374+#, fuzzy
2375+#~ msgid "Default container"
2376+#~ msgstr "Eliminar contenedor"
2377+
2378+#, fuzzy
2379+#~ msgid "Enter a name for the container or leave blank for default name:"
2380+#~ msgstr ""
2381+#~ "Escriba el nombre del contenedor o déjelo vacío para usar el "
2382+#~ "predeterminado"
2383+
2384+#, fuzzy
2385+#~ msgid ""
2386+#~ "Enter password for your user in the Libertine container or leave blank "
2387+#~ "for no password:"
2388+#~ msgstr ""
2389+#~ "Escriba el nombre del contenedor o déjelo vacío para usar el "
2390+#~ "predeterminado"
2391+
2392+#, fuzzy
2393+#~ msgid "new archive name"
2394+#~ msgstr "Falló la adición del archivo"
2395
2396=== modified file 'po/it.po'
2397--- po/it.po 2016-07-15 05:42:05 +0000
2398+++ po/it.po 2016-07-21 17:26:05 +0000
2399@@ -6,15 +6,16 @@
2400 msgid ""
2401 msgstr ""
2402 "Project-Id-Version: libertine\n"
2403-"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
2404+"Report-Msgid-Bugs-To: \n"
2405 "POT-Creation-Date: 2016-06-07 07:58-0400\n"
2406 "PO-Revision-Date: 2016-06-10 13:00+0000\n"
2407 "Last-Translator: Emanuele Antonio Faraone <emanueleant03@gmail.com>\n"
2408 "Language-Team: Italian <it@li.org>\n"
2409+"Language: it\n"
2410 "MIME-Version: 1.0\n"
2411 "Content-Type: text/plain; charset=UTF-8\n"
2412 "Content-Transfer-Encoding: 8bit\n"
2413-"X-Launchpad-Export-Date: 2016-07-15 05:42+0000\n"
2414+"X-Launchpad-Export-Date: 2016-07-01 06:06+0000\n"
2415 "X-Generator: Launchpad (build 18115)\n"
2416
2417 #: ../libertine/ContainerConfig.cpp:147 ../libertine/ContainerConfig.cpp:184
2418@@ -22,32 +23,32 @@
2419 msgstr "nuovo"
2420
2421 #: ../libertine/ContainerConfig.cpp:148 ../libertine/ContainerConfig.cpp:185
2422-#: ../libertine/qml/ContainersView.qml:81
2423-#: ../libertine/qml/ExtraArchivesView.qml:106 ../libertine/qml/HomeView.qml:205
2424+#: ../libertine/qml/ContainersView.qml:81 ../libertine/qml/HomeView.qml:197
2425+#: ../libertine/qml/ExtraArchivesView.qml:99
2426 msgid "installing"
2427 msgstr "installando"
2428
2429-#: ../libertine/ContainerConfig.cpp:149 ../libertine/qml/ContainersView.qml:118
2430-#: ../libertine/qml/ManageContainer.qml:85
2431-#: ../libertine/qml/ManageContainer.qml:152
2432+#: ../libertine/ContainerConfig.cpp:149 ../libertine/qml/ContainersView.qml:119
2433+#: ../libertine/qml/ManageContainer.qml:79
2434+#: ../libertine/qml/ManageContainer.qml:119
2435 msgid "ready"
2436 msgstr "pronto"
2437
2438-#: ../libertine/ContainerConfig.cpp:150 ../libertine/qml/ContainersView.qml:119
2439-#: ../libertine/qml/ManageContainer.qml:97
2440-#: ../libertine/qml/ManageContainer.qml:148
2441+#: ../libertine/ContainerConfig.cpp:150 ../libertine/qml/ContainersView.qml:120
2442+#: ../libertine/qml/ManageContainer.qml:91
2443+#: ../libertine/qml/ManageContainer.qml:115
2444 msgid "updating"
2445 msgstr "aggiornando"
2446
2447 #: ../libertine/ContainerConfig.cpp:151 ../libertine/ContainerConfig.cpp:188
2448-#: ../libertine/qml/ContainersView.qml:82
2449-#: ../libertine/qml/ExtraArchivesView.qml:107 ../libertine/qml/HomeView.qml:206
2450+#: ../libertine/qml/ContainersView.qml:82 ../libertine/qml/HomeView.qml:198
2451+#: ../libertine/qml/ExtraArchivesView.qml:100
2452 msgid "removing"
2453 msgstr "rimozione"
2454
2455 #: ../libertine/ContainerConfig.cpp:152 ../libertine/ContainerConfig.cpp:189
2456-#: ../libertine/qml/ContainerInfoView.qml:143
2457-#: ../libertine/qml/PackageInfoView.qml:148
2458+#: ../libertine/qml/PackageInfoView.qml:131
2459+#: ../libertine/qml/ContainerInfoView.qml:93
2460 msgid "removed"
2461 msgstr "rimosso"
2462
2463@@ -115,7 +116,7 @@
2464 msgid "My Containers"
2465 msgstr "Miei Contenitori"
2466
2467-#: ../libertine/qml/ContainersView.qml:92 ../libertine/qml/HomeView.qml:218
2468+#: ../libertine/qml/ContainersView.qml:92 ../libertine/qml/HomeView.qml:210
2469 msgid "delete"
2470 msgstr "elimina"
2471
2472@@ -123,19 +124,19 @@
2473 msgid "Delete Container"
2474 msgstr "Elimina Contenitore"
2475
2476-#: ../libertine/qml/ContainersView.qml:107 ../libertine/qml/HomeView.qml:230
2477+#: ../libertine/qml/ContainersView.qml:108 ../libertine/qml/HomeView.qml:222
2478 msgid "info"
2479 msgstr "Informazioni"
2480
2481-#: ../libertine/qml/ContainersView.qml:108
2482+#: ../libertine/qml/ContainersView.qml:109
2483 msgid "Container Info"
2484 msgstr "Informazioni Contenitore"
2485
2486-#: ../libertine/qml/ContainersView.qml:116
2487+#: ../libertine/qml/ContainersView.qml:117
2488 msgid "edit"
2489 msgstr "modifica"
2490
2491-#: ../libertine/qml/ContainersView.qml:117
2492+#: ../libertine/qml/ContainersView.qml:118
2493 msgid "Container Apps"
2494 msgstr "Contenitori App"
2495
2496@@ -152,17 +153,17 @@
2497 msgid "search"
2498 msgstr "Cerca"
2499
2500+#: ../libertine/qml/SearchPackagesDialog.qml:39
2501+#: ../libertine/qml/ContainerPasswordDialog.qml:52
2502+#: ../libertine/qml/HomeView.qml:68 ../libertine/qml/ExtraArchivesView.qml:57
2503 #: ../libertine/qml/ContainerOptionsDialog.qml:64
2504-#: ../libertine/qml/ContainerPasswordDialog.qml:52
2505-#: ../libertine/qml/ExtraArchivesView.qml:64 ../libertine/qml/HomeView.qml:68
2506-#: ../libertine/qml/SearchPackagesDialog.qml:39
2507 msgid "OK"
2508 msgstr "Ok"
2509
2510+#: ../libertine/qml/SearchPackagesDialog.qml:57
2511+#: ../libertine/qml/ContainerPasswordDialog.qml:70
2512+#: ../libertine/qml/HomeView.qml:88 ../libertine/qml/ExtraArchivesView.qml:65
2513 #: ../libertine/qml/ContainerOptionsDialog.qml:75
2514-#: ../libertine/qml/ContainerPasswordDialog.qml:70
2515-#: ../libertine/qml/ExtraArchivesView.qml:72 ../libertine/qml/HomeView.qml:88
2516-#: ../libertine/qml/SearchPackagesDialog.qml:57
2517 msgid "Cancel"
2518 msgstr "Annulla"
2519
2520@@ -174,15 +175,15 @@
2521 msgid "Obtaining package version…"
2522 msgstr ""
2523
2524-#: ../libertine/qml/PackageInfoView.qml:60
2525+#: ../libertine/qml/PackageInfoView.qml:59
2526 msgid "Package version"
2527 msgstr "Versione pacchetto"
2528
2529-#: ../libertine/qml/PackageInfoView.qml:68
2530+#: ../libertine/qml/PackageInfoView.qml:67
2531 msgid "Install status"
2532 msgstr "Stato installazione"
2533
2534-#: ../libertine/qml/PackageInfoView.qml:159
2535+#: ../libertine/qml/PackageInfoView.qml:140
2536 msgid "Unknown"
2537 msgstr "Sconosciuto"
2538
2539@@ -210,8 +211,8 @@
2540 msgid "Searching for packages…"
2541 msgstr "Cercando nei pacchetti..."
2542
2543+#: ../libertine/qml/SearchResults.qml:60
2544 #: ../libertine/qml/DebianPackagePicker.qml:70
2545-#: ../libertine/qml/SearchResults.qml:60
2546 msgid "Install Package"
2547 msgstr "Installa pacchetto"
2548
2549@@ -219,20 +220,20 @@
2550 msgid "Manage %1"
2551 msgstr ""
2552
2553+#: ../libertine/qml/ManageContainer.qml:63
2554 #: ../libertine/qml/ContainerOptionsDialog.qml:40
2555-#: ../libertine/qml/ManageContainer.qml:69
2556 msgid "i386 multiarch support"
2557 msgstr "Supporto i386 multiarchitettura"
2558
2559-#: ../libertine/qml/ManageContainer.qml:73
2560+#: ../libertine/qml/ManageContainer.qml:67
2561 msgid "Additional archives and PPAs"
2562 msgstr "Archivi e PPA addizionali"
2563
2564-#: ../libertine/qml/ManageContainer.qml:84
2565+#: ../libertine/qml/ManageContainer.qml:78
2566 msgid "Update…"
2567 msgstr "Aggiorno..."
2568
2569-#: ../libertine/qml/ManageContainer.qml:100
2570+#: ../libertine/qml/ManageContainer.qml:94
2571 msgid "Update container"
2572 msgstr "Aggiorna contenitore"
2573
2574@@ -281,39 +282,39 @@
2575 "The %1 package is already installed. Please try a different package name."
2576 msgstr ""
2577
2578-#: ../libertine/qml/HomeView.qml:105
2579+#: ../libertine/qml/HomeView.qml:104
2580 msgid "Manage Container"
2581 msgstr ""
2582
2583-#: ../libertine/qml/HomeView.qml:112
2584+#: ../libertine/qml/HomeView.qml:110
2585 msgid "Container Information"
2586 msgstr "Informazioni Contenitore"
2587
2588-#: ../libertine/qml/HomeView.qml:119
2589+#: ../libertine/qml/HomeView.qml:116
2590 msgid "Switch Container"
2591 msgstr "Cambia contenitore"
2592
2593-#: ../libertine/qml/HomeView.qml:135
2594+#: ../libertine/qml/HomeView.qml:132
2595 msgid "Enter package name or Debian file"
2596 msgstr ""
2597
2598-#: ../libertine/qml/HomeView.qml:143
2599+#: ../libertine/qml/HomeView.qml:138
2600 msgid "Choose Debian package to install"
2601 msgstr ""
2602
2603-#: ../libertine/qml/HomeView.qml:152
2604+#: ../libertine/qml/HomeView.qml:145
2605 msgid "Search archives for a package"
2606 msgstr ""
2607
2608-#: ../libertine/qml/HomeView.qml:219
2609+#: ../libertine/qml/HomeView.qml:211
2610 msgid "Remove Package"
2611 msgstr "Rimuovi pacchetto"
2612
2613-#: ../libertine/qml/HomeView.qml:231
2614+#: ../libertine/qml/HomeView.qml:223
2615 msgid "Package Info"
2616 msgstr "Informazioni pacchetto"
2617
2618-#: ../libertine/qml/HomeView.qml:248
2619+#: ../libertine/qml/HomeView.qml:240
2620 msgid "No packages are installed"
2621 msgstr "Nessun pacchetto installato"
2622
2623@@ -337,27 +338,27 @@
2624 msgid "Enter name of PPA in the form ppa:user/ppa-name:"
2625 msgstr ""
2626
2627-#: ../libertine/qml/ExtraArchivesView.qml:114
2628+#: ../libertine/qml/ExtraArchivesView.qml:107
2629 msgid "remove"
2630 msgstr "rimuovi"
2631
2632-#: ../libertine/qml/ExtraArchivesView.qml:115
2633+#: ../libertine/qml/ExtraArchivesView.qml:108
2634 msgid "Remove extra archive"
2635 msgstr ""
2636
2637-#: ../libertine/qml/ExtraArchivesView.qml:132
2638+#: ../libertine/qml/ExtraArchivesView.qml:125
2639 msgid "No additional archives and PPA's have been added"
2640 msgstr ""
2641
2642+#: ../libertine/qml/ExtraArchivesView.qml:173
2643+msgid "Adding archive failed"
2644+msgstr ""
2645+
2646 #: ../libertine/qml/ExtraArchivesView.qml:177
2647-msgid "Adding archive failed"
2648-msgstr ""
2649-
2650-#: ../libertine/qml/ExtraArchivesView.qml:181
2651 msgid "Deleting archive failed"
2652 msgstr ""
2653
2654-#: ../libertine/qml/GenericErrorDialog.qml:46
2655+#: ../libertine/qml/GenericErrorDialog.qml:32
2656 msgid "Dismiss"
2657 msgstr "Declina"
2658
2659@@ -384,19 +385,19 @@
2660 msgid "Container information for %1"
2661 msgstr ""
2662
2663-#: ../libertine/qml/ContainerInfoView.qml:56
2664+#: ../libertine/qml/ContainerInfoView.qml:53
2665 msgid "ID"
2666 msgstr "ID"
2667
2668-#: ../libertine/qml/ContainerInfoView.qml:64
2669+#: ../libertine/qml/ContainerInfoView.qml:60
2670 msgid "Name"
2671 msgstr "Nome"
2672
2673-#: ../libertine/qml/ContainerInfoView.qml:72
2674+#: ../libertine/qml/ContainerInfoView.qml:67
2675 msgid "Distribution"
2676 msgstr "Distribuzione"
2677
2678-#: ../libertine/qml/ContainerInfoView.qml:80
2679+#: ../libertine/qml/ContainerInfoView.qml:74
2680 msgid "Status"
2681 msgstr "Stato"
2682
2683@@ -415,3 +416,27 @@
2684 #: ../libertine/qml/ContainerOptionsDialog.qml:56
2685 msgid "container name"
2686 msgstr "nome contenitore"
2687+
2688+#, fuzzy
2689+#~ msgid "Add"
2690+#~ msgstr "aggiungi"
2691+
2692+#, fuzzy
2693+#~ msgid "Add Archive"
2694+#~ msgstr "Aggiungi PPA addizionale"
2695+
2696+#, fuzzy
2697+#~ msgid "Add a new archive"
2698+#~ msgstr "Aggiungi PPA addizionale"
2699+
2700+#, fuzzy
2701+#~ msgid "Additional Archives"
2702+#~ msgstr "Aggiungi PPA addizionale"
2703+
2704+#, fuzzy
2705+#~ msgid "Default container"
2706+#~ msgstr "Elimina Contenitore"
2707+
2708+#, fuzzy
2709+#~ msgid "new archive name"
2710+#~ msgstr "nome contenitore"
2711
2712=== modified file 'po/libertine.pot'
2713--- po/libertine.pot 2016-06-10 12:07:31 +0000
2714+++ po/libertine.pot 2016-07-21 17:26:05 +0000
2715@@ -8,7 +8,7 @@
2716 msgstr ""
2717 "Project-Id-Version: PACKAGE VERSION\n"
2718 "Report-Msgid-Bugs-To: \n"
2719-"POT-Creation-Date: 2016-06-07 07:58-0400\n"
2720+"POT-Creation-Date: 2016-07-15 14:24-0400\n"
2721 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
2722 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
2723 "Language-Team: LANGUAGE <LL@li.org>\n"
2724@@ -22,32 +22,32 @@
2725 msgstr ""
2726
2727 #: ../libertine/ContainerConfig.cpp:148 ../libertine/ContainerConfig.cpp:185
2728-#: ../libertine/qml/ContainersView.qml:81 ../libertine/qml/HomeView.qml:197
2729-#: ../libertine/qml/ExtraArchivesView.qml:99
2730+#: ../libertine/qml/ContainersView.qml:80 ../libertine/qml/HomeView.qml:205
2731+#: ../libertine/qml/ExtraArchivesView.qml:67
2732 msgid "installing"
2733 msgstr ""
2734
2735-#: ../libertine/ContainerConfig.cpp:149 ../libertine/qml/ContainersView.qml:119
2736-#: ../libertine/qml/ManageContainer.qml:79
2737-#: ../libertine/qml/ManageContainer.qml:119
2738+#: ../libertine/ContainerConfig.cpp:149 ../libertine/qml/ContainersView.qml:117
2739+#: ../libertine/qml/ManageContainer.qml:85
2740+#: ../libertine/qml/ManageContainer.qml:152
2741 msgid "ready"
2742 msgstr ""
2743
2744-#: ../libertine/ContainerConfig.cpp:150 ../libertine/qml/ContainersView.qml:120
2745-#: ../libertine/qml/ManageContainer.qml:91
2746-#: ../libertine/qml/ManageContainer.qml:115
2747+#: ../libertine/ContainerConfig.cpp:150 ../libertine/qml/ContainersView.qml:118
2748+#: ../libertine/qml/ManageContainer.qml:97
2749+#: ../libertine/qml/ManageContainer.qml:148
2750 msgid "updating"
2751 msgstr ""
2752
2753 #: ../libertine/ContainerConfig.cpp:151 ../libertine/ContainerConfig.cpp:188
2754-#: ../libertine/qml/ContainersView.qml:82 ../libertine/qml/HomeView.qml:198
2755-#: ../libertine/qml/ExtraArchivesView.qml:100
2756+#: ../libertine/qml/ContainersView.qml:81 ../libertine/qml/HomeView.qml:206
2757+#: ../libertine/qml/ExtraArchivesView.qml:68
2758 msgid "removing"
2759 msgstr ""
2760
2761 #: ../libertine/ContainerConfig.cpp:152 ../libertine/ContainerConfig.cpp:189
2762-#: ../libertine/qml/PackageInfoView.qml:131
2763-#: ../libertine/qml/ContainerInfoView.qml:93
2764+#: ../libertine/qml/PackageInfoView.qml:148
2765+#: ../libertine/qml/ContainerInfoView.qml:143
2766 msgid "removed"
2767 msgstr ""
2768
2769@@ -59,42 +59,46 @@
2770 msgid "installed"
2771 msgstr ""
2772
2773-#: ../libertine/ContainerManager.cpp:24
2774+#: ../libertine/ContainerManager.cpp:25
2775 msgid "%1 failed to start"
2776 msgstr ""
2777
2778-#: ../libertine/ContainerManager.cpp:25
2779+#: ../libertine/ContainerManager.cpp:26
2780 msgid "Installation of package %1 failed"
2781 msgstr ""
2782
2783-#: ../libertine/ContainerManager.cpp:26
2784+#: ../libertine/ContainerManager.cpp:27
2785 msgid "Removal of package %1 failed"
2786 msgstr ""
2787
2788-#: ../libertine/ContainerManager.cpp:27
2789+#: ../libertine/ContainerManager.cpp:28
2790 msgid "Searching for query %1 failed"
2791 msgstr ""
2792
2793-#: ../libertine/ContainerManager.cpp:28
2794+#: ../libertine/ContainerManager.cpp:29
2795 msgid "Updating container %1 failed"
2796 msgstr ""
2797
2798-#: ../libertine/ContainerManager.cpp:29
2799+#: ../libertine/ContainerManager.cpp:30
2800 msgid "Creating container %1 failed"
2801 msgstr ""
2802
2803-#: ../libertine/ContainerManager.cpp:30
2804+#: ../libertine/ContainerManager.cpp:31
2805 msgid "Destroying container %1 failed"
2806 msgstr ""
2807
2808-#: ../libertine/ContainerManager.cpp:31
2809+#: ../libertine/ContainerManager.cpp:32
2810 msgid "Running command %1 failed"
2811 msgstr ""
2812
2813-#: ../libertine/ContainerManager.cpp:32
2814+#: ../libertine/ContainerManager.cpp:33
2815 msgid "Attempt to configure container %1 failed"
2816 msgstr ""
2817
2818+#: ../libertine/ContainerManager.cpp:34
2819+msgid "Attempt to set container as default failed"
2820+msgstr ""
2821+
2822 #: ../libertine/qml/PackageExistsDialog.qml:28
2823 msgid "The %1 package is already installed."
2824 msgstr ""
2825@@ -115,27 +119,27 @@
2826 msgid "My Containers"
2827 msgstr ""
2828
2829-#: ../libertine/qml/ContainersView.qml:92 ../libertine/qml/HomeView.qml:210
2830+#: ../libertine/qml/ContainersView.qml:91 ../libertine/qml/HomeView.qml:218
2831 msgid "delete"
2832 msgstr ""
2833
2834-#: ../libertine/qml/ContainersView.qml:93
2835+#: ../libertine/qml/ContainersView.qml:92
2836 msgid "Delete Container"
2837 msgstr ""
2838
2839-#: ../libertine/qml/ContainersView.qml:108 ../libertine/qml/HomeView.qml:222
2840+#: ../libertine/qml/ContainersView.qml:106 ../libertine/qml/HomeView.qml:230
2841 msgid "info"
2842 msgstr ""
2843
2844-#: ../libertine/qml/ContainersView.qml:109
2845+#: ../libertine/qml/ContainersView.qml:107
2846 msgid "Container Info"
2847 msgstr ""
2848
2849-#: ../libertine/qml/ContainersView.qml:117
2850+#: ../libertine/qml/ContainersView.qml:115
2851 msgid "edit"
2852 msgstr ""
2853
2854-#: ../libertine/qml/ContainersView.qml:118
2855+#: ../libertine/qml/ContainersView.qml:116
2856 msgid "Container Apps"
2857 msgstr ""
2858
2859@@ -153,16 +157,14 @@
2860 msgstr ""
2861
2862 #: ../libertine/qml/SearchPackagesDialog.qml:39
2863-#: ../libertine/qml/ContainerPasswordDialog.qml:52
2864-#: ../libertine/qml/HomeView.qml:68 ../libertine/qml/ExtraArchivesView.qml:57
2865-#: ../libertine/qml/ContainerOptionsDialog.qml:64
2866+#: ../libertine/qml/HomeView.qml:68
2867+#: ../libertine/qml/ContainerOptionsDialog.qml:77
2868 msgid "OK"
2869 msgstr ""
2870
2871 #: ../libertine/qml/SearchPackagesDialog.qml:57
2872-#: ../libertine/qml/ContainerPasswordDialog.qml:70
2873-#: ../libertine/qml/HomeView.qml:88 ../libertine/qml/ExtraArchivesView.qml:65
2874-#: ../libertine/qml/ContainerOptionsDialog.qml:75
2875+#: ../libertine/qml/HomeView.qml:88
2876+#: ../libertine/qml/ContainerOptionsDialog.qml:88
2877 msgid "Cancel"
2878 msgstr ""
2879
2880@@ -174,15 +176,20 @@
2881 msgid "Obtaining package version…"
2882 msgstr ""
2883
2884-#: ../libertine/qml/PackageInfoView.qml:59
2885+#: ../libertine/qml/PackageInfoView.qml:60
2886 msgid "Package version"
2887 msgstr ""
2888
2889-#: ../libertine/qml/PackageInfoView.qml:67
2890+#: ../libertine/qml/PackageInfoView.qml:68
2891 msgid "Install status"
2892 msgstr ""
2893
2894-#: ../libertine/qml/PackageInfoView.qml:140
2895+#: ../libertine/qml/PackageInfoView.qml:85
2896+#: ../libertine/qml/ContainerInfoView.qml:97
2897+msgid "Operation details"
2898+msgstr ""
2899+
2900+#: ../libertine/qml/PackageInfoView.qml:159
2901 msgid "Unknown"
2902 msgstr ""
2903
2904@@ -219,23 +226,27 @@
2905 msgid "Manage %1"
2906 msgstr ""
2907
2908-#: ../libertine/qml/ManageContainer.qml:63
2909-#: ../libertine/qml/ContainerOptionsDialog.qml:40
2910+#: ../libertine/qml/ManageContainer.qml:69
2911+#: ../libertine/qml/ContainerOptionsDialog.qml:39
2912 msgid "i386 multiarch support"
2913 msgstr ""
2914
2915-#: ../libertine/qml/ManageContainer.qml:67
2916+#: ../libertine/qml/ManageContainer.qml:73
2917 msgid "Additional archives and PPAs"
2918 msgstr ""
2919
2920-#: ../libertine/qml/ManageContainer.qml:78
2921+#: ../libertine/qml/ManageContainer.qml:84
2922 msgid "Update…"
2923 msgstr ""
2924
2925-#: ../libertine/qml/ManageContainer.qml:94
2926+#: ../libertine/qml/ManageContainer.qml:100
2927 msgid "Update container"
2928 msgstr ""
2929
2930+#: ../libertine/qml/ManageContainer.qml:117
2931+msgid "Default container"
2932+msgstr ""
2933+
2934 #: ../libertine/qml/DebianPackagePicker.qml:28
2935 msgid "Available Debian Packages to Install"
2936 msgstr ""
2937@@ -244,22 +255,6 @@
2938 msgid "No Debian packages available"
2939 msgstr ""
2940
2941-#: ../libertine/qml/ContainerPasswordDialog.qml:27
2942-msgid "Authentication required"
2943-msgstr ""
2944-
2945-#: ../libertine/qml/ContainerPasswordDialog.qml:28
2946-msgid "Password is required to create a Libertine container"
2947-msgstr ""
2948-
2949-#: ../libertine/qml/ContainerPasswordDialog.qml:36
2950-msgid "Invalid password entered"
2951-msgstr ""
2952-
2953-#: ../libertine/qml/ContainerPasswordDialog.qml:41
2954-msgid "password"
2955-msgstr ""
2956-
2957 #: ../libertine/qml/HomeView.qml:29
2958 msgid "Classic Apps - %1"
2959 msgstr ""
2960@@ -281,83 +276,75 @@
2961 "The %1 package is already installed. Please try a different package name."
2962 msgstr ""
2963
2964-#: ../libertine/qml/HomeView.qml:104
2965+#: ../libertine/qml/HomeView.qml:105
2966 msgid "Manage Container"
2967 msgstr ""
2968
2969-#: ../libertine/qml/HomeView.qml:110
2970+#: ../libertine/qml/HomeView.qml:112
2971 msgid "Container Information"
2972 msgstr ""
2973
2974-#: ../libertine/qml/HomeView.qml:116
2975+#: ../libertine/qml/HomeView.qml:119
2976 msgid "Switch Container"
2977 msgstr ""
2978
2979-#: ../libertine/qml/HomeView.qml:132
2980+#: ../libertine/qml/HomeView.qml:135
2981 msgid "Enter package name or Debian file"
2982 msgstr ""
2983
2984-#: ../libertine/qml/HomeView.qml:138
2985+#: ../libertine/qml/HomeView.qml:143
2986 msgid "Choose Debian package to install"
2987 msgstr ""
2988
2989-#: ../libertine/qml/HomeView.qml:145
2990+#: ../libertine/qml/HomeView.qml:152
2991 msgid "Search archives for a package"
2992 msgstr ""
2993
2994-#: ../libertine/qml/HomeView.qml:211
2995+#: ../libertine/qml/HomeView.qml:219
2996 msgid "Remove Package"
2997 msgstr ""
2998
2999-#: ../libertine/qml/HomeView.qml:223
3000+#: ../libertine/qml/HomeView.qml:231
3001 msgid "Package Info"
3002 msgstr ""
3003
3004-#: ../libertine/qml/HomeView.qml:240
3005+#: ../libertine/qml/HomeView.qml:248
3006 msgid "No packages are installed"
3007 msgstr ""
3008
3009-#: ../libertine/qml/ExtraArchivesView.qml:28
3010-msgid "Additional Archives and PPAs"
3011+#: ../libertine/qml/ExtraArchivesView.qml:27
3012+msgid "Additional Archives"
3013+msgstr ""
3014+
3015+#: ../libertine/qml/ExtraArchivesView.qml:31
3016+msgid "add"
3017 msgstr ""
3018
3019 #: ../libertine/qml/ExtraArchivesView.qml:32
3020-msgid "add"
3021-msgstr ""
3022-
3023-#: ../libertine/qml/ExtraArchivesView.qml:33
3024-msgid "Add a new PPA"
3025-msgstr ""
3026-
3027-#: ../libertine/qml/ExtraArchivesView.qml:46
3028-msgid "Add additional PPA"
3029-msgstr ""
3030-
3031-#: ../libertine/qml/ExtraArchivesView.qml:47
3032-msgid "Enter name of PPA in the form ppa:user/ppa-name:"
3033-msgstr ""
3034-
3035-#: ../libertine/qml/ExtraArchivesView.qml:107
3036+msgid "Add a new archive"
3037+msgstr ""
3038+
3039+#: ../libertine/qml/ExtraArchivesView.qml:75
3040 msgid "remove"
3041 msgstr ""
3042
3043-#: ../libertine/qml/ExtraArchivesView.qml:108
3044+#: ../libertine/qml/ExtraArchivesView.qml:76
3045 msgid "Remove extra archive"
3046 msgstr ""
3047
3048-#: ../libertine/qml/ExtraArchivesView.qml:125
3049+#: ../libertine/qml/ExtraArchivesView.qml:93
3050 msgid "No additional archives and PPA's have been added"
3051 msgstr ""
3052
3053-#: ../libertine/qml/ExtraArchivesView.qml:173
3054-msgid "Adding archive failed"
3055-msgstr ""
3056-
3057-#: ../libertine/qml/ExtraArchivesView.qml:177
3058+#: ../libertine/qml/ExtraArchivesView.qml:126
3059 msgid "Deleting archive failed"
3060 msgstr ""
3061
3062-#: ../libertine/qml/GenericErrorDialog.qml:32
3063+#: ../libertine/qml/GenericErrorDialog.qml:39
3064+msgid "Copy to Clipboard"
3065+msgstr ""
3066+
3067+#: ../libertine/qml/GenericErrorDialog.qml:46
3068 msgid "Dismiss"
3069 msgstr ""
3070
3071@@ -384,22 +371,45 @@
3072 msgid "Container information for %1"
3073 msgstr ""
3074
3075-#: ../libertine/qml/ContainerInfoView.qml:53
3076+#: ../libertine/qml/ContainerInfoView.qml:56
3077 msgid "ID"
3078 msgstr ""
3079
3080-#: ../libertine/qml/ContainerInfoView.qml:60
3081+#: ../libertine/qml/ContainerInfoView.qml:64
3082 msgid "Name"
3083 msgstr ""
3084
3085-#: ../libertine/qml/ContainerInfoView.qml:67
3086+#: ../libertine/qml/ContainerInfoView.qml:72
3087 msgid "Distribution"
3088 msgstr ""
3089
3090-#: ../libertine/qml/ContainerInfoView.qml:74
3091+#: ../libertine/qml/ContainerInfoView.qml:80
3092 msgid "Status"
3093 msgstr ""
3094
3095+#: ../libertine/qml/AddExtraArchiveView.qml:27
3096+msgid "Add Archive"
3097+msgstr ""
3098+
3099+#: ../libertine/qml/AddExtraArchiveView.qml:42
3100+msgid "New archive identifier, e.g."
3101+msgstr ""
3102+
3103+#: ../libertine/qml/AddExtraArchiveView.qml:50
3104+msgid ""
3105+"multiverse\n"
3106+"ppa:user/repository\n"
3107+"deb http://myserver/repo stable repo"
3108+msgstr ""
3109+
3110+#: ../libertine/qml/AddExtraArchiveView.qml:73
3111+msgid "(Optional) Public signing key for archive"
3112+msgstr ""
3113+
3114+#: ../libertine/qml/AddExtraArchiveView.qml:90
3115+msgid "Add"
3116+msgstr ""
3117+
3118 #: ../libertine/qml/ContainerOptionsDialog.qml:27
3119 msgid "Container Options"
3120 msgstr ""
3121@@ -408,10 +418,20 @@
3122 msgid "Configure options for container creation."
3123 msgstr ""
3124
3125-#: ../libertine/qml/ContainerOptionsDialog.qml:50
3126-msgid "Enter or name for the container or leave blank for default name"
3127+#: ../libertine/qml/ContainerOptionsDialog.qml:49
3128+msgid "Enter a name for the container or leave blank for default name:"
3129 msgstr ""
3130
3131-#: ../libertine/qml/ContainerOptionsDialog.qml:56
3132+#: ../libertine/qml/ContainerOptionsDialog.qml:55
3133 msgid "container name"
3134 msgstr ""
3135+
3136+#: ../libertine/qml/ContainerOptionsDialog.qml:62
3137+msgid ""
3138+"Enter password for your user in the Libertine container or leave blank for "
3139+"no password:"
3140+msgstr ""
3141+
3142+#: ../libertine/qml/ContainerOptionsDialog.qml:69
3143+msgid "password"
3144+msgstr ""
3145
3146=== modified file 'python/libertine/ContainersConfig.py'
3147--- python/libertine/ContainersConfig.py 2016-06-27 20:32:33 +0000
3148+++ python/libertine/ContainersConfig.py 2016-07-21 17:26:05 +0000
3149@@ -115,7 +115,7 @@
3150 if item[object_key] == value:
3151 container[array_key].remove(item)
3152 write_container_config_file(self.container_list)
3153- return
3154+ return
3155
3156 def _test_key_value_exists(self, container_id, key, value=None):
3157 key_value = self._get_value_by_key(container_id, key)
3158@@ -149,7 +149,7 @@
3159 if container['id'] == container_id:
3160 return container
3161
3162- return None
3163+ return None
3164
3165 def merge_container_config_files(self, filepath):
3166 merged_json = []
3167@@ -199,7 +199,7 @@
3168 self.container_list.pop('defaultContainer', None)
3169
3170 if write_json:
3171- write_container_config_file(self.container_list)
3172+ write_container_config_file(self.container_list)
3173
3174 """
3175 Operations for the container itself.
3176@@ -261,7 +261,7 @@
3177 """
3178 def add_container_archive(self, container_id, archive_name):
3179 archive_obj = {'archiveName': archive_name, 'archiveStatus': 'new'}
3180- self._set_value_by_key(container_id, 'extraArchives', archive_obj)
3181+ self._set_value_by_key(container_id, 'extraArchives', archive_obj)
3182
3183 def delete_container_archive(self, container_id, archive_name):
3184 self._delete_array_object_by_key_value(container_id, 'extraArchives',
3185@@ -271,6 +271,10 @@
3186 self._set_array_object_value_by_key(container_id, 'extraArchives', 'archiveName',
3187 archive_name, 'archiveStatus', new_status)
3188
3189+ def get_archive_install_status(self, container_id, archive_name):
3190+ return self._get_array_object_value_by_key(container_id, 'extraArchives', 'archiveName',
3191+ archive_name, 'archiveStatus')
3192+
3193 def archive_exists(self, container_id, archive_name):
3194 return self._test_array_object_key_value_exists(container_id, 'extraArchives', 'archiveName',
3195 archive_name)
3196@@ -306,4 +310,3 @@
3197
3198 def get_container_type(self, container_id):
3199 return self._get_value_by_key(container_id, 'type')
3200-
3201
3202=== modified file 'python/libertine/Libertine.py'
3203--- python/libertine/Libertine.py 2016-07-07 15:59:49 +0000
3204+++ python/libertine/Libertine.py 2016-07-21 17:26:05 +0000
3205@@ -18,7 +18,9 @@
3206 import contextlib
3207 import libertine.utils
3208 import os
3209+import psutil
3210 import shutil
3211+import shlex
3212
3213 from libertine.ContainersConfig import ContainersConfig
3214 from libertine.HostInfo import HostInfo
3215@@ -61,7 +63,6 @@
3216 self.root_path = libertine.utils.get_libertine_container_rootfs_path(self.container_id)
3217 self.default_packages = ['matchbox',
3218 'libnss-extrausers',
3219- 'software-properties-common',
3220 'humanity-icon-theme',
3221 'maliit-inputcontext-gtk2',
3222 'maliit-inputcontext-gtk3',
3223@@ -161,32 +162,52 @@
3224 os.environ['DEBIAN_FRONTEND'] = 'readline'
3225 return self.run_in_container(apt_command_prefix(verbosity) + " install '" + package_name + "'") == 0
3226
3227- def configure_command(self, command, *args, verbosity=1):
3228- """
3229- Configures the container based on what the command is.
3230-
3231- :param command: The configuration command to run.
3232- :param *args: List of arguments used for the given configuration command
3233- """
3234- if command == 'multiarch':
3235- if args[0] == 'enable':
3236- ret = self.run_in_container("dpkg --add-architecture i386")
3237- if ret or ret == 0:
3238- self.run_in_container(apt_command_prefix(verbosity) + '--force-yes update')
3239- return ret
3240- else:
3241- self.run_in_container(apt_command_prefix(verbosity) + "purge \".*:i386\"")
3242- return self.run_in_container("dpkg --remove-architecture i386")
3243-
3244- elif command == 'add-archive':
3245- if not os.path.exists(os.path.join(self.root_path, 'usr', 'bin', 'add-apt-repository')):
3246- self.update_packages(verbosity)
3247- self.install_package("software-properties-common", verbosity)
3248-
3249- return self.run_in_container("add-apt-repository -y " + args[0])
3250-
3251- elif command == 'delete-archive':
3252- return self.run_in_container("add-apt-repository -y -r " + args[0])
3253+ def configure_multiarch(self, should_enable, verbosity=1):
3254+ """
3255+ Enables or disables multiarch repositories.
3256+
3257+ :param should_enable: Whether or not to enable multiarch support.
3258+ :param verbosity: the chattiness of the output on a range from 0 to 2
3259+ """
3260+ if should_enable:
3261+ ret = self.run_in_container("dpkg --add-architecture i386")
3262+ if ret or ret == 0:
3263+ self.run_in_container(apt_command_prefix(verbosity) + '--force-yes update')
3264+ return ret
3265+ else:
3266+ self.run_in_container(apt_command_prefix(verbosity) + "purge \".*:i386\"")
3267+ return self.run_in_container("dpkg --remove-architecture i386")
3268+
3269+ def configure_add_archive(self, archive, public_key_file, verbosity=1):
3270+ """
3271+ Adds the given archive. If this archive requires a key, prompt user.
3272+
3273+ :param archive: The configuration command to run.
3274+ :param public_key_file: file containing the public key used to sign this archive
3275+ :param verbosity: the chattiness of the output on a range from 0 to 2
3276+ """
3277+ if not os.path.exists(os.path.join(self.root_path, 'usr', 'bin', 'add-apt-repository')):
3278+ self.update_packages(verbosity)
3279+ self.install_package("software-properties-common", verbosity)
3280+ if 'https://' in archive and not os.path.exists(os.path.join(self.root_path, 'usr', 'lib', 'apt', 'methods', 'https')):
3281+ self.update_packages(verbosity)
3282+ self.install_package("apt-transport-https", verbosity)
3283+
3284+ retcode = self.run_in_container("add-apt-repository -y " + archive)
3285+ if retcode is 0 and public_key_file is not None:
3286+ with open(public_key_file, 'r') as keyfile:
3287+ return self.run_in_container("bash -c 'echo \"%s\" | apt-key add -'" % keyfile.read())
3288+
3289+ return retcode
3290+
3291+ def configure_remove_archive(self, archive, verbosity=1):
3292+ """
3293+ Removes the given archive.
3294+
3295+ :param archive: The configuration command to run.
3296+ :param verbosity: the chattiness of the output on a range from 0 to 2
3297+ """
3298+ return self.run_in_container("add-apt-repository -y -r " + archive)
3299
3300 @property
3301 def name(self):
3302@@ -247,7 +268,9 @@
3303 """
3304 super().__init__()
3305
3306- container_type = ContainersConfig().get_container_type(container_id)
3307+ self.containers_config = ContainersConfig()
3308+
3309+ container_type = self.containers_config.get_container_type(container_id)
3310
3311 if container_type == None or container_type == "lxc":
3312 from libertine.LxcContainer import LibertineLXC
3313@@ -287,7 +310,7 @@
3314 Creates the container.
3315 """
3316 self.container.architecture = HostInfo().get_host_architecture()
3317- self.container.installed_release = ContainersConfig().get_container_distro(self.container_id)
3318+ self.container.installed_release = self.containers_config.get_container_distro(self.container_id)
3319
3320 return self.container.create_libertine_container(password, multiarch, verbosity)
3321
3322@@ -349,7 +372,7 @@
3323 :param app_exec_line: the application exec line as passed in by
3324 ubuntu-app-launch
3325 """
3326- if ContainersConfig().container_exists(self.container.container_id):
3327+ if self.containers_config.container_exists(self.container.container_id):
3328 # Update $PATH as necessary
3329 if '/usr/games' not in os.environ['PATH']:
3330 os.environ['PATH'] = os.environ['PATH'] + ":/usr/games"
3331@@ -390,9 +413,69 @@
3332 except RuntimeError as e:
3333 return handle_runtime_error(e)
3334
3335- def configure_command(self, command, *args):
3336- try:
3337- with ContainerRunning(self.container):
3338- return self.container.configure_command(command, *args)
3339- except RuntimeError as e:
3340- return handle_runtime_error(e)
3341+ def configure_multiarch(self, should_enable, verbosity=1):
3342+ try:
3343+ with ContainerRunning(self.container):
3344+ return self.container.configure_multiarch(should_enable, verbosity)
3345+ except RuntimeError as e:
3346+ return handle_runtime_error(e)
3347+
3348+ def configure_add_archive(self, archive, key, verbosity):
3349+ try:
3350+ with ContainerRunning(self.container):
3351+ return self.container.configure_add_archive(archive, key, verbosity)
3352+ except RuntimeError as e:
3353+ return handle_runtime_error(e)
3354+
3355+ def configure_remove_archive(self, archive, verbosity):
3356+ try:
3357+ with ContainerRunning(self.container):
3358+ return self.container.configure_remove_archive(archive, verbosity)
3359+ except RuntimeError as e:
3360+ return handle_runtime_error(e)
3361+
3362+
3363+class LibertineApplication(object):
3364+ """
3365+ Launches a libertine container with a session bridge for sockets such as dbus
3366+
3367+ :param container_id: The container id.
3368+ "param app_exec_line: The exec line used to start the app in the container.
3369+ """
3370+ def __init__(self, container_id, app_exec_line):
3371+ self.container_id = container_id
3372+ self.app_exec_line = app_exec_line
3373+ self.session_bridge = None
3374+
3375+ """
3376+ Launches the libertine session bridge. This creates a proxy socket to read to and from
3377+ for abstract sockets such as dbus.
3378+
3379+ :param session_socket_paths: A list of socket paths the session will create.
3380+ """
3381+ def launch_session_bridge(self, session_socket_paths):
3382+ session_bridge_arguments = ''
3383+ for paths in session_socket_paths:
3384+ session_bridge_arguments += paths + ' '
3385+
3386+ libertine_session_bridge_cmd = "libertine-session-bridge " + session_bridge_arguments
3387+
3388+ args = shlex.split(libertine_session_bridge_cmd)
3389+ self.session_bridge = psutil.Popen(args)
3390+
3391+ """
3392+ Launches the container from the id and attempts to run the application exec.
3393+ """
3394+ def launch_application(self):
3395+ if not ContainersConfig().container_exists(self.container_id):
3396+ raise RuntimeError("Container ID %s does not exist." % self.container_id)
3397+
3398+ container = LibertineContainer(self.container_id)
3399+
3400+ try:
3401+ container.launch_application(self.app_exec_line)
3402+ except:
3403+ raise
3404+ finally:
3405+ if self.session_bridge is not None:
3406+ self.session_bridge.terminate()
3407
3408=== modified file 'python/libertine/LxcContainer.py'
3409--- python/libertine/LxcContainer.py 2016-06-29 12:54:58 +0000
3410+++ python/libertine/LxcContainer.py 2016-07-21 17:26:05 +0000
3411@@ -41,18 +41,11 @@
3412 return found
3413
3414
3415-def setup_host_environment(username, password):
3416+def setup_host_environment(username):
3417 lxc_net_entry = "%s veth lxcbr0 10" % str(username)
3418
3419 if not check_lxc_net_entry(lxc_net_entry):
3420- passwd = subprocess.Popen(["sudo", "--stdin", "usermod", "--add-subuids", "100000-165536",
3421- "--add-subgids", "100000-165536", str(username)],
3422- stdin=subprocess.PIPE, stdout=subprocess.DEVNULL,
3423- stderr=subprocess.STDOUT)
3424- passwd.communicate((password + '\n').encode('UTF-8'))
3425-
3426- add_user_cmd = "echo %s | sudo tee -a /etc/lxc/lxc-usernet > /dev/null" % lxc_net_entry
3427- subprocess.Popen(add_user_cmd, shell=True)
3428+ subprocess.Popen(["sudo", "libertine-lxc-setup", str(username)]).wait()
3429
3430
3431 def get_lxc_default_config_path():
3432@@ -151,7 +144,7 @@
3433 user_id = os.getuid()
3434 group_id = os.getgid()
3435
3436- setup_host_environment(username, password)
3437+ setup_host_environment(username)
3438
3439 # Generate the default lxc default config, if it doesn't exist
3440 config_path = get_lxc_default_config_path()
3441
3442=== modified file 'python/libertine/__init__.py'
3443--- python/libertine/__init__.py 2015-11-23 20:04:30 +0000
3444+++ python/libertine/__init__.py 2016-07-21 17:26:05 +0000
3445@@ -22,9 +22,10 @@
3446
3447 __all__ = [
3448 # from Libertine
3449- 'LibertineContainer', 'utils'
3450+ 'LibertineContainer', 'utils', 'LibertineApplication'
3451 ]
3452
3453 __docformat__ = "restructuredtext en"
3454
3455 from libertine.Libertine import LibertineContainer
3456+from libertine.Libertine import LibertineApplication
3457
3458=== modified file 'tests/unit/CMakeLists.txt'
3459--- tests/unit/CMakeLists.txt 2016-06-27 16:41:52 +0000
3460+++ tests/unit/CMakeLists.txt 2016-07-21 17:26:05 +0000
3461@@ -44,14 +44,10 @@
3462 ENVIRONMENT
3463 "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}")
3464
3465-set(DISABLED 1)
3466-
3467-if (NOT DISABLED)
3468- add_test(test_libertine_launch
3469- "/usr/bin/python3" "-m" "testtools.run" "libertine_launch_tests"
3470- )
3471- set_tests_properties(test_libertine_launch
3472- PROPERTIES
3473- ENVIRONMENT
3474- "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}")
3475-endif()
3476+add_test(test_libertine_launch
3477+ "/usr/bin/python3" "-m" "testtools.run" "libertine_launch_tests"
3478+)
3479+set_tests_properties(test_libertine_launch
3480+ PROPERTIES
3481+ ENVIRONMENT
3482+ "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}")
3483
3484=== modified file 'tests/unit/libertine_launch_tests.py'
3485--- tests/unit/libertine_launch_tests.py 2015-12-18 20:31:46 +0000
3486+++ tests/unit/libertine_launch_tests.py 2016-07-21 17:26:05 +0000
3487@@ -18,34 +18,32 @@
3488 import subprocess
3489 import tempfile
3490
3491+from libertine import LibertineApplication
3492+
3493 from testtools import TestCase
3494 from testtools.matchers import Equals, NotEquals
3495
3496 class TestLibertineLaunch(TestCase):
3497-
3498 def setUp(self):
3499 super(TestLibertineLaunch, self).setUp()
3500 self.cmake_source_dir = os.environ['CMAKE_SOURCE_DIR']
3501 self.cmake_binary_dir = os.environ['CMAKE_BINARY_DIR']
3502
3503- # Set the paths to the config file
3504 container_config_path = os.path.join(self.cmake_binary_dir, 'tests', 'unit', 'libertine-config')
3505- container_config_file = os.path.join(container_config_path, 'libertine', 'ContainersConfig.json')
3506
3507 # Set necessary enviroment variables
3508 os.environ['XDG_DATA_HOME'] = container_config_path
3509 os.environ['XDG_RUNTIME_DIR'] = tempfile.mkdtemp()
3510- os.environ['DISPLAY'] = ':0'
3511 os.environ['PATH'] = (self.cmake_source_dir + '/tests/mocks:' +
3512 self.cmake_source_dir + '/tools:' + os.environ['PATH'])
3513
3514 self.addCleanup(self.cleanup)
3515
3516- # Make a mock container
3517+ # Lets figure out how to really mock this....
3518 cli_cmd = self.cmake_source_dir + '/tools/libertine-container-manager create -i test -n Test -t mock'
3519 args = shlex.split(cli_cmd)
3520 subprocess.Popen(args).wait()
3521-
3522+
3523 def cleanup(self):
3524 shutil.rmtree(os.environ['XDG_RUNTIME_DIR'])
3525
3526@@ -53,46 +51,26 @@
3527 '''
3528 Base line test to ensure launching an app in an existing container works.
3529 '''
3530- cli_cmd = self.cmake_source_dir + '/tools/libertine-launch test true'
3531- args = shlex.split(cli_cmd)
3532- p = subprocess.Popen(args)
3533- p.wait()
3534-
3535- self.assertThat(p.returncode, Equals(0))
3536+ la = LibertineApplication('test', 'true')
3537+ la.launch_application()
3538
3539 def test_launch_app_nonexistent_container(self):
3540 '''
3541 Test to make sure that things gracefully handle a non-existing container.
3542 '''
3543- cli_cmd = self.cmake_source_dir + '/tools/libertine-launch test1 true'
3544- args = shlex.split(cli_cmd)
3545- p = subprocess.Popen(args)
3546- p.wait()
3547-
3548- # Should fail due to nonexistent container
3549- self.assertThat(p.returncode, Equals(1))
3550+ la = LibertineApplication('test1', 'true')
3551+ self.assertRaises(RuntimeError, la.launch_application)
3552
3553 def test_launch_good_app(self):
3554 '''
3555 Test to make sure that launching an app actually works.
3556 '''
3557- cli_cmd = self.cmake_source_dir + '/tools/libertine-launch test mock_app'
3558- args = shlex.split(cli_cmd)
3559- p = subprocess.Popen(args)
3560- p.wait()
3561-
3562- self.assertThat(p.returncode, Equals(0))
3563- self.assertThat(os.path.exists(os.path.join(os.environ['XDG_RUNTIME_DIR'], 'mock')), Equals(True))
3564-
3565- os.remove(os.path.join(os.path.join(os.environ['XDG_RUNTIME_DIR'], 'mock')))
3566+ la = LibertineApplication('test', 'mock_app')
3567+ la.launch_application()
3568
3569 def test_launch_bad_app(self):
3570 '''
3571 Test to make sure launching an app that doesn't exist doesn't break things
3572 '''
3573- cli_cmd = self.cmake_source_dir + '/tools/libertine-launch test foo'
3574- args = shlex.split(cli_cmd)
3575- p = subprocess.Popen(args)
3576- p.wait()
3577-
3578- self.assertThat(p.returncode, Equals(1))
3579+ la = LibertineApplication('test', 'foo')
3580+ self.assertRaises(FileNotFoundError, la.launch_application)
3581
3582=== modified file 'tools/CMakeLists.txt'
3583--- tools/CMakeLists.txt 2016-06-07 19:49:27 +0000
3584+++ tools/CMakeLists.txt 2016-07-21 17:26:05 +0000
3585@@ -1,4 +1,4 @@
3586-install(PROGRAMS libertine-container-manager libertine-launch libertine-session-bridge libertine-lxc-manager libertine-xmir
3587+install(PROGRAMS libertine-container-manager libertine-launch libertine-session-bridge libertine-lxc-manager libertine-xmir libertine-lxc-setup
3588 DESTINATION ${CMAKE_INSTALL_BINDIR})
3589 install(FILES libertine-launch.1 libertine-container-manager.1 libertine-session-bridge.1 libertine-lxc-manager.1 libertine-xmir.1
3590 DESTINATION ${CMAKE_INSTALL_MANDIR}/man1
3591
3592=== modified file 'tools/libertine-container-manager'
3593--- tools/libertine-container-manager 2016-07-06 18:39:53 +0000
3594+++ tools/libertine-container-manager 2016-07-21 17:26:05 +0000
3595@@ -74,7 +74,7 @@
3596 if args.password:
3597 password = args.password
3598 elif sys.stdin.isatty():
3599- print("Your user password is required for creating a Libertine container.")
3600+ print("Enter password for your user in the Libertine container or leave blank for no password:")
3601 password = getpass.getpass()
3602 else:
3603 password = sys.stdin.readline().rstrip()
3604@@ -206,10 +206,14 @@
3605 if not container.exec_command(args.command):
3606 sys.exit(1)
3607
3608- def delete_archive_by_name(self, container_id, archive_name):
3609+ def delete_archive_by_name(self, container_id, archive_name, verbosity=1):
3610 self.containers_config.update_archive_install_status(container_id, archive_name, 'removing')
3611- if LibertineContainer(container_id).configure_command('delete-archive', archive_name) is not 0:
3612- return False
3613+ if self.containers_config.get_archive_install_status(container_id, archive_name) == 'installed':
3614+ self.containers_config.update_archive_install_status(container_id, archive_name, 'removing')
3615+ if LibertineContainer(container_id).configure_remove_archive("\"" + archive_name + "\"", verbosity) is not 0:
3616+ self.containers_config.update_archive_install_status(container_id, archive_name, 'installed')
3617+ return False
3618+
3619 self.containers_config.delete_container_archive(container_id, archive_name)
3620 return True
3621
3622@@ -228,31 +232,41 @@
3623 print("i386 multiarch support is already %s" % multiarch)
3624 sys.exit(1)
3625
3626- if container.configure_command('multiarch', args.multiarch) is not 0:
3627+ if container.configure_multiarch(args.multiarch, args.verbosity) is not 0:
3628 sys.exit(1)
3629
3630 self.containers_config.update_container_multiarch_support(container_id, multiarch)
3631
3632- elif args.add_archive:
3633- if self.containers_config.archive_exists(container_id, args.add_archive):
3634- print("%s already added in container." % args.add_archive)
3635- sys.exit(1)
3636-
3637- self.containers_config.add_container_archive(container_id, args.add_archive)
3638- self.containers_config.update_archive_install_status(container_id, args.add_archive, 'installing')
3639- if container.configure_command('add-archive', args.add_archive) is not 0:
3640- self.containers_config.delete_container_archive(container_id, args.add_archive)
3641- sys.exit(1)
3642-
3643- self.containers_config.update_archive_install_status(container_id, args.add_archive, 'installed')
3644-
3645- elif args.delete_archive:
3646- if not self.containers_config.archive_exists(container_id, args.delete_archive):
3647- print("%s is not added in container." % args.delete_archive)
3648- sys.exit(1)
3649-
3650- if not self.delete_archive_by_name(container_id, args.delete_archive):
3651- sys.exit(1)
3652+ elif args.archive is not None:
3653+ archive_name = args.archive_name.strip("\'\"")
3654+ archive_name_esc = "\"" + archive_name + "\""
3655+
3656+ if args.archive == 'add':
3657+ if self.containers_config.archive_exists(container_id, archive_name):
3658+ print("%s already added in container." % archive_name)
3659+ sys.exit(1)
3660+
3661+ self.containers_config.add_container_archive(container_id, archive_name)
3662+ self.containers_config.update_archive_install_status(container_id, archive_name, 'installing')
3663+ if container.configure_add_archive(archive_name_esc, args.public_key_file, args.verbosity) is not 0:
3664+ self.containers_config.delete_container_archive(container_id, archive_name)
3665+ sys.exit(1)
3666+
3667+ self.containers_config.update_archive_install_status(container_id, archive_name, 'installed')
3668+
3669+ elif args.archive == 'remove':
3670+ if not self.containers_config.archive_exists(container_id, archive_name):
3671+ print("%s is not added in container." % archive_name)
3672+ sys.exit(1)
3673+
3674+ if not self.delete_archive_by_name(container_id, archive_name):
3675+ print("%s was not properly deleted." % archive_name)
3676+ sys.exit(1)
3677+
3678+ else:
3679+ print("Configure called with no subcommand. See configure --help for usage.")
3680+ sys.exit(1)
3681+
3682
3683 def merge(self, args):
3684 self.containers_config.merge_container_config_files(args.file)
3685@@ -435,22 +449,31 @@
3686 parser_configure.add_argument(
3687 '-i', '--id',
3688 help=("Container identifier. Default container is used if omitted."))
3689- parser_configure.add_argument(
3690- '-m', '--multiarch',
3691- choices=['enable', 'disable'],
3692- help=("Enables or disables i386 multiarch support for amd64 Libertine "
3693- "containers. This option has no effect when the Libertine "
3694- "container is i386."))
3695- parser_configure.add_argument(
3696- '-a', '--add-archive',
3697- metavar='Archive name',
3698- help=("Adds an archive (PPA) in the specified Libertine container. Needs to be "
3699- "in the form of \"ppa:user/ppa-name\"."))
3700- parser_configure.add_argument(
3701- '-d', '--delete-archive',
3702- metavar='Archive name',
3703- help=("Deletes an existing archive (PPA) in the specified Libertine container. "
3704- "Needs to be in the form of \"ppa:user/ppa-name\"."))
3705+ multiarch_group = parser_configure.add_argument_group("Multiarch support",
3706+ "Enable or disable multiarch support for a container.")
3707+ multiarch_group.add_argument(
3708+ '-m', '--multiarch',
3709+ choices=['enable', 'disable'],
3710+ help=("Enables or disables i386 multiarch support for amd64 Libertine "
3711+ "containers. This option has no effect when the Libertine "
3712+ "container is i386."))
3713+
3714+ archive_group = parser_configure.add_argument_group("Additional archive support",
3715+ "Add or delete an additional archive (PPA).")
3716+ archive_group.add_argument(
3717+ '-a', '--archive',
3718+ choices=['add', 'remove'],
3719+ help=("Adds or removes an archive (PPA) in the specified Libertine container."))
3720+ archive_group.add_argument(
3721+ '-n', '--archive-name',
3722+ metavar='Archive name',
3723+ help=("Archive name to be added or removed."))
3724+ archive_group.add_argument(
3725+ '-k', '--public-key-file',
3726+ metavar='Public key file',
3727+ help=("File containing the key used to sign the given archive. "
3728+ "Useful for third-party or private archives."))
3729+
3730 parser_configure.set_defaults(func=container_manager.configure)
3731
3732 # Handle merging another ContainersConfig.json file into the main ContainersConfig.json file
3733
3734=== modified file 'tools/libertine-container-manager.1'
3735--- tools/libertine-container-manager.1 2016-06-07 14:00:34 +0000
3736+++ tools/libertine-container-manager.1 2016-07-21 17:26:05 +0000
3737@@ -265,14 +265,19 @@
3738 Enable i386 support.
3739 .RE
3740 .IP
3741-.BR \-a " ARCHIVE_NAME, " \-\-add-archive " ARCHIVE_NAME" ""
3742-.RS 14
3743-Adds an archive to the specified container. Format like "ppa:user/ppa-name".
3744-.RE
3745-.IP
3746-.BR \-d " ARCHIVE_NAME, " \-\-delete-archive " ARCHIVE_NAME" ""
3747-.RS 14
3748-Deletes an archive to the specified container. Format like "ppa:user/ppa-name".
3749+.BR \-a " {add,remove}, " \-\-archive "{add,remove}" ""
3750+.RS 14
3751+Adds or removes an archive in the specified container.
3752+.RE
3753+.IP
3754+.BR \-n " ARCHIVE_NAME, " \-\-archive-name " ARCHIVE_NAME" ""
3755+.RS 14
3756+Archive to be added or removed. Examples: 'deb http://myserver/path/to/repo stable myrepo', ppa:user/repository, multiverse
3757+.RE
3758+.IP
3759+.BR \-k " PUBLIC_KEY_FILE, " \-\-public-key-file " PUBLIC_KEY_FILE" ""
3760+.RS 14
3761+File containing public key used to sign new archive.
3762 .RE
3763 .TP
3764
3765
3766=== modified file 'tools/libertine-launch'
3767--- tools/libertine-launch 2016-06-28 20:16:55 +0000
3768+++ tools/libertine-launch 2016-07-21 17:26:05 +0000
3769@@ -21,11 +21,9 @@
3770 import random
3771 import string
3772 import libertine.utils
3773-import psutil
3774 import shlex
3775 import time
3776-
3777-from libertine import LibertineContainer
3778+from libertine import LibertineApplication
3779
3780
3781 def get_session_socket_path(session_socket_name):
3782@@ -60,13 +58,6 @@
3783 set_env_socket_path(socket_path, 'MALIIT_SERVER_ADDRESS')
3784
3785
3786-def launch_libertine_session_bridge(session_socket_path):
3787- libertine_session_bridge_cmd = "libertine-session-bridge " + session_socket_path
3788-
3789- args = shlex.split(libertine_session_bridge_cmd)
3790- return psutil.Popen(args)
3791-
3792-
3793 def detect_session_bridge_socket(session_socket_path):
3794 retries = 0
3795
3796@@ -87,6 +78,8 @@
3797 help='exec line')
3798 args = arg_parser.parse_args()
3799
3800+ la = LibertineApplication(args.container_id, args.app_exec_line)
3801+
3802 # remove problematic environment variables
3803 for e in ['QT_QPA_PLATFORM', 'LD_LIBRARY_PATH', 'FAKECHROOT_BASE', 'FAKECHROOT_CMD_SUBST']:
3804 if e in os.environ:
3805@@ -94,9 +87,8 @@
3806
3807 dbus_socket_path = get_dbus_session_socket_path()
3808 maliit_socket_path = get_maliit_session_socket_path()
3809- session_bridge_arguments = dbus_socket_path + ' ' + maliit_socket_path
3810
3811- session_bridge = launch_libertine_session_bridge(session_bridge_arguments)
3812+ la.launch_session_bridge([dbus_socket_path, maliit_socket_path])
3813
3814 set_dbus_env_socket_path(dbus_socket_path)
3815 set_maliit_env_socket_path(maliit_socket_path)
3816@@ -104,11 +96,4 @@
3817 # should detect the maliit socket, but dont know if its around or not here.
3818 detect_session_bridge_socket(dbus_socket_path)
3819
3820- container = LibertineContainer(args.container_id)
3821-
3822- try:
3823- container.launch_application(args.app_exec_line)
3824- except:
3825- raise
3826- finally:
3827- session_bridge.terminate()
3828+ la.launch_application()
3829
3830=== added file 'tools/libertine-lxc-setup'
3831--- tools/libertine-lxc-setup 1970-01-01 00:00:00 +0000
3832+++ tools/libertine-lxc-setup 2016-07-21 17:26:05 +0000
3833@@ -0,0 +1,9 @@
3834+#!/bin/sh
3835+
3836+USERNAME=$1
3837+
3838+LXC_USERNET_ENTRY="$USERNAME veth lxcbr0 10"
3839+
3840+usermod --add-subuids 100000-165536 --add-subgids 100000-165536 $USERNAME
3841+
3842+echo $LXC_USERNET_ENTRY | tee -a /etc/lxc/lxc-usernet > /dev/null
3843
3844=== modified file 'tools/libertine-session-bridge'
3845--- tools/libertine-session-bridge 2016-06-27 15:59:41 +0000
3846+++ tools/libertine-session-bridge 2016-07-21 17:26:05 +0000
3847@@ -123,7 +123,12 @@
3848 accept_new_connection(host_session_socket_path_map[sock], sock)
3849
3850 else:
3851- data = sock.recv(4096)
3852+ try:
3853+ data = sock.recv(4096)
3854+ except:
3855+ close_connections(sock)
3856+ continue
3857+
3858 if len(data) == 0:
3859 close_connections(sock)
3860 continue
3861
3862=== modified file 'tools/update-puritine-containers'
3863--- tools/update-puritine-containers 2016-06-10 20:34:33 +0000
3864+++ tools/update-puritine-containers 2016-07-21 17:26:05 +0000
3865@@ -23,10 +23,20 @@
3866 import shutil
3867 import subprocess
3868
3869+from gi.repository import GLib, Gio
3870+
3871 puritine_hook_dir = os.path.join(os.environ['HOME'], '.cache', 'libertine', 'puritine')
3872 puritine_symlink_farm_file = os.path.join(puritine_hook_dir, 'PuritineSymlinkFarm.json')
3873 puritine_click_config_file = os.path.join('libertine-config', 'libertine', 'ContainersConfig.json')
3874
3875+def symlink_farm_entries_count():
3876+ if (puritine_symlink_farm_list and
3877+ puritine_symlink_farm_list['customContainers']):
3878+ return len(puritine_symlink_farm_list['customContainers'])
3879+
3880+ return 0
3881+
3882+
3883 def puritine_symlink_exists(symlink):
3884 for file in os.listdir(puritine_hook_dir):
3885 if file == symlink:
3886@@ -117,21 +127,59 @@
3887 return puritine_symlink_farm_list
3888
3889
3890-puritine_symlink_farm_list = {}
3891-
3892-if not os.path.exists(puritine_hook_dir):
3893- os.makedirs(puritine_hook_dir)
3894-
3895-if (os.path.exists(puritine_symlink_farm_file) and
3896- os.path.getsize(puritine_symlink_farm_file) != 0):
3897- with open(puritine_symlink_farm_file, 'r') as fd:
3898- puritine_symlink_farm_list = json.load(fd)
3899-
3900-puritine_symlink_farm_list = find_new_or_updated_puritine_symlinks(puritine_symlink_farm_list)
3901-
3902-if puritine_symlink_farm_list:
3903- puritine_symlink_farm_list = find_removed_puritine_symlinks(puritine_symlink_farm_list)
3904-
3905-with open(puritine_symlink_farm_file, 'w') as fd:
3906- json.dump(puritine_symlink_farm_list, fd, sort_keys=True, indent=4)
3907- fd.write('\n')
3908+def favorite_libertine_scope():
3909+ libertine_scope_value = 'scope://libertine-scope.ubuntu_libertine-scope'
3910+ click_scope_value = 'scope://clickscope'
3911+ schema = 'com.canonical.Unity.Dash'
3912+ schema_key = 'favorite-scopes'
3913+
3914+ settings = Gio.Settings.new(schema)
3915+
3916+ favorites = settings.get_value(schema_key)
3917+
3918+ array = favorites.dup_strv()
3919+
3920+ if not libertine_scope_value in array:
3921+ array.insert(array.index(click_scope_value) + 1, libertine_scope_value)
3922+ new_favorites = GLib.Variant.new_strv(array)
3923+ settings.set_value(schema_key, new_favorites)
3924+ del new_favorites
3925+
3926+ del array
3927+ del favorites
3928+ del settings
3929+
3930+
3931+if __name__ == '__main__':
3932+ puritine_symlink_farm_list = {}
3933+
3934+ with open(os.path.join('/', 'run', 'user', str(os.getuid()), 'dbus-session'), 'r') as fd:
3935+ dbus_session_str = fd.read()
3936+
3937+ os.environ['DBUS_SESSION_BUS_ADDRESS'] = dbus_session_str.partition('DBUS_SESSION_BUS_ADDRESS=')[2].rstrip('\n')
3938+
3939+ if not os.path.exists(puritine_hook_dir):
3940+ os.makedirs(puritine_hook_dir)
3941+
3942+ if (os.path.exists(puritine_symlink_farm_file) and
3943+ os.path.getsize(puritine_symlink_farm_file) != 0):
3944+ with open(puritine_symlink_farm_file, 'r') as fd:
3945+ puritine_symlink_farm_list = json.load(fd)
3946+
3947+ count_at_start = symlink_farm_entries_count()
3948+
3949+ puritine_symlink_farm_list = find_new_or_updated_puritine_symlinks(puritine_symlink_farm_list)
3950+
3951+ if puritine_symlink_farm_list:
3952+ puritine_symlink_farm_list = find_removed_puritine_symlinks(puritine_symlink_farm_list)
3953+
3954+ count_at_finish = symlink_farm_entries_count()
3955+
3956+ with open(puritine_symlink_farm_file, 'w') as fd:
3957+ json.dump(puritine_symlink_farm_list, fd, sort_keys=True, indent=4)
3958+ fd.write('\n')
3959+
3960+ if count_at_start == 0 and count_at_finish > 0:
3961+ favorite_libertine_scope()
3962+
3963+ libertine.utils.refresh_libertine_scope()

Subscribers

People subscribed via source and target branches