Merge lp:~townsend/libertine/release-1.1 into lp:libertine/trunk
- release-1.1
- Merge into trunk
Proposed by
Christopher Townsend
Status: | Merged | ||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Approved by: | Stephen M. Webb | ||||||||||||||||||||
Approved revision: | 130 | ||||||||||||||||||||
Merged at revision: | 130 | ||||||||||||||||||||
Proposed branch: | lp:~townsend/libertine/release-1.1 | ||||||||||||||||||||
Merge into: | lp:libertine/trunk | ||||||||||||||||||||
Diff against target: |
3776 lines (+1327/-1547) 36 files modified
data/CMakeLists.txt (+1/-3) data/demo/CMakeLists.txt (+0/-4) data/demo/desktop_files/CMakeLists.txt (+0/-24) data/demo/desktop_files/puritine_firefox_0.0.desktop.in (+0/-11) data/demo/desktop_files/puritine_gedit_0.0.desktop.in (+0/-11) data/demo/desktop_files/puritine_gimp_0.0.desktop.in (+0/-11) data/demo/desktop_files/puritine_libreoffice-startcenter_0.0.desktop.in (+0/-11) data/demo/desktop_files/puritine_xchat-gnome_0.0.desktop.in (+0/-11) data/demo/icons/accessories-text-editor.svg (+0/-119) data/puritine-click.conf (+0/-39) debian/changelog (+23/-0) debian/control (+5/-11) debian/libertine-demo.install (+0/-4) debian/libertine-demo.lintian-overrides (+0/-5) debian/libertine-tools.install (+2/-0) libertine/ContainerManager.cpp (+222/-431) libertine/ContainerManager.h (+25/-112) libertine/qml/ContainerPasswordDialog.qml (+3/-9) libertine/qml/ContainersView.qml (+3/-5) libertine/qml/ExtraArchivesView.qml (+4/-10) libertine/qml/HomeView.qml (+29/-33) libertine/qml/ManageContainer.qml (+8/-14) libertine/qml/PackageInfoView.qml (+47/-11) libertine/qml/SearchResultsView.qml (+1/-4) libertine/qml/libertine.qml (+37/-2) po/en_US.po (+365/-365) po/libertine.pot (+247/-223) python/libertine/ChrootContainer.py (+3/-3) python/libertine/Libertine.py (+16/-10) python/libertine/LxcContainer.py (+1/-1) python/libertine/utils.py (+17/-0) tools/CMakeLists.txt (+3/-0) tools/bash_completion.d/libertine-container-manager (+72/-0) tools/libertine-container-manager (+74/-20) tools/libertine-launch (+36/-12) tools/libertine-session-bridge (+83/-18) |
||||||||||||||||||||
To merge this branch: | bzr merge lp:~townsend/libertine/release-1.1 | ||||||||||||||||||||
Related bugs: |
|
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Stephen M. Webb (community) | Approve | ||
Review via email: mp+296611@code.launchpad.net |
Commit message
Description of the change
No commit message necessary due to how ci-train is making changelog entries.
To post a comment you must log in.
- 131. By Christopher Townsend
-
Update .pot/.po files for this release.
Preview Diff
[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1 | === modified file 'data/CMakeLists.txt' |
2 | --- data/CMakeLists.txt 2016-05-02 20:45:21 +0000 |
3 | +++ data/CMakeLists.txt 2016-06-07 12:41:22 +0000 |
4 | @@ -1,10 +1,8 @@ |
5 | -add_subdirectory(demo) |
6 | - |
7 | install(FILES libertine.desktop |
8 | DESTINATION ${CMAKE_INSTALL_DATADIR}/applications) |
9 | install(FILES libertine_64.png libertine-lxc.conf |
10 | DESTINATION ${CMAKE_INSTALL_DATADIR}/${CMAKE_PROJECT_NAME}) |
11 | -install(FILES puritine-click.conf libertine-lxc-manager.conf libertine-xmir.conf |
12 | +install(FILES libertine-lxc-manager.conf libertine-xmir.conf |
13 | DESTINATION ${CMAKE_INSTALL_DATADIR}/upstart/sessions) |
14 | install(FILES puritine-15.04.1.framework |
15 | DESTINATION ${CMAKE_INSTALL_DATADIR}/click/frameworks) |
16 | |
17 | === removed directory 'data/demo' |
18 | === removed file 'data/demo/CMakeLists.txt' |
19 | --- data/demo/CMakeLists.txt 2015-09-01 20:32:12 +0000 |
20 | +++ data/demo/CMakeLists.txt 1970-01-01 00:00:00 +0000 |
21 | @@ -1,4 +0,0 @@ |
22 | -add_subdirectory(desktop_files) |
23 | - |
24 | -install(DIRECTORY icons/ |
25 | - DESTINATION ${CMAKE_INSTALL_DATADIR}/${CMAKE_PROJECT_NAME}/demo/icons) |
26 | |
27 | === removed directory 'data/demo/desktop_files' |
28 | === removed file 'data/demo/desktop_files/CMakeLists.txt' |
29 | --- data/demo/desktop_files/CMakeLists.txt 2015-09-18 14:35:55 +0000 |
30 | +++ data/demo/desktop_files/CMakeLists.txt 1970-01-01 00:00:00 +0000 |
31 | @@ -1,24 +0,0 @@ |
32 | -execute_process(COMMAND dpkg-architecture -qDEB_BUILD_ARCH |
33 | - OUTPUT_VARIABLE BUILD_ARCH |
34 | - OUTPUT_STRIP_TRAILING_WHITESPACE |
35 | -) |
36 | - |
37 | -configure_file("puritine_firefox_0.0.desktop.in" "${CMAKE_CURRENT_BINARY_DIR}/puritine_firefox_0.0.desktop" @ONLY) |
38 | -install(FILES "${CMAKE_CURRENT_BINARY_DIR}/puritine_firefox_0.0.desktop" |
39 | - DESTINATION "${CMAKE_INSTALL_DATADIR}/applications/demo") |
40 | - |
41 | -configure_file("puritine_gedit_0.0.desktop.in" "${CMAKE_CURRENT_BINARY_DIR}/puritine_gedit_0.0.desktop" @ONLY) |
42 | -install(FILES "${CMAKE_CURRENT_BINARY_DIR}/puritine_gedit_0.0.desktop" |
43 | - DESTINATION "${CMAKE_INSTALL_DATADIR}/applications/demo") |
44 | - |
45 | -configure_file("puritine_gimp_0.0.desktop.in" "${CMAKE_CURRENT_BINARY_DIR}/puritine_gimp_0.0.desktop" @ONLY) |
46 | -install(FILES "${CMAKE_CURRENT_BINARY_DIR}/puritine_gimp_0.0.desktop" |
47 | - DESTINATION "${CMAKE_INSTALL_DATADIR}/applications/demo") |
48 | - |
49 | -configure_file("puritine_libreoffice-startcenter_0.0.desktop.in" "${CMAKE_CURRENT_BINARY_DIR}/puritine_libreoffice-startcenter_0.0.desktop" @ONLY) |
50 | -install(FILES "${CMAKE_CURRENT_BINARY_DIR}/puritine_libreoffice-startcenter_0.0.desktop" |
51 | - DESTINATION "${CMAKE_INSTALL_DATADIR}/applications/demo") |
52 | - |
53 | -configure_file("puritine_xchat-gnome_0.0.desktop.in" "${CMAKE_CURRENT_BINARY_DIR}/puritine_xchat-gnome_0.0.desktop" @ONLY) |
54 | -install(FILES "${CMAKE_CURRENT_BINARY_DIR}/puritine_xchat-gnome_0.0.desktop" |
55 | - DESTINATION "${CMAKE_INSTALL_DATADIR}/applications/demo") |
56 | |
57 | === removed file 'data/demo/desktop_files/puritine_firefox_0.0.desktop.in' |
58 | --- data/demo/desktop_files/puritine_firefox_0.0.desktop.in 2015-09-18 14:35:55 +0000 |
59 | +++ data/demo/desktop_files/puritine_firefox_0.0.desktop.in 1970-01-01 00:00:00 +0000 |
60 | @@ -1,11 +0,0 @@ |
61 | -[Desktop Entry] |
62 | -Version=1.0 |
63 | -Name=Firefox |
64 | -Exec=/bin/true |
65 | -Type=Application |
66 | -StartupNotify=true |
67 | -Icon=/usr/share/libertine/demo/icons/firefox.png |
68 | -Keywords=Libertine |
69 | -NotShowIn=Unity; |
70 | -X-Ubuntu-Touch=true |
71 | -X-Ubuntu-XMir-Enable=true |
72 | |
73 | === removed file 'data/demo/desktop_files/puritine_gedit_0.0.desktop.in' |
74 | --- data/demo/desktop_files/puritine_gedit_0.0.desktop.in 2015-09-18 14:35:55 +0000 |
75 | +++ data/demo/desktop_files/puritine_gedit_0.0.desktop.in 1970-01-01 00:00:00 +0000 |
76 | @@ -1,11 +0,0 @@ |
77 | -[Desktop Entry] |
78 | -Version=1.0 |
79 | -Name=Gedit |
80 | -Exec=/bin/true |
81 | -Type=Application |
82 | -StartupNotify=true |
83 | -Icon=/usr/share/libertine/demo/icons/accessories-text-editor.svg |
84 | -Keywords=Libertine |
85 | -NotShowIn=Unity; |
86 | -X-Ubuntu-Touch=true |
87 | -X-Ubuntu-XMir-Enable=true |
88 | |
89 | === removed file 'data/demo/desktop_files/puritine_gimp_0.0.desktop.in' |
90 | --- data/demo/desktop_files/puritine_gimp_0.0.desktop.in 2015-09-18 14:35:55 +0000 |
91 | +++ data/demo/desktop_files/puritine_gimp_0.0.desktop.in 1970-01-01 00:00:00 +0000 |
92 | @@ -1,11 +0,0 @@ |
93 | -[Desktop Entry] |
94 | -Version=1.0 |
95 | -Name=GIMP Image Editor |
96 | -Exec=/bin/true |
97 | -Type=Application |
98 | -StartupNotify=true |
99 | -Icon=/usr/share/libertine/demo/icons/gimp.png |
100 | -Keywords=Libertine |
101 | -NotShowIn=Unity; |
102 | -X-Ubuntu-Touch=true |
103 | -X-Ubuntu-XMir-Enable=true |
104 | |
105 | === removed file 'data/demo/desktop_files/puritine_libreoffice-startcenter_0.0.desktop.in' |
106 | --- data/demo/desktop_files/puritine_libreoffice-startcenter_0.0.desktop.in 2015-09-18 14:35:55 +0000 |
107 | +++ data/demo/desktop_files/puritine_libreoffice-startcenter_0.0.desktop.in 1970-01-01 00:00:00 +0000 |
108 | @@ -1,11 +0,0 @@ |
109 | -[Desktop Entry] |
110 | -Version=1.0 |
111 | -Name=LibreOffice |
112 | -Exec=/bin/true |
113 | -Type=Application |
114 | -StartupNotify=true |
115 | -Icon=/usr/share/libertine/demo/icons/libreoffice-startcenter.png |
116 | -Keywords=Libertine |
117 | -NotShowIn=Unity; |
118 | -X-Ubuntu-Touch=true |
119 | -X-Ubuntu-XMir-Enable=true |
120 | |
121 | === removed file 'data/demo/desktop_files/puritine_xchat-gnome_0.0.desktop.in' |
122 | --- data/demo/desktop_files/puritine_xchat-gnome_0.0.desktop.in 2015-09-18 14:35:55 +0000 |
123 | +++ data/demo/desktop_files/puritine_xchat-gnome_0.0.desktop.in 1970-01-01 00:00:00 +0000 |
124 | @@ -1,11 +0,0 @@ |
125 | -[Desktop Entry] |
126 | -Version=1.0 |
127 | -Name=XChat-GNOME |
128 | -Exec=/bin/true |
129 | -Type=Application |
130 | -StartupNotify=true |
131 | -Icon=/usr/share/libertine/demo/icons/xchat-gnome.png |
132 | -Keywords=Libertine |
133 | -NotShowIn=Unity; |
134 | -X-Ubuntu-Touch=true |
135 | -X-Ubuntu-XMir-Enable=true |
136 | |
137 | === removed directory 'data/demo/icons' |
138 | === removed file 'data/demo/icons/accessories-text-editor.svg' |
139 | --- data/demo/icons/accessories-text-editor.svg 2015-09-01 20:32:12 +0000 |
140 | +++ data/demo/icons/accessories-text-editor.svg 1970-01-01 00:00:00 +0000 |
141 | @@ -1,119 +0,0 @@ |
142 | -<?xml version="1.0" encoding="UTF-8" standalone="no"?> |
143 | -<!-- Created with Inkscape (http://www.inkscape.org/) --> |
144 | -<svg id="svg2820" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="48" width="48" version="1.0" xmlns:cc="http://creativecommons.org/ns#" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/"> |
145 | - <metadata id="metadata290"> |
146 | - <rdf:RDF> |
147 | - <cc:Work rdf:about=""> |
148 | - <dc:format>image/svg+xml</dc:format> |
149 | - <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/> |
150 | - </cc:Work> |
151 | - </rdf:RDF> |
152 | - </metadata> |
153 | - <defs id="defs2822"> |
154 | - <linearGradient id="linearGradient5060"> |
155 | - <stop id="stop5062" offset="0"/> |
156 | - <stop id="stop5064" style="stop-opacity:0" offset="1"/> |
157 | - </linearGradient> |
158 | - <linearGradient id="linearGradient3104"> |
159 | - <stop id="stop3106" style="stop-color:#a0a0a0" offset="0"/> |
160 | - <stop id="stop3108" style="stop-color:#c8c8c8" offset="1"/> |
161 | - </linearGradient> |
162 | - <linearGradient id="linearGradient2670" y2="26.03" gradientUnits="userSpaceOnUse" x2="9" gradientTransform="matrix(.63801 -.64114 .85963 .85535 -3.6613 16.731)" y1="29.057" x1="9"> |
163 | - <stop id="stop2607" style="stop-color:#ece5a5" offset="0"/> |
164 | - <stop id="stop2609" style="stop-color:#fcfbf2" offset="1"/> |
165 | - </linearGradient> |
166 | - <linearGradient id="linearGradient2673" y2="41.392" gradientUnits="userSpaceOnUse" x2="9.5221" gradientTransform="matrix(.56036 .024186 .024156 .55967 19.547 13.104)" y1="37.372" x1="5.5179"> |
167 | - <stop id="stop2613" style="stop-color:#dbce48" offset="0"/> |
168 | - <stop id="stop2615" style="stop-color:#c5b625" offset="1"/> |
169 | - </linearGradient> |
170 | - <linearGradient id="linearGradient2676" y2="30" gradientUnits="userSpaceOnUse" x2="30.038" gradientTransform="matrix(.63801 -.64114 .85963 .85535 -2.3288 15.392)" y1="24.99" x1="30.038"> |
171 | - <stop id="stop2599" style="stop-color:#b1b1b1" offset="0"/> |
172 | - <stop id="stop2601" style="stop-color:#fff" offset=".5"/> |
173 | - <stop id="stop2603" style="stop-color:#8f8f8f" offset="1"/> |
174 | - </linearGradient> |
175 | - <linearGradient id="linearGradient2679" y2="30" gradientUnits="userSpaceOnUse" x2="30.038" gradientTransform="matrix(.63801 -.64114 .85963 .85535 -2.1461 15.208)" y1="24.99" x1="30.038"> |
176 | - <stop id="stop2591" style="stop-color:#565656" offset="0"/> |
177 | - <stop id="stop2593" style="stop-color:#9a9a9a" offset=".5"/> |
178 | - <stop id="stop2595" style="stop-color:#545454" offset="1"/> |
179 | - </linearGradient> |
180 | - <linearGradient id="linearGradient2682" y2="30" gradientUnits="userSpaceOnUse" x2="30.038" gradientTransform="matrix(.63801 -.64114 .85963 .85535 -2.9668 16.033)" y1="24.99" x1="30.038"> |
181 | - <stop id="stop2583" style="stop-color:#b1b1b1" offset="0"/> |
182 | - <stop id="stop2585" style="stop-color:#fff" offset=".5"/> |
183 | - <stop id="stop2587" style="stop-color:#8f8f8f" offset="1"/> |
184 | - </linearGradient> |
185 | - <linearGradient id="linearGradient2685" y2="30" gradientUnits="userSpaceOnUse" x2="30.038" gradientTransform="matrix(.63801 -.64114 .85963 .85535 -2.7841 15.849)" y1="24.99" x1="30.038"> |
186 | - <stop id="stop2575" style="stop-color:#565656" offset="0"/> |
187 | - <stop id="stop2577" style="stop-color:#9a9a9a" offset=".5"/> |
188 | - <stop id="stop2579" style="stop-color:#545454" offset="1"/> |
189 | - </linearGradient> |
190 | - <linearGradient id="linearGradient2688" y2="30" gradientUnits="userSpaceOnUse" x2="30.038" gradientTransform="matrix(.63801 -.64114 .85963 .85535 -3.6017 16.671)" y1="24.99" x1="30.038"> |
191 | - <stop id="stop2567" style="stop-color:#b1b1b1" offset="0"/> |
192 | - <stop id="stop2569" style="stop-color:#fff" offset=".5"/> |
193 | - <stop id="stop2571" style="stop-color:#8f8f8f" offset="1"/> |
194 | - </linearGradient> |
195 | - <linearGradient id="linearGradient2691" y2="30" gradientUnits="userSpaceOnUse" x2="30.038" gradientTransform="matrix(.63801 -.64114 .85963 .85535 -3.419 16.487)" y1="24.99" x1="30.038"> |
196 | - <stop id="stop2559" style="stop-color:#565656" offset="0"/> |
197 | - <stop id="stop2561" style="stop-color:#9a9a9a" offset=".5"/> |
198 | - <stop id="stop2563" style="stop-color:#545454" offset="1"/> |
199 | - </linearGradient> |
200 | - <linearGradient id="linearGradient2697" y2="31.211" gradientUnits="userSpaceOnUse" x2="23.576" gradientTransform="matrix(.65657 -.65979 .73452 .73087 -1.013 19.863)" y1="25.357" x1="23.576"> |
201 | - <stop id="stop2541" style="stop-color:#181818" offset="0"/> |
202 | - <stop id="stop2543" style="stop-color:#dbdbdb" offset=".13483"/> |
203 | - <stop id="stop2545" style="stop-color:#a4a4a4" offset=".20224"/> |
204 | - <stop id="stop2547" style="stop-color:#fff" offset=".26966"/> |
205 | - <stop id="stop2549" style="stop-color:#8d8d8d" offset=".44650"/> |
206 | - <stop id="stop2551" style="stop-color:#959595" offset=".57114"/> |
207 | - <stop id="stop2553" style="stop-color:#cecece" offset=".72038"/> |
208 | - <stop id="stop2555" style="stop-color:#181818" offset="1"/> |
209 | - </linearGradient> |
210 | - <linearGradient id="linearGradient2973" y2="114.54" gradientUnits="userSpaceOnUse" x2="-60.908" gradientTransform="matrix(.45037 .00027173 -.00027421 .44630 46.808 -6.9909)" y1="13.668" x1="-60.97"> |
211 | - <stop id="stop3828" style="stop-color:#f4f4f4" offset="0"/> |
212 | - <stop id="stop3604" style="stop-color:#dbdbdb" offset="1"/> |
213 | - </linearGradient> |
214 | - <linearGradient id="linearGradient2975" y2="-1.0041" xlink:href="#linearGradient3104" gradientUnits="userSpaceOnUse" x2="11.536" gradientTransform="translate(5e-7 .047615)" y1="44.952" x1="11.536"/> |
215 | - <radialGradient id="radialGradient2978" xlink:href="#linearGradient5060" gradientUnits="userSpaceOnUse" cy="486.65" cx="605.71" gradientTransform="matrix(.022892 0 0 .012353 26.354 38.471)" r="117.14"/> |
216 | - <radialGradient id="radialGradient2981" xlink:href="#linearGradient5060" gradientUnits="userSpaceOnUse" cy="486.65" cx="605.71" gradientTransform="matrix(-.022892 0 0 .012353 21.646 38.471)" r="117.14"/> |
217 | - <linearGradient id="linearGradient2984" y2="609.51" gradientUnits="userSpaceOnUse" x2="302.86" gradientTransform="matrix(.066893 0 0 .012353 -.17722 38.471)" y1="366.65" x1="302.86"> |
218 | - <stop id="stop5050" style="stop-opacity:0" offset="0"/> |
219 | - <stop id="stop5056" offset=".5"/> |
220 | - <stop id="stop5052" style="stop-opacity:0" offset="1"/> |
221 | - </linearGradient> |
222 | - <linearGradient id="linearGradient3781" y2="3.0719" xlink:href="#linearGradient3104" gradientUnits="userSpaceOnUse" x2="22.004" y1="44.854" x1="22.004"/> |
223 | - </defs> |
224 | - <rect id="rect3706" style="opacity:.40206;fill:url(#linearGradient2984)" height="3" width="32.3" y="43" x="7.85"/> |
225 | - <path id="path3708" style="opacity:.40206;fill:url(#radialGradient2981)" d="m7.85 43v3c-1.1789 0.006-2.85-0.672-2.85-1.5s1.3156-1.5 2.85-1.5z"/> |
226 | - <path id="path3710" style="opacity:.40206;fill:url(#radialGradient2978)" d="m40.15 43v3c1.179 0.006 2.85-0.672 2.85-1.5s-1.316-1.5-2.85-1.5z"/> |
227 | - <path id="path2855" style="stroke-linejoin:round;stroke:url(#linearGradient2975);stroke-linecap:round;fill:url(#linearGradient2973)" d="m7.5 3.5c8.522 0.0051 24.478-0.0051 33 0 0.075 1.6058 0.924 38.198 0.999 41-11.666-0.007-23.333-0.014-34.999-0.021 0.0918-3.147 0.9082-39.567 1-40.979z"/> |
228 | - <path id="path5685" style="opacity:.59070;stroke-linejoin:round;fill-rule:evenodd;stroke:#f6abab;stroke-linecap:round;stroke-width:0.5;fill:#80b3ff" d="m12.688 4.2499l-0.438 39.5"/> |
229 | - <path id="path6656" style="opacity:.43721;stroke-linejoin:round;fill-rule:evenodd;stroke:#80b3ff;stroke-linecap:round;stroke-width:0.25;fill:#80b3ff" d="m40.057 9.875l-32.18-0.1845"/> |
230 | - <path id="path6658" style="opacity:.43721;stroke-linejoin:round;fill-rule:evenodd;stroke:#80b3ff;stroke-linecap:round;stroke-width:0.25;fill:#80b3ff" d="m40.131 11.875l-32.262-0.185"/> |
231 | - <path id="path6660" style="opacity:.43721;stroke-linejoin:round;fill-rule:evenodd;stroke:#80b3ff;stroke-linecap:round;stroke-width:0.25;fill:#80b3ff" d="m40.214 13.875l-32.428-0.185"/> |
232 | - <path id="path6662" style="opacity:.43721;stroke-linejoin:round;fill-rule:evenodd;stroke:#80b3ff;stroke-linecap:round;stroke-width:0.25;fill:#80b3ff" d="m40.297 15.875l-32.594-0.185"/> |
233 | - <path id="path6664" style="opacity:.43721;stroke-linejoin:round;fill-rule:evenodd;stroke:#80b3ff;stroke-linecap:round;stroke-width:0.25;fill:#80b3ff" d="m40.297 17.875l-32.594-0.185"/> |
234 | - <path id="path6666" style="opacity:.43721;stroke-linejoin:round;fill-rule:evenodd;stroke:#80b3ff;stroke-linecap:round;stroke-width:0.25;fill:#80b3ff" d="m40.379 19.875l-32.758-0.185"/> |
235 | - <path id="path7637" style="opacity:.43721;stroke-linejoin:round;stroke-width:0.25;fill-rule:evenodd;stroke:#80b3ff;stroke-linecap:round;fill:#80b3ff" d="m40.379 21.875l-32.758-0.185"/> |
236 | - <path id="path7639" style="opacity:.43721;stroke-linejoin:round;stroke-width:0.25;fill-rule:evenodd;stroke:#80b3ff;stroke-linecap:round;fill:#80b3ff" d="m40.462 23.875l-32.924-0.185"/> |
237 | - <path id="path7641" style="opacity:.43721;stroke-linejoin:round;stroke-width:0.25;fill-rule:evenodd;stroke:#80b3ff;stroke-linecap:round;fill:#80b3ff" d="m40.462 25.875l-32.924-0.185"/> |
238 | - <path id="path7645" style="opacity:.43721;stroke-linejoin:round;stroke-width:0.25;fill-rule:evenodd;stroke:#80b3ff;stroke-linecap:round;fill:#80b3ff" d="m40.627 27.875l-33.254-0.185"/> |
239 | - <path id="path7647" style="opacity:.43721;stroke-linejoin:round;stroke-width:0.25;fill-rule:evenodd;stroke:#80b3ff;stroke-linecap:round;fill:#80b3ff" d="m40.627 29.864l-33.254-0.184"/> |
240 | - <path id="path7649" style="opacity:.43721;stroke-linejoin:round;stroke-width:0.25;fill-rule:evenodd;stroke:#80b3ff;stroke-linecap:round;fill:#80b3ff" d="m40.875 31.875l-33.75-0.185"/> |
241 | - <path id="path7651" style="opacity:.43721;stroke-linejoin:round;stroke-width:0.25;fill-rule:evenodd;stroke:#80b3ff;stroke-linecap:round;fill:#80b3ff" d="m40.875 33.83l-33.75-0.184"/> |
242 | - <path id="path7653" style="opacity:.43721;stroke-linejoin:round;stroke-width:0.25;fill-rule:evenodd;stroke:#80b3ff;stroke-linecap:round;fill:#80b3ff" d="m40.875 35.814l-33.75-0.185"/> |
243 | - <path id="path7655" style="opacity:.43721;stroke-linejoin:round;stroke-width:0.25;fill-rule:evenodd;stroke:#80b3ff;stroke-linecap:round;fill:#80b3ff" d="m40.875 37.797l-33.75-0.185"/> |
244 | - <path id="path7657" style="opacity:.43721;stroke-linejoin:round;stroke-width:0.25;fill-rule:evenodd;stroke:#80b3ff;stroke-linecap:round;fill:#80b3ff" d="m40.875 39.78l-33.75-0.185"/> |
245 | - <path id="path7659" style="opacity:.43721;stroke-linejoin:round;stroke-width:0.25;fill-rule:evenodd;stroke:#80b3ff;stroke-linecap:round;fill:#80b3ff" d="m40.875 41.875l-33.75-0.185"/> |
246 | - <path id="path7671" style="opacity:.59070;stroke-linejoin:round;stroke:#b9d5ff;stroke-linecap:round;stroke-width:0.5;fill:none" d="m35.25 4.1673l1.05 39.5"/> |
247 | - <path id="path3715" style="stroke:url(#linearGradient3781);stroke-width:1px;fill:none" d="m12.999 11.546h2.348m0.335 0h2.181m0.351 0h1.945m0.32 0h0.838m0.336 0h1.878m0.369 0h4.931m0.335 0h3.757m0.336 0h1.14m-21.4 1.954h3.641m0.423 0h1.74m0.321 0h0.859m0.349 0h1.602m0.336 0h1.643m0.31 0h2.581m0.335 0h3.404m-17.544 1.98h3.081m0.324 0h5.075m0.311 0h2.461m0.316 0h2.302m0.33 0h1.961m0.316 0l3.085 0.02m-19.562 2h4.284m0.337 0h4.63m0.32 0h1.82m0.335 0h4.331m0.292 0h2.968m0.336 0h1.175m0.335 0h0.65m-21.813 2h1.599m0.492 0h5.921m-8.012 10h3.641m0.423 0h1.74m0.321 0h0.859m0.349 0h1.602m0.336 0h1.643m0.31 0h2.581m-13.805 3.98h3.081m0.324 0h5.075m0.311 0h2.461m8.697 0.061h5.027m-24.976-6.041h4.284m0.337 0h4.63m0.32 0h1.82m0.335 0h4.331m-16.057-4h2.348m0.335 0h2.181m0.351 0h1.945m0.32 0h0.838m0.336 0h1.878m0.369 0h4.931m0.335 0h3.757m-19.924 2h3.954m0.311 0h4.199m0.32 0h1.642m0.31 0h3.95m0.317 0h4.314m-19.317 10h3.695m0.397 0h1.629m0.381 0h0.813m0.259 0h1.604m0.213 0h8.492m0.399 0h2.267m0.305 0h0.572m-16.816 2h1.205m-5.415 0h3.857m1.866 0h2.805m0.297 0h4.116m0.32 0h2.793m0.281 0h0.576m0.315 0h3.546m0.363 0h1.856m-18.781 2h1.702m-5.912 0h3.857m2.423 0h2.393"/> |
248 | - <path id="path2422" style="opacity:.15;fill:#0c0c0c;fill-rule:evenodd" d="m38.469 23.944c-0.173-0.101-0.307-0.075-0.396-0.018l-11.796 7.511-2.171 1.387-0.067 0.028-2.57 5.792 6.37 0.192 0.053-0.036 2.185-1.379 11.793-7.576c0.354-0.227-0.206-1.731-1.257-3.381-0.788-1.237-1.624-2.214-2.144-2.52z"/> |
249 | - <path id="rect2383" style="stroke-linejoin:round;stroke:#0c0c0c;stroke-width:.5;fill:url(#linearGradient2697)" d="m24.934 31.028c0.446-0.334 1.697 0.294 2.847 1.438 1.147 1.141 1.751 2.362 1.424 2.812-0.001 0.002 0.029 0.026 0.027 0.027l16.01-16.088c0.407-0.409-0.225-1.7-1.411-2.88s-2.48-1.806-2.887-1.397l-16.01 16.088z"/> |
250 | - <path id="rect3175" style="opacity:.8;stroke-linejoin:round;stroke:#e28ccd;stroke-width:.5;fill:#ffb6ed" d="m38.99 16.903c0.446-0.334 1.697 0.293 2.847 1.438 1.147 1.141 1.752 2.362 1.425 2.812-0.002 0.002 0.028 0.025 0.026 0.027l1.954-1.963 0.04-0.04c0.001-0.002-0.028-0.025-0.027-0.027 0.327-0.45-0.277-1.672-1.424-2.813-1.15-1.144-2.401-1.772-2.847-1.437l-0.04 0.04-1.954 1.963z"/> |
251 | - <path id="path3208" style="opacity:.6;fill:#0c0c0c" d="m24.934 31.028c0.446-0.334 1.697 0.294 2.847 1.438 1.147 1.141 1.751 2.362 1.424 2.812-0.001 0.002 0.029 0.026 0.027 0.027l11.026-11.079 0.04-0.041c0.001-0.001-0.028-0.025-0.027-0.026 0.327-0.451-0.278-1.672-1.425-2.813-1.149-1.144-2.401-1.772-2.846-1.437l-0.04 0.04-11.026 11.079z"/> |
252 | - <path id="path3233" style="fill:url(#linearGradient2691)" d="m36.8 19.104c0.446-0.334 1.697 0.293 2.847 1.437 1.147 1.142 1.751 2.363 1.424 2.813-0.001 0.002 0.029 0.025 0.027 0.027l0.2-0.2c0.001-0.002-0.028-0.025-0.027-0.027 0.327-0.45-0.278-1.672-1.425-2.813-1.149-1.144-2.401-1.772-2.846-1.437l-0.2 0.2z"/> |
253 | - <path id="path3216" style="fill:url(#linearGradient2688)" d="m36.617 19.288c0.446-0.335 1.698 0.293 2.847 1.437 1.147 1.141 1.752 2.363 1.425 2.813-0.002 0.002 0.028 0.025 0.027 0.027l0.199-0.201c0.001-0.001-0.028-0.025-0.027-0.026 0.327-0.451-0.277-1.672-1.424-2.813-1.15-1.144-2.401-1.772-2.847-1.438l-0.2 0.201z"/> |
254 | - <path id="path3248" style="fill:url(#linearGradient2685)" d="m37.435 18.466c0.446-0.334 1.697 0.293 2.847 1.437 1.147 1.142 1.751 2.363 1.424 2.813-0.001 0.002 0.028 0.025 0.027 0.027l0.2-0.2c0.001-0.002-0.029-0.025-0.027-0.027 0.327-0.45-0.278-1.672-1.425-2.813-1.149-1.144-2.401-1.772-2.847-1.437l-0.199 0.2z"/> |
255 | - <path id="path3250" style="fill:url(#linearGradient2682)" d="m37.252 18.65c0.446-0.335 1.697 0.293 2.847 1.437 1.147 1.141 1.752 2.363 1.425 2.813-0.002 0.002 0.028 0.025 0.026 0.027l0.2-0.201c0.001-0.002-0.028-0.025-0.027-0.027 0.327-0.45-0.277-1.671-1.424-2.812-1.15-1.144-2.401-1.772-2.847-1.438l-0.2 0.201z"/> |
256 | - <path id="path3256" style="fill:url(#linearGradient2679)" d="m38.073 17.825c0.446-0.335 1.697 0.293 2.847 1.437 1.147 1.142 1.751 2.363 1.424 2.813-0.001 0.002 0.028 0.025 0.027 0.027l0.2-0.201c0.001-0.001-0.029-0.025-0.027-0.026 0.327-0.451-0.278-1.672-1.425-2.813-1.149-1.144-2.401-1.772-2.847-1.437l-0.199 0.2z"/> |
257 | - <path id="path3258" style="fill:url(#linearGradient2676)" d="m37.89 18.009c0.446-0.335 1.697 0.293 2.847 1.437 1.147 1.141 1.752 2.362 1.425 2.813-0.002 0.001 0.028 0.025 0.027 0.026l0.199-0.2c0.001-0.002-0.028-0.025-0.027-0.027 0.327-0.45-0.277-1.671-1.424-2.813-1.15-1.144-2.401-1.771-2.847-1.437l-0.2 0.201z"/> |
258 | - <path id="path3270" style="fill-rule:evenodd;stroke:url(#linearGradient2673);stroke-width:.5;fill:url(#linearGradient2670)" d="m21.866 38.31l7.284-2.97 0.062-0.063c0.327-0.45-0.285-1.671-1.432-2.813-1.15-1.144-2.4-1.768-2.846-1.433l-3.068 7.279z"/> |
259 | - <path id="path3281" style="fill-rule:evenodd;stroke:#0c0c0c;stroke-width:.5;fill:#0c0c0c" d="m22.697 36.339l-0.831 1.964 1.986-0.815c-0.159-0.191-0.306-0.384-0.497-0.575-0.22-0.219-0.437-0.396-0.658-0.574z"/> |
260 | -</svg> |
261 | |
262 | === removed file 'data/demo/icons/firefox.png' |
263 | Binary files data/demo/icons/firefox.png 2015-09-01 20:32:12 +0000 and data/demo/icons/firefox.png 1970-01-01 00:00:00 +0000 differ |
264 | === removed file 'data/demo/icons/gimp.png' |
265 | Binary files data/demo/icons/gimp.png 2015-09-01 20:32:12 +0000 and data/demo/icons/gimp.png 1970-01-01 00:00:00 +0000 differ |
266 | === removed file 'data/demo/icons/libreoffice-startcenter.png' |
267 | Binary files data/demo/icons/libreoffice-startcenter.png 2015-09-01 20:32:12 +0000 and data/demo/icons/libreoffice-startcenter.png 1970-01-01 00:00:00 +0000 differ |
268 | === removed file 'data/demo/icons/xchat-gnome.png' |
269 | Binary files data/demo/icons/xchat-gnome.png 2015-09-01 20:32:12 +0000 and data/demo/icons/xchat-gnome.png 1970-01-01 00:00:00 +0000 differ |
270 | === removed file 'data/puritine-click.conf' |
271 | --- data/puritine-click.conf 2016-04-25 15:45:05 +0000 |
272 | +++ data/puritine-click.conf 1970-01-01 00:00:00 +0000 |
273 | @@ -1,39 +0,0 @@ |
274 | -description "Puritine Click chroot linking" |
275 | - |
276 | -start on starting unity8 |
277 | - |
278 | -script |
279 | -PACKAGE_PATH=`click pkgdir com.ubuntu.puritine` |
280 | -CONTAINER_NAME=puritine |
281 | -CHROOT_PATH=$PACKAGE_PATH/libertine-data/libertine-container/$CONTAINER_NAME |
282 | - |
283 | -if [ -x $CHROOT_PATH/rootfs ] ; then |
284 | - # Link the chroot |
285 | - if [ ! -L $HOME/.cache/libertine-container/$CONTAINER_NAME/rootfs ] ; then |
286 | - mkdir -p $HOME/.cache/libertine-container/$CONTAINER_NAME/ |
287 | - ln -s $CHROOT_PATH/rootfs $HOME/.cache/libertine-container/$CONTAINER_NAME/rootfs |
288 | - fi |
289 | - |
290 | - # Copy or merge the container config files |
291 | - if [ ! -e $HOME/.local/share/libertine/ContainersConfig.json ] ; then |
292 | - mkdir -p $HOME/.local/share/libertine/ |
293 | - cp $PACKAGE_PATH/libertine-config/libertine/ContainersConfig.json $HOME/.local/share/libertine/ContainersConfig.json |
294 | - elif [ -L $HOME/.local/share/libertine/ContainersConfig.json ] ; then |
295 | - rm $HOME/.local/share/libertine/ContainersConfig.json |
296 | - cp $PACKAGE_PATH/libertine-config/libertine/ContainersConfig.json $HOME/.local/share/libertine/ContainersConfig.json |
297 | - else |
298 | - libertine-container-manager merge-configs -f $PACKAGE_PATH/libertine-config/libertine/ContainersConfig.json |
299 | - fi |
300 | - |
301 | - # Create and copy the user-data dir from the click package |
302 | - if [ ! -d $HOME/.local/share/libertine-container/user-data/$CONTAINER_NAME ] ; then |
303 | - cp -dR $PACKAGE_PATH/libertine-config/libertine-container/ $HOME/.local/share/libertine-container/ |
304 | - fi |
305 | -else |
306 | - rm -rf $HOME/.cache/libertine-container/$CONTAINER_NAME |
307 | - if [ $(libertine-container-manager list | grep -v ${CONTAINER_NAME} | wc -l) -eq 0 ]; then |
308 | - rm -rf $HOME/.local/share/libertine |
309 | - fi |
310 | - rm -rf $HOME/.local/share/libertine-container/user-data/$CONTAINER_NAME/.config/ |
311 | -fi |
312 | -end script |
313 | |
314 | === modified file 'debian/changelog' |
315 | --- debian/changelog 2016-05-19 17:53:58 +0000 |
316 | +++ debian/changelog 2016-06-07 12:41:22 +0000 |
317 | @@ -1,3 +1,26 @@ |
318 | +libertine (1.1-0ubuntu1) UNRELEASED; urgency=medium |
319 | + |
320 | + [ Brandon Schaefer ] |
321 | + * Set up a new proxy socket for the maliit server. |
322 | + |
323 | + [ Chris Townsend ] |
324 | + * Remove the demo icons and desktop files and deprecate libertine-demo. |
325 | + (LP: #1575315) |
326 | + * Explicitly create .config/dconf and the common XDG data directories in the |
327 | + user container's mapped home directory in order to make sure the file |
328 | + permissions are correct. (LP: #1570961) (LP: #1581131) |
329 | + * Bump version to 1.1. |
330 | + |
331 | + [ Larry Price ] |
332 | + * Make it possible for the user to interact with debconf prompts from apt-get. |
333 | + (LP: #1518814) |
334 | + * Refactor ContainerManagerWorker to use the async QProcess API. |
335 | + * Reap children processes when closing GUI and attempt to recover as necessary. |
336 | + * Implement bash auto-completion for libertine-container-manager. |
337 | + (LP: #1580610) |
338 | + |
339 | + -- Chris Townsend <christopher.townsend@canonical.com> Mon, 06 Jun 2016 16:50:28 -0400 |
340 | + |
341 | libertine (1.0.4+16.10.20160519-0ubuntu1) yakkety; urgency=medium |
342 | |
343 | [ Chris Townsend ] |
344 | |
345 | === modified file 'debian/control' |
346 | --- debian/control 2016-04-28 22:06:04 +0000 |
347 | +++ debian/control 2016-06-07 12:41:22 +0000 |
348 | @@ -22,6 +22,7 @@ |
349 | python3-psutil, |
350 | python3-testtools, |
351 | python3-xdg, |
352 | + python3-dbus, |
353 | qtdeclarative5-dev |
354 | Standards-Version: 3.9.6 |
355 | Homepage: https://launchpad.net/libertine |
356 | @@ -32,6 +33,7 @@ |
357 | python3-libertine-lxc, |
358 | qml-module-qtquick2, |
359 | qtdeclarative5-ubuntu-ui-toolkit-plugin, |
360 | + python3-dbus, |
361 | ${misc:Depends}, |
362 | ${shlibs:Depends} |
363 | Description: sandbox for running deb-packaged X11 apps on Ubuntu Personal |
364 | @@ -48,6 +50,8 @@ |
365 | ${misc:Depends}, |
366 | ${python3:Depends}, |
367 | ${shlibs:Depends} |
368 | +Breaks: libertine-demo |
369 | +Replaces: libertine-demo |
370 | Description: CLI tools for running deb-packaged X11 apps on Ubuntu Personal |
371 | Command-line tools that can be used for creating, manipulating, and using |
372 | the Ubuntu Personal sandbox for legacy Deb-packaged X11 applicatons. |
373 | @@ -131,14 +135,4 @@ |
374 | This package provides the chroot-based container back end module for the |
375 | Libertine sandbox. This container back end module is intended only for |
376 | curated containers distributed for devices that do not support unprivileged |
377 | - LXC contaiers. |
378 | - |
379 | -Package: libertine-demo |
380 | -Architecture: any |
381 | -Multi-Arch: allowed |
382 | -Depends: libertine-tools, |
383 | - python3-libertine-chroot, |
384 | - ${misc:Depends} |
385 | -Description: Adds desktop files and icon for Unity 8 desktop support |
386 | - Add desktop files and icons for the targeted applications needed for legacy |
387 | - X application support on Unity 8. |
388 | + LXC containers. |
389 | |
390 | === removed file 'debian/libertine-demo.install' |
391 | --- debian/libertine-demo.install 2015-11-06 21:28:21 +0000 |
392 | +++ debian/libertine-demo.install 1970-01-01 00:00:00 +0000 |
393 | @@ -1,4 +0,0 @@ |
394 | -data/demo/icons/* usr/share/libertine/demo/icons/ |
395 | -usr/share/applications/demo/* usr/share/applications/ |
396 | -usr/share/upstart/sessions/puritine-click.conf |
397 | -usr/share/click/frameworks/puritine-15.04.1.framework |
398 | |
399 | === removed file 'debian/libertine-demo.lintian-overrides' |
400 | --- debian/libertine-demo.lintian-overrides 2015-09-02 12:55:00 +0000 |
401 | +++ debian/libertine-demo.lintian-overrides 1970-01-01 00:00:00 +0000 |
402 | @@ -1,5 +0,0 @@ |
403 | -libertine-demo: desktop-command-not-in-package usr/share/applications/trusty_firefox_0.0.desktop bin/true |
404 | -libertine-demo: desktop-command-not-in-package usr/share/applications/trusty_gedit_0.0.desktop bin/true |
405 | -libertine-demo: desktop-command-not-in-package usr/share/applications/trusty_gimp_0.0.desktop bin/true |
406 | -libertine-demo: desktop-command-not-in-package usr/share/applications/trusty_libreoffice-startcenter_0.0.desktop bin/true |
407 | -libertine-demo: desktop-command-not-in-package usr/share/applications/trusty_xchat-gnome_0.0.desktop bin/true |
408 | |
409 | === modified file 'debian/libertine-tools.install' |
410 | --- debian/libertine-tools.install 2016-05-02 20:45:21 +0000 |
411 | +++ debian/libertine-tools.install 2016-06-07 12:41:22 +0000 |
412 | @@ -3,8 +3,10 @@ |
413 | usr/bin/libertine-container-manager |
414 | usr/bin/libertine-lxc-manager |
415 | usr/bin/libertine-xmir |
416 | +etc/bash_completion.d/libertine-container-manager |
417 | usr/lib/*/libertine/update-puritine-containers |
418 | usr/share/man |
419 | usr/share/libertine/libertine-lxc.conf |
420 | usr/share/upstart/sessions/libertine-lxc-manager.conf |
421 | usr/share/upstart/sessions/libertine-xmir.conf |
422 | +usr/share/click/frameworks/puritine-15.04.1.framework |
423 | |
424 | === modified file 'libertine/ContainerManager.cpp' |
425 | --- libertine/ContainerManager.cpp 2016-05-11 17:26:27 +0000 |
426 | +++ libertine/ContainerManager.cpp 2016-06-07 12:41:22 +0000 |
427 | @@ -18,7 +18,6 @@ |
428 | */ |
429 | #include "libertine/ContainerManager.h" |
430 | |
431 | -#include <QtCore/QProcess> |
432 | |
433 | namespace |
434 | { |
435 | @@ -27,453 +26,245 @@ |
436 | static const QString PACKAGE_REMOVAL_FAILED = QObject::tr("Removal of package %1 failed"); |
437 | static const QString PACKAGE_SEARCH_FAILED = QObject::tr("Searching for query %1 failed"); |
438 | static const QString CONTAINER_UPDATE_FAILED = QObject::tr("Updating container %1 failed"); |
439 | +static const QString CONTAINER_CREATE_FAILED = QObject::tr("Creating container %1 failed"); |
440 | +static const QString CONTAINER_DESTROY_FAILED = QObject::tr("Destroying container %1 failed"); |
441 | static const QString RUN_COMMAND_FAILED = QObject::tr("Running command %1 failed"); |
442 | static const QString CONTAINER_CONFIGURE_FAILED = QObject::tr("Attempt to configure container %1 failed"); |
443 | +constexpr auto libertine_container_manager_tool = "libertine-container-manager"; |
444 | + |
445 | |
446 | static const QString readAllStdOutOrStdErr(QProcess& proc) |
447 | { |
448 | auto out = proc.readAllStandardOutput(); |
449 | return out.isEmpty() ? proc.readAllStandardError() : out; |
450 | } |
451 | -} |
452 | -const QString ContainerManagerWorker::libertine_container_manager_tool = "libertine-container-manager"; |
453 | + |
454 | + |
455 | +static void pidKiller(const QString& pid, bool shouldKill = true) |
456 | +{ |
457 | + QProcess list_child_pids; |
458 | + list_child_pids.start("pgrep", QStringList{"-P", pid}); |
459 | + list_child_pids.waitForFinished(); |
460 | + auto pids = QString::fromUtf8(list_child_pids.readAllStandardOutput()).split('\n', QString::SkipEmptyParts); |
461 | + for (const auto& child: pids) |
462 | + { |
463 | + pidKiller(child); |
464 | + } |
465 | + if (shouldKill) |
466 | + { |
467 | + QProcess::execute("kill " + pid); |
468 | + } |
469 | +} |
470 | +} |
471 | |
472 | |
473 | ContainerManagerWorker:: |
474 | ContainerManagerWorker() |
475 | -{ } |
476 | - |
477 | - |
478 | -ContainerManagerWorker:: |
479 | -ContainerManagerWorker(ContainerAction container_action, |
480 | - QString const& container_id, |
481 | - QString const& container_type) |
482 | -: container_action_(container_action) |
483 | -, container_id_(container_id) |
484 | -, container_type_(container_type) |
485 | -{ } |
486 | - |
487 | - |
488 | -ContainerManagerWorker:: |
489 | -ContainerManagerWorker(ContainerAction container_action, |
490 | - QString const& container_id, |
491 | - QString const& container_type, |
492 | - QString const& data) |
493 | -: container_action_(container_action) |
494 | -, container_id_(container_id) |
495 | -, container_type_(container_type) |
496 | -, data_(data) |
497 | -{ } |
498 | - |
499 | - |
500 | -ContainerManagerWorker:: |
501 | -ContainerManagerWorker(ContainerAction container_action, |
502 | - QString const& container_id, |
503 | - QString const& container_type, |
504 | - QStringList data_list) |
505 | -: container_action_(container_action) |
506 | -, container_id_(container_id) |
507 | -, container_type_(container_type) |
508 | -, data_list_(data_list) |
509 | -{ } |
510 | +{ |
511 | + connect(&process_, static_cast<void(QProcess::*)(int, QProcess::ExitStatus)>(&QProcess::finished), this, &QObject::deleteLater); |
512 | +} |
513 | |
514 | |
515 | ContainerManagerWorker:: |
516 | ~ContainerManagerWorker() |
517 | -{ } |
518 | - |
519 | - |
520 | -ContainerManagerWorker::ContainerAction ContainerManagerWorker:: |
521 | -container_action() const |
522 | -{ return container_action_; } |
523 | - |
524 | - |
525 | -void ContainerManagerWorker:: |
526 | -container_action(ContainerAction container_action) |
527 | -{ |
528 | - container_action_ = container_action; |
529 | -} |
530 | - |
531 | - |
532 | -QString const& ContainerManagerWorker:: |
533 | -container_id() const |
534 | -{ return container_id_; } |
535 | - |
536 | - |
537 | -void ContainerManagerWorker:: |
538 | -container_id(QString const& container_id) |
539 | -{ |
540 | - container_id_ = container_id; |
541 | -} |
542 | - |
543 | - |
544 | -QString const& ContainerManagerWorker:: |
545 | -container_type() const |
546 | -{ return container_type_; } |
547 | - |
548 | - |
549 | -void ContainerManagerWorker:: |
550 | -container_type(QString const& container_type) |
551 | -{ |
552 | - container_type_ = container_type; |
553 | -} |
554 | - |
555 | - |
556 | -QString const& ContainerManagerWorker:: |
557 | -container_distro() const |
558 | -{ return container_distro_; } |
559 | - |
560 | - |
561 | -void ContainerManagerWorker:: |
562 | -container_distro(QString const& container_distro) |
563 | -{ |
564 | - if (container_distro != container_distro_) |
565 | - { |
566 | - container_distro_ = container_distro; |
567 | - } |
568 | -} |
569 | - |
570 | - |
571 | -QString const& ContainerManagerWorker:: |
572 | -container_name() const |
573 | -{ return container_name_; } |
574 | - |
575 | - |
576 | -void ContainerManagerWorker:: |
577 | -container_name(QString const& container_name) |
578 | -{ |
579 | - if (container_name != container_name_) |
580 | - { |
581 | - container_name_ = container_name; |
582 | - } |
583 | -} |
584 | - |
585 | - |
586 | -bool ContainerManagerWorker:: |
587 | -container_multiarch() |
588 | -{ return container_multiarch_; } |
589 | - |
590 | - |
591 | -void ContainerManagerWorker:: |
592 | -container_multiarch(bool container_multiarch) |
593 | -{ |
594 | - if (container_multiarch != container_multiarch_) |
595 | - { |
596 | - container_multiarch_ = container_multiarch; |
597 | - } |
598 | -} |
599 | - |
600 | - |
601 | -QString const& ContainerManagerWorker:: |
602 | -data() const |
603 | -{ return data_; } |
604 | - |
605 | - |
606 | -void ContainerManagerWorker:: |
607 | -data(QString const& data) |
608 | -{ |
609 | - data_ = data; |
610 | -} |
611 | - |
612 | - |
613 | -QStringList ContainerManagerWorker:: |
614 | -data_list() |
615 | -{ return data_list_; } |
616 | - |
617 | - |
618 | -void ContainerManagerWorker:: |
619 | -data_list(QStringList data_list) |
620 | -{ |
621 | - data_list_ = data_list; |
622 | -} |
623 | - |
624 | - |
625 | -void ContainerManagerWorker:: |
626 | -run() |
627 | -{ |
628 | - switch(container_action_) |
629 | - { |
630 | - case ContainerAction::Create: |
631 | - createContainer(data_); |
632 | - break; |
633 | - |
634 | - case ContainerAction::Destroy: |
635 | - destroyContainer(); |
636 | - break; |
637 | - |
638 | - case ContainerAction::Install: |
639 | - installPackage(data_); |
640 | - break; |
641 | - |
642 | - case ContainerAction::Remove: |
643 | - removePackage(data_); |
644 | - break; |
645 | - |
646 | - case ContainerAction::Search: |
647 | - searchPackageCache(data_); |
648 | - break; |
649 | - |
650 | - case ContainerAction::Update: |
651 | - updateContainer(); |
652 | - break; |
653 | - |
654 | - case ContainerAction::Exec: |
655 | - runCommand(data_); |
656 | - break; |
657 | - |
658 | - case ContainerAction::Configure: |
659 | - configureContainer(data_list_); |
660 | - break; |
661 | - |
662 | - default: |
663 | - break; |
664 | - } |
665 | -} |
666 | - |
667 | - |
668 | -void ContainerManagerWorker:: |
669 | -createContainer(QString const& password) |
670 | -{ |
671 | - QProcess libertine_cli_tool; |
672 | - QString exec_line = libertine_container_manager_tool; |
673 | - QStringList args; |
674 | - |
675 | - args << "create" << "-i" << container_id_ << "-d" << container_distro_ << "-n" << container_name_; |
676 | - |
677 | - if (container_multiarch_) |
678 | +{ |
679 | + if (process_.state() == QProcess::Running) |
680 | + { |
681 | + pidKiller(QString::number(process_.pid()), false); |
682 | + process_.close(); |
683 | + } |
684 | +} |
685 | + |
686 | + |
687 | +void ContainerManagerWorker:: |
688 | +createContainer(const QString& id, const QString& name, const QString& distro, bool multiarch, const QString& password) |
689 | +{ |
690 | + connect(&process_, static_cast<void(QProcess::*)(int, QProcess::ExitStatus)>(&QProcess::finished), |
691 | + [=](int exitCode, QProcess::ExitStatus){ |
692 | + if (exitCode != 0) |
693 | + { |
694 | + emit error(CONTAINER_CREATE_FAILED.arg(id), process_.readAllStandardError()); |
695 | + } |
696 | + }); |
697 | + connect(&process_, &QProcess::started, [=]() { |
698 | + process_.write(password.toUtf8()); |
699 | + process_.closeWriteChannel(); |
700 | + }); |
701 | + |
702 | + QStringList args{"create", "-i", id, "-d", distro, "-n", name}; |
703 | + if (multiarch) |
704 | { |
705 | args << "-m"; |
706 | } |
707 | - |
708 | - libertine_cli_tool.start(exec_line, args); |
709 | - |
710 | - if (!libertine_cli_tool.waitForStarted()) |
711 | - { |
712 | - emit error(FAILED_TO_START.arg(libertine_container_manager_tool), libertine_cli_tool.readAll()); |
713 | - quit(); |
714 | - return; |
715 | - } |
716 | - |
717 | - libertine_cli_tool.write(password.toStdString().c_str()); |
718 | - libertine_cli_tool.closeWriteChannel(); |
719 | - |
720 | - libertine_cli_tool.waitForFinished(-1); |
721 | - |
722 | - quit(); |
723 | -} |
724 | - |
725 | - |
726 | -void ContainerManagerWorker:: |
727 | -destroyContainer() |
728 | -{ |
729 | - QProcess libertine_cli_tool; |
730 | - QString exec_line = libertine_container_manager_tool; |
731 | - QStringList args; |
732 | - |
733 | - args << "destroy" << "-i" << container_id_; |
734 | - libertine_cli_tool.start(exec_line, args); |
735 | - |
736 | - if (!libertine_cli_tool.waitForStarted()) |
737 | - { |
738 | - emit error(FAILED_TO_START.arg(libertine_container_manager_tool), libertine_cli_tool.readAll()); |
739 | - quit(); |
740 | - return; |
741 | - } |
742 | - |
743 | - libertine_cli_tool.waitForFinished(-1); |
744 | - |
745 | - emit finishedDestroy(container_id_); |
746 | - quit(); |
747 | -} |
748 | - |
749 | - |
750 | -void ContainerManagerWorker:: |
751 | -installPackage(QString const& package_name) |
752 | -{ |
753 | - QProcess libertine_cli_tool; |
754 | - QString exec_line = libertine_container_manager_tool; |
755 | - QStringList args; |
756 | - |
757 | - args << "install-package" << "-i" << container_id_ << "-p" << package_name; |
758 | - |
759 | - libertine_cli_tool.start(exec_line, args); |
760 | - |
761 | - if (!libertine_cli_tool.waitForStarted()) |
762 | - { |
763 | - emit error(FAILED_TO_START.arg(libertine_container_manager_tool), libertine_cli_tool.readAll()); |
764 | - quit(); |
765 | - return; |
766 | - } |
767 | - libertine_cli_tool.waitForFinished(-1); |
768 | - if (libertine_cli_tool.exitCode() != 0) |
769 | - { |
770 | - emit error(PACKAGE_INSTALLATION_FAILED.arg(package_name), libertine_cli_tool.readAllStandardError()); |
771 | - } |
772 | - quit(); |
773 | -} |
774 | - |
775 | - |
776 | -void ContainerManagerWorker:: |
777 | -removePackage(QString const& package_name) |
778 | -{ |
779 | - QProcess libertine_cli_tool; |
780 | - QString exec_line = libertine_container_manager_tool; |
781 | - QStringList args; |
782 | - |
783 | - args << "remove-package" << "-i" << container_id_ << "-p" << package_name; |
784 | - libertine_cli_tool.start(exec_line, args); |
785 | - |
786 | - if (!libertine_cli_tool.waitForStarted()) |
787 | - { |
788 | - emit error(FAILED_TO_START.arg(libertine_container_manager_tool), libertine_cli_tool.readAllStandardError()); |
789 | - quit(); |
790 | - return; |
791 | - } |
792 | - |
793 | - libertine_cli_tool.waitForFinished(-1); |
794 | - if (libertine_cli_tool.exitCode() != 0) |
795 | - { |
796 | - emit error(PACKAGE_REMOVAL_FAILED.arg(package_name), readAllStdOutOrStdErr(libertine_cli_tool)); |
797 | - quit(); |
798 | - return; |
799 | - } |
800 | - quit(); |
801 | -} |
802 | - |
803 | - |
804 | -void ContainerManagerWorker:: |
805 | -searchPackageCache(QString const& search_string) |
806 | -{ |
807 | - QProcess libertine_cli_tool; |
808 | - QString exec_line = libertine_container_manager_tool; |
809 | - QStringList args; |
810 | - QByteArray search_output; |
811 | - QList<QString> packageList; |
812 | - |
813 | - args << "search-cache" << "-i" << container_id_ << "-s" << search_string; |
814 | - libertine_cli_tool.start(exec_line, args); |
815 | - |
816 | - if (!libertine_cli_tool.waitForStarted()) |
817 | - { |
818 | - emit error(FAILED_TO_START.arg(libertine_container_manager_tool), libertine_cli_tool.readAll()); |
819 | - quit(); |
820 | - return; |
821 | - } |
822 | - |
823 | - libertine_cli_tool.waitForFinished(-1); |
824 | - if (libertine_cli_tool.exitCode() != 0) |
825 | - { |
826 | - QString err(libertine_cli_tool.readAllStandardError()); |
827 | - if (!err.isEmpty()) |
828 | - { |
829 | - emit error(PACKAGE_SEARCH_FAILED.arg(search_string), err); |
830 | - quit(); |
831 | - return; |
832 | - } |
833 | - // if there is no error message, there probably were no packages found |
834 | - // continue to return an empty list |
835 | - } |
836 | - else |
837 | - { |
838 | - search_output = libertine_cli_tool.readAllStandardOutput(); |
839 | - QList<QByteArray> packages = search_output.split('\n'); |
840 | - |
841 | - for (const auto& package: packages) |
842 | - { |
843 | - packageList.append(QString(package)); |
844 | - } |
845 | - } |
846 | - |
847 | - emit finishedSearch(packageList); |
848 | - quit(); |
849 | -} |
850 | - |
851 | - |
852 | -void ContainerManagerWorker:: |
853 | -updateContainer() |
854 | -{ |
855 | - QProcess libertine_cli_tool; |
856 | - QString exec_line = libertine_container_manager_tool; |
857 | - QStringList args; |
858 | - |
859 | - args << "update" << "-i" << container_id_; |
860 | - |
861 | - libertine_cli_tool.start(exec_line, args); |
862 | - |
863 | - if (!libertine_cli_tool.waitForStarted()) |
864 | - { |
865 | - emit error(FAILED_TO_START.arg(libertine_container_manager_tool), libertine_cli_tool.readAll()); |
866 | - quit(); |
867 | - return; |
868 | - } |
869 | - |
870 | - libertine_cli_tool.waitForFinished(-1); |
871 | - if (libertine_cli_tool.exitCode() != 0) |
872 | - { |
873 | - emit error(CONTAINER_UPDATE_FAILED.arg(container_name_), readAllStdOutOrStdErr(libertine_cli_tool)); |
874 | - quit(); |
875 | - return; |
876 | - } |
877 | - |
878 | - quit(); |
879 | -} |
880 | - |
881 | - |
882 | -void ContainerManagerWorker:: |
883 | -runCommand(QString const& command_line) |
884 | -{ |
885 | - QProcess libertine_cli_tool; |
886 | - QString exec_line = libertine_container_manager_tool, command_output, error_msg; |
887 | - QStringList args; |
888 | - |
889 | - args << "exec" << "-i" << container_id_ << "-c" << command_line; |
890 | - |
891 | - libertine_cli_tool.start(exec_line, args); |
892 | - |
893 | - if (!libertine_cli_tool.waitForStarted()) |
894 | - { |
895 | - emit error(FAILED_TO_START.arg(libertine_container_manager_tool), libertine_cli_tool.readAll()); |
896 | - quit(); |
897 | - return; |
898 | - } |
899 | - libertine_cli_tool.waitForFinished(-1); |
900 | - if (libertine_cli_tool.exitCode() != 0) |
901 | - { |
902 | - emit error(RUN_COMMAND_FAILED.arg(command_line), readAllStdOutOrStdErr(libertine_cli_tool)); |
903 | - quit(); |
904 | - return; |
905 | - } |
906 | - |
907 | - emit finishedCommand(libertine_cli_tool.readAllStandardOutput()); |
908 | - quit(); |
909 | -} |
910 | - |
911 | - |
912 | -void ContainerManagerWorker:: |
913 | -configureContainer(QStringList configure_command) |
914 | -{ |
915 | - QProcess libertine_cli_tool; |
916 | - QString exec_line = libertine_container_manager_tool; |
917 | - QStringList args; |
918 | - |
919 | - args << "configure" << "-i" << container_id_ << configure_command.at(0) << configure_command.mid(1); |
920 | - |
921 | - libertine_cli_tool.start(exec_line, args); |
922 | - |
923 | - if (!libertine_cli_tool.waitForStarted()) |
924 | - { |
925 | - emit error(FAILED_TO_START.arg(libertine_container_manager_tool), libertine_cli_tool.readAll()); |
926 | - quit(); |
927 | - return; |
928 | - } |
929 | - |
930 | - libertine_cli_tool.waitForFinished(-1); |
931 | - |
932 | - if (libertine_cli_tool.exitCode() != 0) |
933 | - { |
934 | - error(CONTAINER_CONFIGURE_FAILED.arg(container_name_), readAllStdOutOrStdErr(libertine_cli_tool)); |
935 | - } |
936 | - |
937 | - emit finishedConfigure(); |
938 | - quit(); |
939 | + process_.start(libertine_container_manager_tool, args); |
940 | +} |
941 | + |
942 | + |
943 | +void ContainerManagerWorker:: |
944 | +destroyContainer(const QString& id) |
945 | +{ |
946 | + connect(&process_, static_cast<void(QProcess::*)(int, QProcess::ExitStatus)>(&QProcess::finished), |
947 | + [=](int exitCode, QProcess::ExitStatus){ |
948 | + if (exitCode != 0) |
949 | + { |
950 | + emit error(CONTAINER_DESTROY_FAILED.arg(id), process_.readAllStandardError()); |
951 | + } |
952 | + emit finishedDestroy(id); |
953 | + }); |
954 | + |
955 | + process_.start(libertine_container_manager_tool, QStringList{"destroy", "-i", id}); |
956 | +} |
957 | + |
958 | + |
959 | +void ContainerManagerWorker:: |
960 | +packageOperationInteraction(const QString& input) |
961 | +{ |
962 | + if (process_.state() == QProcess::Running) |
963 | + { |
964 | + process_.write(input.toUtf8() + "\n"); |
965 | + } |
966 | +} |
967 | + |
968 | + |
969 | +void ContainerManagerWorker:: |
970 | +installPackage(const QString& container_id, const QString& package_name) |
971 | +{ |
972 | + connect(&process_, &QProcess::readyRead, [=](){ |
973 | + auto output = process_.readAllStandardOutput(); |
974 | + if (!output.isEmpty()) |
975 | + { |
976 | + emit updatePackageOperationDetails(container_id, package_name, output); |
977 | + process_output_ += output; |
978 | + } |
979 | + }); |
980 | + connect(&process_, static_cast<void(QProcess::*)(int, QProcess::ExitStatus)>(&QProcess::finished), |
981 | + [=](int exitCode, QProcess::ExitStatus){ |
982 | + if (exitCode != 0) |
983 | + { |
984 | + auto stderr = process_.readAllStandardError(); |
985 | + emit error(PACKAGE_INSTALLATION_FAILED.arg(package_name), stderr.isEmpty() ? process_output_ : stderr); |
986 | + } |
987 | + emit packageOperationFinished(container_id, package_name); |
988 | + }); |
989 | + |
990 | + process_.start(libertine_container_manager_tool, QStringList{"install-package", "-i", container_id, "-p", package_name, "-r"}); |
991 | +} |
992 | + |
993 | + |
994 | +void ContainerManagerWorker:: |
995 | +removePackage(const QString& container_id, const QString& package_name) |
996 | +{ |
997 | + connect(&process_, &QProcess::readyRead, [=](){ |
998 | + auto output = process_.readAllStandardOutput(); |
999 | + if (!output.isEmpty()) |
1000 | + { |
1001 | + emit updatePackageOperationDetails(container_id, package_name, output); |
1002 | + process_output_ += output; |
1003 | + } |
1004 | + }); |
1005 | + connect(&process_, static_cast<void(QProcess::*)(int, QProcess::ExitStatus)>(&QProcess::finished), |
1006 | + [=](int exitCode, QProcess::ExitStatus){ |
1007 | + if (exitCode != 0) |
1008 | + { |
1009 | + emit error(PACKAGE_INSTALLATION_FAILED.arg(package_name), process_output_.isEmpty() ? process_.readAllStandardError() : process_output_); |
1010 | + } |
1011 | + }); |
1012 | + |
1013 | + process_.start(libertine_container_manager_tool, QStringList{"remove-package", "-i", container_id, "-p", package_name, "-r"}); |
1014 | +} |
1015 | + |
1016 | + |
1017 | +void ContainerManagerWorker:: |
1018 | +searchPackageCache(const QString& container_id, const QString& search_string) |
1019 | +{ |
1020 | + connect(&process_, static_cast<void(QProcess::*)(int, QProcess::ExitStatus)>(&QProcess::finished), |
1021 | + [=](int exitCode, QProcess::ExitStatus){ |
1022 | + QList<QString> packageList; |
1023 | + if (exitCode != 0) |
1024 | + { |
1025 | + QString err(process_.readAllStandardError()); |
1026 | + if (!err.isEmpty()) |
1027 | + { |
1028 | + emit error(PACKAGE_SEARCH_FAILED.arg(search_string), err); |
1029 | + } |
1030 | + // if there is no error message, there probably were no packages found |
1031 | + // continue to return an empty list |
1032 | + } |
1033 | + else |
1034 | + { |
1035 | + auto search_output = process_.readAllStandardOutput(); |
1036 | + QList<QByteArray> packages = search_output.split('\n'); |
1037 | + |
1038 | + for (const auto& package: packages) |
1039 | + { |
1040 | + packageList.append(QString(package)); |
1041 | + } |
1042 | + } |
1043 | + |
1044 | + emit finishedSearch(packageList); |
1045 | + }); |
1046 | + |
1047 | + process_.start(libertine_container_manager_tool, QStringList{"search-cache", "-i", container_id, "-s", search_string}); |
1048 | +} |
1049 | + |
1050 | + |
1051 | +void ContainerManagerWorker:: |
1052 | +updateContainer(const QString& container_id, const QString& container_name) |
1053 | +{ |
1054 | + connect(&process_, static_cast<void(QProcess::*)(int, QProcess::ExitStatus)>(&QProcess::finished), |
1055 | + [=](int exitCode, QProcess::ExitStatus){ |
1056 | + if (exitCode != 0) |
1057 | + { |
1058 | + emit error(CONTAINER_UPDATE_FAILED.arg(container_name), readAllStdOutOrStdErr(process_)); |
1059 | + } |
1060 | + }); |
1061 | + |
1062 | + process_.start(libertine_container_manager_tool, QStringList{"update", "-i", container_id}); |
1063 | +} |
1064 | + |
1065 | + |
1066 | +void ContainerManagerWorker:: |
1067 | +runCommand(const QString& container_id, const QString& container_name, const QString& command_line) |
1068 | +{ |
1069 | + connect(&process_, static_cast<void(QProcess::*)(int, QProcess::ExitStatus)>(&QProcess::finished), |
1070 | + [=](int exitCode, QProcess::ExitStatus){ |
1071 | + if (exitCode != 0) |
1072 | + { |
1073 | + emit error(RUN_COMMAND_FAILED.arg(container_name), readAllStdOutOrStdErr(process_)); |
1074 | + } |
1075 | + else |
1076 | + { |
1077 | + emit finishedCommand(process_.readAllStandardOutput()); |
1078 | + } |
1079 | + }); |
1080 | + |
1081 | + process_.start(libertine_container_manager_tool, QStringList{"exec", "-i", container_id, "-c", command_line}); |
1082 | +} |
1083 | + |
1084 | + |
1085 | +void ContainerManagerWorker:: |
1086 | +configureContainer(const QString& container_id, const QString& container_name, const QStringList& configure_command) |
1087 | +{ |
1088 | + connect(&process_, static_cast<void(QProcess::*)(int, QProcess::ExitStatus)>(&QProcess::finished), |
1089 | + [=](int exitCode, QProcess::ExitStatus){ |
1090 | + if (exitCode != 0) |
1091 | + { |
1092 | + emit error(CONTAINER_CONFIGURE_FAILED.arg(container_name), readAllStdOutOrStdErr(process_)); |
1093 | + } |
1094 | + else |
1095 | + { |
1096 | + emit finishedConfigure(); |
1097 | + } |
1098 | + }); |
1099 | + |
1100 | + QStringList args{"configure", "-i", container_id}; |
1101 | + args << configure_command.at(0) << configure_command.mid(1); |
1102 | + process_.start(libertine_container_manager_tool, args); |
1103 | +} |
1104 | + |
1105 | + |
1106 | +void ContainerManagerWorker:: |
1107 | +fixIntegrity() |
1108 | +{ |
1109 | + process_.start(libertine_container_manager_tool, QStringList{"fix-integrity"}); |
1110 | } |
1111 | |
1112 | === modified file 'libertine/ContainerManager.h' |
1113 | --- libertine/ContainerManager.h 2016-05-04 19:41:25 +0000 |
1114 | +++ libertine/ContainerManager.h 2016-06-07 12:41:22 +0000 |
1115 | @@ -23,122 +23,33 @@ |
1116 | #include <QtCore/QString> |
1117 | #include <QtCore/QStringList> |
1118 | #include <QtCore/QThread> |
1119 | +#include <QtCore/QProcess> |
1120 | |
1121 | class ContainerManagerWorker |
1122 | -: public QThread |
1123 | +: public QObject |
1124 | { |
1125 | Q_OBJECT |
1126 | - Q_ENUMS(ContainerAction) |
1127 | - Q_PROPERTY(ContainerAction containerAction READ container_action WRITE container_action NOTIFY containerActionChanged) |
1128 | - Q_PROPERTY(QString containerId READ container_id WRITE container_id NOTIFY containerIdChanged) |
1129 | - Q_PROPERTY(QString containerType READ container_type WRITE container_type NOTIFY containerTypeChanged) |
1130 | - Q_PROPERTY(QString containerDistro READ container_distro WRITE container_distro NOTIFY containerDistroChanged) |
1131 | - Q_PROPERTY(QString containerName READ container_name WRITE container_name NOTIFY containerNameChanged) |
1132 | - Q_PROPERTY(bool containerMultiarch READ container_multiarch WRITE container_multiarch) |
1133 | - Q_PROPERTY(QString data READ data WRITE data NOTIFY dataChanged) |
1134 | - Q_PROPERTY(QStringList data_list READ data_list WRITE data_list NOTIFY dataListChanged) |
1135 | - |
1136 | -public: |
1137 | - static const QString libertine_container_manager_tool; |
1138 | - |
1139 | - enum class ContainerAction |
1140 | - : int |
1141 | - { |
1142 | - Create, |
1143 | - Destroy, |
1144 | - Install, |
1145 | - Remove, |
1146 | - Search, |
1147 | - Update, |
1148 | - Exec, |
1149 | - Configure |
1150 | - }; |
1151 | - |
1152 | -public: |
1153 | - ContainerManagerWorker(); |
1154 | - ContainerManagerWorker(ContainerAction container_action, |
1155 | - QString const& container_id, |
1156 | - QString const& container_type); |
1157 | - ContainerManagerWorker(ContainerAction container_action, |
1158 | - QString const& container_id, |
1159 | - QString const& container_type, |
1160 | - QString const& data); |
1161 | - ContainerManagerWorker(ContainerAction container_action, |
1162 | - QString const& container_id, |
1163 | - QString const& container_type, |
1164 | - QStringList data_list); |
1165 | - ~ContainerManagerWorker(); |
1166 | - |
1167 | - ContainerAction |
1168 | - container_action() const; |
1169 | - |
1170 | - void |
1171 | - container_action(ContainerAction container_action); |
1172 | - |
1173 | - QString const& |
1174 | - container_id() const; |
1175 | - |
1176 | - void |
1177 | - container_id(QString const& container_id); |
1178 | - |
1179 | - QString const& |
1180 | - container_type() const; |
1181 | - |
1182 | - void |
1183 | - container_type(QString const& container_type); |
1184 | - |
1185 | - QString const& |
1186 | - container_distro() const; |
1187 | - |
1188 | - void |
1189 | - container_distro(QString const& container_distro); |
1190 | - |
1191 | - QString const& |
1192 | - container_name() const; |
1193 | - |
1194 | - void |
1195 | - container_name(QString const& container_name); |
1196 | - |
1197 | - bool |
1198 | - container_multiarch(); |
1199 | - |
1200 | - void |
1201 | - container_multiarch(bool container_multiarch); |
1202 | - |
1203 | - QString const& |
1204 | - data() const; |
1205 | - |
1206 | - void |
1207 | - data(QString const& data); |
1208 | - |
1209 | - QStringList |
1210 | - data_list(); |
1211 | - |
1212 | - void |
1213 | - data_list(QStringList data_list); |
1214 | - |
1215 | -protected: |
1216 | - void run() Q_DECL_OVERRIDE; |
1217 | - |
1218 | -private: |
1219 | - void createContainer(QString const& password); |
1220 | - void destroyContainer(); |
1221 | - void installPackage(QString const& package_name); |
1222 | - void removePackage(QString const& package_name); |
1223 | - void searchPackageCache(QString const& search_string); |
1224 | - void updateContainer(); |
1225 | - void runCommand(QString const& command_line); |
1226 | - void configureContainer(QStringList configure_command); |
1227 | - |
1228 | -private: |
1229 | - ContainerAction container_action_; |
1230 | - QString container_id_; |
1231 | - QString container_type_; |
1232 | - QString container_distro_; |
1233 | - QString container_name_; |
1234 | - bool container_multiarch_; |
1235 | - QString data_; |
1236 | - QStringList data_list_; |
1237 | + |
1238 | +public: |
1239 | + explicit ContainerManagerWorker(); |
1240 | + virtual ~ContainerManagerWorker(); |
1241 | + |
1242 | + Q_INVOKABLE void createContainer(const QString& id, const QString& name, const QString& distro, bool multiarch, const QString& password); |
1243 | + Q_INVOKABLE void destroyContainer(const QString& id); |
1244 | + Q_INVOKABLE void installPackage(const QString& id, const QString& package_name); |
1245 | + Q_INVOKABLE void removePackage(const QString& container_id, const QString& package_name); |
1246 | + Q_INVOKABLE void searchPackageCache(const QString& container_id, const QString& search_string); |
1247 | + Q_INVOKABLE void updateContainer(const QString& container_id, const QString& container_name); |
1248 | + Q_INVOKABLE void runCommand(const QString& container_id, const QString& container_name, const QString& command_line); |
1249 | + Q_INVOKABLE void configureContainer(const QString& container_id, const QString& container_name, const QStringList& configure_command); |
1250 | + Q_INVOKABLE void fixIntegrity(); |
1251 | + |
1252 | +public slots: |
1253 | + void packageOperationInteraction(const QString& input); |
1254 | + |
1255 | +private: |
1256 | + QProcess process_; |
1257 | + QString process_output_; |
1258 | |
1259 | signals: |
1260 | void containerActionChanged(); |
1261 | @@ -154,6 +65,8 @@ |
1262 | void finishedSearch(QList<QString> packageList); |
1263 | void finishedCommand(QString const& command_output); |
1264 | void finishedConfigure(); |
1265 | + void updatePackageOperationDetails(const QString& container_id, const QString& package_name, const QString& details); |
1266 | + void packageOperationFinished(const QString& container_id, const QString& package_name); |
1267 | |
1268 | void error(const QString& short_description, const QString& details); |
1269 | }; |
1270 | |
1271 | === modified file 'libertine/qml/ContainerPasswordDialog.qml' |
1272 | --- libertine/qml/ContainerPasswordDialog.qml 2016-05-06 21:13:01 +0000 |
1273 | +++ libertine/qml/ContainerPasswordDialog.qml 2016-06-07 12:41:22 +0000 |
1274 | @@ -86,14 +86,8 @@ |
1275 | function passwordAccepted(password) { |
1276 | var container_id = containerConfigList.addNewContainer("lxc", containerName) |
1277 | var comp = Qt.createComponent("ContainerManager.qml") |
1278 | - var worker = comp.createObject(mainView, {"containerAction": ContainerManagerWorker.Create, |
1279 | - "containerId": container_id, |
1280 | - "containerType": null, |
1281 | - "data": password}) |
1282 | - worker.containerDistro = containerConfigList.getContainerDistro(container_id) |
1283 | - worker.containerName = containerConfigList.getContainerName(container_id) |
1284 | - worker.containerMultiarch = enableMultiarch |
1285 | - mainView.currentContainer = container_id |
1286 | - worker.start() |
1287 | + var worker = comp.createObject(mainView) |
1288 | + worker.createContainer(container_id, containerConfigList.getContainerName(container_id), |
1289 | + containerConfigList.getContainerDistro(container_id), enableMultiarch, password) |
1290 | } |
1291 | } |
1292 | |
1293 | === modified file 'libertine/qml/ContainersView.qml' |
1294 | --- libertine/qml/ContainersView.qml 2016-05-10 18:55:24 +0000 |
1295 | +++ libertine/qml/ContainersView.qml 2016-06-07 12:41:22 +0000 |
1296 | @@ -59,7 +59,7 @@ |
1297 | function edit(containerId) { |
1298 | mainView.currentContainer = containerId |
1299 | containerAppsList.setContainerApps(mainView.currentContainer) |
1300 | - pageStack.push(Qt.resolvedUrl("HomeView.qml")) |
1301 | + pageStack.push(Qt.resolvedUrl("HomeView.qml"), {"currentContainer": mainView.currentContainer}) |
1302 | } |
1303 | |
1304 | delegate: ListItem { |
1305 | @@ -93,10 +93,8 @@ |
1306 | description: i18n.tr("Delete Container") |
1307 | onTriggered: { |
1308 | var comp = Qt.createComponent("ContainerManager.qml") |
1309 | - var worker = comp.createObject(mainView, {"containerAction": ContainerManagerWorker.Destroy, |
1310 | - "containerId": containerId, |
1311 | - "containerType": containerConfigList.getContainerType(containerId)}) |
1312 | - worker.start() |
1313 | + var worker = comp.createObject(mainView) |
1314 | + worker.destroyContainer(containerId) |
1315 | mainView.currentContainer = containerId |
1316 | } |
1317 | } |
1318 | |
1319 | === modified file 'libertine/qml/ExtraArchivesView.qml' |
1320 | --- libertine/qml/ExtraArchivesView.qml 2016-05-09 20:27:38 +0000 |
1321 | +++ libertine/qml/ExtraArchivesView.qml 2016-06-07 12:41:22 +0000 |
1322 | @@ -127,26 +127,20 @@ |
1323 | |
1324 | function addArchive(archive) { |
1325 | var comp = Qt.createComponent("ContainerManager.qml") |
1326 | - worker = comp.createObject(mainView, {"containerAction": ContainerManagerWorker.Configure, |
1327 | - "containerId": mainView.currentContainer, |
1328 | - "containerType": containerConfigList.getContainerType(mainView.currentContainer), |
1329 | - "data_list": ["--add-archive", archive]}) |
1330 | + worker = comp.createObject(mainView) |
1331 | worker.finishedConfigure.connect(finishedConfigure) |
1332 | worker.error.connect(sendAddError) |
1333 | error.connect(mainView.error) |
1334 | - worker.start() |
1335 | + worker.configureContainer(mainView.currentContainer, containerConfigList.getContainerName(mainView.currentContainer), ["--add-archive", archive]) |
1336 | } |
1337 | |
1338 | function deleteArchive(archive) { |
1339 | var comp = Qt.createComponent("ContainerManager.qml") |
1340 | - worker = comp.createObject(mainView, {"containerAction": ContainerManagerWorker.Configure, |
1341 | - "containerId": mainView.currentContainer, |
1342 | - "containerType": containerConfigList.getContainerType(mainView.currentContainer), |
1343 | - "data_list": ["--delete-archive", archive]}) |
1344 | + worker = comp.createObject(mainView) |
1345 | worker.finishedConfigure.connect(finishedConfigure) |
1346 | worker.error.connect(sendDeleteError) |
1347 | error.connect(mainView.error) |
1348 | - worker.start() |
1349 | + worker.configureContainer(mainView.currentContainer, containerConfigList.getContainerName(mainView.currentContainer), ["--delete-archive", archive]) |
1350 | } |
1351 | |
1352 | Component.onCompleted: { |
1353 | |
1354 | === modified file 'libertine/qml/HomeView.qml' |
1355 | --- libertine/qml/HomeView.qml 2016-05-10 18:55:24 +0000 |
1356 | +++ libertine/qml/HomeView.qml 2016-06-07 12:41:22 +0000 |
1357 | @@ -26,7 +26,7 @@ |
1358 | id: homeView |
1359 | header: PageHeader { |
1360 | id: pageHeader |
1361 | - title: i18n.tr("Classic Apps - %1").arg(containerConfigList.getContainerName(mainView.currentContainer)) |
1362 | + title: i18n.tr("Classic Apps - %1").arg(containerConfigList.getContainerName(currentContainer)) |
1363 | trailingActionBar.actions: [ |
1364 | Action { |
1365 | id: settingsButton |
1366 | @@ -39,6 +39,7 @@ |
1367 | } |
1368 | ] |
1369 | } |
1370 | + property var currentContainer: null |
1371 | |
1372 | Component { |
1373 | id: enterPackagePopup |
1374 | @@ -69,9 +70,8 @@ |
1375 | width: (parent.width - parent.spacing) / 2 |
1376 | onClicked: { |
1377 | if (enterPackageInput.text != "") { |
1378 | - if (!containerConfigList.isAppInstalled(mainView.currentContainer, enterPackageInput.text)) { |
1379 | + if (!containerConfigList.isAppInstalled(currentContainer, enterPackageInput.text)) { |
1380 | installPackage(enterPackageInput.text) |
1381 | - mainView.currentPackage = enterPackageInput.text |
1382 | PopupUtils.close(enterPackageDialog) |
1383 | } |
1384 | else { |
1385 | @@ -97,30 +97,30 @@ |
1386 | } |
1387 | |
1388 | Component { |
1389 | - id: settingsMenu |
1390 | - ActionSelectionPopover { |
1391 | - actions: ActionList { |
1392 | - Action { |
1393 | - text: i18n.tr("Manage Container") |
1394 | - onTriggered: { |
1395 | + id: settingsMenu |
1396 | + ActionSelectionPopover { |
1397 | + actions: ActionList { |
1398 | + Action { |
1399 | + text: i18n.tr("Manage Container") |
1400 | + onTriggered: { |
1401 | pageStack.push(Qt.resolvedUrl("ManageContainer.qml")) |
1402 | } |
1403 | - } |
1404 | + } |
1405 | Action { |
1406 | text: i18n.tr("Container Information") |
1407 | onTriggered: { |
1408 | pageStack.push(Qt.resolvedUrl("ContainerInfoView.qml")) |
1409 | } |
1410 | } |
1411 | - Action { |
1412 | - text: i18n.tr("Switch Container") |
1413 | - onTriggered: { |
1414 | + Action { |
1415 | + text: i18n.tr("Switch Container") |
1416 | + onTriggered: { |
1417 | pageStack.pop() |
1418 | pageStack.push(Qt.resolvedUrl("ContainersView.qml")) |
1419 | } |
1420 | - } |
1421 | - } |
1422 | - } |
1423 | + } |
1424 | + } |
1425 | + } |
1426 | } |
1427 | |
1428 | Component { |
1429 | @@ -160,7 +160,7 @@ |
1430 | } |
1431 | |
1432 | function reloadAppList() { |
1433 | - containerAppsList.setContainerApps(mainView.currentContainer) |
1434 | + containerAppsList.setContainerApps(currentContainer) |
1435 | |
1436 | appsList.visible = !containerAppsList.empty() ? true : false |
1437 | } |
1438 | @@ -175,8 +175,7 @@ |
1439 | visible: !containerAppsList.empty() ? true : false |
1440 | |
1441 | function info(packageName) { |
1442 | - mainView.currentPackage = packageName |
1443 | - pageStack.push(Qt.resolvedUrl("PackageInfoView.qml")) |
1444 | + pageStack.push(Qt.resolvedUrl("PackageInfoView.qml"), {"currentPackage": packageName, "currentContainer": currentContainer}) |
1445 | } |
1446 | |
1447 | delegate: ListItem { |
1448 | @@ -211,7 +210,6 @@ |
1449 | text: i18n.tr("delete") |
1450 | description: i18n.tr("Remove Package") |
1451 | onTriggered: { |
1452 | - mainView.currentPackage = packageName |
1453 | removePackage(packageName) |
1454 | } |
1455 | } |
1456 | @@ -242,23 +240,21 @@ |
1457 | text: i18n.tr("No packages are installed") |
1458 | } |
1459 | |
1460 | - function installPackage(package_name) { |
1461 | + function operationSetup() { |
1462 | var comp = Qt.createComponent("ContainerManager.qml") |
1463 | - var worker = comp.createObject(mainView, {"containerAction": ContainerManagerWorker.Install, |
1464 | - "containerId": mainView.currentContainer, |
1465 | - "containerType": containerConfigList.getContainerType(mainView.currentContainer), |
1466 | - "data": package_name}) |
1467 | + var worker = comp.createObject(mainView) |
1468 | worker.error.connect(mainView.error) |
1469 | - worker.start() |
1470 | + worker.updatePackageOperationDetails.connect(mainView.updatePackageOperationDetails) |
1471 | + mainView.packageOperationInteraction.connect(worker.packageOperationInteraction) |
1472 | + worker.packageOperationFinished.connect(mainView.resetPackageDetails) |
1473 | + return worker |
1474 | + } |
1475 | + |
1476 | + function installPackage(packageName) { |
1477 | + operationSetup().installPackage(currentContainer, packageName) |
1478 | } |
1479 | |
1480 | function removePackage(packageName) { |
1481 | - var comp = Qt.createComponent("ContainerManager.qml") |
1482 | - var worker = comp.createObject(mainView, {"containerAction": ContainerManagerWorker.Remove, |
1483 | - "containerId": mainView.currentContainer, |
1484 | - "containerType": containerConfigList.getContainerType(mainView.currentContainer), |
1485 | - "data": packageName}) |
1486 | - worker.error.connect(mainView.error) |
1487 | - worker.start() |
1488 | + operationSetup().removePackage(currentContainer, packageName) |
1489 | } |
1490 | } |
1491 | |
1492 | === modified file 'libertine/qml/ManageContainer.qml' |
1493 | --- libertine/qml/ManageContainer.qml 2016-05-09 20:27:38 +0000 |
1494 | +++ libertine/qml/ManageContainer.qml 2016-06-07 12:41:22 +0000 |
1495 | @@ -49,18 +49,14 @@ |
1496 | onClicked: { |
1497 | var comp = Qt.createComponent("ContainerManager.qml") |
1498 | if (checked) { |
1499 | - var worker = comp.createObject(mainView, {"containerAction": ContainerManagerWorker.Configure, |
1500 | - "containerId": mainView.currentContainer, |
1501 | - "containerType": containerConfigList.getContainerType(mainView.currentContainer), |
1502 | - "data_list": ["--multiarch", "enable"]}) |
1503 | - worker.start() |
1504 | + comp.createObject(mainView).configureContainer(mainView.currentContainer, |
1505 | + containerConfigList.getContainerName(mainView.currentContainer), |
1506 | + ["--multiarch", "enable"]) |
1507 | } |
1508 | else { |
1509 | - var worker = comp.createObject(mainView, {"containerAction": ContainerManagerWorker.Configure, |
1510 | - "containerId": mainView.currentContainer, |
1511 | - "containerType": containerConfigList.getContainerType(mainView.currentContainer), |
1512 | - "data_list": ["--multiarch", "disable"]}) |
1513 | - worker.start() |
1514 | + comp.createObject(mainView).configureContainer(mainView.currentContainer, |
1515 | + containerConfigList.getContainerName(mainView.currentContainer), |
1516 | + ["--multiarch", "disable"]) |
1517 | } |
1518 | } |
1519 | } |
1520 | @@ -110,11 +106,9 @@ |
1521 | |
1522 | function updateContainer() { |
1523 | var comp = Qt.createComponent("ContainerManager.qml") |
1524 | - var worker = comp.createObject(mainView, {"containerAction": ContainerManagerWorker.Update, |
1525 | - "containerId": mainView.currentContainer, |
1526 | - "containerType": containerConfigList.getContainerType(mainView.currentContainer)}) |
1527 | + var worker = comp.createObject(mainView) |
1528 | worker.error.connect(mainView.error); |
1529 | - worker.start() |
1530 | + worker.updateContainer(mainView.currentContainer, containerConfigList.getContainerName(mainView.currentContainer)) |
1531 | } |
1532 | |
1533 | function updateStatus() { |
1534 | |
1535 | === modified file 'libertine/qml/PackageInfoView.qml' |
1536 | --- libertine/qml/PackageInfoView.qml 2016-05-09 20:27:38 +0000 |
1537 | +++ libertine/qml/PackageInfoView.qml 2016-06-07 12:41:22 +0000 |
1538 | @@ -27,14 +27,17 @@ |
1539 | id: packageInfoView |
1540 | header: PageHeader { |
1541 | id: pageHeader |
1542 | - title: i18n.tr("Information for the %1 package").arg(mainView.currentPackage) |
1543 | + title: i18n.tr("Information for the %1 package").arg(currentPackage) |
1544 | } |
1545 | - property string currentContainer: mainView.currentContainer |
1546 | - property var currentPackage: mainView.currentPackage |
1547 | + property string currentContainer: null |
1548 | + property var currentPackage: null |
1549 | property var statusText: containerConfigList.getAppStatus(currentContainer, currentPackage) |
1550 | property var packageVersionText: i18n.tr("Obtaining package version…") |
1551 | + property string packageOperationDetails: "" |
1552 | property var worker: null |
1553 | |
1554 | + signal sendOperationInteraction(string text) |
1555 | + |
1556 | |
1557 | Flickable { |
1558 | anchors { |
1559 | @@ -52,6 +55,7 @@ |
1560 | anchors.right: parent.right |
1561 | |
1562 | ListItem.Standard { |
1563 | + id: packageListItem |
1564 | text: i18n.tr("Package version") |
1565 | control: Label { |
1566 | text: packageVersionText |
1567 | @@ -59,11 +63,33 @@ |
1568 | } |
1569 | |
1570 | ListItem.Standard { |
1571 | + id: statusListItem |
1572 | text: i18n.tr("Install status") |
1573 | control: Label { |
1574 | text: statusText |
1575 | } |
1576 | } |
1577 | + |
1578 | + TextArea { |
1579 | + id: packageDetailsView |
1580 | + visible: text !== "" |
1581 | + anchors.left: parent.left |
1582 | + anchors.right: parent.right |
1583 | + height: Math.max(packageInfoView.height - pageHeader.height - packageListItem.height - statusListItem.height - 35, units.gu(35)) |
1584 | + readOnly: true |
1585 | + text: packageOperationDetails |
1586 | + } |
1587 | + |
1588 | + TextField { |
1589 | + visible: packageDetailsView.visible && (statusText === "installing" || statusText === "removing") |
1590 | + anchors.left: parent.left |
1591 | + anchors.right: parent.right |
1592 | + text: "" |
1593 | + onAccepted: { |
1594 | + sendOperationInteraction(text) |
1595 | + text = "" |
1596 | + } |
1597 | + } |
1598 | } |
1599 | } |
1600 | |
1601 | @@ -71,21 +97,31 @@ |
1602 | containerConfigList.configChanged.connect(reloadStatus) |
1603 | var command = "apt-cache policy " + currentPackage |
1604 | var comp = Qt.createComponent("ContainerManager.qml") |
1605 | - worker = comp.createObject(mainView, {"containerAction": ContainerManagerWorker.Exec, |
1606 | - "containerId": mainView.currentContainer, |
1607 | - "containerType": containerConfigList.getContainerType(mainView.currentContainer), |
1608 | - "data": command }) |
1609 | + worker = comp.createObject(mainView) |
1610 | worker.finishedCommand.connect(getPackageVersion) |
1611 | + |
1612 | + packageOperationDetails = mainView.getPackageOperationDetails(currentContainer, currentPackage) |
1613 | + packageDetailsView.cursorPosition = packageDetailsView.length |
1614 | + |
1615 | + mainView.updatePackageDetails.connect(updatePackageDetails) |
1616 | + sendOperationInteraction.connect(mainView.packageOperationInteraction) |
1617 | + |
1618 | worker.error.connect(mainView.error) |
1619 | worker.error.connect(onError) |
1620 | - worker.start() |
1621 | + worker.runCommand(currentContainer, containerConfigList.getContainerName(currentContainer), command) |
1622 | } |
1623 | |
1624 | Component.onDestruction: { |
1625 | containerConfigList.configChanged.disconnect(reloadStatus) |
1626 | - worker.finishedCommand.disconnect(getPackageVersion) |
1627 | - worker.error.disconnect(mainView.error) |
1628 | - worker.error.disconnect(onError) |
1629 | + mainView.updatePackageDetails.disconnect(updatePackageDetails) |
1630 | + sendOperationInteraction.disconnect(mainView.packageOperationInteraction) |
1631 | + } |
1632 | + |
1633 | + function updatePackageDetails(container_id, package_name, details) { |
1634 | + if (container_id === currentContainer && package_name === currentPackage) { |
1635 | + packageOperationDetails += details |
1636 | + packageDetailsView.cursorPosition = packageDetailsView.length |
1637 | + } |
1638 | } |
1639 | |
1640 | function reloadStatus() { |
1641 | |
1642 | === modified file 'libertine/qml/SearchResultsView.qml' |
1643 | --- libertine/qml/SearchResultsView.qml 2016-05-09 20:27:38 +0000 |
1644 | +++ libertine/qml/SearchResultsView.qml 2016-06-07 12:41:22 +0000 |
1645 | @@ -120,12 +120,9 @@ |
1646 | |
1647 | var comp = Qt.createComponent("ContainerManager.qml") |
1648 | var worker = comp.createObject() |
1649 | - worker.containerAction = ContainerManagerWorker.Search |
1650 | - worker.containerId = mainView.currentContainer |
1651 | - worker.data = search_string |
1652 | worker.finishedSearch.connect(finishedSearch) |
1653 | worker.error.connect(mainView.error) |
1654 | - worker.start() |
1655 | + worker.searchPackageCache(mainView.currentContainer, search_string) |
1656 | } |
1657 | |
1658 | function finishedSearch(packageList) { |
1659 | |
1660 | === modified file 'libertine/qml/libertine.qml' |
1661 | --- libertine/qml/libertine.qml 2016-05-09 20:27:38 +0000 |
1662 | +++ libertine/qml/libertine.qml 2016-06-07 12:41:22 +0000 |
1663 | @@ -29,22 +29,26 @@ |
1664 | width: units.gu(90) |
1665 | height: units.gu(75) |
1666 | property var currentContainer: undefined |
1667 | - property var currentPackage: undefined |
1668 | + property var packageOperationDetails: undefined |
1669 | |
1670 | signal error(string short_description, string details) |
1671 | + signal updatePackageDetails(string container_id, string package_name, string details) |
1672 | + signal packageOperationInteraction(string data) |
1673 | |
1674 | PageStack { |
1675 | id: pageStack |
1676 | } |
1677 | |
1678 | Component.onCompleted: { |
1679 | + Qt.createComponent("ContainerManager.qml").createObject(mainView).fixIntegrity() |
1680 | + |
1681 | mainView.currentContainer = containerConfigList.defaultContainerId |
1682 | |
1683 | if (!containerConfigList.empty()) { |
1684 | pageStack.push(Qt.resolvedUrl("ContainersView.qml")) |
1685 | if (mainView.currentContainer) { |
1686 | containerAppsList.setContainerApps(mainView.currentContainer) |
1687 | - pageStack.push(Qt.resolvedUrl("HomeView.qml")) |
1688 | + pageStack.push(Qt.resolvedUrl("HomeView.qml"), {"currentContainer": mainView.currentContainer}) |
1689 | } |
1690 | } |
1691 | else { |
1692 | @@ -56,4 +60,35 @@ |
1693 | PopupUtils.open(Qt.resolvedUrl("GenericErrorDialog.qml"), null, |
1694 | {"short_description": short_description, "details": details}) |
1695 | } |
1696 | + |
1697 | + function updatePackageOperationDetails(container_id, package_name, details) { |
1698 | + if (!mainView) { |
1699 | + return |
1700 | + } |
1701 | + if (!packageOperationDetails) { |
1702 | + packageOperationDetails = {} |
1703 | + } |
1704 | + if (!packageOperationDetails[container_id]) { |
1705 | + packageOperationDetails[container_id] = {} |
1706 | + } |
1707 | + if (!packageOperationDetails[container_id][package_name]) { |
1708 | + packageOperationDetails[container_id][package_name] = "" |
1709 | + } |
1710 | + packageOperationDetails[container_id][package_name] += details |
1711 | + |
1712 | + updatePackageDetails(container_id, package_name, details) |
1713 | + } |
1714 | + |
1715 | + function resetPackageDetails(container_id, package_name) { |
1716 | + if (mainView && packageOperationDetails && packageOperationDetails[container_id] && packageOperationDetails[container_id][package_name]) { |
1717 | + delete packageOperationDetails[container_id][package_name] |
1718 | + } |
1719 | + } |
1720 | + |
1721 | + function getPackageOperationDetails(container_id, package_name) { |
1722 | + if (packageOperationDetails && packageOperationDetails[container_id] && packageOperationDetails[container_id][package_name]) { |
1723 | + return packageOperationDetails[container_id][package_name] |
1724 | + } |
1725 | + return "" |
1726 | + } |
1727 | } |
1728 | |
1729 | === modified file 'po/en_US.po' |
1730 | --- po/en_US.po 2016-05-09 14:38:13 +0000 |
1731 | +++ po/en_US.po 2016-06-07 12:41:22 +0000 |
1732 | @@ -7,7 +7,7 @@ |
1733 | msgstr "" |
1734 | "Project-Id-Version: PACKAGE VERSION\n" |
1735 | "Report-Msgid-Bugs-To: \n" |
1736 | -"POT-Creation-Date: 2016-05-09 10:33-0400\n" |
1737 | +"POT-Creation-Date: 2016-06-07 07:58-0400\n" |
1738 | "PO-Revision-Date: 2016-03-21 10:21-0400\n" |
1739 | "Last-Translator: Chris Townsend <christopher.townsend@canonical.com>\n" |
1740 | "Language-Team: English\n" |
1741 | @@ -17,316 +17,358 @@ |
1742 | "Content-Transfer-Encoding: 8bit\n" |
1743 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" |
1744 | |
1745 | +#: ../libertine/ContainerConfig.cpp:147 ../libertine/ContainerConfig.cpp:184 |
1746 | +msgid "new" |
1747 | +msgstr "new" |
1748 | + |
1749 | +#: ../libertine/ContainerConfig.cpp:148 ../libertine/ContainerConfig.cpp:185 |
1750 | +#: ../libertine/qml/ContainersView.qml:81 ../libertine/qml/HomeView.qml:197 |
1751 | +#: ../libertine/qml/ExtraArchivesView.qml:99 |
1752 | +msgid "installing" |
1753 | +msgstr "installing" |
1754 | + |
1755 | +#: ../libertine/ContainerConfig.cpp:149 ../libertine/qml/ContainersView.qml:119 |
1756 | +#: ../libertine/qml/ManageContainer.qml:79 |
1757 | +#: ../libertine/qml/ManageContainer.qml:119 |
1758 | +msgid "ready" |
1759 | +msgstr "ready" |
1760 | + |
1761 | +#: ../libertine/ContainerConfig.cpp:150 ../libertine/qml/ContainersView.qml:120 |
1762 | +#: ../libertine/qml/ManageContainer.qml:91 |
1763 | +#: ../libertine/qml/ManageContainer.qml:115 |
1764 | +msgid "updating" |
1765 | +msgstr "updating" |
1766 | + |
1767 | +#: ../libertine/ContainerConfig.cpp:151 ../libertine/ContainerConfig.cpp:188 |
1768 | +#: ../libertine/qml/ContainersView.qml:82 ../libertine/qml/HomeView.qml:198 |
1769 | +#: ../libertine/qml/ExtraArchivesView.qml:100 |
1770 | +msgid "removing" |
1771 | +msgstr "removing" |
1772 | + |
1773 | +#: ../libertine/ContainerConfig.cpp:152 ../libertine/ContainerConfig.cpp:189 |
1774 | +#: ../libertine/qml/PackageInfoView.qml:131 |
1775 | +#: ../libertine/qml/ContainerInfoView.qml:93 |
1776 | +msgid "removed" |
1777 | +msgstr "removed" |
1778 | + |
1779 | +#: ../libertine/ContainerConfig.cpp:153 ../libertine/ContainerConfig.cpp:187 |
1780 | +msgid "failed" |
1781 | +msgstr "failed" |
1782 | + |
1783 | +#: ../libertine/ContainerConfig.cpp:186 |
1784 | +msgid "installed" |
1785 | +msgstr "installed" |
1786 | + |
1787 | +#: ../libertine/ContainerManager.cpp:24 |
1788 | +msgid "%1 failed to start" |
1789 | +msgstr "%1 failed to start" |
1790 | + |
1791 | #: ../libertine/ContainerManager.cpp:25 |
1792 | -msgid "%1 failed to start" |
1793 | -msgstr "" |
1794 | - |
1795 | -#: ../libertine/qml/ExtraArchivesView.qml:35 |
1796 | -msgid "Add a new PPA" |
1797 | -msgstr "" |
1798 | - |
1799 | -#: ../libertine/qml/ExtraArchivesView.qml:44 |
1800 | -msgid "Add additional PPA" |
1801 | -msgstr "" |
1802 | - |
1803 | -#: ../libertine/qml/ExtraArchivesView.qml:174 |
1804 | -msgid "Adding archive failed" |
1805 | -msgstr "" |
1806 | - |
1807 | -#: ../libertine/qml/ExtraArchivesView.qml:26 |
1808 | -msgid "Additional Archives and PPAs" |
1809 | -msgstr "" |
1810 | - |
1811 | -#: ../libertine/qml/ManageContainer.qml:59 |
1812 | -msgid "Additional archives and PPAs" |
1813 | -msgstr "" |
1814 | - |
1815 | -#: ../libertine/qml/ContainerPasswordDialog.qml:27 |
1816 | -msgid "Authentication required" |
1817 | -msgstr "" |
1818 | - |
1819 | -#: ../libertine/qml/DebianPackagePicker.qml:26 |
1820 | -msgid "Available Debian Packages to Install" |
1821 | -msgstr "" |
1822 | - |
1823 | +msgid "Installation of package %1 failed" |
1824 | +msgstr "Installation of package %1 failed" |
1825 | + |
1826 | +#: ../libertine/ContainerManager.cpp:26 |
1827 | +msgid "Removal of package %1 failed" |
1828 | +msgstr "Removal of package %1 failed" |
1829 | + |
1830 | +#: ../libertine/ContainerManager.cpp:27 |
1831 | +msgid "Searching for query %1 failed" |
1832 | +msgstr "Searching for query %1 failed" |
1833 | + |
1834 | +#: ../libertine/ContainerManager.cpp:28 |
1835 | +msgid "Updating container %1 failed" |
1836 | +msgstr "Updating container %1 failed" |
1837 | + |
1838 | +#: ../libertine/ContainerManager.cpp:29 |
1839 | +msgid "Creating container %1 failed" |
1840 | +msgstr "Creating container %1 failed" |
1841 | + |
1842 | +#: ../libertine/ContainerManager.cpp:30 |
1843 | +msgid "Destroying container %1 failed" |
1844 | +msgstr "Destroying container %1 failed" |
1845 | + |
1846 | +#: ../libertine/ContainerManager.cpp:31 |
1847 | +msgid "Running command %1 failed" |
1848 | +msgstr "Running command %1 failed" |
1849 | + |
1850 | +#: ../libertine/ContainerManager.cpp:32 |
1851 | +msgid "Attempt to configure container %1 failed" |
1852 | +msgstr "Attempt to configure container %1 failed" |
1853 | + |
1854 | +#: ../libertine/qml/PackageExistsDialog.qml:28 |
1855 | +msgid "The %1 package is already installed." |
1856 | +msgstr "The %1 package is already installed." |
1857 | + |
1858 | +#: .:./libertine/qml/PackageExistsDialog.qml:29 |
1859 | +msgid "Search again or return to search results." |
1860 | +msgstr "Search again or return to search results." |
1861 | + |
1862 | +#: ../libertine/qml/PackageExistsDialog.qml:33 |
1863 | +msgid "Search again" |
1864 | +msgstr "Search again" |
1865 | + |
1866 | +#: ../libertine/qml/PackageExistsDialog.qml:43 |
1867 | +msgid "Return to search results" |
1868 | +msgstr "Return to search results" |
1869 | + |
1870 | +#: ../libertine/qml/ContainersView.qml:33 |
1871 | +msgid "My Containers" |
1872 | +msgstr "My Containers" |
1873 | + |
1874 | +#: ../libertine/qml/ContainersView.qml:92 ../libertine/qml/HomeView.qml:210 |
1875 | +msgid "delete" |
1876 | +msgstr "delete" |
1877 | + |
1878 | +#: ../libertine/qml/ContainersView.qml:93 |
1879 | +msgid "Delete Container" |
1880 | +msgstr "Delete Container" |
1881 | + |
1882 | +#: ../libertine/qml/ContainersView.qml:108 ../libertine/qml/HomeView.qml:222 |
1883 | +msgid "info" |
1884 | +msgstr "info" |
1885 | + |
1886 | +#: ../libertine/qml/ContainersView.qml:109 |
1887 | +msgid "Container Info" |
1888 | +msgstr "Container Info" |
1889 | + |
1890 | +#: ../libertine/qml/ContainersView.qml:117 |
1891 | +msgid "edit" |
1892 | +msgstr "edit" |
1893 | + |
1894 | +#: ../libertine/qml/ContainersView.qml:118 |
1895 | +msgid "Container Apps" |
1896 | +msgstr "Container Apps" |
1897 | + |
1898 | +#: ../libertine/qml/SearchPackagesDialog.qml:26 |
1899 | +#: ../libertine/qml/SearchResultsView.qml:36 |
1900 | +msgid "Search for packages" |
1901 | +msgstr "Search for packages" |
1902 | + |
1903 | +#: ../libertine/qml/SearchPackagesDialog.qml:27 |
1904 | +msgid "Search archives for packages" |
1905 | +msgstr "Search archives for packages" |
1906 | + |
1907 | +#: ../libertine/qml/SearchPackagesDialog.qml:31 |
1908 | +msgid "search" |
1909 | +msgstr "search" |
1910 | + |
1911 | +#: ../libertine/qml/SearchPackagesDialog.qml:39 |
1912 | +#: ../libertine/qml/ContainerPasswordDialog.qml:52 |
1913 | +#: ../libertine/qml/HomeView.qml:68 ../libertine/qml/ExtraArchivesView.qml:57 |
1914 | +#: ../libertine/qml/ContainerOptionsDialog.qml:64 |
1915 | +msgid "OK" |
1916 | +msgstr "OK" |
1917 | + |
1918 | +#: ../libertine/qml/SearchPackagesDialog.qml:57 |
1919 | +#: ../libertine/qml/ContainerPasswordDialog.qml:70 |
1920 | +#: ../libertine/qml/HomeView.qml:88 ../libertine/qml/ExtraArchivesView.qml:65 |
1921 | #: ../libertine/qml/ContainerOptionsDialog.qml:75 |
1922 | -#: ../libertine/qml/ContainerPasswordDialog.qml:70 |
1923 | -#: ../libertine/qml/SearchPackagesDialog.qml:57 |
1924 | -#: ../libertine/qml/HomeView.qml:86 ../libertine/qml/ExtraArchivesView.qml:63 |
1925 | msgid "Cancel" |
1926 | -msgstr "" |
1927 | - |
1928 | -#: ../libertine/qml/HomeView.qml:136 |
1929 | -msgid "Choose Debian package to install" |
1930 | -msgstr "" |
1931 | - |
1932 | -#: ../libertine/qml/HomeView.qml:27 |
1933 | -msgid "Classic Apps - %1" |
1934 | -msgstr "Classic Apps - %1" |
1935 | - |
1936 | -#: ../libertine/qml/ContainerOptionsDialog.qml:28 |
1937 | -#, fuzzy |
1938 | -msgid "Configure options for container creation." |
1939 | -msgstr "Configure Container" |
1940 | - |
1941 | -#: ../libertine/qml/ContainersView.qml:100 |
1942 | -msgid "Container Apps" |
1943 | -msgstr "Container Apps" |
1944 | - |
1945 | -#: ../libertine/qml/ContainersView.qml:91 |
1946 | -msgid "Container Info" |
1947 | -msgstr "Container Info" |
1948 | - |
1949 | -#: ../libertine/qml/HomeView.qml:108 |
1950 | -#, fuzzy |
1951 | -msgid "Container Information" |
1952 | -msgstr "Container information for %1" |
1953 | - |
1954 | -#: ../libertine/qml/ContainerOptionsDialog.qml:27 |
1955 | -#, fuzzy |
1956 | -msgid "Container Options" |
1957 | -msgstr "Container Apps" |
1958 | - |
1959 | -#: ../libertine/qml/ContainerInfoView.qml:28 |
1960 | -msgid "Container information for %1" |
1961 | -msgstr "Container information for %1" |
1962 | - |
1963 | -#: ../libertine/qml/ContainersView.qml:73 |
1964 | -msgid "Delete Container" |
1965 | -msgstr "Delete Container" |
1966 | - |
1967 | -#: ../libertine/qml/ExtraArchivesView.qml:178 |
1968 | -msgid "Deleting archive failed" |
1969 | -msgstr "" |
1970 | - |
1971 | -#: ../libertine/qml/GenericErrorDialog.qml:32 |
1972 | -msgid "Dismiss" |
1973 | -msgstr "" |
1974 | - |
1975 | -#: ../libertine/qml/ContainerInfoView.qml:62 |
1976 | -#, fuzzy |
1977 | -msgid "Distribution" |
1978 | -msgstr "Distribution: %1" |
1979 | - |
1980 | -#: ../libertine/qml/HomeView.qml:46 |
1981 | -#, fuzzy |
1982 | -msgid "Enter exact package name or full path to a Debian package file" |
1983 | -msgstr "Please enter the exact package name of the app to install:" |
1984 | - |
1985 | -#: ../libertine/qml/ExtraArchivesView.qml:45 |
1986 | -msgid "Enter name of PPA in the form ppa:user/ppa-name:" |
1987 | -msgstr "" |
1988 | - |
1989 | -#: ../libertine/qml/ContainerOptionsDialog.qml:50 |
1990 | -msgid "Enter or name for the container or leave blank for default name" |
1991 | -msgstr "" |
1992 | - |
1993 | -#: ../libertine/qml/HomeView.qml:130 |
1994 | -#, fuzzy |
1995 | -msgid "Enter package name or Debian file" |
1996 | -msgstr "Please enter the exact package name of the app to install:" |
1997 | - |
1998 | -#: ../libertine/qml/ContainerInfoView.qml:48 |
1999 | -msgid "ID" |
2000 | -msgstr "" |
2001 | - |
2002 | -#: ../libertine/qml/PackageInfoView.qml:29 |
2003 | +msgstr "Cancel" |
2004 | + |
2005 | +#: ../libertine/qml/PackageInfoView.qml:30 |
2006 | msgid "Information for the %1 package" |
2007 | msgstr "Information for the %1 package" |
2008 | |
2009 | -#: ../libertine/qml/WelcomeView.qml:58 |
2010 | -msgid "Install" |
2011 | -msgstr "Install" |
2012 | - |
2013 | -#: ../libertine/qml/DebianPackagePicker.qml:53 |
2014 | -#: ../libertine/qml/SearchResults.qml:42 |
2015 | +#: ../libertine/qml/PackageInfoView.qml:35 |
2016 | +msgid "Obtaining package version…" |
2017 | +msgstr "Obtaining package version…" |
2018 | + |
2019 | +#: ../libertine/qml/PackageInfoView.qml:59 |
2020 | +msgid "Package version" |
2021 | +msgstr "Package version" |
2022 | + |
2023 | +#: ../libertine/qml/PackageInfoView.qml:67 |
2024 | +msgid "Install status" |
2025 | +msgstr "Install status" |
2026 | + |
2027 | +#: ../libertine/qml/PackageInfoView.qml:140 |
2028 | +msgid "Unknown" |
2029 | +msgstr "Unknown" |
2030 | + |
2031 | +#: ../libertine/qml/SearchResultsView.qml:31 |
2032 | +msgid "Package Search Results" |
2033 | +msgstr "Package Search Results" |
2034 | + |
2035 | +#: ../libertine/qml/SearchResultsView.qml:35 |
2036 | +msgid "Search" |
2037 | +msgstr "Search" |
2038 | + |
2039 | +#: ../libertine/qml/SearchResultsView.qml:52 |
2040 | +msgid "No Search Results Found" |
2041 | +msgstr "No Search Results Found" |
2042 | + |
2043 | +#: ../libertine/qml/SearchResultsView.qml:57 |
2044 | +msgid "Search Again" |
2045 | +msgstr "Search Again" |
2046 | + |
2047 | +#: ../libertine/qml/SearchResultsView.qml:67 |
2048 | +msgid "Return to Apps Page" |
2049 | +msgstr "Return to Apps Page" |
2050 | + |
2051 | +#: ../libertine/qml/SearchResultsView.qml:95 |
2052 | +msgid "Searching for packages…" |
2053 | +msgstr "Searching for packages…" |
2054 | + |
2055 | +#: ../libertine/qml/SearchResults.qml:60 |
2056 | +#: ../libertine/qml/DebianPackagePicker.qml:70 |
2057 | msgid "Install Package" |
2058 | msgstr "Install Package" |
2059 | |
2060 | -#: ../libertine/qml/HomeView.qml:45 |
2061 | -#, fuzzy |
2062 | -msgid "Install new package" |
2063 | -msgstr "Install Package" |
2064 | - |
2065 | -#: ../libertine/qml/PackageInfoView.qml:58 |
2066 | -#, fuzzy |
2067 | -msgid "Install status" |
2068 | -msgstr "Install status: %1" |
2069 | - |
2070 | -#: ../libertine/ContainerManager.cpp:26 |
2071 | -#, fuzzy |
2072 | -msgid "Installation of package %1 failed" |
2073 | -msgstr "Install Package" |
2074 | - |
2075 | -#: ../libertine/qml/ContainerPasswordDialog.qml:36 |
2076 | -msgid "Invalid password entered" |
2077 | -msgstr "" |
2078 | - |
2079 | -#: ../libertine/qml/ManageContainer.qml:27 |
2080 | +#: ../libertine/qml/ManageContainer.qml:29 |
2081 | msgid "Manage %1" |
2082 | -msgstr "" |
2083 | - |
2084 | -#: ../libertine/qml/HomeView.qml:102 |
2085 | -#, fuzzy |
2086 | -msgid "Manage Container" |
2087 | -msgstr "My Containers" |
2088 | - |
2089 | -#: ../libertine/qml/ContainersView.qml:31 |
2090 | -msgid "My Containers" |
2091 | -msgstr "My Containers" |
2092 | - |
2093 | -#: ../libertine/qml/ContainerInfoView.qml:55 |
2094 | -#, fuzzy |
2095 | -msgid "Name" |
2096 | -msgstr "Name: %1" |
2097 | - |
2098 | -#: ../libertine/qml/DebianPackagePicker.qml:72 |
2099 | +msgstr "Manage %1" |
2100 | + |
2101 | +#: ../libertine/qml/ManageContainer.qml:63 |
2102 | +#: ../libertine/qml/ContainerOptionsDialog.qml:40 |
2103 | +msgid "i386 multiarch support" |
2104 | +msgstr "i386 multiarch support" |
2105 | + |
2106 | +#: ../libertine/qml/ManageContainer.qml:67 |
2107 | +msgid "Additional archives and PPAs" |
2108 | +msgstr "Additional archives and PPAs" |
2109 | + |
2110 | +#: ../libertine/qml/ManageContainer.qml:78 |
2111 | +msgid "Update…" |
2112 | +msgstr "Update…" |
2113 | + |
2114 | +#: ../libertine/qml/ManageContainer.qml:94 |
2115 | +msgid "Update container" |
2116 | +msgstr "Update container" |
2117 | + |
2118 | +#: ../libertine/qml/DebianPackagePicker.qml:28 |
2119 | +msgid "Available Debian Packages to Install" |
2120 | +msgstr "Available Debian Packages to Install" |
2121 | + |
2122 | +#: ../libertine/qml/DebianPackagePicker.qml:87 |
2123 | msgid "No Debian packages available" |
2124 | -msgstr "" |
2125 | - |
2126 | -#: ../libertine/qml/SearchResultsView.qml:49 |
2127 | -#, fuzzy |
2128 | -msgid "No Search Results Found" |
2129 | -msgstr "No search results for %1." |
2130 | - |
2131 | -#: ../libertine/qml/ExtraArchivesView.qml:120 |
2132 | -msgid "No additional archives and PPA's have been added" |
2133 | -msgstr "" |
2134 | - |
2135 | -#: ../libertine/qml/HomeView.qml:227 |
2136 | -#, fuzzy |
2137 | -msgid "No packages are installed" |
2138 | -msgstr "Please enter the exact package name of the app to install:" |
2139 | - |
2140 | -#: ../libertine/qml/ContainerOptionsDialog.qml:64 |
2141 | -#: ../libertine/qml/ContainerPasswordDialog.qml:52 |
2142 | -#: ../libertine/qml/SearchPackagesDialog.qml:39 |
2143 | -#: ../libertine/qml/HomeView.qml:65 ../libertine/qml/ExtraArchivesView.qml:55 |
2144 | -msgid "OK" |
2145 | -msgstr "" |
2146 | - |
2147 | -#: ../libertine/qml/PackageInfoView.qml:33 |
2148 | -msgid "Obtaining package version…" |
2149 | -msgstr "Obtaining package version…" |
2150 | - |
2151 | -#: ../libertine/qml/HomeView.qml:209 |
2152 | -msgid "Package Info" |
2153 | -msgstr "Package Info" |
2154 | - |
2155 | -#: ../libertine/qml/SearchResultsView.qml:28 |
2156 | -msgid "Package Search Results" |
2157 | -msgstr "" |
2158 | - |
2159 | -#: ../libertine/qml/HomeView.qml:56 |
2160 | -msgid "Package name or Debian package path" |
2161 | -msgstr "" |
2162 | - |
2163 | -#: ../libertine/qml/PackageInfoView.qml:51 |
2164 | -#, fuzzy |
2165 | -msgid "Package version" |
2166 | -msgstr "Package version: %1" |
2167 | +msgstr "No Debian packages available" |
2168 | + |
2169 | +#: ../libertine/qml/ContainerPasswordDialog.qml:27 |
2170 | +msgid "Authentication required" |
2171 | +msgstr "Authentication required" |
2172 | |
2173 | #: ../libertine/qml/ContainerPasswordDialog.qml:28 |
2174 | msgid "Password is required to create a Libertine container" |
2175 | -msgstr "" |
2176 | - |
2177 | -#: ../libertine/ContainerManager.cpp:27 |
2178 | -msgid "Removal of package %1 failed" |
2179 | -msgstr "" |
2180 | - |
2181 | -#: ../libertine/qml/HomeView.qml:196 |
2182 | +msgstr "Password is required to create a Libertine container" |
2183 | + |
2184 | +#: ../libertine/qml/ContainerPasswordDialog.qml:36 |
2185 | +msgid "Invalid password entered" |
2186 | +msgstr "Invalid password entered" |
2187 | + |
2188 | +#: ../libertine/qml/ContainerPasswordDialog.qml:41 |
2189 | +msgid "password" |
2190 | +msgstr "password" |
2191 | + |
2192 | +#: ../libertine/qml/HomeView.qml:29 |
2193 | +msgid "Classic Apps - %1" |
2194 | +msgstr "Classic Apps - %1" |
2195 | + |
2196 | +#: ../libertine/qml/HomeView.qml:48 |
2197 | +msgid "Install new package" |
2198 | +msgstr "Install new package" |
2199 | + |
2200 | +#: ../libertine/qml/HomeView.qml:49 |
2201 | +msgid "Enter exact package name or full path to a Debian package file" |
2202 | +msgstr "Enter exact package name or full path to a Debian package file" |
2203 | + |
2204 | +#: ../libertine/qml/HomeView.qml:59 |
2205 | +msgid "Package name or Debian package path" |
2206 | +msgstr "Package name or Debian package path" |
2207 | + |
2208 | +#: ../libertine/qml/HomeView.qml:78 |
2209 | +msgid "The %1 package is already installed. Please try a different package name." |
2210 | +msgstr "The %1 package is already installed. Please try a different package name." |
2211 | + |
2212 | +#: ../libertine/qml/HomeView.qml:104 |
2213 | +msgid "Manage Container" |
2214 | +msgstr "Manage Container" |
2215 | + |
2216 | +#: ../libertine/qml/HomeView.qml:110 |
2217 | +msgid "Container Information" |
2218 | +msgstr "Container Information" |
2219 | + |
2220 | +#: ../libertine/qml/HomeView.qml:116 |
2221 | +msgid "Switch Container" |
2222 | +msgstr "Switch Container" |
2223 | + |
2224 | +#: ../libertine/qml/HomeView.qml:132 |
2225 | +msgid "Enter package name or Debian file" |
2226 | +msgstr "Enter package name or Debian file" |
2227 | + |
2228 | +#: ../libertine/qml/HomeView.qml:138 |
2229 | +msgid "Choose Debian package to install" |
2230 | +msgstr "Choose Debian package to install" |
2231 | + |
2232 | +#: ../libertine/qml/HomeView.qml:145 |
2233 | +msgid "Search archives for a package" |
2234 | +msgstr "Search archives for a package" |
2235 | + |
2236 | +#: ../libertine/qml/HomeView.qml:211 |
2237 | msgid "Remove Package" |
2238 | msgstr "Remove Package" |
2239 | |
2240 | -#: ../libertine/qml/ExtraArchivesView.qml:103 |
2241 | +#: ../libertine/qml/HomeView.qml:223 |
2242 | +msgid "Package Info" |
2243 | +msgstr "Package Info" |
2244 | + |
2245 | +#: ../libertine/qml/HomeView.qml:240 |
2246 | +msgid "No packages are installed" |
2247 | +msgstr "No packages are installed" |
2248 | + |
2249 | +#: ../libertine/qml/ExtraArchivesView.qml:28 |
2250 | +msgid "Additional Archives and PPAs" |
2251 | +msgstr "Additional Archives and PPAs" |
2252 | + |
2253 | +#: ../libertine/qml/ExtraArchivesView.qml:32 |
2254 | +msgid "add" |
2255 | +msgstr "add" |
2256 | + |
2257 | +#: ../libertine/qml/ExtraArchivesView.qml:33 |
2258 | +msgid "Add a new PPA" |
2259 | +msgstr "Add a new PPA" |
2260 | + |
2261 | +#: ../libertine/qml/ExtraArchivesView.qml:46 |
2262 | +msgid "Add additional PPA" |
2263 | +msgstr "Add additional PPA" |
2264 | + |
2265 | +#: ../libertine/qml/ExtraArchivesView.qml:47 |
2266 | +msgid "Enter name of PPA in the form ppa:user/ppa-name:" |
2267 | +msgstr "Enter name of PPA in the form ppa:user/ppa-name:" |
2268 | + |
2269 | +#: ../libertine/qml/ExtraArchivesView.qml:107 |
2270 | +msgid "remove" |
2271 | +msgstr "remove" |
2272 | + |
2273 | +#: ../libertine/qml/ExtraArchivesView.qml:108 |
2274 | msgid "Remove extra archive" |
2275 | -msgstr "" |
2276 | - |
2277 | -#: ../libertine/qml/SearchResultsView.qml:64 |
2278 | -msgid "Return to Apps Page" |
2279 | -msgstr "" |
2280 | - |
2281 | -#: ../libertine/qml/PackageExistsDialog.qml:43 |
2282 | -#, fuzzy |
2283 | -msgid "Return to search results" |
2284 | -msgstr "No search results for %1." |
2285 | - |
2286 | -#: ../libertine/qml/SearchResultsView.qml:38 |
2287 | -msgid "Search" |
2288 | -msgstr "" |
2289 | - |
2290 | -#: ../libertine/qml/SearchResultsView.qml:54 |
2291 | -msgid "Search Again" |
2292 | -msgstr "" |
2293 | - |
2294 | -#: ../libertine/qml/PackageExistsDialog.qml:33 |
2295 | -msgid "Search again" |
2296 | -msgstr "" |
2297 | - |
2298 | -#: ../libertine/qml/PackageExistsDialog.qml:29 |
2299 | -msgid "Search again or return to search results." |
2300 | -msgstr "" |
2301 | - |
2302 | -#: ../libertine/qml/HomeView.qml:143 |
2303 | -msgid "Search archives for a package" |
2304 | -msgstr "" |
2305 | - |
2306 | -#: ../libertine/qml/SearchPackagesDialog.qml:27 |
2307 | -msgid "Search archives for packages" |
2308 | -msgstr "" |
2309 | - |
2310 | -#: ../libertine/qml/SearchResultsView.qml:39 |
2311 | -#: ../libertine/qml/SearchPackagesDialog.qml:26 |
2312 | -msgid "Search for packages" |
2313 | -msgstr "" |
2314 | - |
2315 | -#: ../libertine/qml/SearchResultsView.qml:92 |
2316 | -#, fuzzy |
2317 | -msgid "Searching for packages…" |
2318 | -msgstr "Obtaining package version…" |
2319 | - |
2320 | -#: ../libertine/qml/ContainerInfoView.qml:69 |
2321 | -#, fuzzy |
2322 | -msgid "Status" |
2323 | -msgstr "Status: %1" |
2324 | - |
2325 | -#: ../libertine/qml/HomeView.qml:114 |
2326 | -msgid "Switch Container" |
2327 | -msgstr "Switch Container" |
2328 | - |
2329 | -#: ../libertine/qml/PackageExistsDialog.qml:28 |
2330 | -#, fuzzy |
2331 | -msgid "The %1 package is already installed." |
2332 | -msgstr "Please enter the exact package name of the app to install:" |
2333 | - |
2334 | -#: ../libertine/qml/HomeView.qml:76 |
2335 | -#, fuzzy |
2336 | -msgid "" |
2337 | -"The %1 package is already installed. Please try a different package name." |
2338 | -msgstr "Package %1 already installed. Please try a different package name." |
2339 | - |
2340 | -#: ../libertine/qml/PackageInfoView.qml:100 |
2341 | -msgid "Unknown" |
2342 | -msgstr "" |
2343 | - |
2344 | -#: ../libertine/qml/ManageContainer.qml:86 |
2345 | -#, fuzzy |
2346 | -msgid "Update container" |
2347 | -msgstr "Update Container" |
2348 | - |
2349 | -#: ../libertine/qml/ManageContainer.qml:70 |
2350 | -msgid "Update…" |
2351 | -msgstr "" |
2352 | - |
2353 | -#: ../libertine/qml/WelcomeView.qml:27 |
2354 | +msgstr "Remove extra archive" |
2355 | + |
2356 | +#: ../libertine/qml/ExtraArchivesView.qml:125 |
2357 | +msgid "No additional archives and PPA's have been added" |
2358 | +msgstr "No additional archives and PPA's have been added" |
2359 | + |
2360 | +#: ../libertine/qml/ExtraArchivesView.qml:173 |
2361 | +msgid "Adding archive failed" |
2362 | +msgstr "Adding archive failed" |
2363 | + |
2364 | +#: ../libertine/qml/ExtraArchivesView.qml:177 |
2365 | +msgid "Deleting archive failed" |
2366 | +msgstr "Deleting archive failed" |
2367 | + |
2368 | +#: ../libertine/qml/GenericErrorDialog.qml:32 |
2369 | +msgid "Dismiss" |
2370 | +msgstr "Dismiss" |
2371 | + |
2372 | +#: ../libertine/qml/WelcomeView.qml:28 |
2373 | msgid "Welcome" |
2374 | msgstr "Welcome" |
2375 | |
2376 | -#: ../libertine/qml/WelcomeView.qml:42 |
2377 | +#: ../libertine/qml/WelcomeView.qml:50 |
2378 | msgid "Welcome to the Ubuntu Legacy Application Support Manager." |
2379 | msgstr "Welcome to the Ubuntu Legacy Application Support Manager." |
2380 | |
2381 | -#: ../libertine/qml/WelcomeView.qml:50 |
2382 | +#: ../libertine/qml/WelcomeView.qml:58 |
2383 | msgid "" |
2384 | "You do not have Legacy Application Support configured at this time. " |
2385 | "Downloading and setting up the required environment takes some time and " |
2386 | @@ -336,87 +378,45 @@ |
2387 | "Downloading and setting up the required environment takes some time and " |
2388 | "network bandwidth." |
2389 | |
2390 | -#: ../libertine/qml/ExtraArchivesView.qml:34 |
2391 | -msgid "add" |
2392 | -msgstr "" |
2393 | +#: ../libertine/qml/WelcomeView.qml:66 |
2394 | +msgid "Install" |
2395 | +msgstr "Install" |
2396 | + |
2397 | +#: ../libertine/qml/ContainerInfoView.qml:30 |
2398 | +msgid "Container information for %1" |
2399 | +msgstr "Container information for %1" |
2400 | + |
2401 | +#: ../libertine/qml/ContainerInfoView.qml:53 |
2402 | +msgid "ID" |
2403 | +msgstr "ID" |
2404 | + |
2405 | +#: ../libertine/qml/ContainerInfoView.qml:60 |
2406 | +msgid "Name" |
2407 | +msgstr "Name" |
2408 | + |
2409 | +#: ../libertine/qml/ContainerInfoView.qml:67 |
2410 | +msgid "Distribution" |
2411 | +msgstr "Distribution" |
2412 | + |
2413 | +#: ../libertine/qml/ContainerInfoView.qml:74 |
2414 | +msgid "Status" |
2415 | +msgstr "Status" |
2416 | + |
2417 | +#: ../libertine/qml/ContainerOptionsDialog.qml:27 |
2418 | +msgid "Container Options" |
2419 | +msgstr "Container Options" |
2420 | + |
2421 | +#: ../libertine/qml/ContainerOptionsDialog.qml:28 |
2422 | +msgid "Configure options for container creation." |
2423 | +msgstr "Configure options for container creation." |
2424 | + |
2425 | +#: ../libertine/qml/ContainerOptionsDialog.qml:50 |
2426 | +msgid "Enter or name for the container or leave blank for default name" |
2427 | +msgstr "Enter or name for the container or leave blank for default name" |
2428 | |
2429 | #: ../libertine/qml/ContainerOptionsDialog.qml:56 |
2430 | -#, fuzzy |
2431 | msgid "container name" |
2432 | -msgstr "Container Info" |
2433 | - |
2434 | -#: ../libertine/qml/ContainersView.qml:72 ../libertine/qml/HomeView.qml:195 |
2435 | -msgid "delete" |
2436 | -msgstr "delete" |
2437 | - |
2438 | -#: ../libertine/qml/ContainersView.qml:99 |
2439 | -msgid "edit" |
2440 | -msgstr "edit" |
2441 | - |
2442 | -#: ../libertine/ContainerConfig.cpp:153 ../libertine/ContainerConfig.cpp:187 |
2443 | -msgid "failed" |
2444 | -msgstr "failed" |
2445 | - |
2446 | -#: ../libertine/qml/ContainerOptionsDialog.qml:40 |
2447 | -#: ../libertine/qml/ManageContainer.qml:55 |
2448 | -msgid "i386 multiarch support" |
2449 | -msgstr "i386 multiarch support" |
2450 | - |
2451 | -#: ../libertine/qml/ContainersView.qml:90 ../libertine/qml/HomeView.qml:208 |
2452 | -msgid "info" |
2453 | -msgstr "info" |
2454 | - |
2455 | -#: ../libertine/ContainerConfig.cpp:186 |
2456 | -msgid "installed" |
2457 | -msgstr "installed" |
2458 | - |
2459 | -#: ../libertine/ContainerConfig.cpp:148 ../libertine/ContainerConfig.cpp:185 |
2460 | -#: ../libertine/qml/ContainersView.qml:63 ../libertine/qml/HomeView.qml:187 |
2461 | -#: ../libertine/qml/ExtraArchivesView.qml:94 |
2462 | -msgid "installing" |
2463 | -msgstr "installing" |
2464 | - |
2465 | -#: ../libertine/ContainerConfig.cpp:147 ../libertine/ContainerConfig.cpp:184 |
2466 | -msgid "new" |
2467 | -msgstr "new" |
2468 | - |
2469 | -#: ../libertine/qml/ContainerPasswordDialog.qml:41 |
2470 | -#, fuzzy |
2471 | -msgid "password" |
2472 | -msgstr "Password" |
2473 | - |
2474 | -#: ../libertine/ContainerConfig.cpp:149 ../libertine/qml/ContainersView.qml:101 |
2475 | -#: ../libertine/qml/ManageContainer.qml:71 |
2476 | -#: ../libertine/qml/ManageContainer.qml:112 |
2477 | -msgid "ready" |
2478 | -msgstr "ready" |
2479 | - |
2480 | -#: ../libertine/qml/ExtraArchivesView.qml:102 |
2481 | -#, fuzzy |
2482 | -msgid "remove" |
2483 | -msgstr "removed" |
2484 | - |
2485 | -#: ../libertine/ContainerConfig.cpp:152 ../libertine/ContainerConfig.cpp:189 |
2486 | -#: ../libertine/qml/ContainerInfoView.qml:88 |
2487 | -#: ../libertine/qml/PackageInfoView.qml:91 |
2488 | -msgid "removed" |
2489 | -msgstr "removed" |
2490 | - |
2491 | -#: ../libertine/ContainerConfig.cpp:151 ../libertine/ContainerConfig.cpp:188 |
2492 | -#: ../libertine/qml/ContainersView.qml:64 ../libertine/qml/HomeView.qml:188 |
2493 | -#: ../libertine/qml/ExtraArchivesView.qml:95 |
2494 | -msgid "removing" |
2495 | -msgstr "removing" |
2496 | - |
2497 | -#: ../libertine/qml/SearchPackagesDialog.qml:31 |
2498 | -msgid "search" |
2499 | -msgstr "" |
2500 | - |
2501 | -#: ../libertine/ContainerConfig.cpp:150 ../libertine/qml/ContainersView.qml:102 |
2502 | -#: ../libertine/qml/ManageContainer.qml:83 |
2503 | -#: ../libertine/qml/ManageContainer.qml:108 |
2504 | -msgid "updating" |
2505 | -msgstr "" |
2506 | +msgstr "container name" |
2507 | |
2508 | #~ msgid "Configure %1" |
2509 | #~ msgstr "Configure %1" |
2510 | |
2511 | === modified file 'po/libertine.pot' |
2512 | --- po/libertine.pot 2016-05-09 14:38:13 +0000 |
2513 | +++ po/libertine.pot 2016-06-07 12:41:22 +0000 |
2514 | @@ -8,7 +8,7 @@ |
2515 | msgstr "" |
2516 | "Project-Id-Version: PACKAGE VERSION\n" |
2517 | "Report-Msgid-Bugs-To: \n" |
2518 | -"POT-Creation-Date: 2016-05-09 10:33-0400\n" |
2519 | +"POT-Creation-Date: 2016-06-07 07:58-0400\n" |
2520 | "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" |
2521 | "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" |
2522 | "Language-Team: LANGUAGE <LL@li.org>\n" |
2523 | @@ -17,49 +17,37 @@ |
2524 | "Content-Type: text/plain; charset=UTF-8\n" |
2525 | "Content-Transfer-Encoding: 8bit\n" |
2526 | |
2527 | -#: ../libertine/ContainerManager.cpp:25 |
2528 | -msgid "%1 failed to start" |
2529 | -msgstr "" |
2530 | - |
2531 | -#: ../libertine/ContainerManager.cpp:26 |
2532 | -msgid "Installation of package %1 failed" |
2533 | -msgstr "" |
2534 | - |
2535 | -#: ../libertine/ContainerManager.cpp:27 |
2536 | -msgid "Removal of package %1 failed" |
2537 | -msgstr "" |
2538 | - |
2539 | #: ../libertine/ContainerConfig.cpp:147 ../libertine/ContainerConfig.cpp:184 |
2540 | msgid "new" |
2541 | msgstr "" |
2542 | |
2543 | #: ../libertine/ContainerConfig.cpp:148 ../libertine/ContainerConfig.cpp:185 |
2544 | -#: ../libertine/qml/ContainersView.qml:63 ../libertine/qml/HomeView.qml:187 |
2545 | -#: ../libertine/qml/ExtraArchivesView.qml:94 |
2546 | +#: ../libertine/qml/ContainersView.qml:81 ../libertine/qml/HomeView.qml:197 |
2547 | +#: ../libertine/qml/ExtraArchivesView.qml:99 |
2548 | msgid "installing" |
2549 | msgstr "" |
2550 | |
2551 | -#: ../libertine/ContainerConfig.cpp:149 ../libertine/qml/ContainersView.qml:101 |
2552 | -#: ../libertine/qml/ManageContainer.qml:71 |
2553 | -#: ../libertine/qml/ManageContainer.qml:112 |
2554 | +#: ../libertine/ContainerConfig.cpp:149 ../libertine/qml/ContainersView.qml:119 |
2555 | +#: ../libertine/qml/ManageContainer.qml:79 |
2556 | +#: ../libertine/qml/ManageContainer.qml:119 |
2557 | msgid "ready" |
2558 | msgstr "" |
2559 | |
2560 | -#: ../libertine/ContainerConfig.cpp:150 ../libertine/qml/ContainersView.qml:102 |
2561 | -#: ../libertine/qml/ManageContainer.qml:83 |
2562 | -#: ../libertine/qml/ManageContainer.qml:108 |
2563 | +#: ../libertine/ContainerConfig.cpp:150 ../libertine/qml/ContainersView.qml:120 |
2564 | +#: ../libertine/qml/ManageContainer.qml:91 |
2565 | +#: ../libertine/qml/ManageContainer.qml:115 |
2566 | msgid "updating" |
2567 | msgstr "" |
2568 | |
2569 | #: ../libertine/ContainerConfig.cpp:151 ../libertine/ContainerConfig.cpp:188 |
2570 | -#: ../libertine/qml/ContainersView.qml:64 ../libertine/qml/HomeView.qml:188 |
2571 | -#: ../libertine/qml/ExtraArchivesView.qml:95 |
2572 | +#: ../libertine/qml/ContainersView.qml:82 ../libertine/qml/HomeView.qml:198 |
2573 | +#: ../libertine/qml/ExtraArchivesView.qml:100 |
2574 | msgid "removing" |
2575 | msgstr "" |
2576 | |
2577 | #: ../libertine/ContainerConfig.cpp:152 ../libertine/ContainerConfig.cpp:189 |
2578 | -#: ../libertine/qml/ContainerInfoView.qml:88 |
2579 | -#: ../libertine/qml/PackageInfoView.qml:91 |
2580 | +#: ../libertine/qml/PackageInfoView.qml:131 |
2581 | +#: ../libertine/qml/ContainerInfoView.qml:93 |
2582 | msgid "removed" |
2583 | msgstr "" |
2584 | |
2585 | @@ -71,84 +59,188 @@ |
2586 | msgid "installed" |
2587 | msgstr "" |
2588 | |
2589 | -#: ../libertine/qml/ContainerOptionsDialog.qml:27 |
2590 | -msgid "Container Options" |
2591 | -msgstr "" |
2592 | - |
2593 | -#: ../libertine/qml/ContainerOptionsDialog.qml:28 |
2594 | -msgid "Configure options for container creation." |
2595 | -msgstr "" |
2596 | - |
2597 | -#: ../libertine/qml/ContainerOptionsDialog.qml:40 |
2598 | -#: ../libertine/qml/ManageContainer.qml:55 |
2599 | -msgid "i386 multiarch support" |
2600 | -msgstr "" |
2601 | - |
2602 | -#: ../libertine/qml/ContainerOptionsDialog.qml:50 |
2603 | -msgid "Enter or name for the container or leave blank for default name" |
2604 | -msgstr "" |
2605 | - |
2606 | -#: ../libertine/qml/ContainerOptionsDialog.qml:56 |
2607 | -msgid "container name" |
2608 | -msgstr "" |
2609 | - |
2610 | +#: ../libertine/ContainerManager.cpp:24 |
2611 | +msgid "%1 failed to start" |
2612 | +msgstr "" |
2613 | + |
2614 | +#: ../libertine/ContainerManager.cpp:25 |
2615 | +msgid "Installation of package %1 failed" |
2616 | +msgstr "" |
2617 | + |
2618 | +#: ../libertine/ContainerManager.cpp:26 |
2619 | +msgid "Removal of package %1 failed" |
2620 | +msgstr "" |
2621 | + |
2622 | +#: ../libertine/ContainerManager.cpp:27 |
2623 | +msgid "Searching for query %1 failed" |
2624 | +msgstr "" |
2625 | + |
2626 | +#: ../libertine/ContainerManager.cpp:28 |
2627 | +msgid "Updating container %1 failed" |
2628 | +msgstr "" |
2629 | + |
2630 | +#: ../libertine/ContainerManager.cpp:29 |
2631 | +msgid "Creating container %1 failed" |
2632 | +msgstr "" |
2633 | + |
2634 | +#: ../libertine/ContainerManager.cpp:30 |
2635 | +msgid "Destroying container %1 failed" |
2636 | +msgstr "" |
2637 | + |
2638 | +#: ../libertine/ContainerManager.cpp:31 |
2639 | +msgid "Running command %1 failed" |
2640 | +msgstr "" |
2641 | + |
2642 | +#: ../libertine/ContainerManager.cpp:32 |
2643 | +msgid "Attempt to configure container %1 failed" |
2644 | +msgstr "" |
2645 | + |
2646 | +#: ../libertine/qml/PackageExistsDialog.qml:28 |
2647 | +msgid "The %1 package is already installed." |
2648 | +msgstr "" |
2649 | + |
2650 | +#: ../libertine/qml/PackageExistsDialog.qml:29 |
2651 | +msgid "Search again or return to search results." |
2652 | +msgstr "" |
2653 | + |
2654 | +#: ../libertine/qml/PackageExistsDialog.qml:33 |
2655 | +msgid "Search again" |
2656 | +msgstr "" |
2657 | + |
2658 | +#: ../libertine/qml/PackageExistsDialog.qml:43 |
2659 | +msgid "Return to search results" |
2660 | +msgstr "" |
2661 | + |
2662 | +#: ../libertine/qml/ContainersView.qml:33 |
2663 | +msgid "My Containers" |
2664 | +msgstr "" |
2665 | + |
2666 | +#: ../libertine/qml/ContainersView.qml:92 ../libertine/qml/HomeView.qml:210 |
2667 | +msgid "delete" |
2668 | +msgstr "" |
2669 | + |
2670 | +#: ../libertine/qml/ContainersView.qml:93 |
2671 | +msgid "Delete Container" |
2672 | +msgstr "" |
2673 | + |
2674 | +#: ../libertine/qml/ContainersView.qml:108 ../libertine/qml/HomeView.qml:222 |
2675 | +msgid "info" |
2676 | +msgstr "" |
2677 | + |
2678 | +#: ../libertine/qml/ContainersView.qml:109 |
2679 | +msgid "Container Info" |
2680 | +msgstr "" |
2681 | + |
2682 | +#: ../libertine/qml/ContainersView.qml:117 |
2683 | +msgid "edit" |
2684 | +msgstr "" |
2685 | + |
2686 | +#: ../libertine/qml/ContainersView.qml:118 |
2687 | +msgid "Container Apps" |
2688 | +msgstr "" |
2689 | + |
2690 | +#: ../libertine/qml/SearchPackagesDialog.qml:26 |
2691 | +#: ../libertine/qml/SearchResultsView.qml:36 |
2692 | +msgid "Search for packages" |
2693 | +msgstr "" |
2694 | + |
2695 | +#: ../libertine/qml/SearchPackagesDialog.qml:27 |
2696 | +msgid "Search archives for packages" |
2697 | +msgstr "" |
2698 | + |
2699 | +#: ../libertine/qml/SearchPackagesDialog.qml:31 |
2700 | +msgid "search" |
2701 | +msgstr "" |
2702 | + |
2703 | +#: ../libertine/qml/SearchPackagesDialog.qml:39 |
2704 | +#: ../libertine/qml/ContainerPasswordDialog.qml:52 |
2705 | +#: ../libertine/qml/HomeView.qml:68 ../libertine/qml/ExtraArchivesView.qml:57 |
2706 | #: ../libertine/qml/ContainerOptionsDialog.qml:64 |
2707 | -#: ../libertine/qml/ContainerPasswordDialog.qml:52 |
2708 | -#: ../libertine/qml/SearchPackagesDialog.qml:39 |
2709 | -#: ../libertine/qml/HomeView.qml:65 ../libertine/qml/ExtraArchivesView.qml:55 |
2710 | msgid "OK" |
2711 | msgstr "" |
2712 | |
2713 | +#: ../libertine/qml/SearchPackagesDialog.qml:57 |
2714 | +#: ../libertine/qml/ContainerPasswordDialog.qml:70 |
2715 | +#: ../libertine/qml/HomeView.qml:88 ../libertine/qml/ExtraArchivesView.qml:65 |
2716 | #: ../libertine/qml/ContainerOptionsDialog.qml:75 |
2717 | -#: ../libertine/qml/ContainerPasswordDialog.qml:70 |
2718 | -#: ../libertine/qml/SearchPackagesDialog.qml:57 |
2719 | -#: ../libertine/qml/HomeView.qml:86 ../libertine/qml/ExtraArchivesView.qml:63 |
2720 | msgid "Cancel" |
2721 | msgstr "" |
2722 | |
2723 | -#: ../libertine/qml/GenericErrorDialog.qml:32 |
2724 | -msgid "Dismiss" |
2725 | -msgstr "" |
2726 | - |
2727 | -#: ../libertine/qml/SearchResultsView.qml:28 |
2728 | +#: ../libertine/qml/PackageInfoView.qml:30 |
2729 | +msgid "Information for the %1 package" |
2730 | +msgstr "" |
2731 | + |
2732 | +#: ../libertine/qml/PackageInfoView.qml:35 |
2733 | +msgid "Obtaining package version…" |
2734 | +msgstr "" |
2735 | + |
2736 | +#: ../libertine/qml/PackageInfoView.qml:59 |
2737 | +msgid "Package version" |
2738 | +msgstr "" |
2739 | + |
2740 | +#: ../libertine/qml/PackageInfoView.qml:67 |
2741 | +msgid "Install status" |
2742 | +msgstr "" |
2743 | + |
2744 | +#: ../libertine/qml/PackageInfoView.qml:140 |
2745 | +msgid "Unknown" |
2746 | +msgstr "" |
2747 | + |
2748 | +#: ../libertine/qml/SearchResultsView.qml:31 |
2749 | msgid "Package Search Results" |
2750 | msgstr "" |
2751 | |
2752 | -#: ../libertine/qml/SearchResultsView.qml:38 |
2753 | +#: ../libertine/qml/SearchResultsView.qml:35 |
2754 | msgid "Search" |
2755 | msgstr "" |
2756 | |
2757 | -#: ../libertine/qml/SearchResultsView.qml:39 |
2758 | -#: ../libertine/qml/SearchPackagesDialog.qml:26 |
2759 | -msgid "Search for packages" |
2760 | -msgstr "" |
2761 | - |
2762 | -#: ../libertine/qml/SearchResultsView.qml:49 |
2763 | +#: ../libertine/qml/SearchResultsView.qml:52 |
2764 | msgid "No Search Results Found" |
2765 | msgstr "" |
2766 | |
2767 | -#: ../libertine/qml/SearchResultsView.qml:54 |
2768 | +#: ../libertine/qml/SearchResultsView.qml:57 |
2769 | msgid "Search Again" |
2770 | msgstr "" |
2771 | |
2772 | -#: ../libertine/qml/SearchResultsView.qml:64 |
2773 | +#: ../libertine/qml/SearchResultsView.qml:67 |
2774 | msgid "Return to Apps Page" |
2775 | msgstr "" |
2776 | |
2777 | -#: ../libertine/qml/SearchResultsView.qml:92 |
2778 | +#: ../libertine/qml/SearchResultsView.qml:95 |
2779 | msgid "Searching for packages…" |
2780 | msgstr "" |
2781 | |
2782 | -#: ../libertine/qml/DebianPackagePicker.qml:26 |
2783 | +#: ../libertine/qml/SearchResults.qml:60 |
2784 | +#: ../libertine/qml/DebianPackagePicker.qml:70 |
2785 | +msgid "Install Package" |
2786 | +msgstr "" |
2787 | + |
2788 | +#: ../libertine/qml/ManageContainer.qml:29 |
2789 | +msgid "Manage %1" |
2790 | +msgstr "" |
2791 | + |
2792 | +#: ../libertine/qml/ManageContainer.qml:63 |
2793 | +#: ../libertine/qml/ContainerOptionsDialog.qml:40 |
2794 | +msgid "i386 multiarch support" |
2795 | +msgstr "" |
2796 | + |
2797 | +#: ../libertine/qml/ManageContainer.qml:67 |
2798 | +msgid "Additional archives and PPAs" |
2799 | +msgstr "" |
2800 | + |
2801 | +#: ../libertine/qml/ManageContainer.qml:78 |
2802 | +msgid "Update…" |
2803 | +msgstr "" |
2804 | + |
2805 | +#: ../libertine/qml/ManageContainer.qml:94 |
2806 | +msgid "Update container" |
2807 | +msgstr "" |
2808 | + |
2809 | +#: ../libertine/qml/DebianPackagePicker.qml:28 |
2810 | msgid "Available Debian Packages to Install" |
2811 | msgstr "" |
2812 | |
2813 | -#: ../libertine/qml/DebianPackagePicker.qml:53 |
2814 | -#: ../libertine/qml/SearchResults.qml:42 |
2815 | -msgid "Install Package" |
2816 | -msgstr "" |
2817 | - |
2818 | -#: ../libertine/qml/DebianPackagePicker.qml:72 |
2819 | +#: ../libertine/qml/DebianPackagePicker.qml:87 |
2820 | msgid "No Debian packages available" |
2821 | msgstr "" |
2822 | |
2823 | @@ -168,226 +260,158 @@ |
2824 | msgid "password" |
2825 | msgstr "" |
2826 | |
2827 | -#: ../libertine/qml/ContainerInfoView.qml:28 |
2828 | -msgid "Container information for %1" |
2829 | -msgstr "" |
2830 | - |
2831 | -#: ../libertine/qml/ContainerInfoView.qml:48 |
2832 | -msgid "ID" |
2833 | -msgstr "" |
2834 | - |
2835 | -#: ../libertine/qml/ContainerInfoView.qml:55 |
2836 | -msgid "Name" |
2837 | -msgstr "" |
2838 | - |
2839 | -#: ../libertine/qml/ContainerInfoView.qml:62 |
2840 | -msgid "Distribution" |
2841 | -msgstr "" |
2842 | - |
2843 | -#: ../libertine/qml/ContainerInfoView.qml:69 |
2844 | -msgid "Status" |
2845 | -msgstr "" |
2846 | - |
2847 | -#: ../libertine/qml/ContainersView.qml:31 |
2848 | -msgid "My Containers" |
2849 | -msgstr "" |
2850 | - |
2851 | -#: ../libertine/qml/ContainersView.qml:72 ../libertine/qml/HomeView.qml:195 |
2852 | -msgid "delete" |
2853 | -msgstr "" |
2854 | - |
2855 | -#: ../libertine/qml/ContainersView.qml:73 |
2856 | -msgid "Delete Container" |
2857 | -msgstr "" |
2858 | - |
2859 | -#: ../libertine/qml/ContainersView.qml:90 ../libertine/qml/HomeView.qml:208 |
2860 | -msgid "info" |
2861 | -msgstr "" |
2862 | - |
2863 | -#: ../libertine/qml/ContainersView.qml:91 |
2864 | -msgid "Container Info" |
2865 | -msgstr "" |
2866 | - |
2867 | -#: ../libertine/qml/ContainersView.qml:99 |
2868 | -msgid "edit" |
2869 | -msgstr "" |
2870 | - |
2871 | -#: ../libertine/qml/ContainersView.qml:100 |
2872 | -msgid "Container Apps" |
2873 | -msgstr "" |
2874 | - |
2875 | -#: ../libertine/qml/SearchPackagesDialog.qml:27 |
2876 | -msgid "Search archives for packages" |
2877 | -msgstr "" |
2878 | - |
2879 | -#: ../libertine/qml/SearchPackagesDialog.qml:31 |
2880 | -msgid "search" |
2881 | -msgstr "" |
2882 | - |
2883 | -#: ../libertine/qml/ManageContainer.qml:27 |
2884 | -msgid "Manage %1" |
2885 | -msgstr "" |
2886 | - |
2887 | -#: ../libertine/qml/ManageContainer.qml:59 |
2888 | -msgid "Additional archives and PPAs" |
2889 | -msgstr "" |
2890 | - |
2891 | -#: ../libertine/qml/ManageContainer.qml:70 |
2892 | -msgid "Update…" |
2893 | -msgstr "" |
2894 | - |
2895 | -#: ../libertine/qml/ManageContainer.qml:86 |
2896 | -msgid "Update container" |
2897 | -msgstr "" |
2898 | - |
2899 | -#: ../libertine/qml/HomeView.qml:27 |
2900 | +#: ../libertine/qml/HomeView.qml:29 |
2901 | msgid "Classic Apps - %1" |
2902 | msgstr "" |
2903 | |
2904 | -#: ../libertine/qml/HomeView.qml:45 |
2905 | +#: ../libertine/qml/HomeView.qml:48 |
2906 | msgid "Install new package" |
2907 | msgstr "" |
2908 | |
2909 | -#: ../libertine/qml/HomeView.qml:46 |
2910 | +#: ../libertine/qml/HomeView.qml:49 |
2911 | msgid "Enter exact package name or full path to a Debian package file" |
2912 | msgstr "" |
2913 | |
2914 | -#: ../libertine/qml/HomeView.qml:56 |
2915 | +#: ../libertine/qml/HomeView.qml:59 |
2916 | msgid "Package name or Debian package path" |
2917 | msgstr "" |
2918 | |
2919 | -#: ../libertine/qml/HomeView.qml:76 |
2920 | +#: ../libertine/qml/HomeView.qml:78 |
2921 | msgid "" |
2922 | "The %1 package is already installed. Please try a different package name." |
2923 | msgstr "" |
2924 | |
2925 | -#: ../libertine/qml/HomeView.qml:102 |
2926 | +#: ../libertine/qml/HomeView.qml:104 |
2927 | msgid "Manage Container" |
2928 | msgstr "" |
2929 | |
2930 | -#: ../libertine/qml/HomeView.qml:108 |
2931 | +#: ../libertine/qml/HomeView.qml:110 |
2932 | msgid "Container Information" |
2933 | msgstr "" |
2934 | |
2935 | -#: ../libertine/qml/HomeView.qml:114 |
2936 | +#: ../libertine/qml/HomeView.qml:116 |
2937 | msgid "Switch Container" |
2938 | msgstr "" |
2939 | |
2940 | -#: ../libertine/qml/HomeView.qml:130 |
2941 | +#: ../libertine/qml/HomeView.qml:132 |
2942 | msgid "Enter package name or Debian file" |
2943 | msgstr "" |
2944 | |
2945 | -#: ../libertine/qml/HomeView.qml:136 |
2946 | +#: ../libertine/qml/HomeView.qml:138 |
2947 | msgid "Choose Debian package to install" |
2948 | msgstr "" |
2949 | |
2950 | -#: ../libertine/qml/HomeView.qml:143 |
2951 | +#: ../libertine/qml/HomeView.qml:145 |
2952 | msgid "Search archives for a package" |
2953 | msgstr "" |
2954 | |
2955 | -#: ../libertine/qml/HomeView.qml:196 |
2956 | +#: ../libertine/qml/HomeView.qml:211 |
2957 | msgid "Remove Package" |
2958 | msgstr "" |
2959 | |
2960 | -#: ../libertine/qml/HomeView.qml:209 |
2961 | +#: ../libertine/qml/HomeView.qml:223 |
2962 | msgid "Package Info" |
2963 | msgstr "" |
2964 | |
2965 | -#: ../libertine/qml/HomeView.qml:227 |
2966 | +#: ../libertine/qml/HomeView.qml:240 |
2967 | msgid "No packages are installed" |
2968 | msgstr "" |
2969 | |
2970 | -#: ../libertine/qml/PackageInfoView.qml:29 |
2971 | -msgid "Information for the %1 package" |
2972 | -msgstr "" |
2973 | - |
2974 | -#: ../libertine/qml/PackageInfoView.qml:33 |
2975 | -msgid "Obtaining package version…" |
2976 | -msgstr "" |
2977 | - |
2978 | -#: ../libertine/qml/PackageInfoView.qml:51 |
2979 | -msgid "Package version" |
2980 | -msgstr "" |
2981 | - |
2982 | -#: ../libertine/qml/PackageInfoView.qml:58 |
2983 | -msgid "Install status" |
2984 | -msgstr "" |
2985 | - |
2986 | -#: ../libertine/qml/PackageInfoView.qml:100 |
2987 | -msgid "Unknown" |
2988 | -msgstr "" |
2989 | - |
2990 | -#: ../libertine/qml/WelcomeView.qml:27 |
2991 | -msgid "Welcome" |
2992 | -msgstr "" |
2993 | - |
2994 | -#: ../libertine/qml/WelcomeView.qml:42 |
2995 | -msgid "Welcome to the Ubuntu Legacy Application Support Manager." |
2996 | -msgstr "" |
2997 | - |
2998 | -#: ../libertine/qml/WelcomeView.qml:50 |
2999 | -msgid "" |
3000 | -"You do not have Legacy Application Support configured at this time. " |
3001 | -"Downloading and setting up the required environment takes some time and " |
3002 | -"network bandwidth." |
3003 | -msgstr "" |
3004 | - |
3005 | -#: ../libertine/qml/WelcomeView.qml:58 |
3006 | -msgid "Install" |
3007 | -msgstr "" |
3008 | - |
3009 | -#: ../libertine/qml/ExtraArchivesView.qml:26 |
3010 | +#: ../libertine/qml/ExtraArchivesView.qml:28 |
3011 | msgid "Additional Archives and PPAs" |
3012 | msgstr "" |
3013 | |
3014 | -#: ../libertine/qml/ExtraArchivesView.qml:34 |
3015 | +#: ../libertine/qml/ExtraArchivesView.qml:32 |
3016 | msgid "add" |
3017 | msgstr "" |
3018 | |
3019 | -#: ../libertine/qml/ExtraArchivesView.qml:35 |
3020 | +#: ../libertine/qml/ExtraArchivesView.qml:33 |
3021 | msgid "Add a new PPA" |
3022 | msgstr "" |
3023 | |
3024 | -#: ../libertine/qml/ExtraArchivesView.qml:44 |
3025 | +#: ../libertine/qml/ExtraArchivesView.qml:46 |
3026 | msgid "Add additional PPA" |
3027 | msgstr "" |
3028 | |
3029 | -#: ../libertine/qml/ExtraArchivesView.qml:45 |
3030 | +#: ../libertine/qml/ExtraArchivesView.qml:47 |
3031 | msgid "Enter name of PPA in the form ppa:user/ppa-name:" |
3032 | msgstr "" |
3033 | |
3034 | -#: ../libertine/qml/ExtraArchivesView.qml:102 |
3035 | +#: ../libertine/qml/ExtraArchivesView.qml:107 |
3036 | msgid "remove" |
3037 | msgstr "" |
3038 | |
3039 | -#: ../libertine/qml/ExtraArchivesView.qml:103 |
3040 | +#: ../libertine/qml/ExtraArchivesView.qml:108 |
3041 | msgid "Remove extra archive" |
3042 | msgstr "" |
3043 | |
3044 | -#: ../libertine/qml/ExtraArchivesView.qml:120 |
3045 | +#: ../libertine/qml/ExtraArchivesView.qml:125 |
3046 | msgid "No additional archives and PPA's have been added" |
3047 | msgstr "" |
3048 | |
3049 | -#: ../libertine/qml/ExtraArchivesView.qml:174 |
3050 | +#: ../libertine/qml/ExtraArchivesView.qml:173 |
3051 | msgid "Adding archive failed" |
3052 | msgstr "" |
3053 | |
3054 | -#: ../libertine/qml/ExtraArchivesView.qml:178 |
3055 | +#: ../libertine/qml/ExtraArchivesView.qml:177 |
3056 | msgid "Deleting archive failed" |
3057 | msgstr "" |
3058 | |
3059 | -#: ../libertine/qml/PackageExistsDialog.qml:28 |
3060 | -msgid "The %1 package is already installed." |
3061 | -msgstr "" |
3062 | - |
3063 | -#: ../libertine/qml/PackageExistsDialog.qml:29 |
3064 | -msgid "Search again or return to search results." |
3065 | -msgstr "" |
3066 | - |
3067 | -#: ../libertine/qml/PackageExistsDialog.qml:33 |
3068 | -msgid "Search again" |
3069 | -msgstr "" |
3070 | - |
3071 | -#: ../libertine/qml/PackageExistsDialog.qml:43 |
3072 | -msgid "Return to search results" |
3073 | +#: ../libertine/qml/GenericErrorDialog.qml:32 |
3074 | +msgid "Dismiss" |
3075 | +msgstr "" |
3076 | + |
3077 | +#: ../libertine/qml/WelcomeView.qml:28 |
3078 | +msgid "Welcome" |
3079 | +msgstr "" |
3080 | + |
3081 | +#: ../libertine/qml/WelcomeView.qml:50 |
3082 | +msgid "Welcome to the Ubuntu Legacy Application Support Manager." |
3083 | +msgstr "" |
3084 | + |
3085 | +#: ../libertine/qml/WelcomeView.qml:58 |
3086 | +msgid "" |
3087 | +"You do not have Legacy Application Support configured at this time. " |
3088 | +"Downloading and setting up the required environment takes some time and " |
3089 | +"network bandwidth." |
3090 | +msgstr "" |
3091 | + |
3092 | +#: ../libertine/qml/WelcomeView.qml:66 |
3093 | +msgid "Install" |
3094 | +msgstr "" |
3095 | + |
3096 | +#: ../libertine/qml/ContainerInfoView.qml:30 |
3097 | +msgid "Container information for %1" |
3098 | +msgstr "" |
3099 | + |
3100 | +#: ../libertine/qml/ContainerInfoView.qml:53 |
3101 | +msgid "ID" |
3102 | +msgstr "" |
3103 | + |
3104 | +#: ../libertine/qml/ContainerInfoView.qml:60 |
3105 | +msgid "Name" |
3106 | +msgstr "" |
3107 | + |
3108 | +#: ../libertine/qml/ContainerInfoView.qml:67 |
3109 | +msgid "Distribution" |
3110 | +msgstr "" |
3111 | + |
3112 | +#: ../libertine/qml/ContainerInfoView.qml:74 |
3113 | +msgid "Status" |
3114 | +msgstr "" |
3115 | + |
3116 | +#: ../libertine/qml/ContainerOptionsDialog.qml:27 |
3117 | +msgid "Container Options" |
3118 | +msgstr "" |
3119 | + |
3120 | +#: ../libertine/qml/ContainerOptionsDialog.qml:28 |
3121 | +msgid "Configure options for container creation." |
3122 | +msgstr "" |
3123 | + |
3124 | +#: ../libertine/qml/ContainerOptionsDialog.qml:50 |
3125 | +msgid "Enter or name for the container or leave blank for default name" |
3126 | +msgstr "" |
3127 | + |
3128 | +#: ../libertine/qml/ContainerOptionsDialog.qml:56 |
3129 | +msgid "container name" |
3130 | msgstr "" |
3131 | |
3132 | === modified file 'python/libertine/ChrootContainer.py' |
3133 | --- python/libertine/ChrootContainer.py 2016-05-11 17:26:27 +0000 |
3134 | +++ python/libertine/ChrootContainer.py 2016-06-07 12:41:22 +0000 |
3135 | @@ -180,8 +180,8 @@ |
3136 | self._run_ldconfig(verbosity) |
3137 | return retcode |
3138 | |
3139 | - def install_package(self, package_name, verbosity=1, extra_apt_args=""): |
3140 | - returncode = super().install_package(package_name, verbosity, extra_apt_args) |
3141 | + def install_package(self, package_name, verbosity=1, readline=False): |
3142 | + returncode = super().install_package(package_name, verbosity, readline) |
3143 | |
3144 | if returncode: |
3145 | self._run_ldconfig(verbosity) |
3146 | @@ -210,7 +210,7 @@ |
3147 | % (utils.get_libertine_container_userdata_dir_path(self.container_id), home_path) |
3148 | ) |
3149 | |
3150 | - xdg_user_dirs = ['Documents', 'Music', 'Pictures', 'Videos'] |
3151 | + xdg_user_dirs = utils.get_common_xdg_directories() |
3152 | for user_dir in xdg_user_dirs: |
3153 | user_dir_path = os.path.join(home_path, user_dir) |
3154 | bind_mounts += " -b %s:%s" % (user_dir_path, user_dir_path) |
3155 | |
3156 | === modified file 'python/libertine/Libertine.py' |
3157 | --- python/libertine/Libertine.py 2016-05-11 17:26:27 +0000 |
3158 | +++ python/libertine/Libertine.py 2016-06-07 12:41:22 +0000 |
3159 | @@ -77,7 +77,9 @@ |
3160 | self.container_type = 'unknown' |
3161 | self.container_id = container_id |
3162 | self.root_path = libertine.utils.get_libertine_container_rootfs_path(self.container_id) |
3163 | - self.default_packages = ['matchbox', 'libnss-extrausers', 'software-properties-common', |
3164 | + self.default_packages = ['matchbox', |
3165 | + 'libnss-extrausers', |
3166 | + 'software-properties-common', |
3167 | 'humanity-icon-theme'] |
3168 | |
3169 | def create_libertine_container(self, password=None, multiarch=False, verbosity=1): |
3170 | @@ -148,7 +150,7 @@ |
3171 | self.run_in_container(apt_command_prefix(verbosity) + '--force-yes update') |
3172 | return self.run_in_container(apt_command_prefix(verbosity) + '--force-yes upgrade') |
3173 | |
3174 | - def install_package(self, package_name, verbosity=1, extra_apt_args=""): |
3175 | + def install_package(self, package_name, verbosity=1, readline=False): |
3176 | """ |
3177 | Installs a named package in the container. |
3178 | |
3179 | @@ -163,16 +165,17 @@ |
3180 | self.run_in_container('dpkg -i ' + |
3181 | os.path.join('/', 'tmp', package_name.split('/')[-1])) |
3182 | |
3183 | - ret = self.run_in_container(apt_command_prefix(verbosity) + |
3184 | - extra_apt_args + " install -f") == 0 |
3185 | + ret = self.run_in_container(apt_command_prefix(verbosity) + " install -f") == 0 |
3186 | |
3187 | if delete_package: |
3188 | self.delete_package_in_container(package_name) |
3189 | |
3190 | return ret |
3191 | else: |
3192 | - return self.run_in_container(apt_command_prefix(verbosity) + |
3193 | - extra_apt_args + " install '" + package_name + "'") == 0 |
3194 | + cmd = apt_command_prefix(verbosity) + " install '" + package_name + "'" |
3195 | + if readline: |
3196 | + cmd = "env DEBIAN_FRONTEND=readline " + cmd |
3197 | + return self.run_in_container(cmd) == 0 |
3198 | |
3199 | def configure_command(self, command, *args, verbosity=1): |
3200 | """ |
3201 | @@ -326,17 +329,17 @@ |
3202 | except RuntimeError as e: |
3203 | return handle_runtime_error(e) |
3204 | |
3205 | - def install_package(self, package_name, verbosity=1): |
3206 | + def install_package(self, package_name, verbosity=1, readline=False): |
3207 | """ |
3208 | Installs a package in the container. |
3209 | """ |
3210 | try: |
3211 | with ContainerRunning(self.container): |
3212 | - return self.container.install_package(package_name, verbosity) |
3213 | + return self.container.install_package(package_name, verbosity, readline) |
3214 | except RuntimeError as e: |
3215 | return handle_runtime_error(e) |
3216 | |
3217 | - def remove_package(self, package_name, verbosity=1): |
3218 | + def remove_package(self, package_name, verbosity=1, readline=False): |
3219 | """ |
3220 | Removes a package from the container. |
3221 | |
3222 | @@ -345,7 +348,10 @@ |
3223 | """ |
3224 | try: |
3225 | with ContainerRunning(self.container): |
3226 | - if self.container.run_in_container(apt_command_prefix(verbosity) + "purge '" + package_name + "'") != 0: |
3227 | + cmd = apt_command_prefix(verbosity) + " purge '" + package_name + "'" |
3228 | + if readline: |
3229 | + cmd = "env DEBIAN_FRONTEND=readline " + cmd |
3230 | + if self.container.run_in_container(cmd) != 0: |
3231 | return False |
3232 | return self.container.run_in_container(apt_command_prefix(verbosity) + "autoremove --purge") == 0 |
3233 | except RuntimeError as e: |
3234 | |
3235 | === modified file 'python/libertine/LxcContainer.py' |
3236 | --- python/libertine/LxcContainer.py 2016-05-11 17:26:27 +0000 |
3237 | +++ python/libertine/LxcContainer.py 2016-06-07 12:41:22 +0000 |
3238 | @@ -225,7 +225,7 @@ |
3239 | # Bind mount the user's home directory |
3240 | self.container.append_config_item("lxc.mount.entry", home_entry) |
3241 | |
3242 | - xdg_user_dirs = ['Documents', 'Music', 'Pictures', 'Videos'] |
3243 | + xdg_user_dirs = utils.get_common_xdg_directories() |
3244 | |
3245 | for user_dir in xdg_user_dirs: |
3246 | xdg_user_dir_entry = ( |
3247 | |
3248 | === modified file 'python/libertine/utils.py' |
3249 | --- python/libertine/utils.py 2016-04-06 19:14:10 +0000 |
3250 | +++ python/libertine/utils.py 2016-06-07 12:41:22 +0000 |
3251 | @@ -100,12 +100,29 @@ |
3252 | return dpkg.stdout.read().strip() |
3253 | |
3254 | |
3255 | +def get_common_xdg_directories(): |
3256 | + return ['Documents', 'Music', 'Pictures', 'Videos', 'Downloads'] |
3257 | + |
3258 | + |
3259 | def create_libertine_user_data_dir(container_id): |
3260 | user_data = get_libertine_container_userdata_dir_path(container_id) |
3261 | |
3262 | if not os.path.exists(user_data): |
3263 | os.makedirs(user_data) |
3264 | |
3265 | + config_path = os.path.join(user_data, ".config", "dconf") |
3266 | + |
3267 | + if not os.path.exists(config_path): |
3268 | + os.makedirs(config_path) |
3269 | + |
3270 | + xdg_user_dirs = get_common_xdg_directories() |
3271 | + |
3272 | + for xdg_dir in xdg_user_dirs: |
3273 | + xdg_path = os.path.join(user_data, xdg_dir) |
3274 | + |
3275 | + if not os.path.exists(xdg_path): |
3276 | + os.makedirs(xdg_path) |
3277 | + |
3278 | |
3279 | def get_libertine_lxc_socket(): |
3280 | return '\0libertine_lxc_socket' |
3281 | |
3282 | === modified file 'tools/CMakeLists.txt' |
3283 | --- tools/CMakeLists.txt 2016-05-02 20:45:21 +0000 |
3284 | +++ tools/CMakeLists.txt 2016-06-07 12:41:22 +0000 |
3285 | @@ -5,3 +5,6 @@ |
3286 | COMPONENT doc) |
3287 | install(PROGRAMS update-puritine-containers |
3288 | DESTINATION ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}/libertine) |
3289 | + |
3290 | +install(FILES bash_completion.d/libertine-container-manager |
3291 | + DESTINATION ${DESTDIR}/etc/bash_completion.d) |
3292 | |
3293 | === added directory 'tools/bash_completion.d' |
3294 | === added file 'tools/bash_completion.d/libertine-container-manager' |
3295 | --- tools/bash_completion.d/libertine-container-manager 1970-01-01 00:00:00 +0000 |
3296 | +++ tools/bash_completion.d/libertine-container-manager 2016-06-07 12:41:22 +0000 |
3297 | @@ -0,0 +1,72 @@ |
3298 | +# Copyright (C) 2016 Canonical Ltd. |
3299 | +# Author: Larry Price <larry.price@canonical.com> |
3300 | + |
3301 | +# This program is free software: you can redistribute it and/or modify |
3302 | +# it under the terms of the GNU General Public License as published by |
3303 | +# the Free Software Foundation; version 3 of the License. |
3304 | +# |
3305 | +# This program is distributed in the hope that it will be useful, |
3306 | +# but WITHOUT ANY WARRANTY; without even the implied warranty of |
3307 | +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
3308 | +# GNU General Public License for more details. |
3309 | +# |
3310 | +# You should have received a copy of the GNU General Public License |
3311 | +# along with this program. If not, see <http://www.gnu.org/licenses/>. |
3312 | + |
3313 | + |
3314 | +_libertine-container-manager() |
3315 | +{ |
3316 | + local cur cmd opts |
3317 | + COMPREPLY=() |
3318 | + cur="${COMP_WORDS[COMP_CWORD]}" |
3319 | + cmd="${COMP_WORDS[1]}" |
3320 | + |
3321 | + if [[ ${cur} == -* ]]; then |
3322 | + case "${cmd}" in |
3323 | + "install-package" ) |
3324 | + opts="--help --id --package --readline" |
3325 | + ;; |
3326 | + "remove-package" ) |
3327 | + opts="--help --id --package --readline" |
3328 | + ;; |
3329 | + "create" ) |
3330 | + opts="--help --id --type --distro --name --force --multiarch --password" |
3331 | + ;; |
3332 | + "destroy" ) |
3333 | + opts="--help --id" |
3334 | + ;; |
3335 | + "search-cache" ) |
3336 | + opts="--help --id --search-string" |
3337 | + ;; |
3338 | + "update" ) |
3339 | + opts="--help --id" |
3340 | + ;; |
3341 | + "list-apps" ) |
3342 | + opts="--help --id --json" |
3343 | + ;; |
3344 | + "list" ) |
3345 | + opts="--help" |
3346 | + ;; |
3347 | + "configure" ) |
3348 | + opts="--help --id --multiarch --add-archive --delete-archive" |
3349 | + ;; |
3350 | + * ) |
3351 | + opts="--help --quiet --verbose" |
3352 | + ;; |
3353 | + esac |
3354 | + fi |
3355 | + |
3356 | + if [[ ${cmd} == "configure" && "${COMP_WORDS[COMP_CWORD-1]}" == "--multiarch" ]]; then |
3357 | + opts="enable disable" |
3358 | + fi |
3359 | + |
3360 | + if [[ -z ${opts} && "${COMP_CWORD}" == "1" ]]; then |
3361 | + opts="create destroy install-package remove-package search-cache update list list-apps configure" |
3362 | + fi |
3363 | + |
3364 | + if [[ -n "${opts}" ]]; then |
3365 | + COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) ) |
3366 | + return 0 |
3367 | + fi |
3368 | +} |
3369 | +complete -F _libertine-container-manager libertine-container-manager |
3370 | |
3371 | === modified file 'tools/libertine-container-manager' |
3372 | --- tools/libertine-container-manager 2016-05-11 17:26:27 +0000 |
3373 | +++ tools/libertine-container-manager 2016-06-07 12:41:22 +0000 |
3374 | @@ -305,6 +305,16 @@ |
3375 | return |
3376 | |
3377 | |
3378 | +def get_package_install_status(container_id, package_name): |
3379 | + container_list = read_container_config_file() |
3380 | + |
3381 | + for container in container_list['containerList']: |
3382 | + if container['id'] == container_id: |
3383 | + for package in container['installedApps']: |
3384 | + if package['packageName'] == package_name: |
3385 | + return package['appStatus'] |
3386 | + |
3387 | + |
3388 | def add_new_package(container_id, package_name): |
3389 | container_list = read_container_config_file() |
3390 | |
3391 | @@ -392,6 +402,14 @@ |
3392 | update_container_install_status(args.id, "ready") |
3393 | |
3394 | |
3395 | +def destroy_container_by_id(id): |
3396 | + container = LibertineContainer(id) |
3397 | + update_container_install_status(id, "removing") |
3398 | + container.destroy_libertine_container() |
3399 | + update_container_install_status(id, "removed") |
3400 | + delete_container(id) |
3401 | + |
3402 | + |
3403 | def destroy(args): |
3404 | if args.id and not libertine.utils.container_exists(args.id): |
3405 | print("Container id \'%s\' does not exist." % args.id, file=sys.stderr) |
3406 | @@ -399,11 +417,7 @@ |
3407 | elif not args.id: |
3408 | args.id = get_default_container_id() |
3409 | |
3410 | - container = LibertineContainer(args.id) |
3411 | - update_container_install_status(args.id, "removing") |
3412 | - container.destroy_libertine_container() |
3413 | - update_container_install_status(args.id, "removed") |
3414 | - delete_container(args.id) |
3415 | + destroy_container_by_id(args.id) |
3416 | |
3417 | |
3418 | def install_package(args): |
3419 | @@ -434,13 +448,28 @@ |
3420 | container = LibertineContainer(args.id) |
3421 | |
3422 | update_package_install_status(args.id, package, "installing") |
3423 | - if not container.install_package(args.package, args.verbosity): |
3424 | + if not container.install_package(args.package, args.verbosity, args.readline): |
3425 | delete_package(args.id, package) |
3426 | sys.exit(1) |
3427 | |
3428 | update_package_install_status(args.id, package, "installed") |
3429 | |
3430 | |
3431 | +def remove_package_by_name(container_id, package_name, verbosity=1, readline=False): |
3432 | + fallback_status = get_package_install_status(container_id, package_name) |
3433 | + update_package_install_status(container_id, package_name, "removing") |
3434 | + |
3435 | + container = LibertineContainer(container_id) |
3436 | + if not container.remove_package(package_name, verbosity, readline): |
3437 | + update_package_install_status(container_id, package_name, fallback_status) |
3438 | + return False |
3439 | + |
3440 | + update_package_install_status(container_id, package_name, "removed") |
3441 | + delete_package(container_id, package_name) |
3442 | + |
3443 | + return True |
3444 | + |
3445 | + |
3446 | def remove_package(args): |
3447 | if args.id and not libertine.utils.container_exists(args.id): |
3448 | print("Container id \'%s\' does not exist." % args.id, file=sys.stderr) |
3449 | @@ -448,21 +477,13 @@ |
3450 | elif not args.id: |
3451 | args.id = get_default_container_id() |
3452 | |
3453 | - if not package_exists(args.id, args.package): |
3454 | + if get_package_install_status(args.id, args.package) != 'installed': |
3455 | print("Package \'%s\' is not installed." % args.package) |
3456 | sys.exit(1) |
3457 | |
3458 | - container = LibertineContainer(args.id) |
3459 | - update_package_install_status(args.id, args.package, "removing") |
3460 | - |
3461 | - if not container.remove_package(args.package, args.verbosity): |
3462 | - update_package_install_status(args.id, args.package, "installed") |
3463 | + if not remove_package_by_name(args.id, args.package, args.verbosity, args.readline): |
3464 | sys.exit(1) |
3465 | |
3466 | - update_package_install_status(args.id, args.package, "removed") |
3467 | - |
3468 | - delete_package(args.id, args.package) |
3469 | - |
3470 | |
3471 | def search_cache(args): |
3472 | if args.id and not libertine.utils.container_exists(args.id): |
3473 | @@ -523,6 +544,14 @@ |
3474 | sys.exit(1) |
3475 | |
3476 | |
3477 | +def delete_archive_by_name(container_id, archive_name): |
3478 | + update_archive_install_status(container_id, archive_name, 'removing') |
3479 | + if LibertineContainer(container_id).configure_command('delete-archive', archive_name) is not 0: |
3480 | + return False |
3481 | + delete_container_archive(container_id, archive_name) |
3482 | + return True |
3483 | + |
3484 | + |
3485 | def configure(args): |
3486 | if args.id and not libertine.utils.container_exists(args.id): |
3487 | print("Container id \'%s\' does not exist." % args.id, file=sys.stderr) |
3488 | @@ -565,17 +594,30 @@ |
3489 | print("%s is not added in container." % args.delete_archive) |
3490 | sys.exit(1) |
3491 | |
3492 | - update_archive_install_status(args.id, args.delete_archive, 'removing') |
3493 | - if container.configure_command('delete-archive', args.delete_archive) is not 0: |
3494 | + if not delete_archive_by_name(args.id, args.delete_archive): |
3495 | sys.exit(1) |
3496 | |
3497 | - delete_container_archive(args.id, args.delete_archive) |
3498 | - |
3499 | |
3500 | def merge(args): |
3501 | merge_container_config_files(args.file) |
3502 | |
3503 | |
3504 | +def fix_integrity(args): |
3505 | + for container in read_container_config_file()['containerList']: |
3506 | + if container['installStatus'] != 'ready': |
3507 | + destroy_container_by_id(container['id']) |
3508 | + continue |
3509 | + LibertineContainer(container['id']).exec_command('dpkg --configure -a') |
3510 | + |
3511 | + for package in container['installedApps']: |
3512 | + if package['appStatus'] != 'installed': |
3513 | + remove_package_by_name(container['id'], package['packageName']) |
3514 | + if 'extraArchives' in container: |
3515 | + for archive in container['extraArchives']: |
3516 | + if archive['archiveStatus'] != 'installed': |
3517 | + delete_archive_by_name(container['id'], archive['archiveName']) |
3518 | + |
3519 | + |
3520 | if __name__ == '__main__': |
3521 | parser = argparse.ArgumentParser(description="Legacy X application support for Unity 8") |
3522 | |
3523 | @@ -644,6 +686,9 @@ |
3524 | parser_install.add_argument( |
3525 | '-i', '--id', |
3526 | help=("Container identifier. Default container is used if omitted.")) |
3527 | + parser_install.add_argument( |
3528 | + '-r', '--readline', action='store_true', |
3529 | + help=("Readline mode. Use text-based frontend during debconf interactions.")) |
3530 | parser_install.set_defaults(func=install_package) |
3531 | |
3532 | # Handle the remove-package command and its options |
3533 | @@ -657,6 +702,9 @@ |
3534 | parser_remove.add_argument( |
3535 | '-i', '--id', |
3536 | help=("Container identifier. Default container is used if omitted.")) |
3537 | + parser_remove.add_argument( |
3538 | + '-r', '--readline', action='store_true', |
3539 | + help=("Readline mode. Use text-based frontend during debconf interactions.")) |
3540 | parser_remove.set_defaults(func=remove_package) |
3541 | |
3542 | # Handle the search-cache command and its options |
3543 | @@ -747,6 +795,12 @@ |
3544 | required=True) |
3545 | parser_merge.set_defaults(func=merge) |
3546 | |
3547 | + # Indiscriminately destroy containers, packages, and archives which are not fully installed |
3548 | + parser_integrity = subparsers.add_parser( |
3549 | + 'fix-integrity', |
3550 | + add_help=False) |
3551 | + parser_integrity.set_defaults(func=fix_integrity) |
3552 | + |
3553 | # Actually parse the args |
3554 | args = parser.parse_args() |
3555 | if args.verbosity is None: |
3556 | |
3557 | === modified file 'tools/libertine-launch' |
3558 | --- tools/libertine-launch 2016-05-05 20:41:46 +0000 |
3559 | +++ tools/libertine-launch 2016-06-07 12:41:22 +0000 |
3560 | @@ -25,18 +25,36 @@ |
3561 | from libertine import LibertineContainer |
3562 | |
3563 | |
3564 | -def set_dbus_session_socket_path(): |
3565 | +def get_session_socket_path(session_socket_name): |
3566 | unique_id = os.environ['DISPLAY'].strip(':') |
3567 | |
3568 | if not os.path.exists(libertine.utils.get_libertine_runtime_dir()): |
3569 | os.makedirs(libertine.utils.get_libertine_runtime_dir()) |
3570 | |
3571 | - dbus_session_socket_path = ( |
3572 | - os.path.join(libertine.utils.get_libertine_runtime_dir(), 'host_dbus_session' + unique_id)) |
3573 | - |
3574 | - os.environ['DBUS_SESSION_BUS_ADDRESS'] = "unix:path=" + dbus_session_socket_path |
3575 | - |
3576 | - return dbus_session_socket_path |
3577 | + session_socket_path = ( |
3578 | + os.path.join(libertine.utils.get_libertine_runtime_dir(), session_socket_name + unique_id)) |
3579 | + |
3580 | + return session_socket_path |
3581 | + |
3582 | + |
3583 | +def get_dbus_session_socket_path(): |
3584 | + return get_session_socket_path('host_dbus_session') |
3585 | + |
3586 | + |
3587 | +def get_maliit_session_socket_path(): |
3588 | + return get_session_socket_path('host_maliit_session') |
3589 | + |
3590 | + |
3591 | +def set_env_socket_path(session_socket_path, session_env): |
3592 | + os.environ[session_env] = "unix:path=" + session_socket_path |
3593 | + |
3594 | + |
3595 | +def set_dbus_env_socket_path(socket_path): |
3596 | + set_env_socket_path(socket_path, 'DBUS_SESSION_BUS_ADDRESS') |
3597 | + |
3598 | + |
3599 | +def set_maliit_env_socket_path(socket_path): |
3600 | + set_env_socket_path(socket_path, 'MALIIT_SERVER_ADDRESS') |
3601 | |
3602 | |
3603 | def launch_libertine_session_bridge(session_socket_path): |
3604 | @@ -74,11 +92,17 @@ |
3605 | if e in os.environ: |
3606 | del os.environ[e] |
3607 | |
3608 | - session_socket_path = set_dbus_session_socket_path() |
3609 | - |
3610 | - session_bridge = launch_libertine_session_bridge(session_socket_path) |
3611 | - |
3612 | - detect_session_bridge_socket(session_socket_path) |
3613 | + dbus_socket_path = get_dbus_session_socket_path() |
3614 | + maliit_socket_path = get_maliit_session_socket_path() |
3615 | + session_bridge_arguments = dbus_socket_path + ' ' + maliit_socket_path |
3616 | + |
3617 | + session_bridge = launch_libertine_session_bridge(session_bridge_arguments) |
3618 | + |
3619 | + set_dbus_env_socket_path(dbus_socket_path) |
3620 | + set_maliit_env_socket_path(maliit_socket_path) |
3621 | + |
3622 | + # should detect the maliit socket, but dont know if its around or not here. |
3623 | + detect_session_bridge_socket(dbus_socket_path) |
3624 | |
3625 | container = LibertineContainer(args.container_id) |
3626 | |
3627 | |
3628 | === modified file 'tools/libertine-session-bridge' |
3629 | --- tools/libertine-session-bridge 2016-02-04 20:23:58 +0000 |
3630 | +++ tools/libertine-session-bridge 2016-06-07 12:41:22 +0000 |
3631 | @@ -1,5 +1,6 @@ |
3632 | #!/usr/bin/python3 |
3633 | |
3634 | +import dbus |
3635 | import libertine.utils |
3636 | import os |
3637 | import select |
3638 | @@ -9,15 +10,15 @@ |
3639 | from socket import * |
3640 | |
3641 | |
3642 | -def accept_new_connection(): |
3643 | - newconn = container_dbus_session_sock.accept()[0] |
3644 | +def accept_new_connection(host_adder, container_sock): |
3645 | + newconn = container_sock.accept()[0] |
3646 | descriptors.append(newconn) |
3647 | |
3648 | - host_dbus_session_sock = socket(AF_UNIX, SOCK_STREAM) |
3649 | - host_dbus_session_sock.connect(host_dbus_session_addr) |
3650 | - descriptors.append(host_dbus_session_sock) |
3651 | + host_sock = socket(AF_UNIX, SOCK_STREAM) |
3652 | + host_sock.connect(host_adder) |
3653 | + descriptors.append(host_sock) |
3654 | |
3655 | - socket_pairs.append([newconn, host_dbus_session_sock]) |
3656 | + socket_pairs.append([newconn, host_sock]) |
3657 | |
3658 | |
3659 | def get_socket_pair(socket): |
3660 | @@ -57,6 +58,26 @@ |
3661 | j.close() |
3662 | |
3663 | |
3664 | +def get_host_maliit_socket(): |
3665 | + address_bus_name = "org.maliit.server" |
3666 | + address_object_path = "/org/maliit/server/address" |
3667 | + address_interface = "org.maliit.Server.Address" |
3668 | + address_property = "address" |
3669 | + |
3670 | + session_bus = dbus.SessionBus() |
3671 | + maliit_object = session_bus.get_object('org.maliit.server', '/org/maliit/server/address') |
3672 | + |
3673 | + interface = dbus.Interface(maliit_object, dbus.PROPERTIES_IFACE) |
3674 | + address = interface.Get('org.maliit.Server.Address', 'address') |
3675 | + |
3676 | + partition_key = 'unix:abstract=' |
3677 | + address = address.split(',')[0] |
3678 | + address = address.partition(partition_key)[2] |
3679 | + address = "\0%s" % address |
3680 | + |
3681 | + return address |
3682 | + |
3683 | + |
3684 | def get_host_dbus_socket(): |
3685 | socket_key = "DBUS_SESSION_BUS_ADDRESS=unix:abstract=" |
3686 | |
3687 | @@ -73,9 +94,13 @@ |
3688 | |
3689 | |
3690 | def socket_cleanup(signum, frame): |
3691 | - container_dbus_session_sock.close() |
3692 | + for socket in descriptors: |
3693 | + socket.close() |
3694 | + |
3695 | close_all_connections() |
3696 | - os.remove(dbus_session_socket_path) |
3697 | + |
3698 | + for socket_path in session_socket_paths: |
3699 | + os.remove(socket_path) |
3700 | |
3701 | |
3702 | def main_loop(): |
3703 | @@ -94,8 +119,8 @@ |
3704 | if sock.fileno() == -1: |
3705 | continue |
3706 | |
3707 | - if sock == container_dbus_session_sock: |
3708 | - accept_new_connection() |
3709 | + if sock in host_session_socket_path_map: |
3710 | + accept_new_connection(host_session_socket_path_map[sock], sock) |
3711 | |
3712 | else: |
3713 | data = sock.recv(4096) |
3714 | @@ -118,14 +143,54 @@ |
3715 | totalsent = totalsent + sent |
3716 | |
3717 | |
3718 | -dbus_session_socket_path = sys.argv[1] |
3719 | - |
3720 | -container_dbus_session_sock = socket(AF_UNIX, SOCK_STREAM) |
3721 | -container_dbus_session_sock.bind(dbus_session_socket_path) |
3722 | -container_dbus_session_sock.listen(5) |
3723 | - |
3724 | -host_dbus_session_addr = get_host_dbus_socket() |
3725 | -descriptors = [container_dbus_session_sock] |
3726 | +def create_socket(session_socket_path): |
3727 | + try: |
3728 | + sock = socket(AF_UNIX, SOCK_STREAM) |
3729 | + except: |
3730 | + sock = None |
3731 | + else: |
3732 | + try: |
3733 | + sock.bind(session_socket_path) |
3734 | + sock.listen(5) |
3735 | + except: |
3736 | + sock.close() |
3737 | + sock = None |
3738 | + else: |
3739 | + return sock |
3740 | + |
3741 | + return None |
3742 | + |
3743 | + |
3744 | +def create_container_socket(session_socket_path, get_host_session_path_function): |
3745 | + container_session_sock = create_socket(session_socket_path) |
3746 | + |
3747 | + if container_session_sock is not None: |
3748 | + try: |
3749 | + host_session_path = get_host_session_path_function() |
3750 | + except: |
3751 | + container_session_sock.close() |
3752 | + container_session_sock = None |
3753 | + raise |
3754 | + else: |
3755 | + host_session_socket_path_map.update({container_session_sock:host_session_path}) |
3756 | + |
3757 | + session_socket_paths.append(session_socket_path) |
3758 | + descriptors.append(container_session_sock) |
3759 | + |
3760 | + |
3761 | +descriptors = [] |
3762 | +host_session_socket_path_map = {} |
3763 | +session_socket_paths = [] |
3764 | + |
3765 | +# Required sockets: |
3766 | +create_container_socket(sys.argv[1], get_host_dbus_socket) |
3767 | + |
3768 | +# Optional sockets: |
3769 | +try: |
3770 | + create_container_socket(sys.argv[2], get_host_maliit_socket) |
3771 | +except: |
3772 | + pass |
3773 | + |
3774 | socket_pairs = [] |
3775 | |
3776 | main_loop() |
No evil code herein. I'm not sure about all the empty translation strings, we'll see if it causes problems during testing.