Merge lp:~nataliabidart/magicicada-gui/bind-view-queues-to-backend into lp:magicicada-gui
- bind-view-queues-to-backend
- Merge into trunk
Proposed by
Natalia Bidart
Status: | Merged | ||||
---|---|---|---|---|---|
Approved by: | Facundo Batista | ||||
Approved revision: | 24 | ||||
Merged at revision: | 17 | ||||
Proposed branch: | lp:~nataliabidart/magicicada-gui/bind-view-queues-to-backend | ||||
Merge into: | lp:magicicada-gui | ||||
Prerequisite: | lp:~nataliabidart/magicicada-gui/main-window-iconifiable | ||||
Diff against target: |
1856 lines (+434/-1213) 7 files modified
bin/magicicada (+5/-2) data/media/logo.svg (+0/-611) data/ui/gui.glade (+154/-50) magicicada/__init__.py (+102/-289) magicicada/helpers.py (+2/-16) magicicada/syncdaemon.py (+5/-12) magicicada/tests/test_magicicada.py (+166/-233) |
||||
To merge this branch: | bzr merge lp:~nataliabidart/magicicada-gui/bind-view-queues-to-backend | ||||
Related bugs: |
|
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Facundo Batista | Approve | ||
Review via email: mp+25405@code.launchpad.net |
Commit message
Fixing bug #568202. Content and meta queue are now shown as tree views.
Description of the change
Fixing bug #568202. Content and meta queue are now shown as tree views.
To post a comment you must log in.
Revision history for this message
Natalia Bidart (nataliabidart) wrote : | # |
- 24. By Natalia Bidart
-
Removing reactor code from magicicada (moved to the binary, where it belongs).
Preview Diff
[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1 | === modified file 'bin/magicicada' |
2 | --- bin/magicicada 2010-05-02 19:43:53 +0000 |
3 | +++ bin/magicicada 2010-05-17 16:12:34 +0000 |
4 | @@ -45,6 +45,9 @@ |
5 | logging.basicConfig(level=logging.DEBUG) |
6 | logging.debug('logging enabled') |
7 | |
8 | + from twisted.internet import reactor |
9 | + |
10 | # Run the application. |
11 | - window = MagicicadaUI(launchpad_available=launchpad_available) |
12 | - window.run() |
13 | + window = MagicicadaUI(launchpad_available=launchpad_available, |
14 | + on_destroy=lambda *a, **kw: reactor.stop()) |
15 | + reactor.run() |
16 | |
17 | === modified file 'data/media/logo.svg' |
18 | --- data/media/logo.svg 2010-05-17 16:12:33 +0000 |
19 | +++ data/media/logo.svg 2010-05-17 16:12:34 +0000 |
20 | @@ -10,468 +10,6 @@ |
21 | xmlns:xlink="http://www.w3.org/1999/xlink" |
22 | xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" |
23 | xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" |
24 | -<<<<<<< TREE |
25 | - width="784.8244" |
26 | - height="784.10883" |
27 | - id="svg2" |
28 | - version="1.1" |
29 | - inkscape:version="0.47 r22583" |
30 | - sodipodi:docname="logo.svg"> |
31 | - <defs |
32 | - id="defs4"> |
33 | - <linearGradient |
34 | - id="linearGradient6036"> |
35 | - <stop |
36 | - id="stop6038" |
37 | - offset="0" |
38 | - style="stop-color:#ff0000;stop-opacity:1;" /> |
39 | - <stop |
40 | - id="stop6040" |
41 | - offset="0.15040193" |
42 | - style="stop-color:#ffbf00;stop-opacity:0.97647059;" /> |
43 | - <stop |
44 | - style="stop-color:#ffff00;stop-opacity:0.96862745;" |
45 | - offset="0.27645355" |
46 | - id="stop6042" /> |
47 | - <stop |
48 | - id="stop6044" |
49 | - offset="0.40514705" |
50 | - style="stop-color:#bfff00;stop-opacity:0.96078431;" /> |
51 | - <stop |
52 | - style="stop-color:#3fff00;stop-opacity:0.94509804;" |
53 | - offset="0.54492491" |
54 | - id="stop6046" /> |
55 | - <stop |
56 | - id="stop6048" |
57 | - offset="0.65421808" |
58 | - style="stop-color:#00df1f;stop-opacity:0.92941176;" /> |
59 | - <stop |
60 | - id="stop6050" |
61 | - offset="0.77951556" |
62 | - style="stop-color:#00bf3f;stop-opacity:0.92156863;" /> |
63 | - <stop |
64 | - id="stop6052" |
65 | - offset="0.88955659" |
66 | - style="stop-color:#007f7f;stop-opacity:0.90588235;" /> |
67 | - <stop |
68 | - style="stop-color:#0000ff;stop-opacity:0.87450981;" |
69 | - offset="1" |
70 | - id="stop6054" /> |
71 | - </linearGradient> |
72 | - <linearGradient |
73 | - id="linearGradient6010"> |
74 | - <stop |
75 | - id="stop6012" |
76 | - offset="0" |
77 | - style="stop-color:#ff0000;stop-opacity:1;" /> |
78 | - <stop |
79 | - style="stop-color:#ff7f00;stop-opacity:0.98431373;" |
80 | - offset="0.13393337" |
81 | - id="stop6014" /> |
82 | - <stop |
83 | - id="stop6016" |
84 | - offset="0.23890866" |
85 | - style="stop-color:#ffbf00;stop-opacity:0.97647059;" /> |
86 | - <stop |
87 | - style="stop-color:#ffff00;stop-opacity:0.96862745;" |
88 | - offset="0.37702307" |
89 | - id="stop6018" /> |
90 | - <stop |
91 | - id="stop6020" |
92 | - offset="0.42686233" |
93 | - style="stop-color:#dfff00;stop-opacity:0.96470588;" /> |
94 | - <stop |
95 | - id="stop6022" |
96 | - offset="0.51511705" |
97 | - style="stop-color:#bfff00;stop-opacity:0.96078431;" /> |
98 | - <stop |
99 | - style="stop-color:#3fff00;stop-opacity:0.94509804;" |
100 | - offset="0.60455" |
101 | - id="stop6024" /> |
102 | - <stop |
103 | - id="stop6026" |
104 | - offset="0.67739385" |
105 | - style="stop-color:#00df1f;stop-opacity:0.92941176;" /> |
106 | - <stop |
107 | - id="stop6028" |
108 | - offset="0.74737048" |
109 | - style="stop-color:#00bf3f;stop-opacity:0.92156863;" /> |
110 | - <stop |
111 | - style="stop-color:#009f5f;stop-opacity:0.91372549;" |
112 | - offset="0.81486219" |
113 | - id="stop6030" /> |
114 | - <stop |
115 | - id="stop6032" |
116 | - offset="0.86383885" |
117 | - style="stop-color:#007f7f;stop-opacity:0.90588235;" /> |
118 | - <stop |
119 | - style="stop-color:#0000ff;stop-opacity:0.87450981;" |
120 | - offset="1" |
121 | - id="stop6034" /> |
122 | - </linearGradient> |
123 | - <inkscape:perspective |
124 | - sodipodi:type="inkscape:persp3d" |
125 | - inkscape:vp_x="0 : 526.18109 : 1" |
126 | - inkscape:vp_y="0 : 1000 : 0" |
127 | - inkscape:vp_z="744.09448 : 526.18109 : 1" |
128 | - inkscape:persp3d-origin="372.04724 : 350.78739 : 1" |
129 | - id="perspective10" /> |
130 | - <inkscape:perspective |
131 | - id="perspective2905" |
132 | - inkscape:persp3d-origin="0.5 : 0.33333333 : 1" |
133 | - inkscape:vp_z="1 : 0.5 : 1" |
134 | - inkscape:vp_y="0 : 1000 : 0" |
135 | - inkscape:vp_x="0 : 0.5 : 1" |
136 | - sodipodi:type="inkscape:persp3d" /> |
137 | - <inkscape:perspective |
138 | - id="perspective2948" |
139 | - inkscape:persp3d-origin="0.5 : 0.33333333 : 1" |
140 | - inkscape:vp_z="1 : 0.5 : 1" |
141 | - inkscape:vp_y="0 : 1000 : 0" |
142 | - inkscape:vp_x="0 : 0.5 : 1" |
143 | - sodipodi:type="inkscape:persp3d" /> |
144 | - <inkscape:perspective |
145 | - id="perspective3740" |
146 | - inkscape:persp3d-origin="0.5 : 0.33333333 : 1" |
147 | - inkscape:vp_z="1 : 0.5 : 1" |
148 | - inkscape:vp_y="0 : 1000 : 0" |
149 | - inkscape:vp_x="0 : 0.5 : 1" |
150 | - sodipodi:type="inkscape:persp3d" /> |
151 | - <inkscape:perspective |
152 | - id="perspective2872" |
153 | - inkscape:persp3d-origin="0.5 : 0.33333333 : 1" |
154 | - inkscape:vp_z="1 : 0.5 : 1" |
155 | - inkscape:vp_y="0 : 1000 : 0" |
156 | - inkscape:vp_x="0 : 0.5 : 1" |
157 | - sodipodi:type="inkscape:persp3d" /> |
158 | - <linearGradient |
159 | - inkscape:collect="always" |
160 | - xlink:href="#linearGradient6010" |
161 | - id="linearGradient3775" |
162 | - x1="1867.9991" |
163 | - y1="391.83505" |
164 | - x2="2113.4824" |
165 | - y2="391.83505" |
166 | - gradientUnits="userSpaceOnUse" /> |
167 | - <linearGradient |
168 | - inkscape:collect="always" |
169 | - xlink:href="#linearGradient6010" |
170 | - id="linearGradient3777" |
171 | - x1="1822.2806" |
172 | - y1="509.23386" |
173 | - x2="2067.0618" |
174 | - y2="509.23386" |
175 | - gradientUnits="userSpaceOnUse" /> |
176 | - <linearGradient |
177 | - inkscape:collect="always" |
178 | - xlink:href="#linearGradient6010" |
179 | - id="linearGradient3779" |
180 | - x1="1550.7804" |
181 | - y1="561.81555" |
182 | - x2="1888.9661" |
183 | - y2="561.81555" |
184 | - gradientUnits="userSpaceOnUse" /> |
185 | - <linearGradient |
186 | - inkscape:collect="always" |
187 | - xlink:href="#linearGradient6010" |
188 | - id="linearGradient3781" |
189 | - x1="1564.0616" |
190 | - y1="720.4718" |
191 | - x2="1703.3741" |
192 | - y2="720.4718" |
193 | - gradientUnits="userSpaceOnUse" /> |
194 | - <linearGradient |
195 | - inkscape:collect="always" |
196 | - xlink:href="#linearGradient6010" |
197 | - id="linearGradient3783" |
198 | - x1="1517.1554" |
199 | - y1="660.521" |
200 | - x2="1841.8" |
201 | - y2="660.521" |
202 | - gradientUnits="userSpaceOnUse" /> |
203 | - <linearGradient |
204 | - inkscape:collect="always" |
205 | - xlink:href="#linearGradient6010" |
206 | - id="linearGradient3785" |
207 | - x1="1519.3741" |
208 | - y1="503.64713" |
209 | - x2="1744.6722" |
210 | - y2="503.64713" |
211 | - gradientUnits="userSpaceOnUse" /> |
212 | - <linearGradient |
213 | - inkscape:collect="always" |
214 | - xlink:href="#linearGradient6010" |
215 | - id="linearGradient3787" |
216 | - x1="2037.218" |
217 | - y1="46.237438" |
218 | - x2="2133.968" |
219 | - y2="46.237438" |
220 | - gradientUnits="userSpaceOnUse" /> |
221 | - <linearGradient |
222 | - inkscape:collect="always" |
223 | - xlink:href="#linearGradient6010" |
224 | - id="linearGradient3789" |
225 | - x1="1803.3429" |
226 | - y1="216.79991" |
227 | - x2="1965.9542" |
228 | - y2="216.79991" |
229 | - gradientUnits="userSpaceOnUse" /> |
230 | - <linearGradient |
231 | - inkscape:collect="always" |
232 | - xlink:href="#linearGradient6010" |
233 | - id="linearGradient3791" |
234 | - x1="1772.3429" |
235 | - y1="281.62592" |
236 | - x2="2026.1866" |
237 | - y2="281.62592" |
238 | - gradientUnits="userSpaceOnUse" /> |
239 | - <linearGradient |
240 | - inkscape:collect="always" |
241 | - xlink:href="#linearGradient6010" |
242 | - id="linearGradient3793" |
243 | - x1="2000.7491" |
244 | - y1="83.488998" |
245 | - x2="2177.7493" |
246 | - y2="83.488998" |
247 | - gradientUnits="userSpaceOnUse" /> |
248 | - <linearGradient |
249 | - inkscape:collect="always" |
250 | - xlink:href="#linearGradient6010" |
251 | - id="linearGradient3795" |
252 | - x1="1933.0292" |
253 | - y1="191.26004" |
254 | - x2="2188.7668" |
255 | - y2="191.26004" |
256 | - gradientUnits="userSpaceOnUse" /> |
257 | - <linearGradient |
258 | - inkscape:collect="always" |
259 | - xlink:href="#linearGradient6010" |
260 | - id="linearGradient3797" |
261 | - x1="1956.7218" |
262 | - y1="305.36465" |
263 | - x2="2159.1868" |
264 | - y2="305.36465" |
265 | - gradientUnits="userSpaceOnUse" /> |
266 | - <linearGradient |
267 | - inkscape:collect="always" |
268 | - xlink:href="#linearGradient6010" |
269 | - id="linearGradient3799" |
270 | - x1="1674.0616" |
271 | - y1="420.89871" |
272 | - x2="1941.7629" |
273 | - y2="420.89871" |
274 | - gradientUnits="userSpaceOnUse" /> |
275 | - <inkscape:perspective |
276 | - id="perspective5910" |
277 | - inkscape:persp3d-origin="0.5 : 0.33333333 : 1" |
278 | - inkscape:vp_z="1 : 0.5 : 1" |
279 | - inkscape:vp_y="0 : 1000 : 0" |
280 | - inkscape:vp_x="0 : 0.5 : 1" |
281 | - sodipodi:type="inkscape:persp3d" /> |
282 | - <linearGradient |
283 | - inkscape:collect="always" |
284 | - xlink:href="#linearGradient5835" |
285 | - id="linearGradient5841" |
286 | - x1="233.53571" |
287 | - y1="549.50507" |
288 | - x2="695.03571" |
289 | - y2="549.50507" |
290 | - gradientUnits="userSpaceOnUse" /> |
291 | - <linearGradient |
292 | - id="linearGradient5835"> |
293 | - <stop |
294 | - style="stop-color:#ff0000;stop-opacity:1;" |
295 | - offset="0" |
296 | - id="stop5837" /> |
297 | - <stop |
298 | - style="stop-color:#ffbf00;stop-opacity:0.97647059;" |
299 | - offset="0.16954298" |
300 | - id="stop5865" /> |
301 | - <stop |
302 | - id="stop5851" |
303 | - offset="0.25013462" |
304 | - style="stop-color:#ffff00;stop-opacity:0.96862745;" /> |
305 | - <stop |
306 | - style="stop-color:#bfff00;stop-opacity:0.96078431;" |
307 | - offset="0.40514705" |
308 | - id="stop5867" /> |
309 | - <stop |
310 | - id="stop5877" |
311 | - offset="0.5521028" |
312 | - style="stop-color:#3fff00;stop-opacity:0.94509804;" /> |
313 | - <stop |
314 | - style="stop-color:#00df1f;stop-opacity:0.92941176;" |
315 | - offset="0.70446336" |
316 | - id="stop5875" /> |
317 | - <stop |
318 | - style="stop-color:#00bf3f;stop-opacity:0.92156863;" |
319 | - offset="0.77951556" |
320 | - id="stop5871" /> |
321 | - <stop |
322 | - style="stop-color:#007f7f;stop-opacity:0.90588235;" |
323 | - offset="0.92305344" |
324 | - id="stop5863" /> |
325 | - <stop |
326 | - id="stop5847" |
327 | - offset="1" |
328 | - style="stop-color:#0000ff;stop-opacity:0.87450981;" /> |
329 | - </linearGradient> |
330 | - <linearGradient |
331 | - y2="549.50507" |
332 | - x2="695.03571" |
333 | - y1="549.50507" |
334 | - x1="233.53571" |
335 | - gradientUnits="userSpaceOnUse" |
336 | - id="linearGradient5931" |
337 | - xlink:href="#linearGradient6010" |
338 | - inkscape:collect="always" /> |
339 | - <linearGradient |
340 | - inkscape:collect="always" |
341 | - xlink:href="#linearGradient6010" |
342 | - id="linearGradient6008" |
343 | - x1="594.60907" |
344 | - y1="353.40845" |
345 | - x2="1266.2205" |
346 | - y2="353.40845" |
347 | - gradientUnits="userSpaceOnUse" /> |
348 | - <linearGradient |
349 | - inkscape:collect="always" |
350 | - xlink:href="#linearGradient5835" |
351 | - id="linearGradient6056" |
352 | - gradientUnits="userSpaceOnUse" |
353 | - x1="594.60907" |
354 | - y1="353.40845" |
355 | - x2="1266.2205" |
356 | - y2="353.40845" /> |
357 | - <linearGradient |
358 | - inkscape:collect="always" |
359 | - xlink:href="#linearGradient6010" |
360 | - id="linearGradient6058" |
361 | - gradientUnits="userSpaceOnUse" |
362 | - x1="594.60907" |
363 | - y1="353.40845" |
364 | - x2="1266.2205" |
365 | - y2="353.40845" /> |
366 | - <linearGradient |
367 | - inkscape:collect="always" |
368 | - xlink:href="#linearGradient6010" |
369 | - id="linearGradient6060" |
370 | - gradientUnits="userSpaceOnUse" |
371 | - x1="594.60907" |
372 | - y1="353.40845" |
373 | - x2="1266.2205" |
374 | - y2="353.40845" /> |
375 | - <linearGradient |
376 | - inkscape:collect="always" |
377 | - xlink:href="#linearGradient6010" |
378 | - id="linearGradient6062" |
379 | - gradientUnits="userSpaceOnUse" |
380 | - x1="594.60907" |
381 | - y1="353.40845" |
382 | - x2="1266.2205" |
383 | - y2="353.40845" /> |
384 | - <linearGradient |
385 | - inkscape:collect="always" |
386 | - xlink:href="#linearGradient6010" |
387 | - id="linearGradient6064" |
388 | - gradientUnits="userSpaceOnUse" |
389 | - x1="594.60907" |
390 | - y1="353.40845" |
391 | - x2="1266.2205" |
392 | - y2="353.40845" /> |
393 | - <linearGradient |
394 | - inkscape:collect="always" |
395 | - xlink:href="#linearGradient6010" |
396 | - id="linearGradient6066" |
397 | - gradientUnits="userSpaceOnUse" |
398 | - x1="594.60907" |
399 | - y1="353.40845" |
400 | - x2="1266.2205" |
401 | - y2="353.40845" /> |
402 | - <linearGradient |
403 | - inkscape:collect="always" |
404 | - xlink:href="#linearGradient6010" |
405 | - id="linearGradient6068" |
406 | - gradientUnits="userSpaceOnUse" |
407 | - x1="594.60907" |
408 | - y1="353.40845" |
409 | - x2="1266.2205" |
410 | - y2="353.40845" /> |
411 | - <linearGradient |
412 | - inkscape:collect="always" |
413 | - xlink:href="#linearGradient6010" |
414 | - id="linearGradient6070" |
415 | - gradientUnits="userSpaceOnUse" |
416 | - x1="594.60907" |
417 | - y1="353.40845" |
418 | - x2="1266.2205" |
419 | - y2="353.40845" /> |
420 | - <linearGradient |
421 | - inkscape:collect="always" |
422 | - xlink:href="#linearGradient6010" |
423 | - id="linearGradient6072" |
424 | - gradientUnits="userSpaceOnUse" |
425 | - x1="594.60907" |
426 | - y1="353.40845" |
427 | - x2="1266.2205" |
428 | - y2="353.40845" /> |
429 | - <linearGradient |
430 | - inkscape:collect="always" |
431 | - xlink:href="#linearGradient6010" |
432 | - id="linearGradient6074" |
433 | - gradientUnits="userSpaceOnUse" |
434 | - x1="594.60907" |
435 | - y1="353.40845" |
436 | - x2="1266.2205" |
437 | - y2="353.40845" /> |
438 | - <linearGradient |
439 | - inkscape:collect="always" |
440 | - xlink:href="#linearGradient6010" |
441 | - id="linearGradient6076" |
442 | - gradientUnits="userSpaceOnUse" |
443 | - x1="594.60907" |
444 | - y1="353.40845" |
445 | - x2="1266.2205" |
446 | - y2="353.40845" /> |
447 | - <linearGradient |
448 | - inkscape:collect="always" |
449 | - xlink:href="#linearGradient6010" |
450 | - id="linearGradient6078" |
451 | - gradientUnits="userSpaceOnUse" |
452 | - x1="594.60907" |
453 | - y1="353.40845" |
454 | - x2="1266.2205" |
455 | - y2="353.40845" /> |
456 | - <linearGradient |
457 | - inkscape:collect="always" |
458 | - xlink:href="#linearGradient6010" |
459 | - id="linearGradient6080" |
460 | - gradientUnits="userSpaceOnUse" |
461 | - x1="594.60907" |
462 | - y1="353.40845" |
463 | - x2="1266.2205" |
464 | - y2="353.40845" /> |
465 | - </defs> |
466 | - <sodipodi:namedview |
467 | - id="base" |
468 | - pagecolor="#ffffff" |
469 | - bordercolor="#666666" |
470 | - borderopacity="1.0" |
471 | - inkscape:pageopacity="0.0" |
472 | - inkscape:pageshadow="2" |
473 | - inkscape:zoom="0.45281676" |
474 | - inkscape:cx="108.47293" |
475 | - inkscape:cy="324.31493" |
476 | - inkscape:document-units="px" |
477 | - inkscape:current-layer="layer1" |
478 | - showgrid="false" |
479 | - inkscape:window-width="1380" |
480 | - inkscape:window-height="875" |
481 | - inkscape:window-x="30" |
482 | - inkscape:window-y="0" |
483 | - inkscape:window-maximized="1" |
484 | - showborder="false" /> |
485 | -======= |
486 | width="784.8244" |
487 | height="784.10883" |
488 | id="svg2" |
489 | @@ -932,7 +470,6 @@ |
490 | inkscape:window-y="0" |
491 | inkscape:window-maximized="1" |
492 | showborder="false" /> |
493 | ->>>>>>> MERGE-SOURCE |
494 | <metadata |
495 | id="metadata7"> |
496 | <rdf:RDF> |
497 | @@ -945,153 +482,6 @@ |
498 | </cc:Work> |
499 | </rdf:RDF> |
500 | </metadata> |
501 | -<<<<<<< TREE |
502 | - <g |
503 | - inkscape:label="Capa 1" |
504 | - inkscape:groupmode="layer" |
505 | - id="layer1" |
506 | - transform="translate(-939.21814,94.69993)"> |
507 | - <path |
508 | - style="color:#000000;fill:#ffff00;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.5714916px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" |
509 | - d="" |
510 | - id="path3772" /> |
511 | - <path |
512 | - style="color:#000000;fill:#ffff00;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.5714916px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" |
513 | - d="" |
514 | - id="path3774" /> |
515 | - <path |
516 | - style="color:#000000;fill:#ffff00;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.5714916px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" |
517 | - d="" |
518 | - id="path3776" /> |
519 | - <path |
520 | - style="color:#000000;fill:#55ff55;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.5714916px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" |
521 | - d="" |
522 | - id="path3864" |
523 | - transform="translate(939.21814,-94.69993)" /> |
524 | - <path |
525 | - style="color:#000000;fill:#7fff2a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.5714916px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" |
526 | - d="" |
527 | - id="path3886" |
528 | - transform="translate(939.21814,-94.69993)" /> |
529 | - <path |
530 | - style="fill:#000000" |
531 | - d="m 349.08468,846.90605 c 0.26917,10.7682 3.2281,21.30128 7.9375,30.90625 20.46429,-10.79074 26.0108,-35.28275 35.125,-54.875 6.20007,-14.24125 12.82573,-30.33655 26.5625,-38.78125 1.58611,-0.4174 6.39597,-3.3676 4.84375,0.625 -2.19091,16.535 -11.81523,31.4283 -15.86937,46.23719 0.81854,14.2695 -15.6966,12.97272 -9.13063,35.29406 7.83221,14.15213 27.26199,16.11051 41.3125,11.1875 17.25691,-7.58089 35.86376,-11.04582 53.92492,-16.28831 25.14777,-7.07842 50.84819,-13.47303 74.56626,-24.4093 31.24631,-24.55204 70.89713,-36.37274 100.69632,-63.05234 21.97923,-15.0095 41.83869,-33.9648 67.53125,-42.5938 29.21493,-13.0907 54.01114,-35.8582 84.78125,-45.9062 4.75508,-5.2173 11.73563,-9.2063 13.71875,-16.6563 14.63684,-11.1457 -14.59993,6.2284 -22.09375,8.875 -4.77817,2.4994 -13.13233,5.3388 -15.96875,-1.2187 -5.8151,-4.7879 -28.72679,-10.5161 -40.61584,-14.2408 -6.65387,-4.5106 -17.08712,-10.6388 -13.63416,-19.6968 5.90007,-19.1913 23.71274,-31.6622 40.59124,-40.4593 9.6801,-5.0391 20.85081,-7.1229 31.62751,-4.9781 9.40465,0.4529 17.77799,-7.5951 17.4375,-17.0938 1.29543,-11.1981 -1.73524,-23.1209 3,-33.6562 27.92405,-21.0104 64.37995,-21.772 97.82525,-25.4466 16.2585,-1.3349 32.4519,-4.199 48.1435,-8.2097 8.5671,-1.2676 17.4661,5.1766 17.3125,14.1875 1.65252,10.9769 -4.087,21.1727 -11.5129,28.67 -3.7866,5.7712 -8.4485,11.2367 -15.0183,13.6738 -27.7535,18.9167 -63.0765,15.9836 -95.1562,15.9108 -12.6139,-0.1127 -25.2536,0.3798 -37.7501,2.1829 9.35565,11.8615 25.4177,14.3192 39.6563,12.9375 17.1795,-0.9013 34.0785,-4.9579 51.1875,-5.6562 8.4681,7.1659 22.0677,9.7867 30.6875,1.375 11.8918,-8.7447 20.0476,-21.5467 31.375,-30.7813 8.40132,-9.389 12.75382,-21.3848 21.02592,-30.9794 10.5256,-14.3725 19.1114,-30.3755 30.3803,-44.1143 6.9187,-5.8613 9.9597,-14.7166 12.6563,-22.9376 4.9385,-8.8188 3.604,-19.7943 8.5044,-28.7499 3.8438,-11.3712 10.8722,-21.1603 16.9956,-31.2813 8.3168,-18.1676 19.265,-35.65521 20.75,-56.03121 0.9855,-6.1022 0.023,-13.2484 0.5312,-18.7188 5.1817,-2.8741 6.2191,-10.0524 9.3304,-14.7806 10.6524,-21.1581 11.6565,-45.3836 16.1307,-68.3712 5.8077,-36.6164 8.5496,-76.0408 -6.1798,-110.9107 -8.8486,-20.6039 -28.6418,-34.2076 -49.9326,-39.485304 -23.7116,-6.0042 -49.4405,-4.1252 -72.2289,4.509604 -98.00342,48.8699 -183.35901,119.6913 -258.64805,198.5468 -17.22945,14.8334 -33.4177,30.6946 -49.31552,46.8352 -78.6551,70.57961 -143.05563,155.02661 -207.92413,238.16261 -39.10861,58.9335 -82.23211,115.9059 -111.77012,180.4144 -3.94725,14.62 -24.16747,45.575 -21.462,58.29795 -1.43956,7.08577 -2.17394,14.27225 -1.9375,21.53125 z m 84.75,13.84375 c 12.19456,-10.36481 27.43507,-16.59452 42.81555,-20.43339 18.33392,-9.87646 36.93366,-19.82574 55.9032,-28.66036 41.11408,-19.9245 83.77577,-36.1306 126.37806,-52.5489 7.61222,-3.1832 15.21211,-6.382 23.18444,-8.4823 -12.92947,10.909 -28.49911,18.0804 -42.35566,27.705 -44.79045,27.78 -92.01196,52.74492 -143.69642,64.67239 -19.861,1.97104 -42.96917,16.88658 -62.22917,17.74756 z m 2.15625,-31.625 c 1.32849,-8.64139 7.93128,-15.75195 13.87523,-21.85125 14.45037,-12.3347 32.93845,-18.7363 48.78189,-29.186 43.24286,-25.4972 85.73746,-52.4123 129.45153,-76.9441 30.70001,-18.4504 63.1991,-38.5234 100.26635,-38.5499 8.11827,0.3333 16.85237,1.6363 24.375,3.375 3.85604,2.0097 10.71973,3.58 14.875,7.5313 9.45738,6.3837 9.37105,22.5028 -1.21875,27.6874 -10.32228,5.5451 -22.32651,6.3887 -33.11131,10.8902 -64.49445,20.2383 -127.14652,46.1279 -189.47387,71.922 -31.04813,13.7115 -60.1996,31.4223 -90.41482,46.7191 -5.20403,1.11575 -12.87373,4.89018 -17.125,0.375 -0.22769,-0.62887 -0.23175,-1.30969 -0.28125,-1.96875 z m 3.03125,-82.28125 c 2.05845,-19.5041 15.12655,-35.1816 26.65625,-50.125 34.9546,-54.7159 70.64072,-109.3294 110.5625,-160.6875 29.80867,-33.2517 51.54343,-74.3295 87.84375,-101.125 4.33677,-3.1584 12.56449,-3.5327 13.84375,3 5.46259,16.7762 -3.69234,33.4147 -9.75,48.6875 -23.2926,49.3671 -68.22953,84.1812 -96.38255,130.4729 -18.36505,41.0458 -56.13664,68.3742 -87.05849,99.6015 -10.32541,8.8655 -18.66953,19.9734 -29.09021,28.5193 -4.41448,3.0506 -10.82713,6.3154 -16,4.3126 -0.54293,-0.7678 -0.51877,-1.7509 -0.625,-2.6563 z m 19.03125,26.4063 c 3.1557,-16.4732 20.87384,-22.2647 31.83314,-32.6061 31.91166,-26.9271 55.1502,-65.111 94.06679,-83.2532 39.31319,-20.1325 79.24089,-39.8051 114.22507,-66.922 25.00706,-16.9893 42.91529,-45.1071 73.34375,-53.0937 7.7929,-1.1146 15.83845,-0.9939 23.3125,-3.7188 13.29069,-2.1448 25.87061,8.9622 27.03125,21.875 1.28574,7.9728 -0.34331,16.4088 -4.34375,23.4688 -12.68375,4.825 -25.69081,8.348 -38.9375,10.9062 -23.15681,7.4568 -35.26022,30.4723 -49.8125,48.1875 -5.90201,6.9554 -13.40537,14.1737 -23.21035,13.7231 -46.55799,6.4308 -86.81567,32.507 -126.9408,55.1887 -38.41015,22.7558 -75.87383,47.4316 -116.59885,65.6819 -1.28502,0.2595 -2.69823,0.8826 -3.96875,0.5626 z m 132.34375,-145.5313 c 13.80462,-35.2687 46.34122,-57.3516 67.70268,-87.4557 16.00341,-20.8253 37.0322,-37.0896 58.39611,-52.5063 25.02598,-18.4092 48.66206,-38.7687 70.98262,-60.1872 19.74619,-17.5693 42.37151,-35.5322 69.51239,-38.6633 6.2927,-0.3166 16.1025,-0.3566 18.1875,7.0938 1.3202,14.4414 -8.8108,26.4222 -15.3438,38.3437 -6.0741,8.2821 -9.6213,19.6623 -19.80162,23.7064 -52.97977,29.9225 -96.13313,74.0288 -144.32338,110.6373 -34.71223,20.18 -65.01076,51.209 -105.40625,59.2813 l 0.0937,-0.25 5e-5,0 z m 102.21875,-158.8437 c 4.72671,-15.0269 0.36909,-30.2945 6.8125,-44.8438 4.16579,-4.0289 10.1314,-5.6576 14.53125,-9.5938 10.95554,-8.9754 22.80599,-13.3035 33.53072,-22.0995 39.63952,-34.98531 72.52538,-77.44861 115.01138,-108.86621 27.1658,-27.1851 73.7483,-29.6957 105.2079,-9.9093 -38.5642,15.0989 -76.7053,34.0757 -106.8125,63.0626 -14.44132,14.1099 -25.67127,31.1666 -41.00157,44.34981 -27.83085,25.7078 -59.41994,47.7547 -87.14345,73.7882 -10.93953,8.6869 -21.78724,19.5725 -36.13623,21.737 -3.34066,-0.5148 -3.8919,-4.876 -4,-7.625 z m 46.5625,-119.62501 c 22.70405,-21.5909 50.38139,-50.7056 73.18269,-75.6378 29.27789,-29.3129 70.25256,-45.6581 111.34856,-48.1748 -69.8759,37.1601 -125.08328,95.2166 -183.125,147.875 -2.5927,1.4466 -4.18548,5.1429 -6.5,6.09381 -3.85015,-6.47121 -14.90923,-2.75251 -12.16838,-12.04751 7.72595,-9.1768 8.72145,-9.6804 17.26213,-18.1087 z m 47.0625,173.21871 c 5.65384,-18.0865 23.88148,-27.6384 39.0283,-36.6769 14.48877,-7.725 29.21785,-15.8647 44.62795,-21.4168 41.7701,-7.1174 81.8242,-23.3848 124.0313,-27.4688 8.24292,-5.2561 18.71842,-2.277 27.93752,-4.0312 12.9401,1.81 22.7923,14.0649 25.3125,26.375 1.8666,8.7106 -5.8669,15.0906 -9.1875,22.375 -3.1785,5.8643 -9.27,9.4133 -12.125,15.6562 -7.5624,9.5248 -21.2509,11.6053 -32.37502,7.8438 -68.9423,-10.9185 -134.9538,26.0771 -203.8687,17.8875 -1.03704,-0.1301 -2.52876,-0.1786 -3.38135,-0.5438 z m 57.21875,142.5937 c 3.19719,4.7141 10.1509,1.2059 14.5313,0.25 25.2349,-7.9562 46.3117,-24.8088 69.6875,-36.6562 6.0021,-4.7061 9.8057,-11.88 15.5937,-16.5938 41.6227,-37.7701 -1.9826,-7.684 -5.5625,-5.3124 -29.3453,20.1735 -64.9496,43.6672 -97.73906,57.7584 -1.34286,0.8054 -3.82736,0.3071 3.48906,0.554 z m 9.4063,-301.12501 c 2.9517,-12.248 14.6204,-19.8059 24.3437,-26.7812 39.1056,-29.0647 83.8706,-49.7174 130.21882,-64.375 3.2991,-1.0193 4.715,-6.4291 0.3125,-6.9062 -16.18632,0.2742 -31.51682,-6.3232 -46.99342,-10.5666 -12.5995,-3.8598 -25.3787,-7.2494 -38.3504,-9.5897 27.409,-12.6065 53.7785,-27.7821 82.71882,-36.4375 32.7958,-7.1278 61.685,-30.0982 96.2761,-28.7116 5.3679,0.8275 12.3279,0.7562 16.2239,4.8991 7.8956,14.8889 6.4045,35.542 -7.25,46.625 -7.6915,6.4993 -16.9127,13.5471 -27.4688,12.4063 -9.652,0.1712 -18.222,5.6054 -27.5312,6.875 -8.5555,-0.693 -17.35,-0.5602 -25.125,3.1874 -4.0604,0.5121 -7.6805,6.1511 -3.625,8.875 8.5829,2.7079 17.498,-1.0547 25.9687,-2.375 11.9587,-2.8614 24.5906,-3.1425 36.1563,-7.4687 9.7775,-1.6041 18.6791,6.8446 22.4687,15.3125 6.1087,13.961 0.2248,29.2948 -6.75,41.7188 -2.3795,5.5312 -5.759,11.0276 -6.4375,17.0624 0.1702,2.4853 2.4385,4.2066 -0.25,6.2813 -11.7217,19.0379 -12.012,42.6672 -20.7812,62.90631 -5.2118,9.3721 -9.6151,21.0713 -21,24.5 -10.3313,3.7163 -21.8936,3.3116 -32.6563,2.8124 -9.9783,-3.0222 -20.357,-0.092 -29.92982,2.6446 -35.8164,2.9172 -71.5321,8.7921 -105.9764,19.168 -5.5724,1.151 -11.8254,-3.0262 -10.3125,-9.1876 1.0407,-16.964 12.1409,-32.1138 24.5,-42.9374 9.6915,-7.7455 22.7962,-7.6486 34,-12.3126 38.2838,-11.55131 76.18492,-24.58571 114.80022,-34.90591 13.9495,-1.8644 28.7272,-2.4934 41.0748,-10.2191 -35.3552,-8.5945 -71.6228,2.3986 -104.94872,13.9152 -28.7153,9.5981 -56.8053,22.0636 -86.7388,26.7411 -14.1843,1.4177 -29.5452,1.0039 -42.375,-5.5313 -2.4954,-1.8552 -4.5825,-4.4913 -4.5625,-7.625 z m 14.3125,-138.8437 c 8.5441,-11.8335 20.724,-20.6674 32.125,-29.7813 17.5733,-11.7737 35.2431,-23.701 51.5312,-37.375 27.6091,-21.7173 56.87452,-44.9657 92.84382,-50.1874 8.2799,-0.6819 18.1361,-4.5114 25.7187,0.1562 0.6018,5.7068 -5.5104,9.6405 -9.125,13.2188 -7.7767,6.6646 -17.6704,9.6781 -27.4504,11.2689 -31.1626,13.7503 -63.29002,25.6753 -93.75472,40.739 -25.7104,15.2293 -42.241,44.5011 -72.0449,52.7421 -0.8944,0.3432 -0.1021,-0.3894 0.1563,-0.7813 z m 52.7187,-17.4687 c 3.0193,-9.8668 13.2023,-14.9101 20.6602,-21.1713 21.6879,-14.6697 47.4261,-21.3365 71.33212,-31.6531 20.6595,-7.6531 40.8523,-16.8161 61.3515,-24.6132 11.2016,-3.9817 24.9102,-1.977 32.4687,7.5626 6.8554,6.9633 8.8591,20.895 -0.7187,26.4062 -10.6085,6.0155 -23.569,3.1361 -35.0216,6.9025 -46.4946,10.3523 -88.02182,39.9818 -136.66592,40.5975 -4.1533,-0.9841 -11.542,0.6773 -13.4063,-4.0312 z" |
532 | - id="path2954-0" |
533 | - inkscape:export-filename="/tmp/logo-128.png" |
534 | - inkscape:export-xdpi="14.678443" |
535 | - inkscape:export-ydpi="14.678443" |
536 | - sodipodi:nodetypes="cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc" /> |
537 | - <g |
538 | - id="g2849" |
539 | - style="fill:url(#linearGradient6008);fill-opacity:1" |
540 | - transform="translate(-150.17112,121.46194)" |
541 | - inkscape:export-filename="/tmp/logo-128.png" |
542 | - inkscape:export-xdpi="14.678443" |
543 | - inkscape:export-ydpi="14.678443"> |
544 | - <path |
545 | - inkscape:export-ydpi="3.6700001" |
546 | - inkscape:export-xdpi="3.6700001" |
547 | - inkscape:export-filename="/tmp/logo-032.png" |
548 | - id="path3868" |
549 | - d="m 751.5153,497.17405 c 17.69893,-6.31836 33.34273,-17.78203 49.44258,-27.46879 41.77847,-26.65775 79.91951,-58.13179 117.96424,-89.74534 22.33543,-18.07868 46.33334,-33.9813 69.78326,-50.53812 13.69242,-12.24771 22.80862,-28.87287 29.67282,-45.6253 1.0868,-2.76713 1.9446,-8.68847 -2.9879,-7.62245 -20.91596,-2.76027 -41.00913,7.2869 -56.37576,20.77951 -30.06757,24.5948 -59.28835,50.10281 -89.7715,74.1683 -26.57256,21.27378 -51.55771,44.32242 -72.85556,70.80882 -15.53362,17.8901 -31.92782,35.53962 -44.87218,55.24337 z" |
550 | - style="color:#000000;fill:url(#linearGradient6058);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.5714916px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" /> |
551 | - <path |
552 | - inkscape:export-ydpi="3.6700001" |
553 | - inkscape:export-xdpi="3.6700001" |
554 | - inkscape:export-filename="/tmp/logo-032.png" |
555 | - id="path3870" |
556 | - d="m 1034.3278,314.8303 c -0.8242,2.82259 1.8606,4.04154 4.0821,2.72294 22.4915,-4.0724 44.6295,-10.01178 67.4155,-12.73348 28.6733,-4.65875 57.5985,-7.64174 86.6587,-8.36446 12.3838,-1.23052 23.3907,-9.6213 27.5312,-21.4375 7.7721,-16.29509 11.7368,-33.9564 16.625,-51.2813 -40.9842,7.8833 -80.6393,21.2579 -120.6304,33.1931 -21.1775,6.87837 -42.8904,13.17396 -62.8383,22.9632 -10.5604,8.21665 -17.4111,21.77589 -18.8438,34.9375 z" |
557 | - style="color:#000000;fill:url(#linearGradient6060);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.5714916px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" /> |
558 | - <path |
559 | - inkscape:export-ydpi="3.6700001" |
560 | - inkscape:export-xdpi="3.6700001" |
561 | - inkscape:export-filename="/tmp/logo-032.png" |
562 | - id="path3872" |
563 | - d="m 1010.4841,241.7365 c 2.7299,7.5449 12.9126,6.0789 19.2812,6.75 23.645,1.3696 46.959,-3.7725 68.9039,-12.1499 40.1691,-13.3391 80.6429,-29.1157 123.4393,-30.2224 6.8529,-0.018 14.1356,2.1048 20.1256,4.1223 2.7818,-19.6549 18.6428,-37.5156 13.7187,-58.0937 -2.5753,-8.0356 -10.5676,-17.5414 -19.9215,-13.5366 -19.5187,4.0775 -39.4969,10.0049 -59.6722,8.5366 -7.4896,-2.379 -7.6262,-13.7129 -0.8125,-17.0937 10.2229,-7.3346 23.8336,-3.6568 35.2416,-7.865 17.0353,-3.4328 36.3697,-5.7644 48.0905,-20.0922 5.9064,-5.2267 8.5227,-13.0552 6.8397,-20.7898 -0.8638,-5.0648 -1.052,-12.2468 -5.8593,-15.0968 -13.9783,-3.9036 -28.2236,1.8636 -41.5744,5.7518 -42.8206,14.9781 -86.6413,28.8819 -126.7694,50.1544 20.8599,6.66 42.0557,13.0973 63.7813,15.7188 6.3248,-0.7897 12.6531,6.9676 8,12.375 -8.9446,9.5023 -22.4632,12.6004 -34.1089,17.9254 -40.9989,16.594 -81.55,36.2927 -114.4536,66.0434 -1.9051,2.0556 -4.3166,4.5708 -4.25,7.5624 z" |
564 | - style="color:#000000;fill:url(#linearGradient6062);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.5714916px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" /> |
565 | - <path |
566 | - inkscape:export-ydpi="3.6700001" |
567 | - inkscape:export-xdpi="3.6700001" |
568 | - inkscape:export-filename="/tmp/logo-032.png" |
569 | - id="path3874" |
570 | - d="m 1078.2028,83.8615 c 9.7606,2.0056 19.9758,-1.5761 29.5664,-3.2636 43.7739,-10.6641 84.5036,-32.3146 129.3274,-39.0896 6.8114,-1.3313 17.4675,-3.37 18.1062,-11.9905 -1.8948,-9.2869 -11.162,-18.7048 -21.2812,-15.125 -27.4665,5.8492 -53.0859,18.4371 -79.453,28.2371 -25.9088,10.6151 -54.1446,19.6642 -74.922,39.0129 -0.5127,0.6108 -1.2825,1.4717 -1.3438,2.2187 z" |
571 | - style="color:#000000;fill:url(#linearGradient6064);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.5714916px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" /> |
572 | - <path |
573 | - inkscape:export-ydpi="3.6700001" |
574 | - inkscape:export-xdpi="3.6700001" |
575 | - inkscape:export-filename="/tmp/logo-032.png" |
576 | - id="path3876" |
577 | - d="m 849.79655,348.54905 c 33.18847,-20.32789 61.55413,-47.43615 91.04447,-72.53054 27.47122,-23.95071 52.43983,-50.92671 79.80918,-75.12481 24.619,-20.9604 52.942,-37.319 82.9901,-49.0322 -23.4457,-7.7886 -51.4112,-9.8383 -72.7187,4.5626 -22.1313,14.8065 -40.52244,34.4232 -60.0313,52.25 -34.20639,32.9553 -68.27857,66.42473 -108.10272,92.61277 -5.03998,3.79168 -10.64071,8.04337 -10.17853,15.07468 -1.66479,10.59903 -2.59569,21.52239 -2.8125,32.1875 z" |
578 | - style="color:#000000;fill:url(#linearGradient6056);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.5714916px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" /> |
579 | - <path |
580 | - inkscape:export-ydpi="3.6700001" |
581 | - inkscape:export-xdpi="3.6700001" |
582 | - inkscape:export-filename="/tmp/logo-032.png" |
583 | - id="path3878" |
584 | - d="m 880.79655,249.0803 c 3.70944,2.6491 5.42578,-3.8587 8.46372,-4.8806 49.1354,-43.2121 96.18552,-89.1557 150.03633,-126.3694 8.2196,-4.4245 2.4483,-2.7556 -2.875,-1.2188 -23.4068,6.1207 -44.84905,17.9551 -62.21384,34.865 -30.48618,27.547 -58.82169,58.226 -86.9294,88.2445 -2.43147,2.8587 -4.92227,6.1091 -6.48181,9.3593 z" |
585 | - style="color:#000000;fill:url(#linearGradient6066);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.5714916px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" /> |
586 | - <path |
587 | - inkscape:export-ydpi="3.6700001" |
588 | - inkscape:export-xdpi="3.6700001" |
589 | - inkscape:export-filename="/tmp/logo-032.png" |
590 | - id="path3880" |
591 | - d="m 1116.8591,32.7678 c 25.5849,-10.6526 50.8528,-22.3941 77.1875,-30.9375 6.4567,-2.8411 12.3915,-6.9044 17.375,-11.9062 -26.2064,2.2628 -52.2545,11.1884 -73.4374,26.9338 -7.9209,5.3916 -15.7255,10.9339 -23.3126,16.7849 0.7291,-0.2917 1.4583,-0.5833 2.1875,-0.875 z" |
592 | - style="color:#000000;fill:url(#linearGradient6068);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.5714916px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" /> |
593 | - <path |
594 | - inkscape:export-ydpi="3.6700001" |
595 | - inkscape:export-xdpi="3.6700001" |
596 | - inkscape:export-filename="/tmp/logo-032.png" |
597 | - id="path3882" |
598 | - d="m 597.3903,619.2678 c 17.65974,-12.46149 32.37459,-28.36781 48.50776,-42.76193 27.08538,-25.03567 53.04471,-51.78802 72.07475,-83.69741 24.50069,-37.49877 55.40161,-70.38209 81.15189,-106.89226 11.19732,-17.84724 23.52019,-37.4766 22.98435,-59.3984 -0.45947,-2.40059 -0.5313,-7.9048 -3.59375,-7.8125 -13.52759,9.05859 -23.97477,22.21914 -34.97831,34.12572 -50.89369,60.70315 -96.7254,125.89297 -140.61544,191.90553 -15.42799,24.34711 -32.29232,47.93877 -45.5,73.5625 0.11509,0.18032 -1.36931,2.24562 -0.0312,0.96875 z" |
599 | - style="color:#000000;fill:url(#linearGradient6070);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.5714916px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" /> |
600 | - <path |
601 | - inkscape:export-ydpi="3.6700001" |
602 | - inkscape:export-xdpi="3.6700001" |
603 | - inkscape:export-filename="/tmp/logo-032.png" |
604 | - id="path3884" |
605 | - d="m 594.60905,704.67405 c 35.79971,-15.10364 69.49489,-35.20685 105.60325,-49.89906 62.87779,-27.77589 127.74792,-51.05409 192.48146,-73.76268 8.65637,-3.67732 18.53461,-5.83279 25.79029,-11.93201 2.90495,-4.39214 -3.18454,-8.16016 -5.5,-11.28125 -13.71313,-11.37597 -33.26412,-11.46964 -50.0625,-9.125 -36.09904,7.54143 -66.81978,29.3842 -98.83699,46.58989 -51.72783,29.60232 -103.33553,59.70033 -153.88106,91.40029 -6.55309,4.57905 -13.25888,10.55884 -15.59445,18.00982 z" |
606 | - style="color:#000000;fill:url(#linearGradient6072);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.5714916px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" /> |
607 | - <path |
608 | - inkscape:export-ydpi="3.6700001" |
609 | - inkscape:export-xdpi="3.6700001" |
610 | - inkscape:export-filename="/tmp/logo-032.png" |
611 | - id="path3888" |
612 | - d="m 645.54655,715.67405 c 35.72193,-10.42551 70.78021,-23.23122 102.96875,-41.78125 10.91159,-6.01259 21.75038,-12.14494 32.3125,-18.75 -47.41496,18.3869 -93.51136,39.66925 -139.3125,61.75 1.34375,-0.40625 2.6875,-0.8125 4.03125,-1.21875 z" |
613 | - style="color:#000000;fill:url(#linearGradient6074);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.5714916px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" /> |
614 | - <path |
615 | - inkscape:export-ydpi="3.6700001" |
616 | - inkscape:export-xdpi="3.6700001" |
617 | - inkscape:export-filename="/tmp/logo-032.png" |
618 | - id="path3890" |
619 | - d="m 632.5153,634.2053 c 60.14394,-30.74655 115.66832,-70.8232 177.96875,-97.28125 14.26222,-5.97556 29.35043,-9.39673 44.5,-12.09375 18.95443,-6.17109 28.4865,-25.97596 41.50355,-39.75144 13.57652,-16.00862 34.00127,-23.62201 54.01318,-28.20348 6.19162,-1.89798 15.7533,-3.68127 15.51452,-12.01383 2.08663,-10.98591 -4.02012,-24.31983 -15.59375,-26.53125 -16.90374,0.27667 -33.58361,4.49058 -47.6875,13.9375 -22.9606,15.48193 -41.79786,35.95315 -65.1477,51.00862 -35.74563,24.86524 -75.16047,43.70949 -112.7273,65.52263 -28.46057,18.88652 -49.92871,46.12416 -75.56336,68.41906 -7.01077,6.41829 -14.12156,12.70109 -21.06164,19.17469 1.42708,-0.72917 2.85417,-1.45833 4.28125,-2.1875 z" |
620 | - style="color:#000000;fill:url(#linearGradient6076);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.5714916px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" /> |
621 | - <path |
622 | - inkscape:export-ydpi="3.6700001" |
623 | - inkscape:export-xdpi="3.6700001" |
624 | - inkscape:export-filename="/tmp/logo-032.png" |
625 | - id="path3892" |
626 | - d="m 899.79655,525.6428 c 3.51089,7.82332 13.2238,9.26496 20.09375,13 10.79867,2.80411 21.65609,5.63079 30.90625,12.09375 5.11243,4.54553 10.33545,-1.21207 15.35186,-3.0042 39.48479,-19.22194 79.01709,-39.09854 114.46069,-65.33955 -27.154,-1.42919 -54.6501,1.25915 -81.5938,-2.71875 -6.84472,-1.83715 -14.6702,-8.46744 -12.6875,-16.09375 4.38512,-5.41078 12.4788,-2.62909 18.4944,-4.24386 30.8382,-2.55598 62.2768,-0.71955 92.6251,-7.11835 21.4753,-5.9014 40.2441,-22.70775 47.068,-43.95029 -0.5436,-4.58705 -5.3064,-7.60544 -8.7187,-10.1875 -5.8774,-2.94298 -12.1394,1.78838 -18.2813,1.625 -36.7565,6.15401 -74.7601,7.77894 -110.3125,19.03125 -9.7045,3.55183 -17.78411,12.04656 -18.71875,22.5625 -2.37586,11.56234 -0.38446,26.01529 -9.9375,34.71875 -9.86563,7.03084 -22.96979,1.75056 -33.54415,6.93604 -18.46505,6.38579 -36.58846,18.72192 -44.4246,37.22021 -0.50221,1.79331 -1.02655,3.61709 -0.78125,5.46875 z" |
627 | - style="color:#000000;fill:url(#linearGradient6078);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.5714916px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" /> |
628 | - <path |
629 | - inkscape:export-ydpi="3.6700001" |
630 | - inkscape:export-xdpi="3.6700001" |
631 | - inkscape:export-filename="/tmp/logo-032.png" |
632 | - id="path3894" |
633 | - d="m 945.4528,396.54905 c 22.4751,1.38692 44.82133,-2.89278 66.9854,-5.76396 34.7809,-6.04143 69.5064,-13.86385 105.0146,-12.99513 16.1655,-0.39189 33.1503,2.07772 48.6563,-2.86591 10.8635,-5.891 16.1867,-17.84527 23.1562,-27.53125 4.4328,-8.52492 -0.6092,-18.27302 -7.4687,-23.59375 -7.9505,-7.64738 -19.8734,-6.25667 -29.888,-4.38602 -42.6818,6.87561 -84.727,17.60627 -126.112,29.91727 -22.1097,6.70955 -43.24672,16.65481 -61.80645,30.65386 -6.62998,4.90758 -13.30481,10.50103 -18.53735,16.56489 z" |
634 | - style="color:#000000;fill:url(#linearGradient6080);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.5714916px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" /> |
635 | - </g> |
636 | - <path |
637 | - transform="translate(33.252667,-741.24731)" |
638 | - sodipodi:type="arc" |
639 | - style="color:#000000;fill:url(#linearGradient5931);fill-opacity:1.0;fill-rule:nonzero;stroke:#967b71;stroke-width:1.50000000000000000;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" |
640 | - id="path5313" |
641 | - sodipodi:cx="464.28571" |
642 | - sodipodi:cy="549.50507" |
643 | - sodipodi:rx="230" |
644 | - sodipodi:ry="225.71428" |
645 | - d="m 694.28571,549.50507 a 230,225.71428 0 1 1 -460,0 230,225.71428 0 1 1 460,0 z" /> |
646 | - </g> |
647 | -======= |
648 | <g |
649 | inkscape:label="Capa 1" |
650 | inkscape:groupmode="layer" |
651 | @@ -1237,5 +627,4 @@ |
652 | sodipodi:ry="225.71428" |
653 | d="m 694.28571,549.50507 c 0,124.65855 -102.97451,225.71428 -230,225.71428 -127.0255,0 -230,-101.05573 -230,-225.71428 0,-124.65856 102.9745,-225.71428 230,-225.71428 127.02549,0 230,101.05572 230,225.71428 z" /> |
654 | </g> |
655 | ->>>>>>> MERGE-SOURCE |
656 | </svg> |
657 | |
658 | === removed file 'data/media/ubuntuone.png' |
659 | Binary files data/media/ubuntuone.png 2010-04-25 16:57:37 +0000 and data/media/ubuntuone.png 1970-01-01 00:00:00 +0000 differ |
660 | === modified file 'data/ui/gui.glade' |
661 | --- data/ui/gui.glade 2010-05-17 16:12:33 +0000 |
662 | +++ data/ui/gui.glade 2010-05-17 16:12:34 +0000 |
663 | @@ -2,12 +2,35 @@ |
664 | <interface> |
665 | <requires lib="gtk+" version="2.16"/> |
666 | <!-- interface-naming-policy project-wide --> |
667 | - <object class="GtkListStore" id="liststore1"/> |
668 | - <object class="GtkListStore" id="liststore2"/> |
669 | + <object class="GtkListStore" id="metaq_store"> |
670 | + <columns> |
671 | + <!-- column-name operation --> |
672 | + <column type="gchararray"/> |
673 | + <!-- column-name path --> |
674 | + <column type="gchararray"/> |
675 | + <!-- column-name node --> |
676 | + <column type="gchararray"/> |
677 | + <!-- column-name share --> |
678 | + <column type="gchararray"/> |
679 | + </columns> |
680 | + </object> |
681 | + <object class="GtkListStore" id="contentq_store"> |
682 | + <columns> |
683 | + <!-- column-name Operation --> |
684 | + <column type="gchararray"/> |
685 | + <!-- column-name Path --> |
686 | + <column type="gchararray"/> |
687 | + <!-- column-name Node --> |
688 | + <column type="gchararray"/> |
689 | + <!-- column-name Share --> |
690 | + <column type="gchararray"/> |
691 | + </columns> |
692 | + </object> |
693 | <object class="GtkWindow" id="main_window"> |
694 | <property name="width_request">800</property> |
695 | <property name="height_request">600</property> |
696 | <property name="title" translatable="yes">Magicicada</property> |
697 | + <property name="window_position">center</property> |
698 | <signal name="destroy" handler="on_main_window_destroy"/> |
699 | <child> |
700 | <object class="GtkVBox" id="vbox1"> |
701 | @@ -199,70 +222,152 @@ |
702 | <property name="visible">True</property> |
703 | <property name="can_focus">True</property> |
704 | <child> |
705 | - <object class="GtkTreeView" id="metaq_view"> |
706 | + <object class="GtkScrolledWindow" id="scrolledwindow1"> |
707 | <property name="visible">True</property> |
708 | <property name="can_focus">True</property> |
709 | - <property name="model">liststore1</property> |
710 | + <property name="hscrollbar_policy">automatic</property> |
711 | + <child> |
712 | + <object class="GtkTreeView" id="metaq_view"> |
713 | + <property name="visible">True</property> |
714 | + <property name="sensitive">False</property> |
715 | + <property name="can_focus">True</property> |
716 | + <property name="model">metaq_store</property> |
717 | + <property name="headers_clickable">False</property> |
718 | + <property name="rules_hint">True</property> |
719 | + <property name="search_column">0</property> |
720 | + <property name="enable_grid_lines">both</property> |
721 | + <property name="enable_tree_lines">True</property> |
722 | + <child> |
723 | + <object class="GtkTreeViewColumn" id="metaq_operation"> |
724 | + <property name="resizable">True</property> |
725 | + <property name="title">Operation</property> |
726 | + <property name="expand">True</property> |
727 | + <child> |
728 | + <object class="GtkCellRendererText" id="cellrenderertext1"/> |
729 | + <attributes> |
730 | + <attribute name="text">0</attribute> |
731 | + </attributes> |
732 | + </child> |
733 | + </object> |
734 | + </child> |
735 | + <child> |
736 | + <object class="GtkTreeViewColumn" id="metaq_path"> |
737 | + <property name="title">Path</property> |
738 | + <property name="expand">True</property> |
739 | + <child> |
740 | + <object class="GtkCellRendererText" id="cellrenderertext2"/> |
741 | + <attributes> |
742 | + <attribute name="text">1</attribute> |
743 | + </attributes> |
744 | + </child> |
745 | + </object> |
746 | + </child> |
747 | + <child> |
748 | + <object class="GtkTreeViewColumn" id="metaq_node"> |
749 | + <property name="title">Node</property> |
750 | + <property name="expand">True</property> |
751 | + <child> |
752 | + <object class="GtkCellRendererText" id="cellrenderertext3"/> |
753 | + <attributes> |
754 | + <attribute name="text">2</attribute> |
755 | + </attributes> |
756 | + </child> |
757 | + </object> |
758 | + </child> |
759 | + <child> |
760 | + <object class="GtkTreeViewColumn" id="metaq_share"> |
761 | + <property name="title">Share</property> |
762 | + <property name="expand">True</property> |
763 | + <child> |
764 | + <object class="GtkCellRendererText" id="cellrenderertext4"/> |
765 | + <attributes> |
766 | + <attribute name="text">3</attribute> |
767 | + </attributes> |
768 | + </child> |
769 | + </object> |
770 | + </child> |
771 | + </object> |
772 | + </child> |
773 | </object> |
774 | <packing> |
775 | - <property name="resize">True</property> |
776 | + <property name="resize">False</property> |
777 | <property name="shrink">True</property> |
778 | </packing> |
779 | </child> |
780 | <child> |
781 | - <object class="GtkTreeView" id="contentq_view"> |
782 | + <object class="GtkScrolledWindow" id="scrolledwindow2"> |
783 | <property name="visible">True</property> |
784 | <property name="can_focus">True</property> |
785 | - <property name="model">liststore2</property> |
786 | + <property name="hscrollbar_policy">automatic</property> |
787 | + <child> |
788 | + <object class="GtkTreeView" id="contentq_view"> |
789 | + <property name="visible">True</property> |
790 | + <property name="sensitive">False</property> |
791 | + <property name="can_focus">True</property> |
792 | + <property name="model">contentq_store</property> |
793 | + <property name="headers_clickable">False</property> |
794 | + <property name="rules_hint">True</property> |
795 | + <property name="search_column">0</property> |
796 | + <property name="enable_grid_lines">both</property> |
797 | + <property name="enable_tree_lines">True</property> |
798 | + <child> |
799 | + <object class="GtkTreeViewColumn" id="contentq_operation"> |
800 | + <property name="title">Operation</property> |
801 | + <property name="expand">True</property> |
802 | + <child> |
803 | + <object class="GtkCellRendererText" id="cellrenderertext5"/> |
804 | + <attributes> |
805 | + <attribute name="text">0</attribute> |
806 | + </attributes> |
807 | + </child> |
808 | + </object> |
809 | + </child> |
810 | + <child> |
811 | + <object class="GtkTreeViewColumn" id="contentq_path"> |
812 | + <property name="title">Path</property> |
813 | + <property name="expand">True</property> |
814 | + <child> |
815 | + <object class="GtkCellRendererText" id="cellrenderertext6"/> |
816 | + <attributes> |
817 | + <attribute name="text">1</attribute> |
818 | + </attributes> |
819 | + </child> |
820 | + </object> |
821 | + </child> |
822 | + <child> |
823 | + <object class="GtkTreeViewColumn" id="contentq_node"> |
824 | + <property name="title">Node</property> |
825 | + <property name="expand">True</property> |
826 | + <child> |
827 | + <object class="GtkCellRendererText" id="cellrenderertext7"/> |
828 | + <attributes> |
829 | + <attribute name="text">2</attribute> |
830 | + </attributes> |
831 | + </child> |
832 | + </object> |
833 | + </child> |
834 | + <child> |
835 | + <object class="GtkTreeViewColumn" id="contentq_share"> |
836 | + <property name="title">Share</property> |
837 | + <property name="expand">True</property> |
838 | + <child> |
839 | + <object class="GtkCellRendererText" id="cellrenderertext8"/> |
840 | + <attributes> |
841 | + <attribute name="text">3</attribute> |
842 | + </attributes> |
843 | + </child> |
844 | + </object> |
845 | + </child> |
846 | + </object> |
847 | + </child> |
848 | </object> |
849 | <packing> |
850 | - <property name="resize">True</property> |
851 | + <property name="resize">False</property> |
852 | <property name="shrink">True</property> |
853 | </packing> |
854 | </child> |
855 | </object> |
856 | <packing> |
857 | -<<<<<<< TREE |
858 | - <property name="position">3</property> |
859 | - </packing> |
860 | - </child> |
861 | - </object> |
862 | - </child> |
863 | - </object> |
864 | - <object class="GtkStatusIcon" id="status_icon"> |
865 | - <property name="has_tooltip">True</property> |
866 | - <property name="tooltip_text">Magicicada</property> |
867 | - <property name="title">Magicicada</property> |
868 | - </object> |
869 | - <object class="GtkAboutDialog" id="about_dialog"> |
870 | - <property name="border_width">5</property> |
871 | - <property name="type_hint">normal</property> |
872 | - <property name="has_separator">False</property> |
873 | - <property name="program_name">Magicicada</property> |
874 | - <property name="copyright" translatable="yes">Copyright 2010 Natalia Bidart <natalia.bidart@gmail.com> |
875 | -Copyright 2010 Facundo Batista <facundo.batista@gmail.com> |
876 | -</property> |
877 | - <property name="website">http://launchpad.net/magicicada</property> |
878 | - <property name="license" translatable="yes">GPL v3.0</property> |
879 | - <property name="authors">Natalia Bidart <natalia.bidart@gmail.com> |
880 | -Facundo Batista <facundo.batista@gmail.com></property> |
881 | - <child internal-child="vbox"> |
882 | - <object class="GtkVBox" id="dialog-vbox1"> |
883 | - <property name="visible">True</property> |
884 | - <property name="spacing">2</property> |
885 | - <child> |
886 | - <placeholder/> |
887 | - </child> |
888 | - <child internal-child="action_area"> |
889 | - <object class="GtkHButtonBox" id="dialog-action_area1"> |
890 | - <property name="visible">True</property> |
891 | - <property name="layout_style">end</property> |
892 | - </object> |
893 | - <packing> |
894 | - <property name="expand">False</property> |
895 | - <property name="pack_type">end</property> |
896 | - <property name="position">0</property> |
897 | -======= |
898 | <property name="position">3</property> |
899 | </packing> |
900 | </child> |
901 | @@ -303,7 +408,6 @@ |
902 | <property name="expand">False</property> |
903 | <property name="pack_type">end</property> |
904 | <property name="position">0</property> |
905 | ->>>>>>> MERGE-SOURCE |
906 | </packing> |
907 | </child> |
908 | </object> |
909 | |
910 | === modified file 'magicicada/__init__.py' |
911 | --- magicicada/__init__.py 2010-05-17 16:12:33 +0000 |
912 | +++ magicicada/__init__.py 2010-05-17 16:12:34 +0000 |
913 | @@ -1,294 +1,89 @@ |
914 | -<<<<<<< TREE |
915 | -# __init__.py |
916 | -# |
917 | -# Author: Natalia Bidart <natalia.bidart@gmail.com> |
918 | -# |
919 | -# Copyright 2010 Chicharreros |
920 | -# |
921 | -# This program is free software: you can redistribute it and/or modify it |
922 | -# under the terms of the GNU General Public License version 3, as published |
923 | -# by the Free Software Foundation. |
924 | -# |
925 | -# This program is distributed in the hope that it will be useful, but |
926 | -# WITHOUT ANY WARRANTY; without even the implied warranties of |
927 | -# MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR |
928 | -# PURPOSE. See the GNU General Public License for more details. |
929 | -# |
930 | -# You should have received a copy of the GNU General Public License along |
931 | -# with this program. If not, see <http://www.gnu.org/licenses/>. |
932 | - |
933 | -"""Magicicada.""" |
934 | - |
935 | -import gtk |
936 | - |
937 | -import gettext |
938 | -from gettext import gettext as _ |
939 | -gettext.textdomain('magicicada') |
940 | - |
941 | -from twisted.internet import gtk2reactor # for gtk-2.0 |
942 | -gtk2reactor.install() |
943 | - |
944 | -from twisted.internet import reactor |
945 | - |
946 | -from magicicada.helpers import get_data_file, get_builder, print_debug |
947 | -from magicicada.syncdaemon import SyncDaemon |
948 | - |
949 | - |
950 | -class MagicicadaUI(object): |
951 | - |
952 | - STATUS = { |
953 | - 'started': _('Service started, click Connect to continue.'), |
954 | - 'connected': _('Service connected. Doing internal synchronization...'), |
955 | - 'online': _('Service reached Nirvana.'), |
956 | - } |
957 | - |
958 | - def __init__(self, launchpad_available=False): |
959 | - """Init.""" |
960 | - self.builder = get_builder('gui.glade') |
961 | - self.builder.connect_signals(self) |
962 | - |
963 | - if launchpad_available: |
964 | - # for more information about LaunchpadIntegration: |
965 | - # wiki.ubuntu.com/UbuntuDevelopment/Internationalisation/Coding |
966 | - helpmenu = self.builder.get_object('helpMenu') |
967 | - if helpmenu: |
968 | - LaunchpadIntegration.set_sourcepackagename('magicicada') |
969 | - LaunchpadIntegration.add_items(helpmenu, 0, False, True) |
970 | - |
971 | - animation_filename = get_data_file('media', 'loader-ball.gif') |
972 | - self.loading_animation = gtk.gdk.PixbufAnimation(animation_filename) |
973 | - |
974 | - self.started = self.connected = self.online = False |
975 | - |
976 | - widgets = ( |
977 | - 'start', 'stop', 'connect', 'disconnect', # toolbar buttons |
978 | - 'is_started', 'is_connected', 'is_online', # status bar images |
979 | - 'status_label', 'status_icon', # status label and systray icon |
980 | - 'main_window', 'about_dialog', |
981 | - ) |
982 | - for widget in widgets: |
983 | - setattr(self, widget, self.builder.get_object(widget)) |
984 | - |
985 | - icon_filename = get_data_file('media', 'ubuntuone.png') |
986 | - self.status_icon.set_from_file(icon_filename) |
987 | - |
988 | - self.main_window.set_icon_from_file(icon_filename) |
989 | - self.main_window.show() |
990 | - |
991 | - self.syncdaemon = SyncDaemon() |
992 | - |
993 | - def run(self): |
994 | - """Do the deed.""" |
995 | - reactor.run() # instead of: gtk.main() |
996 | - |
997 | - def shutdown(self): |
998 | - """Stop the deed.""" |
999 | - reactor.stop() # instead of: gtk.main_quit() |
1000 | - |
1001 | - # GTK callbacks |
1002 | - |
1003 | - def on_main_window_destroy(self, widget, data=None): |
1004 | - """Called when the MagicicadaWindow is closed.""" |
1005 | - # Clean up code for saving application state should be added here. |
1006 | - if self.started: |
1007 | - self.on_stop_clicked(self.stop) |
1008 | - self.syncdaemon.shutdown() |
1009 | - |
1010 | - def on_quit_activate(self, widget, data=None): |
1011 | - """Signal handler for closing the program.""" |
1012 | - self.on_main_window_destroy(self.main_window) |
1013 | - |
1014 | - def on_about_activate(self, widget, data=None): |
1015 | - """Display the about box.""" |
1016 | - response = self.about_dialog.run() |
1017 | - self.about_dialog.hide() |
1018 | - |
1019 | - @print_debug |
1020 | - def on_start_clicked(self, widget, data=None): |
1021 | - """Start syncdaemon.""" |
1022 | - self.started = True |
1023 | - self.connect.set_sensitive(True) |
1024 | - self.start.hide() |
1025 | - self.stop.show() |
1026 | - |
1027 | - self.doing_something(self.is_started) |
1028 | - |
1029 | - @print_debug |
1030 | - def on_stop_clicked(self, widget, data=None): |
1031 | - """Stop syncdaemon.""" |
1032 | - assert self.started |
1033 | - |
1034 | - if self.connected: |
1035 | - self.on_disconnect_clicked(self.disconnect) |
1036 | - self.connect.set_sensitive(False) |
1037 | - |
1038 | - self.started = False |
1039 | - self.start.show() |
1040 | - self.stop.hide() |
1041 | - |
1042 | - self.on_stopped() |
1043 | - |
1044 | - @print_debug |
1045 | - def on_connect_clicked(self, widget, data=None): |
1046 | - """Connect syncdaemon.""" |
1047 | - assert self.started |
1048 | - self.connected = True |
1049 | - self.connect.hide() |
1050 | - self.disconnect.show() |
1051 | - |
1052 | - self.on_started() |
1053 | - self.doing_something(self.is_connected) |
1054 | - |
1055 | - @print_debug |
1056 | - def on_disconnect_clicked(self, widget, data=None): |
1057 | - """Disconnect syncdaemon.""" |
1058 | - assert self.started |
1059 | - assert self.connected |
1060 | - self.connected = False |
1061 | - self.connect.show() |
1062 | - self.disconnect.hide() |
1063 | - |
1064 | - self.on_disconnected() |
1065 | - |
1066 | - # DBus callbacks |
1067 | - |
1068 | - def on_started(self, *args, **kwargs): |
1069 | - """Callback'ed when syncadaemon is started.""" |
1070 | - self.stop_doing_something(self.is_started) |
1071 | - self.status_label.set_text(self.STATUS['started']) |
1072 | - |
1073 | - def on_stopped(self, *args, **kwargs): |
1074 | - """Callback'ed when syncadaemon is stopped.""" |
1075 | - |
1076 | - self.stop_doing_something(self.is_started, sensitive=False) |
1077 | - |
1078 | - self.is_started.set_sensitive(False) |
1079 | - self.is_connected.set_sensitive(False) |
1080 | - self.is_online.set_sensitive(False) |
1081 | - |
1082 | - def on_connected(self, *args, **kwargs): |
1083 | - """Callback'ed when syncadaemon is connected.""" |
1084 | - self.is_connected.set_sensitive(True) |
1085 | - self.doing_something(self.is_online) |
1086 | - self.status_label.set_text(self.STATUS['connected']) |
1087 | - |
1088 | - def on_disconnected(self, *args, **kwargs): |
1089 | - """Callback'ed when syncadaemon is disconnected.""" |
1090 | - |
1091 | - self.stop_doing_something(self.is_connected, sensitive=False) |
1092 | - |
1093 | - self.is_connected.set_sensitive(False) |
1094 | - self.is_online.set_sensitive(False) |
1095 | - |
1096 | - def on_online(self, *args, **kwargs): |
1097 | - """Callback'ed when syncadaemon is online.""" |
1098 | - self.is_onlined.set_sensitive(True) |
1099 | - self.status_label.set_text(self.STATUS['online']) |
1100 | - |
1101 | - def on_offline(self, *args, **kwargs): |
1102 | - """Callback'ed when syncadaemon is offline.""" |
1103 | - |
1104 | - self.stop_doing_something(self.is_online, sensitive=False) |
1105 | - |
1106 | - self.is_online.set_sensitive(False) |
1107 | - |
1108 | - # custom |
1109 | - |
1110 | - def doing_something(self, what): |
1111 | - """Set a loader animation on 'what'.""" |
1112 | - what.set_sensitive(True) |
1113 | - what.set_from_animation(self.loading_animation) |
1114 | - |
1115 | - def stop_doing_something(self, what, sensitive=True): |
1116 | - """Set a loader animation on 'what'.""" |
1117 | - what.set_from_stock(gtk.STOCK_YES, gtk.ICON_SIZE_BUTTON) |
1118 | - what.set_sensitive(sensitive) |
1119 | -======= |
1120 | -# __init__.py |
1121 | -# |
1122 | -# Author: Natalia Bidart <natalia.bidart@gmail.com> |
1123 | -# |
1124 | -# Copyright 2010 Chicharreros |
1125 | -# |
1126 | -# This program is free software: you can redistribute it and/or modify it |
1127 | -# under the terms of the GNU General Public License version 3, as published |
1128 | -# by the Free Software Foundation. |
1129 | -# |
1130 | -# This program is distributed in the hope that it will be useful, but |
1131 | -# WITHOUT ANY WARRANTY; without even the implied warranties of |
1132 | -# MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR |
1133 | -# PURPOSE. See the GNU General Public License for more details. |
1134 | -# |
1135 | -# You should have received a copy of the GNU General Public License along |
1136 | -# with this program. If not, see <http://www.gnu.org/licenses/>. |
1137 | - |
1138 | -"""Magicicada.""" |
1139 | - |
1140 | -import gtk |
1141 | - |
1142 | -import gettext |
1143 | -from gettext import gettext as _ |
1144 | -gettext.textdomain('magicicada') |
1145 | - |
1146 | -from twisted.internet import gtk2reactor # for gtk-2.0 |
1147 | -gtk2reactor.install() |
1148 | - |
1149 | -from twisted.internet import reactor |
1150 | - |
1151 | -from magicicada.helpers import get_data_file, get_builder, print_debug |
1152 | -from magicicada.syncdaemon import SyncDaemon |
1153 | - |
1154 | - |
1155 | -class MagicicadaUI(object): |
1156 | - |
1157 | - STATUS = { |
1158 | - 'started': _('Service started, click Connect to continue.'), |
1159 | - 'connected': _('Service connected. Doing internal synchronization...'), |
1160 | - 'online': _('Service reached Nirvana.'), |
1161 | - } |
1162 | - |
1163 | - def __init__(self, launchpad_available=False): |
1164 | - """Init.""" |
1165 | - self.builder = get_builder('gui.glade') |
1166 | - self.builder.connect_signals(self) |
1167 | - |
1168 | - if launchpad_available: |
1169 | - # for more information about LaunchpadIntegration: |
1170 | - # wiki.ubuntu.com/UbuntuDevelopment/Internationalisation/Coding |
1171 | - helpmenu = self.builder.get_object('helpMenu') |
1172 | - if helpmenu: |
1173 | - LaunchpadIntegration.set_sourcepackagename('magicicada') |
1174 | - LaunchpadIntegration.add_items(helpmenu, 0, False, True) |
1175 | - |
1176 | - animation_filename = get_data_file('media', 'loader-ball.gif') |
1177 | - self.loading_animation = gtk.gdk.PixbufAnimation(animation_filename) |
1178 | - |
1179 | - self.started = self.connected = self.online = False |
1180 | - |
1181 | - widgets = ( |
1182 | - 'start', 'stop', 'connect', 'disconnect', # toolbar buttons |
1183 | - 'is_started', 'is_connected', 'is_online', # status bar images |
1184 | - 'status_label', 'status_icon', # status label and systray icon |
1185 | - 'main_window', 'about_dialog', |
1186 | - ) |
1187 | - for widget in widgets: |
1188 | - setattr(self, widget, self.builder.get_object(widget)) |
1189 | +# __init__.py |
1190 | +# |
1191 | +# Author: Natalia Bidart <natalia.bidart@gmail.com> |
1192 | +# |
1193 | +# Copyright 2010 Chicharreros |
1194 | +# |
1195 | +# This program is free software: you can redistribute it and/or modify it |
1196 | +# under the terms of the GNU General Public License version 3, as published |
1197 | +# by the Free Software Foundation. |
1198 | +# |
1199 | +# This program is distributed in the hope that it will be useful, but |
1200 | +# WITHOUT ANY WARRANTY; without even the implied warranties of |
1201 | +# MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR |
1202 | +# PURPOSE. See the GNU General Public License for more details. |
1203 | +# |
1204 | +# You should have received a copy of the GNU General Public License along |
1205 | +# with this program. If not, see <http://www.gnu.org/licenses/>. |
1206 | + |
1207 | +"""Magicicada.""" |
1208 | + |
1209 | +import gtk |
1210 | +import sys |
1211 | + |
1212 | +import gettext |
1213 | +from gettext import gettext as _ |
1214 | +gettext.textdomain('magicicada') |
1215 | + |
1216 | +from twisted.internet import gtk2reactor # for gtk-2.0 |
1217 | +gtk2reactor.install() |
1218 | + |
1219 | +from magicicada.helpers import get_data_file, get_builder, NO_OP |
1220 | +from magicicada.syncdaemon import SyncDaemon |
1221 | + |
1222 | +CONTENT_QUEUE = 'content' |
1223 | +META_QUEUE = 'meta' |
1224 | + |
1225 | +class MagicicadaUI(object): |
1226 | + |
1227 | + STATUS = { |
1228 | + 'started': _('Service started, click Connect to continue.'), |
1229 | + 'connected': _('Service connected. Doing internal synchronization...'), |
1230 | + 'online': _('Service reached Nirvana.'), |
1231 | + } |
1232 | + |
1233 | + def __init__(self, launchpad_available=False, on_destroy=NO_OP): |
1234 | + """Init.""" |
1235 | + self.builder = get_builder('gui.glade') |
1236 | + self.builder.connect_signals(self) |
1237 | + |
1238 | + if launchpad_available: |
1239 | + # for more information about LaunchpadIntegration: |
1240 | + # wiki.ubuntu.com/UbuntuDevelopment/Internationalisation/Coding |
1241 | + helpmenu = self.builder.get_object('helpMenu') |
1242 | + if helpmenu: |
1243 | + LaunchpadIntegration.set_sourcepackagename('magicicada') |
1244 | + LaunchpadIntegration.add_items(helpmenu, 0, False, True) |
1245 | + |
1246 | + self.on_destroy = on_destroy |
1247 | + |
1248 | + animation_filename = get_data_file('media', 'loader-ball.gif') |
1249 | + self.loading_animation = gtk.gdk.PixbufAnimation(animation_filename) |
1250 | + |
1251 | + self.started = self.connected = self.online = False |
1252 | + |
1253 | + widgets = ( |
1254 | + 'start', 'stop', 'connect', 'disconnect', # toolbar buttons |
1255 | + 'is_started', 'is_connected', 'is_online', # status bar images |
1256 | + 'status_label', 'status_icon', # status label and systray icon |
1257 | + 'metaq_view', 'contentq_view', # queues tree views |
1258 | + 'metaq_store', 'contentq_store', # queues list stores |
1259 | + 'main_window', 'about_dialog', |
1260 | + ) |
1261 | + for widget in widgets: |
1262 | + obj = self.builder.get_object(widget) |
1263 | + setattr(self, widget, obj) |
1264 | + assert obj is not None, '%s must not be None' % widget |
1265 | |
1266 | icon_filename = get_data_file('media', 'logo-016.png') |
1267 | self.status_icon.set_from_file(icon_filename) |
1268 | - |
1269 | self.main_window.set_icon_from_file(icon_filename) |
1270 | + |
1271 | self.main_window.show() |
1272 | |
1273 | - self.syncdaemon = SyncDaemon() |
1274 | - |
1275 | - def run(self): |
1276 | - """Do the deed.""" |
1277 | - reactor.run() # instead of: gtk.main() |
1278 | - |
1279 | - def shutdown(self): |
1280 | - """Stop the deed.""" |
1281 | - reactor.stop() # instead of: gtk.main_quit() |
1282 | + self.sd = SyncDaemon() |
1283 | + self.sd.content_queue_changed_callback = self.on_content_queue_changed |
1284 | + self.sd.meta_queue_changed_callback = self.on_meta_queue_changed |
1285 | |
1286 | # GTK callbacks |
1287 | |
1288 | @@ -297,8 +92,8 @@ |
1289 | # Clean up code for saving application state should be added here. |
1290 | if self.started: |
1291 | self.on_stop_clicked(self.stop) |
1292 | - self.syncdaemon.shutdown() |
1293 | - self.shutdown() |
1294 | + self.sd.shutdown() |
1295 | + self.on_destroy() |
1296 | |
1297 | def on_quit_activate(self, widget, data=None): |
1298 | """Signal handler for closing the program.""" |
1299 | @@ -352,7 +147,6 @@ |
1300 | |
1301 | self.on_disconnected() |
1302 | |
1303 | - @print_debug |
1304 | def on_status_icon_activate(self, widget, data=None): |
1305 | """Systray icon was clicked.""" |
1306 | if self.main_window.get_property('visible'): |
1307 | @@ -402,6 +196,26 @@ |
1308 | |
1309 | self.is_online.set_sensitive(False) |
1310 | |
1311 | + def _on_queue_changed(self, queue_name, items, *args, **kwargs): |
1312 | + """Callback'ed when a queue changed.""" |
1313 | + queue_view = getattr(self, '%sq_view' % queue_name) |
1314 | + queue_store = getattr(self, '%sq_store' % queue_name) |
1315 | + queue_store.clear() |
1316 | + for item in items: |
1317 | + row = (item.operation, item.path, item.node, item.share) |
1318 | + queue_store.append(row) |
1319 | + |
1320 | + if not queue_view.is_sensitive(): |
1321 | + queue_view.set_sensitive(True) |
1322 | + |
1323 | + def on_content_queue_changed(self, items, *args, **kwargs): |
1324 | + """Callback'ed when syncadaemon's content queue changed.""" |
1325 | + self._on_queue_changed(CONTENT_QUEUE, items, args, kwargs) |
1326 | + |
1327 | + def on_meta_queue_changed(self, items, *args, **kwargs): |
1328 | + """Callback'ed when syncadaemon's meta queue changed.""" |
1329 | + self._on_queue_changed(META_QUEUE, items, args, kwargs) |
1330 | + |
1331 | # custom |
1332 | |
1333 | def doing_something(self, what): |
1334 | @@ -413,4 +227,3 @@ |
1335 | """Set a loader animation on 'what'.""" |
1336 | what.set_from_stock(gtk.STOCK_YES, gtk.ICON_SIZE_BUTTON) |
1337 | what.set_sensitive(sensitive) |
1338 | ->>>>>>> MERGE-SOURCE |
1339 | |
1340 | === modified file 'magicicada/helpers.py' |
1341 | --- magicicada/helpers.py 2010-05-17 16:12:33 +0000 |
1342 | +++ magicicada/helpers.py 2010-05-17 16:12:34 +0000 |
1343 | @@ -15,14 +15,14 @@ |
1344 | |
1345 | from functools import wraps |
1346 | |
1347 | -from functools import wraps |
1348 | - |
1349 | from magicicada.magicicadaconfig import get_data_file |
1350 | |
1351 | import gettext |
1352 | from gettext import gettext as _ |
1353 | gettext.textdomain('magicicada') |
1354 | |
1355 | +NO_OP = lambda *a, **kw: None |
1356 | + |
1357 | def get_builder(builder_file_name): |
1358 | """Return a fully-instantiated gtk.Builder instance from specified ui file. |
1359 | |
1360 | @@ -38,19 +38,6 @@ |
1361 | builder.set_translation_domain('magicicada') |
1362 | builder.add_from_file(ui_filename) |
1363 | return builder |
1364 | -<<<<<<< TREE |
1365 | - |
1366 | -def print_debug(f): |
1367 | - """Print debug info for 'f'.""" |
1368 | - |
1369 | - @wraps(f) |
1370 | - def inner(*args, **kwargs): |
1371 | - """Wrap f.""" |
1372 | - print('Calling', f.__name__, args, kwargs) |
1373 | - f(*args, **kwargs) |
1374 | - |
1375 | - return inner |
1376 | -======= |
1377 | |
1378 | def print_debug(f): |
1379 | """Print debug info for 'f'.""" |
1380 | @@ -63,4 +50,3 @@ |
1381 | return result |
1382 | |
1383 | return inner |
1384 | ->>>>>>> MERGE-SOURCE |
1385 | |
1386 | === modified file 'magicicada/syncdaemon.py' |
1387 | --- magicicada/syncdaemon.py 2010-05-09 19:49:43 +0000 |
1388 | +++ magicicada/syncdaemon.py 2010-05-17 16:12:34 +0000 |
1389 | @@ -18,15 +18,6 @@ |
1390 | |
1391 | """The backend that communicates Magicicada with the SyncDaemon.""" |
1392 | |
1393 | -import sys |
1394 | - |
1395 | -try: |
1396 | - from twisted.internet import glib2reactor |
1397 | - glib2reactor.install() |
1398 | -except AssertionError, e: |
1399 | - msg = '\nsyncdaemon.py: Not installing glib2reactor because: %s.\n' |
1400 | - sys.stderr.write(msg % e) |
1401 | - |
1402 | import collections |
1403 | import re |
1404 | |
1405 | @@ -36,6 +27,8 @@ |
1406 | |
1407 | from ubuntuone.syncdaemon import tools |
1408 | |
1409 | +from magicicada.helpers import NO_OP |
1410 | + |
1411 | |
1412 | # structures that hold content and queue information |
1413 | QueueData = collections.namedtuple('QueueData', 'operation path share node') |
1414 | @@ -73,9 +66,9 @@ |
1415 | self._dbus_matches.append((match, dbus_interface, signal_name)) |
1416 | |
1417 | # callbacks for GUI to hook in |
1418 | - self.status_changed_callback = lambda *a, **k: None |
1419 | - self.content_queue_changed_callback = lambda *a, **k: None |
1420 | - self.meta_queue_changed_callback = lambda *a, **k: None |
1421 | + self.status_changed_callback = NO_OP |
1422 | + self.content_queue_changed_callback = NO_OP |
1423 | + self.meta_queue_changed_callback = NO_OP |
1424 | |
1425 | # calls to obtain data from SDT |
1426 | self._get_content_queue = self.sync_daemon_tool.waiting_content |
1427 | |
1428 | === modified file 'magicicada/tests/test_magicicada.py' |
1429 | --- magicicada/tests/test_magicicada.py 2010-05-17 16:12:33 +0000 |
1430 | +++ magicicada/tests/test_magicicada.py 2010-05-17 16:12:34 +0000 |
1431 | @@ -1,240 +1,83 @@ |
1432 | -<<<<<<< TREE |
1433 | -# test_magicicada.py |
1434 | -# |
1435 | -# Author: Natalia Bidart <natalia.bidart@gmail.com> |
1436 | -# |
1437 | -# Copyright 2010 Chicharreros |
1438 | -# |
1439 | -# This program is free software: you can redistribute it and/or modify it |
1440 | -# under the terms of the GNU General Public License version 3, as published |
1441 | -# by the Free Software Foundation. |
1442 | -# |
1443 | -# This program is distributed in the hope that it will be useful, but |
1444 | -# WITHOUT ANY WARRANTY; without even the implied warranties of |
1445 | -# MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR |
1446 | -# PURPOSE. See the GNU General Public License for more details. |
1447 | -# |
1448 | -# You should have received a copy of the GNU General Public License along |
1449 | -# with this program. If not, see <http://www.gnu.org/licenses/>. |
1450 | - |
1451 | -"""Tests for magicicada.""" |
1452 | - |
1453 | -import gobject |
1454 | -import gtk |
1455 | -import unittest |
1456 | - |
1457 | -from functools import wraps |
1458 | - |
1459 | -from twisted.internet import reactor |
1460 | -from twisted.trial.unittest import TestCase |
1461 | - |
1462 | -from magicicada import MagicicadaUI |
1463 | -from magicicada.helpers import get_builder |
1464 | -from magicicada.syncdaemon import SyncDaemon |
1465 | - |
1466 | -DEFAULT_TIMEOUT = 200 |
1467 | -NO_OP = lambda *a, **kw: None |
1468 | - |
1469 | -def close_window_after(a_test): |
1470 | - """Decorator to close the main window after executing f.""" |
1471 | - @wraps(a_test) |
1472 | - def inner(*args, **kwargs): |
1473 | - """Inner function.""" |
1474 | - #gobject.timeout_add(DEFAULT_TIMEOUT, a_test) |
1475 | - #self.ui.run() |
1476 | - |
1477 | - return inner |
1478 | - |
1479 | - |
1480 | -class MagicicadaUITestCase(TestCase): |
1481 | - """UI test cases for Magicicada UI.""" |
1482 | - |
1483 | - def setUp(self): |
1484 | - """Init.""" |
1485 | - self.builder = get_builder('gui.glade') |
1486 | - self.ui = MagicicadaUI() |
1487 | - self._patched = {} |
1488 | - self._called = False |
1489 | - |
1490 | - def tearDown(self): |
1491 | - """Clenaup.""" |
1492 | - self.ui.on_main_window_destroy(self.ui.main_window) |
1493 | - for (instance, attr), old_value in self._patched.iteritems(): |
1494 | - setattr(instance, attr, old_value) |
1495 | - self._called = False |
1496 | - self.builder = None |
1497 | - |
1498 | - def test_init_creates_sd_instance(self): |
1499 | - """SyncDaemon instance is created at creation time.""" |
1500 | - self.assertTrue(isinstance(self.ui.syncdaemon, SyncDaemon)) |
1501 | - |
1502 | - def test_destroy_shutdowns_sd_instance(self): |
1503 | - """SyncDaemon instance is shutdown at destroy time.""" |
1504 | - self.patch(self.ui.syncdaemon, 'shutdown', |
1505 | - lambda *_: setattr(self, '_called', True)) |
1506 | - self.ui.on_main_window_destroy(self.ui.main_window) |
1507 | - self.assertTrue(self._called, 'syncdaemon.shutdown must be called at destroy time.') |
1508 | - |
1509 | - def test_shutdown_stops_reactor(self): |
1510 | - """SyncDaemon instance is shutdown at destroy time.""" |
1511 | - self.patch(reactor, 'stop', |
1512 | - lambda *_: setattr(self, '_called', True)) |
1513 | - self.ui.shutdown() |
1514 | - self.assertTrue(self._called, 'reactor.stop must be called at destroy time.') |
1515 | - |
1516 | - |
1517 | -class MagicicadaUIStartupTestCase(MagicicadaUITestCase): |
1518 | - """UI test cases for startup state.""" |
1519 | - |
1520 | - def test_main_window_is_visible(self): |
1521 | - """UI can be created.""" |
1522 | - self.assertTrue(self.ui.main_window.get_property('visible')) |
1523 | - |
1524 | - def test_start_connect_are_visible(self): |
1525 | - """Start and Connect buttons are visible.""" |
1526 | - self.assertTrue(self.ui.start.get_property('visible')) |
1527 | - self.assertTrue(self.ui.start.is_sensitive()) |
1528 | - |
1529 | - self.assertTrue(self.ui.connect.get_property('visible')) |
1530 | - self.assertFalse(self.ui.connect.is_sensitive()) |
1531 | - |
1532 | - def test_stop_disconnect_are_not_visible(self): |
1533 | - """Start and Connect buttons are visible.""" |
1534 | - self.assertFalse(self.ui.stop.get_property('visible')) |
1535 | - self.assertFalse(self.ui.disconnect.get_property('visible')) |
1536 | - |
1537 | - def test_not_started_not_connected_not_online(self): |
1538 | - """Test default values for flags.""" |
1539 | - self.assertFalse(self.ui.started) |
1540 | - self.assertFalse(self.ui.connected) |
1541 | - self.assertFalse(self.ui.online) |
1542 | - |
1543 | - def test_indicators_are_non_sensitive(self): |
1544 | - """Test default sensitivity for indicators.""" |
1545 | - #import pdb; pdb.set_trace() |
1546 | - self.assertFalse(self.ui.is_started.is_sensitive()) |
1547 | - self.assertFalse(self.ui.is_connected.is_sensitive()) |
1548 | - self.assertFalse(self.ui.is_online.is_sensitive()) |
1549 | - |
1550 | -class MagicicadaUIClickedTestCase(MagicicadaUIStartupTestCase): |
1551 | - """UI test cases.""" |
1552 | - |
1553 | - def test_started_if_start_clicked(self): |
1554 | - """Test started if Start was clicked.""" |
1555 | - self.ui.on_start_clicked(self.ui.start) |
1556 | - self.assertTrue(self.ui.started) |
1557 | - self.assertFalse(self.ui.connected) |
1558 | - self.assertFalse(self.ui.online) |
1559 | - |
1560 | - def test_can_connect_can_stop_if_start_clicked(self): |
1561 | - """Test Connect and Stop are enabled if Start was clicked.""" |
1562 | - self.ui.on_start_clicked(self.ui.start) |
1563 | - self.assertFalse(self.ui.start.get_property('visible')) |
1564 | - self.assertTrue(self.ui.stop.get_property('visible')) |
1565 | - self.assertTrue(self.ui.connect.is_sensitive()) |
1566 | - |
1567 | - def test_connected_if_connect_clicked(self): |
1568 | - """Test connected if Connect was clicked.""" |
1569 | - self.ui.on_start_clicked(self.ui.start) # need to be started |
1570 | - self.ui.on_connect_clicked(self.ui.connect) |
1571 | - |
1572 | - self.assertTrue(self.ui.started) |
1573 | - self.assertTrue(self.ui.connected) |
1574 | - self.assertFalse(self.ui.online) |
1575 | - |
1576 | - def test_can_disconnect_if_connect_clicked(self): |
1577 | - """Test Disconnect is enabled if Connect was clicked.""" |
1578 | - self.ui.on_start_clicked(self.ui.start) # need to be started |
1579 | - self.ui.on_connect_clicked(self.ui.connect) |
1580 | - self.assertFalse(self.ui.connect.get_property('visible')) |
1581 | - self.assertTrue(self.ui.disconnect.get_property('visible')) |
1582 | - |
1583 | -======= |
1584 | -# test_magicicada.py |
1585 | -# |
1586 | -# Author: Natalia Bidart <natalia.bidart@gmail.com> |
1587 | -# |
1588 | -# Copyright 2010 Chicharreros |
1589 | -# |
1590 | -# This program is free software: you can redistribute it and/or modify it |
1591 | -# under the terms of the GNU General Public License version 3, as published |
1592 | -# by the Free Software Foundation. |
1593 | -# |
1594 | -# This program is distributed in the hope that it will be useful, but |
1595 | -# WITHOUT ANY WARRANTY; without even the implied warranties of |
1596 | -# MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR |
1597 | -# PURPOSE. See the GNU General Public License for more details. |
1598 | -# |
1599 | -# You should have received a copy of the GNU General Public License along |
1600 | -# with this program. If not, see <http://www.gnu.org/licenses/>. |
1601 | - |
1602 | -"""Tests for magicicada.""" |
1603 | - |
1604 | -import gobject |
1605 | -import gtk |
1606 | -import unittest |
1607 | - |
1608 | -from functools import wraps |
1609 | - |
1610 | -from twisted.internet import reactor |
1611 | -from twisted.trial.unittest import TestCase |
1612 | - |
1613 | -from magicicada import MagicicadaUI |
1614 | -from magicicada.helpers import get_builder |
1615 | -from magicicada.syncdaemon import SyncDaemon |
1616 | - |
1617 | -DEFAULT_TIMEOUT = 200 |
1618 | -NO_OP = lambda *a, **kw: None |
1619 | - |
1620 | -def close_window_after(a_test): |
1621 | - """Decorator to close the main window after executing f.""" |
1622 | - @wraps(a_test) |
1623 | - def inner(*args, **kwargs): |
1624 | - """Inner function.""" |
1625 | - #gobject.timeout_add(DEFAULT_TIMEOUT, a_test) |
1626 | - #self.ui.run() |
1627 | - |
1628 | - return inner |
1629 | - |
1630 | - |
1631 | -class MagicicadaUITestCase(TestCase): |
1632 | - """UI test cases for Magicicada UI.""" |
1633 | - |
1634 | - def setUp(self): |
1635 | - """Init.""" |
1636 | - self.builder = get_builder('gui.glade') |
1637 | - self.ui = MagicicadaUI() |
1638 | - self._patched = {} |
1639 | - self._called = False |
1640 | - |
1641 | - def tearDown(self): |
1642 | - """Clenaup.""" |
1643 | - self.ui.on_main_window_destroy(self.ui.main_window) |
1644 | - for (instance, attr), old_value in self._patched.iteritems(): |
1645 | - setattr(instance, attr, old_value) |
1646 | - self._called = False |
1647 | - self.builder = None |
1648 | - |
1649 | - def test_init_creates_sd_instance(self): |
1650 | - """SyncDaemon instance is created at creation time.""" |
1651 | - self.assertTrue(isinstance(self.ui.syncdaemon, SyncDaemon)) |
1652 | - |
1653 | - def test_destroy_shutdowns_sd_instance(self): |
1654 | - """SyncDaemon instance is shutdown at destroy time.""" |
1655 | - self.patch(self.ui.syncdaemon, 'shutdown', |
1656 | +# test_magicicada.py |
1657 | +# |
1658 | +# Author: Natalia Bidart <natalia.bidart@gmail.com> |
1659 | +# |
1660 | +# Copyright 2010 Chicharreros |
1661 | +# |
1662 | +# This program is free software: you can redistribute it and/or modify it |
1663 | +# under the terms of the GNU General Public License version 3, as published |
1664 | +# by the Free Software Foundation. |
1665 | +# |
1666 | +# This program is distributed in the hope that it will be useful, but |
1667 | +# WITHOUT ANY WARRANTY; without even the implied warranties of |
1668 | +# MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR |
1669 | +# PURPOSE. See the GNU General Public License for more details. |
1670 | +# |
1671 | +# You should have received a copy of the GNU General Public License along |
1672 | +# with this program. If not, see <http://www.gnu.org/licenses/>. |
1673 | + |
1674 | +"""Tests for magicicada.""" |
1675 | + |
1676 | +import gobject |
1677 | +import gtk |
1678 | +import unittest |
1679 | + |
1680 | +from functools import wraps |
1681 | + |
1682 | +from twisted.trial.unittest import TestCase |
1683 | + |
1684 | +from magicicada import MagicicadaUI, CONTENT_QUEUE, META_QUEUE |
1685 | +from magicicada.helpers import get_builder, NO_OP |
1686 | +from magicicada.syncdaemon import SyncDaemon, QueueData |
1687 | + |
1688 | +DEFAULT_TIMEOUT = 200 |
1689 | + |
1690 | +def close_window_after(a_test): |
1691 | + """Decorator to close the main window after executing f.""" |
1692 | + @wraps(a_test) |
1693 | + def inner(*args, **kwargs): |
1694 | + """Inner function.""" |
1695 | + #gobject.timeout_add(DEFAULT_TIMEOUT, a_test) |
1696 | + #self.ui.run() |
1697 | + |
1698 | + return inner |
1699 | + |
1700 | + |
1701 | +class FakedSyncdaemon(object): |
1702 | + """A faked syncdaemon.""" |
1703 | + |
1704 | + def __init__(self): |
1705 | + self.content_queue_changed_callback = NO_OP |
1706 | + self.meta_queue_changed_callback = NO_OP |
1707 | + |
1708 | + |
1709 | +class MagicicadaUITestCase(TestCase): |
1710 | + """UI test cases for Magicicada UI.""" |
1711 | + |
1712 | + def setUp(self): |
1713 | + """Init.""" |
1714 | + self.builder = get_builder('gui.glade') |
1715 | + self.ui = MagicicadaUI() |
1716 | + self._called = False |
1717 | + |
1718 | + def tearDown(self): |
1719 | + """Clenaup.""" |
1720 | + self.ui.on_main_window_destroy(self.ui.main_window) |
1721 | + self._called = False |
1722 | + self.builder = None |
1723 | + |
1724 | + def test_init_creates_sd_instance(self): |
1725 | + """SyncDaemon instance is created at creation time.""" |
1726 | + self.assertTrue(isinstance(self.ui.sd, SyncDaemon)) |
1727 | + |
1728 | + def test_destroy_shutdowns_sd_instance(self): |
1729 | + """SyncDaemon instance is shutdown at destroy time.""" |
1730 | + self.patch(self.ui.sd, 'shutdown', |
1731 | lambda *_: setattr(self, '_called', True)) |
1732 | self.ui.on_main_window_destroy(self.ui.main_window) |
1733 | self.assertTrue(self._called, |
1734 | 'syncdaemon.shutdown must be called at destroy time.') |
1735 | |
1736 | - def test_shutdown_stops_reactor(self): |
1737 | - """SyncDaemon instance is shutdown at destroy time.""" |
1738 | - self.patch(reactor, 'stop', |
1739 | - lambda *_: setattr(self, '_called', True)) |
1740 | - self.ui.shutdown() |
1741 | - self.assertTrue(self._called, |
1742 | - 'reactor.stop must be called at destroy time.') |
1743 | - |
1744 | |
1745 | class MagicicadaUIStartupTestCase(MagicicadaUITestCase): |
1746 | """UI test cases for startup state.""" |
1747 | @@ -269,6 +112,7 @@ |
1748 | self.assertFalse(self.ui.is_connected.is_sensitive()) |
1749 | self.assertFalse(self.ui.is_online.is_sensitive()) |
1750 | |
1751 | + |
1752 | class MagicicadaUIClickedTestCase(MagicicadaUITestCase): |
1753 | """UI test cases.""" |
1754 | |
1755 | @@ -302,6 +146,7 @@ |
1756 | self.assertFalse(self.ui.connect.get_property('visible')) |
1757 | self.assertTrue(self.ui.disconnect.get_property('visible')) |
1758 | |
1759 | + |
1760 | class MagicicadaUISystrayIconTestCase(MagicicadaUITestCase): |
1761 | """UI test cases for the systray icon.""" |
1762 | |
1763 | @@ -317,4 +162,92 @@ |
1764 | self.ui.on_status_icon_activate(self.ui.status_icon) # show |
1765 | msg = 'main_window should be visible when icon clicked after hidden.' |
1766 | self.assertTrue(self.ui.main_window.get_property('visible'), msg) |
1767 | ->>>>>>> MERGE-SOURCE |
1768 | + |
1769 | + |
1770 | +class _MagicicadaUIQueueTestCase(MagicicadaUITestCase): |
1771 | + """Abstratc UI test cases for a queue views.""" |
1772 | + |
1773 | + queue = None |
1774 | + |
1775 | + def setUp(self): |
1776 | + """Init.""" |
1777 | + super(_MagicicadaUIQueueTestCase, self).setUp() |
1778 | + self.sd_changed = getattr(self.ui.sd, |
1779 | + '%s_queue_changed_callback' % self.queue) |
1780 | + self.ui_changed = getattr(self.ui, |
1781 | + 'on_%s_queue_changed' % self.queue) |
1782 | + self.queue_store = getattr(self.ui, '%sq_store' % self.queue) |
1783 | + self.queue_view = getattr(self.ui, '%sq_view' % self.queue) |
1784 | + |
1785 | + def build_some_data(self, limit=5): |
1786 | + """Build some data to pass to queue changed callback.""" |
1787 | + items = [] |
1788 | + for i in xrange(limit): |
1789 | + cq = QueueData(operation='operation %i' % i, path='path %i' % i, |
1790 | + node='node %i' % i, share='share %i' % i) |
1791 | + items.append(cq) |
1792 | + return items |
1793 | + |
1794 | + def test_callback_is_connected(self): |
1795 | + """Queue changed callback is connected.""" |
1796 | + self.assertEqual(self.sd_changed, self.ui_changed, |
1797 | + '%s queue callback must be set' % self.queue) |
1798 | + |
1799 | + def test_model_is_binded(self): |
1800 | + """List store is binded.""" |
1801 | + actual = self.queue_view.get_model() |
1802 | + msg = 'model for view %s differs from %s' |
1803 | + self.assertEqual(self.queue_store, actual, |
1804 | + msg % (self.queue, self.queue_store)) |
1805 | + |
1806 | + def test_on_queue_changed_updates_view(self): |
1807 | + """On queue changed the view is updated.""" |
1808 | + items = self.build_some_data() |
1809 | + self.sd_changed(items) |
1810 | + |
1811 | + self.assertEqual(len(self.queue_store), len(items)) |
1812 | + |
1813 | + # assert rows content equal to items content |
1814 | + tree_iter = self.queue_store.get_iter_root() |
1815 | + tmp = list(reversed(items)) |
1816 | + while tree_iter is not None: |
1817 | + expected = tmp.pop() |
1818 | + |
1819 | + op, path, node, share = self.queue_store.get(tree_iter, 0, 1, 2, 3) |
1820 | + self.assertEqual(expected.operation, op) |
1821 | + self.assertEqual(expected.path, path) |
1822 | + self.assertEqual(expected.node, node) |
1823 | + self.assertEqual(expected.share, share) |
1824 | + |
1825 | + tree_iter = self.queue_store.iter_next(tree_iter) |
1826 | + |
1827 | + def test_model_is_cleared_before_updating(self): |
1828 | + """The model is cleared before upadting with a new set of data.""" |
1829 | + items = self.build_some_data() |
1830 | + self.sd_changed(items) |
1831 | + |
1832 | + items = self.build_some_data() |
1833 | + self.sd_changed(items) |
1834 | + self.assertEqual(len(self.queue_store), len(items)) |
1835 | + |
1836 | + def test_view_is_enabled_if_disabled_on_changed(self): |
1837 | + """The tree view is enabled on changed if it was disabled.""" |
1838 | + self.assertFalse(self.queue_view.is_sensitive(), |
1839 | + 'Tree view must be disabled by default.') |
1840 | + items = self.build_some_data() |
1841 | + self.sd_changed(items) |
1842 | + |
1843 | + self.assertTrue(self.queue_view.is_sensitive(), |
1844 | + 'Tree view must be enabled on changed.') |
1845 | + |
1846 | + |
1847 | +class MagicicadaUIContentQueueTestCase(_MagicicadaUIQueueTestCase): |
1848 | + """UI test cases for content queue views.""" |
1849 | + |
1850 | + queue = CONTENT_QUEUE |
1851 | + |
1852 | + |
1853 | +class MagicicadaUIMetaQueueTestCase(_MagicicadaUIQueueTestCase): |
1854 | + """UI test cases for meta queue views.""" |
1855 | + |
1856 | + queue = META_QUEUE |
I have no idea why there are some "conflicts" marked as removed in the diff below, I had no conflicts in the branch nor in trunk.