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