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