task-vuplus-enigma2
[vuplus_openvuplus_3.0] / meta-openvuplus / recipes-enigma2 / enigma2 / enigma2-plugins / vuplus / enigma2_plugins_20110810.patch
1 diff --git a/mytube/meta/plugin_mytube.xml b/mytube/meta/plugin_mytube.xml
2 index eb2a0fd..56e1686 100644
3 --- a/mytube/meta/plugin_mytube.xml
4 +++ b/mytube/meta/plugin_mytube.xml
5 @@ -3,7 +3,8 @@
6                      <hardware type="dm8000" />
7                      <hardware type="dm800" />
8                     <hardware type="dm800se" />
9 -                    <hardware type="dm500hd" />        
10 +                    <hardware type="dm500hd" />
11 +                   <hardware type="dm7020hd" />
12                      <tag type="Multimedia" />
13           </prerequisites>
14            <info>
15 diff --git a/mytube/po/de.po b/mytube/po/de.po
16 index b487673..c56c84e 100644
17 --- a/mytube/po/de.po
18 +++ b/mytube/po/de.po
19 @@ -7,9 +7,9 @@ msgid ""
20  msgstr ""
21  "Project-Id-Version: tuxbox-enigma 0.0.1\n"
22  "Report-Msgid-Bugs-To: \n"
23 -"POT-Creation-Date: 2009-05-29 17:38+0200\n"
24 -"PO-Revision-Date: 2008-05-16 17:15+0100\n"
25 -"Last-Translator: Stefan Pluecken <mladen.horvat@multimedia-labs.de>\n"
26 +"POT-Creation-Date: 2011-06-12 19:07+0100\n"
27 +"PO-Revision-Date: 2011-06-12 19:22+0100\n"
28 +"Last-Translator: JuSt611 <Software@Strasdas.de>\n"
29  "Language-Team: none\n"
30  "MIME-Version: 1.0\n"
31  "Content-Type: text/plain; charset=UTF-8\n"
32 @@ -18,448 +18,690 @@ msgstr ""
33  "X-Poedit-Language: German\n"
34  "X-Poedit-Country: GERMANY\n"
35  "X-Poedit-SourceCharset: iso-8859-15\n"
36 +"X-Poedit-Basepath: .\n"
37 +"X-Poedit-SearchPath-0: ../src\n"
38  
39 -msgid " Results"
40 -msgstr " Ergebnisse"
41 +#: ../src/MyTubeSearch.py:161
42 +#: ../src/plugin.py:52
43 +msgid "Relevance"
44 +msgstr "Relevanz"
45  
46 -msgid "Added: "
47 -msgstr "Hinzugefügt: "
48 +#: ../src/MyTubeSearch.py:162
49 +#: ../src/plugin.py:53
50 +msgid "View Count"
51 +msgstr "Aufrufe"
52  
53 -msgid "All"
54 -msgstr "Alle"
55 +#: ../src/MyTubeSearch.py:163
56 +#: ../src/plugin.py:54
57 +msgid "Published"
58 +msgstr "Veröffentlicht"
59 +
60 +#: ../src/MyTubeSearch.py:164
61 +#: ../src/plugin.py:55
62 +msgid "Rating"
63 +msgstr "Bewertung"
64  
65 +#: ../src/MyTubeSearch.py:168
66 +#: ../src/plugin.py:59
67  msgid "All Time"
68 -msgstr ""
69 +msgstr "Allzeit"
70  
71 -msgid "An error occured."
72 -msgstr "Es ist ein Fehler aufgetreten."
73 +#: ../src/MyTubeSearch.py:169
74 +#: ../src/plugin.py:60
75 +msgid "This Month"
76 +msgstr "Diesen Monat"
77  
78 -msgid "Ascending"
79 -msgstr "aufsteigend"
80 +#: ../src/MyTubeSearch.py:170
81 +#: ../src/plugin.py:61
82 +msgid "This Week"
83 +msgstr "Diese Woche"
84  
85 -msgid "Ask user"
86 -msgstr "Nutzer fragen"
87 +#: ../src/MyTubeSearch.py:171
88 +#: ../src/plugin.py:62
89 +msgid "Today"
90 +msgstr "Heute"
91  
92 -msgid "Australia"
93 -msgstr "Australien"
94 +#: ../src/MyTubeSearch.py:175
95 +#: ../src/plugin.py:66
96 +#: ../src/plugin.py:619
97 +#: ../src/plugin.py:625
98 +#: ../src/plugin.py:1743
99 +msgid "Yes"
100 +msgstr "Ja"
101  
102 -msgid "Author: "
103 -msgstr "Author: "
104 +#: ../src/MyTubeSearch.py:176
105 +#: ../src/plugin.py:67
106 +#: ../src/plugin.py:620
107 +#: ../src/plugin.py:626
108 +msgid "No"
109 +msgstr "Nein"
110  
111 +#: ../src/MyTubeSearch.py:180
112 +#: ../src/MyTubeSearch.py:200
113 +#: ../src/plugin.py:71
114 +#: ../src/plugin.py:91
115 +msgid "All"
116 +msgstr "Alle"
117 +
118 +#: ../src/MyTubeSearch.py:181
119 +#: ../src/plugin.py:72
120 +msgid "Film & Animation"
121 +msgstr "Film & Animation"
122 +
123 +#: ../src/MyTubeSearch.py:182
124 +#: ../src/plugin.py:73
125  msgid "Autos & Vehicles"
126  msgstr "Autos und Fahrzeuge"
127  
128 -msgid "Brazil"
129 -msgstr "Brasilien"
130 +#: ../src/MyTubeSearch.py:183
131 +#: ../src/plugin.py:74
132 +msgid "Music"
133 +msgstr "Musik"
134  
135 -msgid "Canada"
136 -msgstr "Kanada"
137 +#: ../src/MyTubeSearch.py:184
138 +#: ../src/plugin.py:75
139 +msgid "Pets & Animals"
140 +msgstr "Tiere"
141  
142 -msgid "Choose target folder"
143 -msgstr "Wähle Zielverzeichnis"
144 +#: ../src/MyTubeSearch.py:185
145 +#: ../src/plugin.py:76
146 +msgid "Sports"
147 +msgstr "Sport"
148  
149 -msgid "Clear history on Exit:"
150 -msgstr "Verlauf beim Verlassen löschen:"
151 +#: ../src/MyTubeSearch.py:186
152 +#: ../src/plugin.py:77
153 +msgid "Travel & Events"
154 +msgstr "Reisen & Events"
155  
156 -msgid "Close"
157 -msgstr "Schließen"
158 +#: ../src/MyTubeSearch.py:187
159 +#: ../src/plugin.py:78
160 +msgid "Short Movies"
161 +msgstr "Kurzvideos"
162 +
163 +#: ../src/MyTubeSearch.py:188
164 +#: ../src/plugin.py:79
165 +msgid "Gaming"
166 +msgstr "Spiele"
167  
168 +#: ../src/MyTubeSearch.py:189
169 +#: ../src/plugin.py:80
170  msgid "Comedy"
171  msgstr "Komödien"
172  
173 -msgid "Czech Republic"
174 -msgstr "Tschechien"
175 -
176 -msgid "Descending"
177 -msgstr "absteigend"
178 -
179 -msgid "Display search results by:"
180 -msgstr "Suchergebnisse anzeigen:"
181 -
182 -msgid "Do you want to see more entries?"
183 -msgstr "Weitere Videos?"
184 -
185 -msgid "Download Video"
186 -msgstr "Video runterladen"
187 -
188 -msgid "Download location"
189 -msgstr "Download Verzeichnis:"
190 +#: ../src/MyTubeSearch.py:190
191 +#: ../src/plugin.py:81
192 +msgid "People & Blogs"
193 +msgstr "Leute & Blogs"
194  
195 -msgid "Downloading screenshots. Please wait..."
196 -msgstr "Bilder werden geladen. Bitte warten..."
197 +#: ../src/MyTubeSearch.py:191
198 +#: ../src/plugin.py:82
199 +msgid "News & Politics"
200 +msgstr "Nachrichten & Politik"
201  
202 -msgid "Duration: "
203 -msgstr "Dauer: "
204 +#: ../src/MyTubeSearch.py:192
205 +#: ../src/plugin.py:83
206 +msgid "Entertainment"
207 +msgstr "Unterhaltung"
208  
209 +#: ../src/MyTubeSearch.py:193
210 +#: ../src/plugin.py:84
211  msgid "Education"
212  msgstr "Bildung"
213  
214 -msgid "Enter your search term(s)"
215 -msgstr "Suchbegriff eingeben"
216 +#: ../src/MyTubeSearch.py:194
217 +#: ../src/plugin.py:85
218 +msgid "Howto & Style"
219 +msgstr "Tipps & Tricks"
220  
221 -msgid "Entertainment"
222 -msgstr "Unterhaltung"
223 +#: ../src/MyTubeSearch.py:195
224 +#: ../src/plugin.py:86
225 +msgid "Nonprofits & Activism"
226 +msgstr "Non-Profit"
227  
228 -msgid "Fetching feed entries"
229 -msgstr "Lade feeds"
230 +#: ../src/MyTubeSearch.py:196
231 +#: ../src/plugin.py:87
232 +msgid "Science & Technology"
233 +msgstr "Wissenschaft & Technik"
234  
235 -msgid "Fetching search entries"
236 -msgstr "Lade Suchergebnisse"
237 +#: ../src/MyTubeSearch.py:201
238 +#: ../src/MyTubeSearch.py:208
239 +#: ../src/plugin.py:92
240 +#: ../src/plugin.py:99
241 +msgid "Australia"
242 +msgstr "Australien"
243  
244 -msgid "Film & Animation"
245 -msgstr "Film & Animation"
246 +#: ../src/MyTubeSearch.py:202
247 +#: ../src/plugin.py:93
248 +msgid "Brazil"
249 +msgstr "Brasilien"
250  
251 +#: ../src/MyTubeSearch.py:203
252 +#: ../src/plugin.py:94
253 +msgid "Canada"
254 +msgstr "Kanada"
255 +
256 +#: ../src/MyTubeSearch.py:204
257 +#: ../src/plugin.py:95
258 +msgid "Czech Republic"
259 +msgstr "Tschechien"
260 +
261 +#: ../src/MyTubeSearch.py:205
262 +#: ../src/plugin.py:96
263  msgid "France"
264  msgstr "Frankreich"
265  
266 -msgid "Gaming"
267 -msgstr "Spiele"
268 -
269 +#: ../src/MyTubeSearch.py:206
270 +#: ../src/plugin.py:97
271  msgid "Germany"
272  msgstr "Deutschland"
273  
274 +#: ../src/MyTubeSearch.py:207
275 +#: ../src/plugin.py:98
276  msgid "Great Britain"
277  msgstr "England"
278  
279 -msgid "HD videos"
280 -msgstr "HD Videos"
281 -
282 -msgid "Help"
283 -msgstr "Hilfe"
284 -
285 -msgid "History"
286 -msgstr "Verlauf"
287 -
288 +#: ../src/MyTubeSearch.py:209
289 +#: ../src/plugin.py:100
290  msgid "Holland"
291  msgstr "Holland"
292  
293 +#: ../src/MyTubeSearch.py:210
294 +#: ../src/plugin.py:101
295  msgid "Hong Kong"
296  msgstr "Hong Kong"
297  
298 -msgid "Howto & Style"
299 -msgstr "Tipps & Tricks"
300 -
301 +#: ../src/MyTubeSearch.py:211
302 +#: ../src/plugin.py:102
303  msgid "India"
304  msgstr "Indien"
305  
306 +#: ../src/MyTubeSearch.py:212
307 +#: ../src/plugin.py:103
308  msgid "Ireland"
309  msgstr "Irland"
310  
311 +#: ../src/MyTubeSearch.py:213
312 +#: ../src/plugin.py:104
313  msgid "Israel"
314  msgstr "Israel"
315  
316 +#: ../src/MyTubeSearch.py:214
317 +#: ../src/plugin.py:105
318  msgid "Italy"
319  msgstr "Italien"
320  
321 +#: ../src/MyTubeSearch.py:215
322 +#: ../src/plugin.py:106
323  msgid "Japan"
324  msgstr "Japan"
325  
326 -msgid "Load feed on startup:"
327 -msgstr "Feed beim Starten laden:"
328 -
329 +#: ../src/MyTubeSearch.py:216
330 +#: ../src/plugin.py:107
331  msgid "Mexico"
332  msgstr "Mexiko"
333  
334 -msgid "More video entries."
335 -msgstr "Weitere Video Einträge."
336 +#: ../src/MyTubeSearch.py:217
337 +#: ../src/plugin.py:108
338 +msgid "New Zealand"
339 +msgstr "Neuseeland"
340  
341 -msgid "Most discussed"
342 -msgstr "Heiß diskutiert"
343 +#: ../src/MyTubeSearch.py:218
344 +#: ../src/plugin.py:109
345 +msgid "Poland"
346 +msgstr "Polen"
347  
348 -msgid "Most linked"
349 -msgstr "Am meisten verlinkt"
350 +#: ../src/MyTubeSearch.py:219
351 +#: ../src/plugin.py:110
352 +msgid "Russia"
353 +msgstr "Russland"
354  
355 -msgid "Most popular"
356 -msgstr "Beliebteste Videos"
357 +#: ../src/MyTubeSearch.py:220
358 +#: ../src/plugin.py:111
359 +msgid "South Korea"
360 +msgstr "Süd Korea"
361  
362 -msgid "Most recent"
363 -msgstr "Neueste Videos"
364 +#: ../src/MyTubeSearch.py:221
365 +#: ../src/plugin.py:112
366 +msgid "Spain"
367 +msgstr "Spanien"
368  
369 -msgid "Most responded"
370 -msgstr "Meiste Antworten"
371 +#: ../src/MyTubeSearch.py:222
372 +#: ../src/plugin.py:113
373 +msgid "Sweden"
374 +msgstr "Schweden"
375  
376 -msgid "Most viewed"
377 -msgstr "Meistgesehen"
378 +#: ../src/MyTubeSearch.py:223
379 +#: ../src/plugin.py:114
380 +msgid "Taiwan"
381 +msgstr "Taiwan"
382  
383 -msgid "Music"
384 -msgstr "Musik"
385 +#: ../src/MyTubeSearch.py:224
386 +#: ../src/plugin.py:115
387 +msgid "United States"
388 +msgstr "USA"
389  
390 -msgid "My TubePlayer"
391 -msgstr "MyTube Player"
392 +#: ../src/MyTubeSearch.py:228
393 +#: ../src/plugin.py:119
394 +msgid "Ascending"
395 +msgstr "Aufsteigend"
396  
397 -msgid "MyTube Settings"
398 -msgstr "MyTube Einstellungen"
399 +#: ../src/MyTubeSearch.py:229
400 +#: ../src/plugin.py:120
401 +msgid "Descending"
402 +msgstr "Absteigend"
403  
404 -msgid "MyTubePlayer"
405 -msgstr "MyTube Player"
406 +#: ../src/MyTubeSearch.py:237
407 +#: ../src/plugin.py:128
408 +#: ../src/plugin.py:790
409 +msgid "HD videos"
410 +msgstr "HD Videos"
411  
412 -msgid "MyTubePlayer Help"
413 -msgstr "MyTube Player Hilfe"
414 +#: ../src/MyTubeSearch.py:238
415 +#: ../src/plugin.py:129
416 +#: ../src/plugin.py:794
417 +msgid "Most viewed"
418 +msgstr "Meistgesehen"
419  
420 -msgid "MyTubePlayer active video downloads"
421 -msgstr "aktive Video downloads"
422 +#: ../src/MyTubeSearch.py:239
423 +#: ../src/plugin.py:130
424 +#: ../src/plugin.py:792
425 +msgid "Top rated"
426 +msgstr "Beste Bewertung"
427  
428 -msgid "MyTubePlayer settings"
429 -msgstr "MyTube Player Einstellungen"
430 +#: ../src/MyTubeSearch.py:240
431 +#: ../src/plugin.py:131
432 +#: ../src/plugin.py:799
433 +msgid "Recently featured"
434 +msgstr "Kürzlich featured"
435  
436 -msgid "MyTubeVideoInfoScreen"
437 -msgstr "MyTubeVideoInfoScreen"
438 +#: ../src/MyTubeSearch.py:241
439 +#: ../src/plugin.py:132
440 +#: ../src/plugin.py:797
441 +msgid "Most discussed"
442 +msgstr "Heiß diskutiert"
443  
444 -msgid "MyTubeVideohelpScreen"
445 -msgstr "MyTubeVideohelpScreen"
446 +#: ../src/MyTubeSearch.py:242
447 +#: ../src/plugin.py:133
448 +#: ../src/plugin.py:793
449 +msgid "Top favorites"
450 +msgstr "Top-Favoriten"
451  
452 -msgid "New Zealand"
453 -msgstr "Neu Seeland"
454 +#: ../src/MyTubeSearch.py:243
455 +#: ../src/plugin.py:134
456 +#: ../src/plugin.py:798
457 +msgid "Most linked"
458 +msgstr "Am meisten verlinkt"
459  
460 -msgid "News & Politics"
461 -msgstr "Nachrichten & Politik"
462 +#: ../src/MyTubeSearch.py:244
463 +#: ../src/plugin.py:135
464 +#: ../src/plugin.py:800
465 +msgid "Most responded"
466 +msgstr "Meiste Antworten"
467  
468 -msgid "No"
469 -msgstr "Nein"
470 +#: ../src/MyTubeSearch.py:245
471 +#: ../src/plugin.py:136
472 +#: ../src/plugin.py:796
473 +msgid "Most recent"
474 +msgstr "Neueste Videos"
475  
476 -msgid "No playable video found! Stop playing this movie?"
477 -msgstr "Kein abspielbares Video gefunden! Wiedergabe beenden?"
478 +#: ../src/MyTubeSearch.py:249
479 +#: ../src/MyTubeSearch.py:252
480 +#: ../src/plugin.py:139
481 +#: ../src/plugin.py:142
482 +msgid "Ask user"
483 +msgstr "Nutzer fragen"
484  
485 -msgid "No videos to display"
486 -msgstr "Keine Videos zum anzeigen"
487 +#: ../src/MyTubeSearch.py:249
488 +#: ../src/MyTubeSearch.py:252
489 +#: ../src/plugin.py:139
490 +#: ../src/plugin.py:142
491 +msgid "Return to movie list"
492 +msgstr "Zurück zur Videoliste"
493  
494 -msgid "No, but play video again"
495 -msgstr "Nein, aber Video noch mal abspielen"
496 +#: ../src/MyTubeSearch.py:249
497 +#: ../src/plugin.py:139
498 +msgid "Play next video"
499 +msgstr "nächstes Video"
500  
501 -msgid "No, but switch to video entries."
502 -msgstr "Nein, aber zu den Videos zurück."
503 +#: ../src/MyTubeSearch.py:249
504 +#: ../src/plugin.py:139
505 +msgid "Play video again"
506 +msgstr "Video noch mal abspielen"
507  
508 -msgid "No, but switch to video search."
509 -msgstr "Nein, aber zur Videosuche zurück"
510 +#: ../src/MyTubeSearch.py:314
511 +msgid " Results"
512 +msgstr " Ergebnisse"
513  
514 -msgid "Nonprofits & Activism"
515 -msgstr "Non-Profit"
516 +#: ../src/MyTubeSearch.py:398
517 +#: ../src/MyTubeSearch.py:562
518 +#: ../src/plugin.py:281
519 +#: ../src/plugin.py:1280
520 +#: ../src/plugin.py:1466
521 +msgid "Close"
522 +msgstr "Schließen"
523  
524 -msgid "Not fetching feed entries"
525 -msgstr "Lade keine feed Einträge"
526 +#: ../src/MyTubeSearch.py:399
527 +msgid "Save"
528 +msgstr "Speichern"
529  
530 -msgid "People & Blogs"
531 -msgstr "Leute & Blogs"
532 +#: ../src/MyTubeSearch.py:412
533 +#: ../src/MyTubeSearch.py:415
534 +msgid "MyTubePlayer settings"
535 +msgstr "MyTube Player Einstellungen"
536  
537 -msgid "Pets & Animals"
538 -msgstr "Tiere"
539 +#: ../src/MyTubeSearch.py:419
540 +msgid "Display search results by:"
541 +msgstr "Suchergebnisse anzeigen:"
542  
543 -msgid "Play YouTube movies"
544 -msgstr "YouTube Videos abspielen"
545 +#: ../src/MyTubeSearch.py:420
546 +msgid "Search restricted content:"
547 +msgstr "Suche ohne Altersbeschränkung:"
548  
549 -msgid "Play next video"
550 -msgstr "nächstes Video"
551 +#: ../src/MyTubeSearch.py:421
552 +msgid "Search category:"
553 +msgstr "Such-Kategorie:"
554  
555 -msgid "Play video again"
556 -msgstr "Video noch mal abspielen"
557 +#: ../src/MyTubeSearch.py:422
558 +msgid "Search region:"
559 +msgstr "Such-Region:"
560  
561 -msgid "Please enter your search term."
562 -msgstr "Bitte geben Sie einen Suchbegriff ein."
563 +#: ../src/MyTubeSearch.py:423
564 +msgid "Load feed on startup:"
565 +msgstr "Feed beim Starten laden:"
566  
567 -msgid "Please select a standard feed or try searching for videos."
568 -msgstr "Wählen Sie einen Standard Feed oder suchen Sie nach Videos."
569 +#: ../src/MyTubeSearch.py:426
570 +msgid "Start with following feed:"
571 +msgstr "Beginne mit folgendem feed:"
572  
573 -msgid "Poland"
574 -msgstr "Polen"
575 +#: ../src/MyTubeSearch.py:427
576 +msgid "Videoplayer stop/exit behavior:"
577 +msgstr "Verhalten beim Drücken der STOPP/EXIT-Taste:"
578  
579 -msgid "Published"
580 -msgstr "Veröffentlicht"
581 +#: ../src/MyTubeSearch.py:428
582 +msgid "Videobrowser exit behavior:"
583 +msgstr "Verhalten nach Verlassen der Videoliste:"
584  
585 -msgid "Rating"
586 -msgstr "Bewertung"
587 +#: ../src/MyTubeSearch.py:435
588 +msgid "Download location"
589 +msgstr "Download Verzeichnis:"
590  
591 -msgid "Ratings: "
592 -msgstr "Bewertungen: "
593 +#: ../src/MyTubeSearch.py:438
594 +msgid "Clear history on Exit:"
595 +msgstr "Verlauf beim Verlassen löschen:"
596  
597 -msgid "Really quit MyTube Player?"
598 -msgstr "MyTube Player wirklich beenden?"
599 +#: ../src/MyTubeSearch.py:459
600 +msgid "Choose target folder"
601 +msgstr "Wähle Zielverzeichnis"
602  
603 -msgid "Recently featured"
604 -msgstr "Kürzlich featured"
605 +#: ../src/MyTubeSearch.py:575
606 +#: ../src/MyTubeSearch.py:591
607 +msgid "MyTubePlayer active video downloads"
608 +msgstr "aktive Video downloads"
609  
610 -msgid "Related video entries."
611 -msgstr "Ähnliche Videos"
612 +#: ../src/plugin.py:271
613 +msgid ""
614 +"Welcome to the MyTube Youtube Player.\n"
615 +"\n"
616 +"While entering your search term(s) you will get suggestions displayed matching your search term.\n"
617 +"\n"
618 +"To select a suggestion press DOWN on your remote, select the desired result and press OK on your remote to start the search.\n"
619 +"\n"
620 +"Press exit to get back to the input field."
621 +msgstr ""
622 +"Herzlich Willkommen beim MyTube YouTube Player.\n"
623 +"\n"
624 +"Während der Eingabe Ihres Suchwortes erhalten Sie passende Vorschläge zu Ihrer Sucheingabe.\n"
625 +"\n"
626 +"Um einen Vorschlag auszuwählen, drücken Sie die NACH UNTEN-Taste, wählen den entsprechenden Eintrag aus und drücken die OK-Taste um die Suche zu starten.\n"
627 +"\n"
628 +"Um zur Such-Eingabemaske zurück zu gelangen, drücken Sie die EXIT-Taste."
629  
630 -msgid "Relevance"
631 -msgstr "Relevanz"
632 +#: ../src/plugin.py:272
633 +msgid ""
634 +"Welcome to the MyTube Youtube Player.\n"
635 +"\n"
636 +"Use the Bouqet+ button to navigate to the search field and the Bouqet- to navigate to the video entries.\n"
637 +"\n"
638 +"To play a movie just press OK on your remote control.\n"
639 +"\n"
640 +"Press info to see the movie description.\n"
641 +"\n"
642 +"Press the Menu button for additional options.\n"
643 +"\n"
644 +"The Help button shows this help again."
645 +msgstr ""
646 +"Herzlich Willkommen beim MyTube YouTube Player.\n"
647 +"\n"
648 +"Nutzen Sie die Bouqet+ Taste um zur Sucheingabe zu gelangen und die Bouqet- Taste für die Video Einträge.\n"
649 +"\n"
650 +"Um ein Video abzuspielen drücken Sie die OK-Taste auf Ihrer Fernbedienung.\n"
651 +"\n"
652 +"Mit der Info-Taste erhalten Sie die erweiterte Beschreibung zu einem Video.\n"
653 +"\n"
654 +"Für weitere Einstellungen drücken Sie die Menü-Taste.\n"
655 +"\n"
656 +"Um diese Hilfe erneut anzuzeigen, drücken Sie die Hilfe-Taste."
657  
658 -msgid "Response video entries."
659 -msgstr "Video Antworten"
660 +#: ../src/plugin.py:282
661 +msgid "Std. Feeds"
662 +msgstr "Std. Feeds"
663  
664 -msgid "Return to movie list"
665 -msgstr "Zurück zur Videoliste"
666 +#: ../src/plugin.py:283
667 +msgid "History"
668 +msgstr "Verlauf"
669  
670 -msgid "Russia"
671 -msgstr "Russland"
672 +#: ../src/plugin.py:398
673 +#: ../src/plugin.py:422
674 +#: ../src/plugin.py:464
675 +msgid "Genuine Dreambox validation failed!"
676 +msgstr "Prüfung auf Original-Dreambox gescheitert!"
677  
678 -msgid "Save"
679 -msgstr "Speichern"
680 +#: ../src/plugin.py:398
681 +#: ../src/plugin.py:422
682 +#: ../src/plugin.py:464
683 +msgid "Verify your Dreambox authenticity by running the genuine dreambox plugin!"
684 +msgstr "Bitte mit dem \"Genuine Dreambox Plugin\" auf Echtheit prüfen!"
685  
686 -msgid "Science & Technology"
687 -msgstr "Wissenschaft & Technik"
688 +#: ../src/plugin.py:417
689 +#: ../src/plugin.py:476
690 +msgid "Fetching feed entries"
691 +msgstr "Lade feeds"
692  
693 +#: ../src/plugin.py:417
694 +#: ../src/plugin.py:476
695 +msgid "Trying to download the Youtube feed entries. Please wait..."
696 +msgstr "YouTube feeds werden geladen, bitte warten..."
697 +
698 +#: ../src/plugin.py:434
699 +msgid "MyTubePlayer"
700 +msgstr "MyTube Player"
701 +
702 +#: ../src/plugin.py:438
703  msgid "Search Term(s)"
704  msgstr "Suchwort(e)"
705  
706 -msgid "Search category:"
707 -msgstr "Such-Kategorie:"
708 +#: ../src/plugin.py:478
709 +msgid "Fetching search entries"
710 +msgstr "Lade Suchergebnisse"
711  
712 -msgid "Search region:"
713 -msgstr "Such-Region:"
714 +#: ../src/plugin.py:478
715 +msgid "Trying to download the Youtube search results. Please wait..."
716 +msgstr "YouTube Suchergebnisse werden geladen, bitte warten..."
717  
718 -msgid "Search restricted content:"
719 -msgstr "Suche ohne Altersbeschränkung:"
720 +#: ../src/plugin.py:480
721 +msgid "An error occured."
722 +msgstr "Es ist ein Fehler aufgetreten."
723  
724 -msgid "Select new feed to view."
725 -msgstr "Neuen feed auswählen"
726 +#: ../src/plugin.py:480
727 +msgid "There was an error getting the feed entries. Please try again."
728 +msgstr "Fehler beim Laden der Suchergebnisse. Noch mal probieren."
729  
730 -msgid "Select your choice."
731 -msgstr "Treffen Sie Ihre Wahl."
732 +#: ../src/plugin.py:483
733 +msgid "No videos to display"
734 +msgstr "Keine Videos zum anzeigen"
735  
736 -msgid "Short Movies"
737 -msgstr "Kurzvideos"
738 +#: ../src/plugin.py:483
739 +msgid "Please select a standard feed or try searching for videos."
740 +msgstr "Wählen Sie einen Standard Feed oder suchen Sie nach Videos."
741  
742 -msgid "Sorry, video is not available!"
743 -msgstr "Video nicht verfügbar!"
744 +#: ../src/plugin.py:485
745 +msgid "Not fetching feed entries"
746 +msgstr "Lade keine feed Einträge"
747  
748 -msgid "South Korea"
749 -msgstr "Süd Korea"
750 +#: ../src/plugin.py:485
751 +msgid "Please enter your search term."
752 +msgstr "Bitte geben Sie einen Suchbegriff ein."
753  
754 -msgid "Spain"
755 -msgstr "Spanien"
756 +#: ../src/plugin.py:504
757 +#: ../src/plugin.py:506
758 +#: ../src/plugin.py:513
759 +msgid "MyTubePlayer Help"
760 +msgstr "MyTube Player Hilfe"
761  
762 -msgid "Sports"
763 -msgstr "Sport"
764 +#: ../src/plugin.py:525
765 +#: ../src/plugin.py:531
766 +msgid "MyTube Settings"
767 +msgstr "MyTube Einstellungen"
768  
769 -msgid "Start with following feed:"
770 -msgstr "Beginne mit folgendem feed:"
771 +#: ../src/plugin.py:528
772 +#: ../src/plugin.py:543
773 +msgid "Select your choice."
774 +msgstr "Treffen Sie Ihre Wahl."
775  
776 -msgid "Std. Feeds"
777 -msgstr "Std. Feeds"
778 +#: ../src/plugin.py:533
779 +msgid "View related videos"
780 +msgstr "Ähnliche Videos"
781  
782 -msgid "Stop playing this movie?"
783 -msgstr "Wiedergabe beenden?"
784 +#: ../src/plugin.py:534
785 +msgid "View response videos"
786 +msgstr "Video Antworten"
787  
788 -msgid "Sweden"
789 -msgstr "Schweden"
790 +#: ../src/plugin.py:538
791 +msgid "Download Video"
792 +msgstr "Video runterladen"
793  
794 -msgid "Tags: "
795 -msgstr "Tags: "
796 +#: ../src/plugin.py:539
797 +msgid "View active downloads"
798 +msgstr "Aktive Downloads anzeigen"
799  
800 -msgid "Taiwan"
801 -msgstr "Taiwan"
802 +#: ../src/plugin.py:577
803 +msgid "Enter your search term(s)"
804 +msgstr "Suchbegriff eingeben"
805  
806 -msgid "There was an error getting the feed entries. Please try again."
807 -msgstr "Fehler beim Laden der Suchergebnisse. Noch mal probieren."
808 +#: ../src/plugin.py:621
809 +msgid "No, but switch to video entries."
810 +msgstr "Nein, aber zu den Videos zurück."
811  
812 -msgid "This Month"
813 -msgstr "Diesen Monat"
814 +#: ../src/plugin.py:627
815 +msgid "No, but switch to video search."
816 +msgstr "Nein, aber zur Videosuche zurück"
817  
818 -msgid "This Week"
819 -msgstr "Diese Woche"
820 +#: ../src/plugin.py:629
821 +msgid "Really quit MyTube Player?"
822 +msgstr "MyTube Player wirklich beenden?"
823  
824 -msgid "This is the help screen. Feed me with something to display."
825 -msgstr ""
826 +#: ../src/plugin.py:722
827 +msgid "Sorry, video is not available!"
828 +msgstr "Video nicht verfügbar!"
829  
830 -msgid "Today"
831 -msgstr "Heute"
832 +#: ../src/plugin.py:757
833 +msgid "Do you want to see more entries?"
834 +msgstr "Weitere Videos?"
835  
836 -msgid "Top favorites"
837 -msgstr "Top-Favoriten"
838 +#: ../src/plugin.py:795
839 +msgid "Most popular"
840 +msgstr "Beliebteste Videos"
841  
842 -msgid "Top rated"
843 -msgstr "Beste Bewertung"
844 +#: ../src/plugin.py:802
845 +msgid "Select new feed to view."
846 +msgstr "Neuen feed auswählen"
847  
848 -msgid "Travel & Events"
849 -msgstr "Reisen & Events"
850 +#: ../src/plugin.py:968
851 +msgid "More video entries."
852 +msgstr "Weitere Video Einträge."
853  
854 -msgid "Trying to download the Youtube feed entries. Please wait..."
855 -msgstr "YouTube feeds werden geladen, bitte warten..."
856 +#: ../src/plugin.py:976
857 +msgid "Related video entries."
858 +msgstr "Ähnliche Videos"
859  
860 -msgid "Trying to download the Youtube search results. Please wait..."
861 -msgstr "YouTube Suchergebnisse werden geladen, bitte warten..."
862 +#: ../src/plugin.py:984
863 +msgid "Response video entries."
864 +msgstr "Video Antworten"
865  
866 -msgid "United States"
867 -msgstr "USA"
868 +#: ../src/plugin.py:1103
869 +#: ../src/plugin.py:1341
870 +msgid "Added: "
871 +msgstr "Hinzugefügt: "
872  
873 -msgid "Videobrowser exit behavior:"
874 -msgstr "Verhalten nach Verlassen der Videoliste:"
875 +#: ../src/plugin.py:1103
876 +#: ../src/plugin.py:1344
877 +msgid "Views: "
878 +msgstr "Aufrufe: "
879  
880 -msgid "Videoplayer stop/exit behavior:"
881 -msgstr "Verhalten beim Drücken der STOPP/EXIT-Taste:"
882 +#: ../src/plugin.py:1103
883 +#: ../src/plugin.py:1335
884 +msgid "Duration: "
885 +msgstr "Dauer: "
886  
887 -msgid "View Count"
888 -msgstr "Aufrufe"
889 +#: ../src/plugin.py:1103
890 +msgid "Ratings: "
891 +msgstr "Bewertungen: "
892  
893 -msgid "View active downloads"
894 -msgstr "Aktive Downloads anzeigen"
895 +#: ../src/plugin.py:1309
896 +msgid "Downloading screenshots. Please wait..."
897 +msgstr "Bilder werden geladen. Bitte warten..."
898  
899 -msgid "View related videos"
900 -msgstr "Ähnliche Videos"
901 +#: ../src/plugin.py:1338
902 +msgid "Author: "
903 +msgstr "Autor: "
904  
905 -msgid "View response videos"
906 -msgstr "Video Antworten"
907 +#: ../src/plugin.py:1347
908 +msgid "Tags: "
909 +msgstr "Tags: "
910  
911 -msgid "Views: "
912 -msgstr "Aufrufe: "
913 +#: ../src/plugin.py:1350
914 +msgid "MyTubeVideoInfoScreen"
915 +msgstr "MyTubeVideoInfoScreen"
916  
917 -msgid ""
918 -"Welcome to the MyTube Youtube Player.\n"
919 -"\n"
920 -"Use the Bouqet+ button to navigate to the search field and the Bouqet- to "
921 -"navigate to the video entries.\n"
922 -"\n"
923 -"To play a movie just press OK on your remote control.\n"
924 -"\n"
925 -"Press info to see the movie description.\n"
926 -"\n"
927 -"Press the Menu button for additional options.\n"
928 -"\n"
929 -"The Help button shows this help again."
930 -msgstr ""
931 -"Herzlich Willkommen beim MyTube YouTube Player.\n"
932 -"\n"
933 -"Nutzen Sie die Bouqet+ Taste um zur Sucheingabe zu gelangen und die Bouqet- "
934 -"Taste für die Video Einträge.\n"
935 -"\n"
936 -"Um ein Video abzuspielen drücken Sie die OK-Taste auf Ihrer Fernbedienung.\n"
937 -"\n"
938 -"Mit der Info-Taste erhalten Sie die erweiterte Beschreibung zu einem Video.\n"
939 -"\n"
940 -"Für weitere Einstellungen drücken Sie die Menü-Taste.\n"
941 -"\n"
942 -"Um diese Hilfe erneut anzuzeigen, drücken Sie die Hilfe-Taste."
943 +#: ../src/plugin.py:1484
944 +msgid "Help"
945 +msgstr "Hilfe"
946  
947 -msgid ""
948 -"Welcome to the MyTube Youtube Player.\n"
949 -"\n"
950 -"While entering your search term(s) you will get suggestions displayed "
951 -"matching your search term.\n"
952 -"\n"
953 -"To select a suggestion press DOWN on your remote, select the desired result "
954 -"and press OK on your remote to start the search.\n"
955 -"\n"
956 -"Press exit to get back to the input field."
957 -msgstr ""
958 -"Herzlich Willkommen beim MyTube YouTube Player.\n"
959 -"\n"
960 -"Während der Eingabe Ihres Suchwortes erhalten Sie passende Vorschläge zu "
961 -"Ihrer Sucheingabe.\n"
962 -"\n"
963 -"Um einen Vorschlag auszuwählen drücken Sie die NACH UNTEN-Taste, wählen den "
964 -"entsprechenden Eintrag aus und drücken die OK-Taste um die Suche zu "
965 -"starten.\n"
966 -"\n"
967 -"Um zur Such-Eingabemaske zurück zu gelangen drücken Sie die EXIT-Taste."
968 +#: ../src/plugin.py:1488
969 +msgid "This is the help screen. Feed me with something to display."
970 +msgstr "Dies ist die MyTube Hilfe. Bitte ausfüllen."
971  
972 -msgid "Yes"
973 -msgstr "Ja"
974 +#: ../src/plugin.py:1493
975 +msgid "MyTubeVideohelpScreen"
976 +msgstr "MyTubeVideohelpScreen"
977 +
978 +#: ../src/plugin.py:1744
979 +msgid "No, but play video again"
980 +msgstr "Nein, aber Video noch mal abspielen"
981  
982 +#: ../src/plugin.py:1745
983  msgid "Yes, but play next video"
984  msgstr "Ja, aber nächstes Video abspielen"
985  
986 +#: ../src/plugin.py:1746
987  msgid "Yes, but play previous video"
988  msgstr "Ja, aber vorheriges Video abspielen"
989  
990 +#: ../src/plugin.py:1749
991 +msgid "Stop playing this movie?"
992 +msgstr "Wiedergabe beenden?"
993 +
994 +#: ../src/plugin.py:1751
995 +msgid "No playable video found! Stop playing this movie?"
996 +msgstr "Kein abspielbares Video gefunden! Wiedergabe beenden?"
997 +
998 +#: ../src/plugin.py:1797
999 +msgid "My TubePlayer"
1000 +msgstr "MyTube Player"
1001 +
1002 +#: ../src/plugin.py:1798
1003 +msgid "Play YouTube movies"
1004 +msgstr "YouTube Videos abspielen"
1005 +
1006  #~ msgid "View Downloads"
1007  #~ msgstr "Downloads anzeigen"
1008 diff --git a/mytube/src/MyTubeSearch.py b/mytube/src/MyTubeSearch.py
1009 index be63669..a1a324c 100755
1010 --- a/mytube/src/MyTubeSearch.py
1011 +++ b/mytube/src/MyTubeSearch.py
1012 @@ -1,33 +1,28 @@
1013 +from enigma import eListboxPythonMultiContent, RT_HALIGN_LEFT, RT_HALIGN_RIGHT, gFont, eTimer
1014  from MyTubeService import GoogleSuggestions
1015  from Screens.Screen import Screen
1016  from Screens.LocationBox import MovieLocationBox
1017 -from Components.config import config, Config, ConfigSelection, ConfigText, getConfigListEntry, ConfigSubsection, ConfigYesNo, ConfigIP, ConfigNumber,ConfigLocations
1018 +from Components.config import config, ConfigText, getConfigListEntry
1019 +from Components.config import KEY_DELETE, KEY_BACKSPACE, KEY_ASCII, KEY_TIMEOUT
1020  from Components.ConfigList import ConfigListScreen
1021 -from Components.config import KEY_DELETE, KEY_BACKSPACE, KEY_LEFT, KEY_RIGHT, KEY_HOME, KEY_END, KEY_TOGGLEOW, KEY_ASCII, KEY_TIMEOUT
1022  from Components.ActionMap import ActionMap
1023  from Components.Button import Button
1024  from Components.Label import Label
1025 -from Components.ScrollLabel import ScrollLabel
1026  from Components.Sources.List import List
1027 -from Components.Pixmap import Pixmap
1028 -from Components.MultiContent import MultiContentEntryText, MultiContentEntryPixmapAlphaTest
1029 -from Components.Task import Task, Job, job_manager
1030 -from enigma import eListboxPythonMultiContent, RT_HALIGN_LEFT, RT_HALIGN_RIGHT, gFont, eListbox,ePoint,eTimer
1031 +from Components.MultiContent import MultiContentEntryText 
1032  from Components.Task import job_manager
1033 -from Tools.Directories import pathExists, fileExists, resolveFilename, SCOPE_HDD
1034 +from Tools.Directories import resolveFilename, SCOPE_HDD
1035 +
1036  from threading import Thread
1037  from threading import Condition
1038  from xml.etree.cElementTree import parse as cet_parse
1039  from StringIO import StringIO
1040 -
1041 -
1042 -import urllib
1043 +#import urllib
1044  from urllib import FancyURLopener
1045  
1046  class MyOpener(FancyURLopener):
1047         version = 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.0.12) Gecko/20070731 Ubuntu/dapper-security Firefox/1.5.0.12'
1048  
1049 -
1050  class ConfigTextWithGoogleSuggestions(ConfigText):
1051         class SuggestionsThread(Thread):
1052                 def __init__(self, suggestionsService):
1053 @@ -151,122 +146,14 @@ class ConfigTextWithGoogleSuggestions(ConfigText):
1054                 if self.suggestionsWindow is not None:
1055                         self.suggestionsWindow.enableSelection(value)
1056  
1057 -
1058 -config.plugins.mytube = ConfigSubsection()
1059 -config.plugins.mytube.search = ConfigSubsection()
1060 -
1061 -config.plugins.mytube.search.searchTerm = ConfigTextWithGoogleSuggestions("", False, threaded = True)
1062 -config.plugins.mytube.search.orderBy = ConfigSelection(
1063 -                               [
1064 -                                ("relevance", _("Relevance")),
1065 -                                ("viewCount", _("View Count")),
1066 -                                ("published", _("Published")),
1067 -                                ("rating", _("Rating"))
1068 -                               ], "relevance")
1069 -config.plugins.mytube.search.time = ConfigSelection(
1070 -                               [
1071 -                                ("all_time", _("All Time")),
1072 -                                ("this_month", _("This Month")),
1073 -                                ("this_week", _("This Week")),
1074 -                                ("today", _("Today"))
1075 -                               ], "all_time")
1076 -config.plugins.mytube.search.racy = ConfigSelection(
1077 -                               [
1078 -                                ("include", _("Yes")),
1079 -                                ("exclude", _("No"))
1080 -                               ], "include")
1081 -config.plugins.mytube.search.categories = ConfigSelection(
1082 -                               [
1083 -                                (None, _("All")),
1084 -                                ("Film", _("Film & Animation")),
1085 -                                ("Autos", _("Autos & Vehicles")),
1086 -                                ("Music", _("Music")),
1087 -                                ("Animals", _("Pets & Animals")),
1088 -                                ("Sports", _("Sports")),
1089 -                                ("Travel", _("Travel & Events")),
1090 -                                ("Shortmov", _("Short Movies")),
1091 -                                ("Games", _("Gaming")),
1092 -                                ("Comedy", _("Comedy")),
1093 -                                ("People", _("People & Blogs")),
1094 -                                ("News", _("News & Politics")),
1095 -                                ("Entertainment", _("Entertainment")),
1096 -                                ("Education", _("Education")),
1097 -                                ("Howto", _("Howto & Style")),
1098 -                                ("Nonprofit", _("Nonprofits & Activism")),
1099 -                                ("Tech", _("Science & Technology"))
1100 -                               ], None)
1101 -config.plugins.mytube.search.lr = ConfigSelection(
1102 -                               [
1103 -                                (None, _("All")),
1104 -                                ("au", _("Australia")),
1105 -                                ("br", _("Brazil")),                            
1106 -                                ("ca", _("Canada")),
1107 -                                ("cz", _("Czech Republic")),
1108 -                                ("fr", _("France")),
1109 -                                ("de", _("Germany")),
1110 -                                ("gb", _("Great Britain")),
1111 -                                ("au", _("Australia")),
1112 -                                ("nl", _("Holland")),
1113 -                                ("hk", _("Hong Kong")),
1114 -                                ("in", _("India")),
1115 -                                ("ie", _("Ireland")),
1116 -                                ("il", _("Israel")),
1117 -                                ("it", _("Italy")),
1118 -                                ("jp", _("Japan")),
1119 -                                ("mx", _("Mexico")),
1120 -                                ("nz", _("New Zealand")),
1121 -                                ("pl", _("Poland")),
1122 -                                ("ru", _("Russia")),
1123 -                                ("kr", _("South Korea")),
1124 -                                ("es", _("Spain")),
1125 -                                ("se", _("Sweden")),
1126 -                                ("tw", _("Taiwan")),
1127 -                                ("us", _("United States")) 
1128 -                               ], None)
1129 -config.plugins.mytube.search.sortOrder = ConfigSelection(
1130 -                               [
1131 -                                ("ascending", _("Ascending")),
1132 -                                ("descending", _("Descending"))
1133 -                               ], "ascending")
1134 -
1135 -config.plugins.mytube.general = ConfigSubsection()
1136 -config.plugins.mytube.general.showHelpOnOpen = ConfigYesNo(default = True)
1137 -config.plugins.mytube.general.loadFeedOnOpen = ConfigYesNo(default = True)
1138 -config.plugins.mytube.general.startFeed = ConfigSelection(
1139 -                               [
1140 -                                ("hd", _("HD videos")),
1141 -                                ("most_viewed", _("Most viewed")),
1142 -                                ("top_rated", _("Top rated")),
1143 -                                ("recently_featured", _("Recently featured")),
1144 -                                ("most_discussed", _("Most discussed")),
1145 -                                ("top_favorites", _("Top favorites")),
1146 -                                ("most_linked", _("Most linked")),
1147 -                                ("most_responded", _("Most responded")),
1148 -                                ("most_recent", _("Most recent"))
1149 -                               ], "most_viewed")
1150 -
1151 -config.plugins.mytube.general.on_movie_stop = ConfigSelection(default = "ask", choices = [
1152 -       ("ask", _("Ask user")), ("quit", _("Return to movie list")), ("playnext", _("Play next video")), ("playagain", _("Play video again")) ])
1153 -
1154 -config.plugins.mytube.general.on_exit = ConfigSelection(default = "ask", choices = [
1155 -       ("ask", _("Ask user")), ("quit", _("Return to movie list"))])
1156 -
1157 -
1158  default = resolveFilename(SCOPE_HDD)
1159  tmp = config.movielist.videodirs.value
1160  if default not in tmp:
1161         tmp.append(default)
1162 -config.plugins.mytube.general.videodir = ConfigSelection(default = default, choices = tmp)
1163 -config.plugins.mytube.general.history = ConfigText(default="")
1164 -config.plugins.mytube.general.clearHistoryOnClose = ConfigYesNo(default = False)
1165 -
1166 -#config.plugins.mytube.general.useHTTPProxy = ConfigYesNo(default = False)
1167 -#config.plugins.mytube.general.ProxyIP = ConfigIP(default=[0,0,0,0])
1168 -#config.plugins.mytube.general.ProxyPort = ConfigNumber(default=8080)
1169  
1170  class MyTubeSuggestionsListScreen(Screen):
1171         skin = """
1172 -               <screen name="MyTubeSuggestionsListScreen" position="60,93" zPosition="6" size="610,160" flags="wfNoBorder" >
1173 +               <screen name="MyTubeSuggestionsListScreen" title="MyTube - Search" position="60,93" zPosition="6" size="610,160" flags="wfNoBorder" >
1174                         <ePixmap position="0,0" zPosition="-1" size="610,160" pixmap="/usr/lib/enigma2/python/Plugins/Extensions/MyTube/suggestions_bg.png" alphatest="on" transparent="1" backgroundColor="transparent"/>
1175                         <widget source="suggestionslist" render="Listbox" position="10,5" zPosition="7" size="580,150" scrollbarMode="showOnDemand" transparent="1" >
1176                                 <convert type="TemplatedMultiContent">
1177 @@ -366,7 +253,7 @@ class MyTubeSuggestionsListScreen(Screen):
1178  
1179  class MyTubeSettingsScreen(Screen, ConfigListScreen):
1180         skin = """
1181 -               <screen name="MyTubeSettingsScreen" flags="wfNoBorder" position="0,0" size="720,576" title="MyTubePlayerMainScreen..." >
1182 +               <screen name="MyTubeSettingsScreen" flags="wfNoBorder" position="0,0" size="720,576" title="MyTube - Settings" >
1183                         <ePixmap position="0,0" zPosition="-1" size="720,576" pixmap="~/mytubemain_bg.png" alphatest="on" transparent="1" backgroundColor="transparent"/>
1184                         <widget name="title" position="60,50" size="600,50" zPosition="5" valign="center" halign="left" font="Regular;21" transparent="1" foregroundColor="white" shadowColor="black" shadowOffset="-1,-1" />
1185                         <widget name="config" zPosition="2" position="60,120" size="610,370" scrollbarMode="showOnDemand" transparent="1" />
1186 @@ -524,7 +411,7 @@ class MyTubeSettingsScreen(Screen, ConfigListScreen):
1187  
1188  class MyTubeTasksScreen(Screen):
1189         skin = """
1190 -               <screen name="MyTubeTasksScreen" flags="wfNoBorder" position="0,0" size="720,576" title="MyTubePlayerMainScreen..." >
1191 +               <screen name="MyTubeTasksScreen" flags="wfNoBorder" position="0,0" size="720,576" title="MyTube - Tasks" >
1192                         <ePixmap position="0,0" zPosition="-1" size="720,576" pixmap="~/mytubemain_bg.png" alphatest="on" transparent="1" backgroundColor="transparent"/>
1193                         <widget name="title" position="60,50" size="600,50" zPosition="5" valign="center" halign="left" font="Regular;21" transparent="1" foregroundColor="white" shadowColor="black" shadowOffset="-1,-1" />
1194                         <widget source="tasklist" render="Listbox" position="60,120" size="610,370" zPosition="7" scrollbarMode="showOnDemand" transparent="1" >
1195 @@ -610,7 +497,7 @@ class MyTubeTasksScreen(Screen):
1196  
1197  class MyTubeHistoryScreen(Screen):
1198         skin = """
1199 -               <screen name="MyTubeHistoryScreen" position="60,93" zPosition="6" size="610,160" flags="wfNoBorder" >
1200 +               <screen name="MyTubeHistoryScreen" position="60,93" zPosition="6" size="610,160" flags="wfNoBorder" title="MyTube - History">
1201                         <ePixmap position="0,0" zPosition="-1" size="610,160" pixmap="/usr/lib/enigma2/python/Plugins/Extensions/MyTube/suggestions_bg.png" alphatest="on" transparent="1" backgroundColor="transparent"/>
1202                         <widget source="historylist" render="Listbox" position="10,5" zPosition="7" size="580,150" scrollbarMode="showOnDemand" transparent="1" >
1203                                 <convert type="TemplatedMultiContent">
1204 diff --git a/mytube/src/MyTubeService.py b/mytube/src/MyTubeService.py
1205 index 246575c..fc3dafd 100755
1206 --- a/mytube/src/MyTubeService.py
1207 +++ b/mytube/src/MyTubeService.py
1208 @@ -1,23 +1,24 @@
1209  # -*- coding: iso-8859-1 -*-
1210 -from __init__ import bin2long, long2bin, rsa_pub1024, decrypt_block
1211 +from enigma import ePythonMessagePump
1212 +
1213 +from __init__ import decrypt_block
1214 +from ThreadQueue import ThreadQueue
1215  import gdata.youtube
1216  import gdata.youtube.service
1217  from gdata.service import BadAuthentication
1218 -from Tools.LoadPixmap import LoadPixmap
1219 -from Components.config import config, Config, ConfigSelection, ConfigText, getConfigListEntry, ConfigSubsection, ConfigYesNo, ConfigIP, ConfigNumber
1220 -from Components.ConfigList import ConfigListScreen
1221 -from Components.config import KEY_DELETE, KEY_BACKSPACE, KEY_LEFT, KEY_RIGHT, KEY_HOME, KEY_END, KEY_TOGGLEOW, KEY_ASCII, KEY_TIMEOUT
1222  
1223  from twisted.web import client
1224  from twisted.internet import reactor
1225 -from urllib2 import Request, URLError, HTTPError, urlopen as urlopen2
1226 -from socket import gaierror,error
1227 -import re, os, sys, socket
1228 +from urllib2 import Request, URLError, urlopen as urlopen2
1229 +from socket import gaierror, error
1230 +import os, socket
1231  from urllib import quote, unquote_plus, unquote
1232 -import cookielib
1233 -from httplib import HTTPConnection,CannotSendRequest,BadStatusLine,HTTPException
1234 -HTTPConnection.debuglevel = 1
1235 +from httplib import HTTPConnection, CannotSendRequest, BadStatusLine, HTTPException
1236 +
1237  from urlparse import parse_qs
1238 +from threading import Thread
1239 +
1240 +HTTPConnection.debuglevel = 1
1241  
1242  def validate_cert(cert, key):
1243         buf = decrypt_block(cert[8:], key) 
1244 @@ -50,7 +51,7 @@ std_headers = {
1245  
1246  class GoogleSuggestions():
1247         def __init__(self, callback, ds = None, json = None, hl = None):
1248 -               self.callback = callback
1249 +               self.gotFeed = callback
1250                 self.conn = HTTPConnection("google.com")
1251                 #GET /complete/search?output=toolbar&ds=yt&hl=en&jsonp=self.gotSuggestions&q=s
1252                 self.prepQuerry = "/complete/search?output=toolbar&"
1253 @@ -63,7 +64,7 @@ class GoogleSuggestions():
1254                 self.prepQuerry = self.prepQuerry + "jsonp=self.gotSuggestions&q="
1255  
1256         def gotSuggestions(self, suggestslist):
1257 -               self.callback(suggestslist)
1258 +               self.gotFeed(suggestslist)
1259  
1260         def getSuggestions(self, querryString):
1261                 if querryString is not "":
1262 @@ -72,22 +73,22 @@ class GoogleSuggestions():
1263                                 self.conn.request("GET", querry)
1264                         except (CannotSendRequest, gaierror, error):
1265                                 print "[MyTube]  Can not send request for suggestions"
1266 -                               self.callback(None)
1267 +                               self.gotFeed(None)
1268                         else:
1269                                 try:
1270                                         response = self.conn.getresponse()
1271                                 except BadStatusLine:
1272                                         print "[MyTube]  Can not get a response from google"
1273 -                                       self.callback(None)
1274 +                                       self.gotFeed(None)
1275                                 else:
1276                                         if response.status == 200:
1277                                                 data = response.read()
1278                                                 self.gotSuggestions(data)
1279                                         else:
1280 -                                               self.callback(None)
1281 +                                               self.gotFeed(None)
1282                         self.conn.close()
1283                 else:
1284 -                       self.callback(None)
1285 +                       self.gotFeed(None)
1286  
1287  
1288  class MyTubeFeedEntry():
1289 @@ -224,16 +225,16 @@ class MyTubeFeedEntry():
1290                         try:
1291                                 infopage = urlopen2(request).read()
1292                                 videoinfo = parse_qs(infopage)
1293 -                               if 'fmt_url_map' in videoinfo:
1294 +                               if ('url_encoded_fmt_stream_map' or 'fmt_url_map') in videoinfo:
1295                                         break
1296                         except (URLError, HTTPException, socket.error), err:
1297                                 print "[MyTube] Error: unable to download video infopage",str(err)
1298                                 return video_url
1299  
1300 -               if 'fmt_url_map' not in videoinfo:
1301 +               if ('url_encoded_fmt_stream_map' or 'fmt_url_map') not in videoinfo:
1302                         # Attempt to see if YouTube has issued an error message
1303                         if 'reason' not in videoinfo:
1304 -                               print '[MyTube] Error: unable to extract "fmt_url_map" parameter for unknown reason'
1305 +                               print '[MyTube] Error: unable to extract "fmt_url_map" or "url_encoded_fmt_stream_map" parameter for unknown reason'
1306                         else:
1307                                 reason = unquote_plus(videoinfo['reason'][0])
1308                                 print '[MyTube] Error: YouTube said: %s' % reason.decode('utf-8')
1309 @@ -241,22 +242,30 @@ class MyTubeFeedEntry():
1310  
1311                 video_fmt_map = {}
1312                 fmt_infomap = {}
1313 -               tmp_fmtUrlDATA = videoinfo['fmt_url_map'][0].split(',')
1314 +               if videoinfo.has_key('url_encoded_fmt_stream_map'):
1315 +                       tmp_fmtUrlDATA = videoinfo['url_encoded_fmt_stream_map'][0].split(',url=')
1316 +               else:
1317 +                       tmp_fmtUrlDATA = videoinfo['fmt_url_map'][0].split(',')
1318                 for fmtstring in tmp_fmtUrlDATA:
1319 -                       (fmtid,fmturl) = fmtstring.split('|')
1320 +                       if videoinfo.has_key('url_encoded_fmt_stream_map'):
1321 +                               (fmturl, fmtid) = fmtstring.split('&itag=')
1322 +                               if fmturl.find("url=") !=-1:
1323 +                                       fmturl = fmturl.replace("url=","")
1324 +                       else:
1325 +                               (fmtid,fmturl) = fmtstring.split('|')
1326                         if VIDEO_FMT_PRIORITY_MAP.has_key(fmtid):
1327                                 video_fmt_map[VIDEO_FMT_PRIORITY_MAP[fmtid]] = { 'fmtid': fmtid, 'fmturl': unquote_plus(fmturl) }
1328                         fmt_infomap[int(fmtid)] = unquote_plus(fmturl)
1329                 print "[MyTube] got",sorted(fmt_infomap.iterkeys())
1330                 if video_fmt_map and len(video_fmt_map):
1331                         print "[MyTube] found best available video format:",video_fmt_map[sorted(video_fmt_map.iterkeys())[0]]['fmtid']
1332 -                       video_url = video_fmt_map[sorted(video_fmt_map.iterkeys())[0]]['fmturl']
1333 +                       video_url = video_fmt_map[sorted(video_fmt_map.iterkeys())[0]]['fmturl'].split(';')[0]
1334                         print "[MyTube] found best available video url:",video_url
1335                 
1336                 return video_url
1337         
1338         def getRelatedVideos(self):
1339 -               print "[MyTubeFeedEntry] getResponseVideos()"
1340 +               print "[MyTubeFeedEntry] getRelatedVideos()"
1341                 for link in self.entry.link:
1342                         #print "Related link: ", link.rel.endswith
1343                         if link.rel.endswith("video.related"):
1344 @@ -279,13 +288,14 @@ class MyTubePlayerService():
1345                 print "[MyTube] MyTubePlayerService - init"
1346                 self.feedentries = []
1347                 self.feed = None
1348 -               
1349 +                               
1350         def startService(self):
1351                 print "[MyTube] MyTubePlayerService - startService"
1352 -               self.yt_service = gdata.youtube.service.YouTubeService()
1353 -               self.yt_service.developer_key = 'AI39si4AjyvU8GoJGncYzmqMCwelUnqjEMWTFCcUtK-VUzvWygvwPO-sadNwW5tNj9DDCHju3nnJEPvFy4WZZ6hzFYCx8rJ6Mw'
1354 -               self.yt_service.client_id = 'ytapi-dream-MyTubePlayer-i0kqrebg-0'
1355 -               self.loggedIn = False
1356 +               self.yt_service = gdata.youtube.service.YouTubeService( 
1357 +                       developer_key = 'AI39si4AjyvU8GoJGncYzmqMCwelUnqjEMWTFCcUtK-VUzvWygvwPO-sadNwW5tNj9DDCHju3nnJEPvFy4WZZ6hzFYCx8rJ6Mw',
1358 +                       client_id = 'ytapi-dream-MyTubePlayer-i0kqrebg-0' 
1359 +               )
1360 +#              self.loggedIn = False
1361                 #os.environ['http_proxy'] = 'http://169.229.50.12:3128'
1362                 #proxy = os.environ.get('http_proxy')
1363                 #print "FOUND ENV PROXY-->",proxy
1364 @@ -295,23 +305,18 @@ class MyTubePlayerService():
1365         def stopService(self):
1366                 print "[MyTube] MyTubePlayerService - stopService"
1367                 del self.ytService
1368 -               self.loggedIn = False
1369 -
1370 -       def isLoggedIn(self):
1371 -               return self.loggedIn
1372  
1373 -       def getFeed(self, url):
1374 +       def getFeed(self, url, callback = None, errorback = None):
1375                 print "[MyTube] MyTubePlayerService - getFeed:",url
1376                 self.feedentries = []
1377 -               self.feed = self.yt_service.GetYouTubeVideoFeed(url)
1378 -               for entry in self.feed.entry:
1379 -                       MyFeedEntry = MyTubeFeedEntry(self, entry)
1380 -                       self.feedentries.append(MyFeedEntry)
1381 -               return self.feed                        
1382 +               queryThread = YoutubeQueryThread(self.yt_service.GetYouTubeVideoFeed, url, self.gotFeed, self.gotFeedError, callback, errorback)
1383 +               queryThread.start()
1384 +               return queryThread              
1385  
1386         def search(self, searchTerms, startIndex = 1, maxResults = 25,
1387                                         orderby = "relevance", racy = "include", 
1388 -                                       author = "", lr = "", categories = "", sortOrder = "ascending"):
1389 +                                       author = "", lr = "", categories = "", sortOrder = "ascending", 
1390 +                                       callback = None, errorback = None):
1391                 print "[MyTube] MyTubePlayerService - search()"
1392                 self.feedentries = []
1393                 query = gdata.youtube.service.YouTubeVideoQuery()
1394 @@ -325,17 +330,24 @@ class MyTubePlayerService():
1395                         query.categories = categories
1396                 query.start_index = startIndex
1397                 query.max_results = maxResults
1398 -               try:
1399 -                       feed = self.yt_service.YouTubeQuery(query)
1400 -               except gaierror:
1401 -                       feed = None
1402 +               queryThread = YoutubeQueryThread(self.yt_service.YouTubeQuery, query, self.gotFeed, self.gotFeedError, callback, errorback)
1403 +               queryThread.start()
1404 +               return queryThread      
1405 +       
1406 +       def gotFeed(self, feed, callback):
1407                 if feed is not None:
1408                         self.feed = feed
1409                         for entry in self.feed.entry:
1410                                 MyFeedEntry = MyTubeFeedEntry(self, entry)
1411                                 self.feedentries.append(MyFeedEntry)
1412 -               return self.feed                
1413 -
1414 +               if callback is not None:
1415 +                       callback(self.feed)
1416 +                       
1417 +       def gotFeedError(self, exception, errorback):
1418 +               if errorback is not None:
1419 +                       errorback(exception)
1420 +       
1421 +       
1422         def getTitle(self):
1423                 return self.feed.title.text
1424  
1425 @@ -354,5 +366,38 @@ class MyTubePlayerService():
1426                                 return link.href
1427                 return None
1428  
1429 -
1430 +class YoutubeQueryThread(Thread):
1431 +       def __init__(self, query, param, gotFeed, gotFeedError, callback, errorback):
1432 +               Thread.__init__(self)
1433 +               self.messagePump = ePythonMessagePump()
1434 +               self.messages = ThreadQueue()
1435 +               self.gotFeed = gotFeed
1436 +               self.gotFeedError = gotFeedError
1437 +               self.callback = callback
1438 +               self.errorback = errorback
1439 +               self.query = query
1440 +               self.param = param
1441 +               self.canceled = False
1442 +               self.messagePump.recv_msg.get().append(self.finished)
1443 +       
1444 +       def cancel(self):
1445 +               self.canceled = True
1446 +       
1447 +       def run(self):
1448 +               try:
1449 +                       feed = self.query(self.param)
1450 +                       self.messages.push((True, feed, self.callback))
1451 +                       self.messagePump.send(0)
1452 +               except Exception, ex:
1453 +                       self.messages.push((False, ex, self.errorback))
1454 +                       self.messagePump.send(0)                        
1455 +       
1456 +       def finished(self, val):                
1457 +               if not self.canceled:
1458 +                       message = self.messages.pop()
1459 +                       if message[0]:          
1460 +                               self.gotFeed(message[1], message[2])
1461 +                       else:
1462 +                               self.gotFeedError(message[1], message[2])
1463 +               
1464  myTubeService = MyTubePlayerService()
1465 diff --git a/mytube/src/ThreadQueue.py b/mytube/src/ThreadQueue.py
1466 new file mode 100644
1467 index 0000000..ddec604
1468 --- /dev/null
1469 +++ b/mytube/src/ThreadQueue.py
1470 @@ -0,0 +1,20 @@
1471 +from threading import Lock
1472 +
1473 +class ThreadQueue:
1474 +       def __init__(self):
1475 +               self.__list = [ ]
1476 +               self.__lock = Lock()
1477 +
1478 +       def push(self, val):
1479 +               lock = self.__lock
1480 +               lock.acquire()
1481 +               self.__list.append(val)
1482 +               lock.release()
1483 +
1484 +       def pop(self):
1485 +               lock = self.__lock
1486 +               lock.acquire()
1487 +               ret = self.__list.pop()
1488 +               lock.release()
1489 +               return ret
1490 +
1491 diff --git a/mytube/src/__init__.py b/mytube/src/__init__.py
1492 index c8c21ef..b7b3a56 100755
1493 --- a/mytube/src/__init__.py
1494 +++ b/mytube/src/__init__.py
1495 @@ -1,8 +1,7 @@
1496  # -*- coding: ISO-8859-1 -*-
1497  from Components.Language import language
1498  from Tools.Directories import resolveFilename, SCOPE_PLUGINS, SCOPE_LANGUAGE
1499 -import os,gettext
1500 -import sha
1501 +import os, gettext, hashlib
1502  PluginLanguageDomain = "MyTube"
1503  PluginLanguagePath = "Extensions/MyTube/locale"
1504  
1505 @@ -35,7 +34,7 @@ def decrypt_block(src, mod):
1506         if len(src) != 128 and len(src) != 202:
1507                 return None
1508         dest = rsa_pub1024(src[:128], mod)
1509 -       hash = sha.new(dest[1:107])
1510 +       hash = hashlib.sha1(dest[1:107])
1511         if len(src) == 202:
1512                 hash.update(src[131:192])       
1513         result = hash.digest()
1514 diff --git a/mytube/src/plugin.py b/mytube/src/plugin.py
1515 index 93b54c1..84b98c4 100755
1516 --- a/mytube/src/plugin.py
1517 +++ b/mytube/src/plugin.py
1518 @@ -1,51 +1,44 @@
1519 -from Plugins.Plugin import PluginDescriptor
1520 -from MyTubeService import GoogleSuggestions, validate_cert, get_rnd
1521 -from MyTubeSearch import ConfigTextWithGoogleSuggestions
1522 -from Tools.BoundFunction import boundFunction
1523 -from Screens.MessageBox import MessageBox
1524 -from Screens.Screen import Screen
1525 -from Screens.ChoiceBox import ChoiceBox
1526 -from Screens.InfoBar import MoviePlayer
1527 -from Screens.VirtualKeyBoard import VirtualKeyBoard
1528 -from Components.ActionMap import ActionMap, NumberActionMap
1529 +from Components.AVSwitch import AVSwitch
1530 +from Components.ActionMap import ActionMap
1531 +from Components.Button import Button
1532 +from Components.ConfigList import ConfigListScreen
1533  from Components.Label import Label
1534 -from Components.ScrollLabel import ScrollLabel
1535 -from Components.ProgressBar import ProgressBar
1536 +from Components.MultiContent import MultiContentEntryText, MultiContentEntryPixmapAlphaTest
1537  from Components.Pixmap import Pixmap
1538 -from Components.Button import Button
1539 +from Components.ProgressBar import ProgressBar
1540 +from Components.ScrollLabel import ScrollLabel
1541 +from Components.ServiceEventTracker import ServiceEventTracker
1542  from Components.Sources.List import List
1543 -from Components.MultiContent import MultiContentEntryText, MultiContentEntryPixmapAlphaTest
1544 -from Components.AVSwitch import AVSwitch
1545 -from Components.ActionMap import HelpableActionMap
1546 -from Components.config import config, Config, ConfigSelection, ConfigSubsection, ConfigText, getConfigListEntry, ConfigYesNo, ConfigIP, ConfigNumber,ConfigLocations
1547 -from Components.config import KEY_DELETE, KEY_BACKSPACE, KEY_LEFT, KEY_RIGHT, KEY_HOME, KEY_END, KEY_TOGGLEOW, KEY_ASCII, KEY_TIMEOUT
1548 -from Components.ConfigList import ConfigListScreen
1549 -from Components.ServiceEventTracker import ServiceEventTracker, InfoBarBase
1550 -from Components.Console import Console
1551 -from Components.Sources.Source import Source
1552  from Components.Task import Task, Job, job_manager
1553 +from Components.config import config, ConfigSelection, ConfigSubsection, ConfigText, ConfigYesNo, getConfigListEntry
1554 +#, ConfigIP, ConfigNumber, ConfigLocations
1555 +from MyTubeSearch import ConfigTextWithGoogleSuggestions, MyTubeSettingsScreen, MyTubeTasksScreen, MyTubeHistoryScreen
1556 +from MyTubeService import validate_cert, get_rnd, myTubeService
1557 +from Plugins.Plugin import PluginDescriptor
1558 +from Screens.ChoiceBox import ChoiceBox
1559 +from Screens.InfoBarGenerics import InfoBarNotifications
1560 +from Screens.MessageBox import MessageBox
1561 +from Screens.Screen import Screen
1562 +from Screens.VirtualKeyBoard import VirtualKeyBoard
1563 +from Tools.BoundFunction import boundFunction
1564 +from Tools.Directories import resolveFilename, SCOPE_HDD, SCOPE_CURRENT_PLUGIN
1565 +from Tools.Downloader import downloadWithProgress
1566  
1567 -from threading import Thread
1568 -from threading import Condition
1569 +from __init__ import decrypt_block
1570  
1571 -from Tools.Directories import pathExists, fileExists, resolveFilename, SCOPE_PLUGINS, SCOPE_SKIN_IMAGE, SCOPE_HDD, SCOPE_CURRENT_PLUGIN
1572 -from Tools.LoadPixmap import LoadPixmap
1573 -from Tools.Downloader import HTTPProgressDownloader, downloadWithProgress
1574 -from enigma import eTimer, quitMainloop,eListbox,ePoint, RT_HALIGN_LEFT, RT_HALIGN_RIGHT, RT_VALIGN_CENTER, eListboxPythonMultiContent, eListbox, gFont, getDesktop, ePicLoad, eServiceCenter, iServiceInformation, eServiceReference,iSeekableService,iServiceInformation, iPlayableService, iPlayableServicePtr
1575 -from os import path as os_path, system as os_system, unlink, stat, mkdir, popen, makedirs, listdir, access, rename, remove, W_OK, R_OK, F_OK
1576 +from enigma import eTPM, eTimer, ePoint, RT_HALIGN_LEFT, RT_VALIGN_CENTER, gFont, ePicLoad, eServiceReference, iPlayableService
1577 +from os import path as os_path, remove as os_remove
1578  from twisted.web import client
1579 -from twisted.internet import reactor
1580 -from time import time
1581  
1582 -from Screens.InfoBarGenerics import InfoBarShowHide, InfoBarSeek, InfoBarNotifications, InfoBarServiceNotifications
1583 -from enigma import eTPM
1584 -from __init__ import bin2long, long2bin, rsa_pub1024, decrypt_block
1585 +
1586 +
1587  etpm = eTPM()
1588  rootkey = ['\x9f', '|', '\xe4', 'G', '\xc9', '\xb4', '\xf4', '#', '&', '\xce', '\xb3', '\xfe', '\xda', '\xc9', 'U', '`', '\xd8', '\x8c', 's', 'o', '\x90', '\x9b', '\\', 'b', '\xc0', '\x89', '\xd1', '\x8c', '\x9e', 'J', 'T', '\xc5', 'X', '\xa1', '\xb8', '\x13', '5', 'E', '\x02', '\xc9', '\xb2', '\xe6', 't', '\x89', '\xde', '\xcd', '\x9d', '\x11', '\xdd', '\xc7', '\xf4', '\xe4', '\xe4', '\xbc', '\xdb', '\x9c', '\xea', '}', '\xad', '\xda', 't', 'r', '\x9b', '\xdc', '\xbc', '\x18', '3', '\xe7', '\xaf', '|', '\xae', '\x0c', '\xe3', '\xb5', '\x84', '\x8d', '\r', '\x8d', '\x9d', '2', '\xd0', '\xce', '\xd5', 'q', '\t', '\x84', 'c', '\xa8', ')', '\x99', '\xdc', '<', '"', 'x', '\xe8', '\x87', '\x8f', '\x02', ';', 'S', 'm', '\xd5', '\xf0', '\xa3', '_', '\xb7', 'T', '\t', '\xde', '\xa7', '\xf1', '\xc9', '\xae', '\x8a', '\xd7', '\xd2', '\xcf', '\xb2', '.', '\x13', '\xfb', '\xac', 'j', '\xdf', '\xb1', '\x1d', ':', '?']
1589  
1590  config.plugins.mytube = ConfigSubsection()
1591  config.plugins.mytube.search = ConfigSubsection()
1592  
1593 +
1594  config.plugins.mytube.search.searchTerm = ConfigTextWithGoogleSuggestions("", False, threaded = True)
1595  config.plugins.mytube.search.orderBy = ConfigSelection(
1596                                 [
1597 @@ -152,6 +145,7 @@ config.plugins.mytube.general.clearHistoryOnClose = ConfigYesNo(default = False)
1598  #config.plugins.mytube.general.ProxyIP = ConfigIP(default=[0,0,0,0])
1599  #config.plugins.mytube.general.ProxyPort = ConfigNumber(default=8080)
1600  
1601 +
1602  class downloadJob(Job):
1603         def __init__(self, url, file, title):
1604                 Job.__init__(self, title)
1605 @@ -189,8 +183,6 @@ class downloadTask(Task):
1606  
1607  
1608  
1609 -from MyTubeService import myTubeService
1610 -from MyTubeSearch import MyTubeSettingsScreen,MyTubeTasksScreen,MyTubeHistoryScreen
1611  
1612  
1613  class MyTubePlayerMainScreen(Screen, ConfigListScreen):
1614 @@ -198,7 +190,7 @@ class MyTubePlayerMainScreen(Screen, ConfigListScreen):
1615         Details = {}
1616         #(entry, Title, Description, TubeID, thumbnail, PublishedDate,Views,duration,ratings )  
1617         skin = """
1618 -               <screen name="MyTubePlayerMainScreen" flags="wfNoBorder" position="0,0" size="720,576" title="MyTubePlayerMainScreen..." >
1619 +               <screen name="MyTubePlayerMainScreen" flags="wfNoBorder" position="0,0" size="720,576" title="MyTube - Browser" >
1620                         <ePixmap position="0,0" zPosition="-1" size="720,576" pixmap="~/mytubemain_bg.png" alphatest="on" transparent="1" backgroundColor="transparent"/>
1621                         <widget name="config" zPosition="2" position="60,60" size="600,50" scrollbarMode="showNever" transparent="1" />
1622                         <widget source="feedlist" render="Listbox" position="49,110" size="628,385" zPosition="1" scrollbarMode="showOnDemand" transparent="1" backgroundPixmap="~/list_bg.png" selectionPixmap="~/list_sel.png" >
1623 @@ -248,6 +240,8 @@ class MyTubePlayerMainScreen(Screen, ConfigListScreen):
1624                 self.ytfeed = None
1625                 self.currentFeedName = None
1626                 self.videolist = []
1627 +               self.queryThread = None
1628 +               self.queryRunning = False
1629  
1630                 self.video_playlist = []
1631                 self.statuslist = []
1632 @@ -339,6 +333,7 @@ class MyTubePlayerMainScreen(Screen, ConfigListScreen):
1633                         "nextBouquet": self.switchToConfigList,
1634                         "green": self.keyStdFeed,
1635                         "yellow": self.handleHistory,
1636 +                       "menu": self.handleMenu
1637                 }, -2)
1638  
1639                 self["historyactions"] = ActionMap(["ShortcutActions", "WizardActions", "MediaPlayerActions", "MovieSelectionActions", "HelpActions"],
1640 @@ -385,10 +380,12 @@ class MyTubePlayerMainScreen(Screen, ConfigListScreen):
1641                 current = self["config"].getCurrent()
1642                 if current[1].help_window.instance is not None:
1643                         current[1].help_window.instance.hide()
1644 +
1645                 self.statuslist.append(( _("Fetching feed entries"), _("Trying to download the Youtube feed entries. Please wait..." ) ))
1646                 self["feedlist"].style = "state"
1647                 self['feedlist'].setList(self.statuslist)
1648 -               self.Timer.start(200)
1649 +               self.Timer.start(200)           
1650 +       
1651         def TimerFire(self):
1652                 self.Timer.stop()
1653                 if config.plugins.mytube.general.loadFeedOnOpen.value:
1654 @@ -473,7 +470,7 @@ class MyTubePlayerMainScreen(Screen, ConfigListScreen):
1655                         self.switchToConfigList()
1656  
1657         def handleMenu(self):
1658 -               if self.currList == "configlist":
1659 +               if self.currList == "configlist" or self.currList == "status":
1660                         menulist = (
1661                                         (_("MyTube Settings"), "settings"),
1662                                 )
1663 @@ -644,6 +641,7 @@ class MyTubePlayerMainScreen(Screen, ConfigListScreen):
1664                 config.plugins.mytube.general.history.save()
1665                 config.plugins.mytube.general.save()
1666                 config.plugins.mytube.save()
1667 +               self.cancelThread()
1668                 self.close()
1669                         
1670         def keyOK(self):
1671 @@ -901,16 +899,8 @@ class MyTubePlayerMainScreen(Screen, ConfigListScreen):
1672                 self.propagateUpDownNormally = True
1673  
1674         def getFeed(self, feedUrl, feedName):
1675 -               try:
1676 -                       feed = myTubeService.getFeed(feedUrl)
1677 -               except Exception, e:
1678 -                       feed = None
1679 -                       print "Error querying feed :",feedName
1680 -                       print "E-->",e
1681 -                       self.setState('Error')
1682 -               if feed is not None:
1683 -                       self.ytfeed = feed
1684 -               self.buildEntryList()
1685 +               self.queryStarted()
1686 +               self.queryThread = myTubeService.getFeed(feedUrl, self.gotFeed, self.gotFeedError)
1687  
1688         def getNextEntries(self, result):
1689                 if not result:
1690 @@ -943,26 +933,53 @@ class MyTubePlayerMainScreen(Screen, ConfigListScreen):
1691                         self.searchFeed(searchContext)
1692  
1693         def searchFeed(self, searchContext):
1694 -               print "[MyTubePlayer] searchFeed"
1695 +               print "[MyTubePlayer] searchFeed"               
1696 +               self.queryStarted()             
1697                 self.appendEntries = False
1698 -               try:
1699 -                       feed = myTubeService.search(searchContext, 
1700 +               self.queryThread = myTubeService.search(searchContext, 
1701                                         orderby = config.plugins.mytube.search.orderBy.value,
1702                                         racy = config.plugins.mytube.search.racy.value,
1703                                         lr = config.plugins.mytube.search.lr.value,
1704                                         categories = [ config.plugins.mytube.search.categories.value ],
1705 -                                       sortOrder = config.plugins.mytube.search.sortOrder.value)
1706 -               except Exception, e:
1707 -                       feed = None
1708 -                       print "Error querying search for :",config.plugins.mytube.search.searchTerm.value
1709 -                       print "E-->",e
1710 -                       self.setState('Error')
1711 +                                       sortOrder = config.plugins.mytube.search.sortOrder.value,
1712 +                                       callback = self.gotSearchFeed, errorback = self.gotSearchFeedError)
1713 +       
1714 +       def queryStarted(self):
1715 +               if self.queryRunning:
1716 +                       self.cancelThread()
1717 +               self.queryRunning = True                
1718 +       
1719 +       def queryFinished(self):
1720 +               self.queryRunning = False
1721 +       
1722 +       def cancelThread(self):
1723 +               print "[MyTubePlayer] cancelThread"
1724 +               if self.queryThread is not None:
1725 +                       self.queryThread.cancel()
1726 +               self.queryFinished()
1727 +       
1728 +       def gotFeed(self, feed):
1729 +               print "[MyTubePlayer] gotFeed"
1730 +               self.queryFinished()
1731                 if feed is not None:
1732                         self.ytfeed = feed
1733 -               if self.FirstRun == True:       
1734 -                       self.FirstRun = False
1735                 self.buildEntryList()
1736 -
1737 +       
1738 +       def gotFeedError(self, exception):
1739 +               print "[MyTubePlayer] gotFeedError"
1740 +               self.queryFinished()
1741 +               self.setState('Error')
1742 +       
1743 +       def gotSearchFeed(self, feed):
1744 +               if self.FirstRun:       
1745 +                       self.FirstRun = False
1746 +               self.gotFeed(feed)
1747 +       
1748 +       def gotSearchFeedError(self, exception):
1749 +               if self.FirstRun:       
1750 +                       self.FirstRun = False
1751 +               self.gotFeedError(exception)
1752 +       
1753         def buildEntryList(self):
1754                 self.mytubeentries = None
1755                 self.screenshotList = []
1756 @@ -989,7 +1006,7 @@ class MyTubePlayerMainScreen(Screen, ConfigListScreen):
1757                                         self["feedlist"].setIndex(0)
1758                                         self["feedlist"].setList(self.videolist)
1759                                         self["feedlist"].updateList(self.videolist)
1760 -                                       if self.FirstRun == True:       
1761 +                                       if self.FirstRun and not config.plugins.mytube.general.loadFeedOnOpen.value:
1762                                                 self.switchToConfigList()
1763                                         else:
1764                                                 self.switchToFeedList()
1765 @@ -1157,7 +1174,7 @@ class MyTubePlayerMainScreen(Screen, ConfigListScreen):
1766                         if self.Details.has_key(tubeid):
1767                                 self.Details[tubeid]["thumbnail"] = ptr
1768                         if (os_path.exists(thumbnailFile) == True):
1769 -                               remove(thumbnailFile)
1770 +                               os_remove(thumbnailFile)
1771                         del self.picloads[tubeid]
1772                 else:
1773                         del self.picloads[tubeid]
1774 @@ -1186,7 +1203,7 @@ class MyTubePlayerMainScreen(Screen, ConfigListScreen):
1775  
1776  class MyTubeVideoInfoScreen(Screen):
1777         skin = """
1778 -               <screen name="MyTubeVideoInfoScreen" flags="wfNoBorder" position="0,0" size="720,576" title="MyTubePlayerMainScreen..." >
1779 +               <screen name="MyTubeVideoInfoScreen" flags="wfNoBorder" position="0,0" size="720,576" title="MyTube - Video Info" >
1780                         <ePixmap position="0,0" zPosition="-1" size="720,576" pixmap="~/mytubemain_bg.png" alphatest="on" transparent="1" backgroundColor="transparent"/>
1781                         <widget name="title" position="60,50" size="600,50" zPosition="5" valign="center" halign="left" font="Regular;21" transparent="1" foregroundColor="white" shadowColor="black" shadowOffset="-1,-1" />
1782                         <widget name="starsbg" pixmap="~/starsbar_empty.png" position="560,220" zPosition="5" size="100,20" transparent="1" alphatest="on" />
1783 @@ -1361,7 +1378,7 @@ class MyTubeVideoInfoScreen(Screen):
1784                         self.thumbnails[picindex][3] = ptr
1785                         if (os_path.exists(self.thumbnails[picindex][2]) == True):
1786                                 print "removing", self.thumbnails[picindex][2]
1787 -                               remove(self.thumbnails[picindex][2])
1788 +                               os_remove(self.thumbnails[picindex][2])
1789                                 del self.picloads[picindex]
1790                                 if len(self.picloads) == 0:
1791                                         self.timer.startLongTimer(3)
1792 @@ -1400,7 +1417,7 @@ class MyTubeVideoInfoScreen(Screen):
1793  
1794  class MyTubeVideoHelpScreen(Screen):
1795         skin = """
1796 -               <screen name="MyTubeVideoHelpScreen" flags="wfNoBorder" position="0,0" size="720,576" title="MyTubePlayerMainScreen..." >
1797 +               <screen name="MyTubeVideoHelpScreen" flags="wfNoBorder" position="0,0" size="720,576" title="MyTube - Help" >
1798                         <ePixmap position="0,0" zPosition="-1" size="720,576" pixmap="~/mytubemain_bg.png" alphatest="on" transparent="1" backgroundColor="transparent"/>
1799                         <widget name="title" position="60,50" size="600,50" zPosition="5" valign="center" halign="left" font="Regular;21" transparent="1" foregroundColor="white" shadowColor="black" shadowOffset="-1,-1" />
1800                         <widget name="detailtext" position="60,120" size="610,370" zPosition="10" font="Regular;21" transparent="1" halign="left" valign="top"/>
1801 @@ -1561,7 +1578,6 @@ class MyTubePlayer(Screen, InfoBarNotifications):
1802                 if self.infoCallback is not None:       
1803                         self.infoCallback()
1804  
1805 -
1806         def playNextFile(self):
1807                 print "playNextFile"
1808                 nextservice,error = self.nextCallback()