fix bug on plugins.
authorkos <kos@dev3>
Wed, 10 Aug 2011 10:11:51 +0000 (19:11 +0900)
committerkos <kos@dev3>
Wed, 10 Aug 2011 10:11:51 +0000 (19:11 +0900)
recipes/enigma2/enigma2-plugins.bb
recipes/enigma2/enigma2-plugins/vuplus/enigma2_plugins_20110810.patch [new file with mode: 0644]

index 8e3b9f6..4e8c3dc 100755 (executable)
@@ -10,7 +10,7 @@ SRCDATE="20110215"
 BRANCH="master"
 PV = "experimental-git${SRCDATE}"
 
-PR = "r2"
+PR = "r3"
 SRC_URI="git://schwerkraft.elitedvb.net/enigma2-plugins/enigma2-plugins.git;protocol=git;branch=${BRANCH};tag=${SRCREV}"
 
 EXTRA_OECONF = " \
@@ -22,6 +22,7 @@ EXTRA_OECONF = " \
 
 SRC_URI_append_vuplus = " \
           file://enigma2_plugins_mytube_tpm.patch;patch=1;pnum=1 \
+          file://enigma2_plugins_20110810.patch;patch=1;pnum=1 \
           file://enigma2_plugins_webinterface_tpm.patch;patch=1;pnum=1 \
           file://enigma2_plugins_ac3lipsync_dolby.patch;patch=1;pnum=1 \
           file://enigma2_plugins_autoresolution_fix.patch;patch=1;pnum=1 \
diff --git a/recipes/enigma2/enigma2-plugins/vuplus/enigma2_plugins_20110810.patch b/recipes/enigma2/enigma2-plugins/vuplus/enigma2_plugins_20110810.patch
new file mode 100644 (file)
index 0000000..31ea5a5
--- /dev/null
@@ -0,0 +1,1808 @@
+diff --git a/mytube/meta/plugin_mytube.xml b/mytube/meta/plugin_mytube.xml
+index eb2a0fd..56e1686 100644
+--- a/mytube/meta/plugin_mytube.xml
++++ b/mytube/meta/plugin_mytube.xml
+@@ -3,7 +3,8 @@
+                     <hardware type="dm8000" />
+                     <hardware type="dm800" />
+                   <hardware type="dm800se" />
+-                    <hardware type="dm500hd" />       
++                    <hardware type="dm500hd" />
++                  <hardware type="dm7020hd" />
+                     <tag type="Multimedia" />
+         </prerequisites>
+           <info>
+diff --git a/mytube/po/de.po b/mytube/po/de.po
+index b487673..c56c84e 100644
+--- a/mytube/po/de.po
++++ b/mytube/po/de.po
+@@ -7,9 +7,9 @@ msgid ""
+ msgstr ""
+ "Project-Id-Version: tuxbox-enigma 0.0.1\n"
+ "Report-Msgid-Bugs-To: \n"
+-"POT-Creation-Date: 2009-05-29 17:38+0200\n"
+-"PO-Revision-Date: 2008-05-16 17:15+0100\n"
+-"Last-Translator: Stefan Pluecken <mladen.horvat@multimedia-labs.de>\n"
++"POT-Creation-Date: 2011-06-12 19:07+0100\n"
++"PO-Revision-Date: 2011-06-12 19:22+0100\n"
++"Last-Translator: JuSt611 <Software@Strasdas.de>\n"
+ "Language-Team: none\n"
+ "MIME-Version: 1.0\n"
+ "Content-Type: text/plain; charset=UTF-8\n"
+@@ -18,448 +18,690 @@ msgstr ""
+ "X-Poedit-Language: German\n"
+ "X-Poedit-Country: GERMANY\n"
+ "X-Poedit-SourceCharset: iso-8859-15\n"
++"X-Poedit-Basepath: .\n"
++"X-Poedit-SearchPath-0: ../src\n"
+-msgid " Results"
+-msgstr " Ergebnisse"
++#: ../src/MyTubeSearch.py:161
++#: ../src/plugin.py:52
++msgid "Relevance"
++msgstr "Relevanz"
+-msgid "Added: "
+-msgstr "Hinzugefügt: "
++#: ../src/MyTubeSearch.py:162
++#: ../src/plugin.py:53
++msgid "View Count"
++msgstr "Aufrufe"
+-msgid "All"
+-msgstr "Alle"
++#: ../src/MyTubeSearch.py:163
++#: ../src/plugin.py:54
++msgid "Published"
++msgstr "Veröffentlicht"
++
++#: ../src/MyTubeSearch.py:164
++#: ../src/plugin.py:55
++msgid "Rating"
++msgstr "Bewertung"
++#: ../src/MyTubeSearch.py:168
++#: ../src/plugin.py:59
+ msgid "All Time"
+-msgstr ""
++msgstr "Allzeit"
+-msgid "An error occured."
+-msgstr "Es ist ein Fehler aufgetreten."
++#: ../src/MyTubeSearch.py:169
++#: ../src/plugin.py:60
++msgid "This Month"
++msgstr "Diesen Monat"
+-msgid "Ascending"
+-msgstr "aufsteigend"
++#: ../src/MyTubeSearch.py:170
++#: ../src/plugin.py:61
++msgid "This Week"
++msgstr "Diese Woche"
+-msgid "Ask user"
+-msgstr "Nutzer fragen"
++#: ../src/MyTubeSearch.py:171
++#: ../src/plugin.py:62
++msgid "Today"
++msgstr "Heute"
+-msgid "Australia"
+-msgstr "Australien"
++#: ../src/MyTubeSearch.py:175
++#: ../src/plugin.py:66
++#: ../src/plugin.py:619
++#: ../src/plugin.py:625
++#: ../src/plugin.py:1743
++msgid "Yes"
++msgstr "Ja"
+-msgid "Author: "
+-msgstr "Author: "
++#: ../src/MyTubeSearch.py:176
++#: ../src/plugin.py:67
++#: ../src/plugin.py:620
++#: ../src/plugin.py:626
++msgid "No"
++msgstr "Nein"
++#: ../src/MyTubeSearch.py:180
++#: ../src/MyTubeSearch.py:200
++#: ../src/plugin.py:71
++#: ../src/plugin.py:91
++msgid "All"
++msgstr "Alle"
++
++#: ../src/MyTubeSearch.py:181
++#: ../src/plugin.py:72
++msgid "Film & Animation"
++msgstr "Film & Animation"
++
++#: ../src/MyTubeSearch.py:182
++#: ../src/plugin.py:73
+ msgid "Autos & Vehicles"
+ msgstr "Autos und Fahrzeuge"
+-msgid "Brazil"
+-msgstr "Brasilien"
++#: ../src/MyTubeSearch.py:183
++#: ../src/plugin.py:74
++msgid "Music"
++msgstr "Musik"
+-msgid "Canada"
+-msgstr "Kanada"
++#: ../src/MyTubeSearch.py:184
++#: ../src/plugin.py:75
++msgid "Pets & Animals"
++msgstr "Tiere"
+-msgid "Choose target folder"
+-msgstr "Wähle Zielverzeichnis"
++#: ../src/MyTubeSearch.py:185
++#: ../src/plugin.py:76
++msgid "Sports"
++msgstr "Sport"
+-msgid "Clear history on Exit:"
+-msgstr "Verlauf beim Verlassen löschen:"
++#: ../src/MyTubeSearch.py:186
++#: ../src/plugin.py:77
++msgid "Travel & Events"
++msgstr "Reisen & Events"
+-msgid "Close"
+-msgstr "Schließen"
++#: ../src/MyTubeSearch.py:187
++#: ../src/plugin.py:78
++msgid "Short Movies"
++msgstr "Kurzvideos"
++
++#: ../src/MyTubeSearch.py:188
++#: ../src/plugin.py:79
++msgid "Gaming"
++msgstr "Spiele"
++#: ../src/MyTubeSearch.py:189
++#: ../src/plugin.py:80
+ msgid "Comedy"
+ msgstr "Komödien"
+-msgid "Czech Republic"
+-msgstr "Tschechien"
+-
+-msgid "Descending"
+-msgstr "absteigend"
+-
+-msgid "Display search results by:"
+-msgstr "Suchergebnisse anzeigen:"
+-
+-msgid "Do you want to see more entries?"
+-msgstr "Weitere Videos?"
+-
+-msgid "Download Video"
+-msgstr "Video runterladen"
+-
+-msgid "Download location"
+-msgstr "Download Verzeichnis:"
++#: ../src/MyTubeSearch.py:190
++#: ../src/plugin.py:81
++msgid "People & Blogs"
++msgstr "Leute & Blogs"
+-msgid "Downloading screenshots. Please wait..."
+-msgstr "Bilder werden geladen. Bitte warten..."
++#: ../src/MyTubeSearch.py:191
++#: ../src/plugin.py:82
++msgid "News & Politics"
++msgstr "Nachrichten & Politik"
+-msgid "Duration: "
+-msgstr "Dauer: "
++#: ../src/MyTubeSearch.py:192
++#: ../src/plugin.py:83
++msgid "Entertainment"
++msgstr "Unterhaltung"
++#: ../src/MyTubeSearch.py:193
++#: ../src/plugin.py:84
+ msgid "Education"
+ msgstr "Bildung"
+-msgid "Enter your search term(s)"
+-msgstr "Suchbegriff eingeben"
++#: ../src/MyTubeSearch.py:194
++#: ../src/plugin.py:85
++msgid "Howto & Style"
++msgstr "Tipps & Tricks"
+-msgid "Entertainment"
+-msgstr "Unterhaltung"
++#: ../src/MyTubeSearch.py:195
++#: ../src/plugin.py:86
++msgid "Nonprofits & Activism"
++msgstr "Non-Profit"
+-msgid "Fetching feed entries"
+-msgstr "Lade feeds"
++#: ../src/MyTubeSearch.py:196
++#: ../src/plugin.py:87
++msgid "Science & Technology"
++msgstr "Wissenschaft & Technik"
+-msgid "Fetching search entries"
+-msgstr "Lade Suchergebnisse"
++#: ../src/MyTubeSearch.py:201
++#: ../src/MyTubeSearch.py:208
++#: ../src/plugin.py:92
++#: ../src/plugin.py:99
++msgid "Australia"
++msgstr "Australien"
+-msgid "Film & Animation"
+-msgstr "Film & Animation"
++#: ../src/MyTubeSearch.py:202
++#: ../src/plugin.py:93
++msgid "Brazil"
++msgstr "Brasilien"
++#: ../src/MyTubeSearch.py:203
++#: ../src/plugin.py:94
++msgid "Canada"
++msgstr "Kanada"
++
++#: ../src/MyTubeSearch.py:204
++#: ../src/plugin.py:95
++msgid "Czech Republic"
++msgstr "Tschechien"
++
++#: ../src/MyTubeSearch.py:205
++#: ../src/plugin.py:96
+ msgid "France"
+ msgstr "Frankreich"
+-msgid "Gaming"
+-msgstr "Spiele"
+-
++#: ../src/MyTubeSearch.py:206
++#: ../src/plugin.py:97
+ msgid "Germany"
+ msgstr "Deutschland"
++#: ../src/MyTubeSearch.py:207
++#: ../src/plugin.py:98
+ msgid "Great Britain"
+ msgstr "England"
+-msgid "HD videos"
+-msgstr "HD Videos"
+-
+-msgid "Help"
+-msgstr "Hilfe"
+-
+-msgid "History"
+-msgstr "Verlauf"
+-
++#: ../src/MyTubeSearch.py:209
++#: ../src/plugin.py:100
+ msgid "Holland"
+ msgstr "Holland"
++#: ../src/MyTubeSearch.py:210
++#: ../src/plugin.py:101
+ msgid "Hong Kong"
+ msgstr "Hong Kong"
+-msgid "Howto & Style"
+-msgstr "Tipps & Tricks"
+-
++#: ../src/MyTubeSearch.py:211
++#: ../src/plugin.py:102
+ msgid "India"
+ msgstr "Indien"
++#: ../src/MyTubeSearch.py:212
++#: ../src/plugin.py:103
+ msgid "Ireland"
+ msgstr "Irland"
++#: ../src/MyTubeSearch.py:213
++#: ../src/plugin.py:104
+ msgid "Israel"
+ msgstr "Israel"
++#: ../src/MyTubeSearch.py:214
++#: ../src/plugin.py:105
+ msgid "Italy"
+ msgstr "Italien"
++#: ../src/MyTubeSearch.py:215
++#: ../src/plugin.py:106
+ msgid "Japan"
+ msgstr "Japan"
+-msgid "Load feed on startup:"
+-msgstr "Feed beim Starten laden:"
+-
++#: ../src/MyTubeSearch.py:216
++#: ../src/plugin.py:107
+ msgid "Mexico"
+ msgstr "Mexiko"
+-msgid "More video entries."
+-msgstr "Weitere Video Einträge."
++#: ../src/MyTubeSearch.py:217
++#: ../src/plugin.py:108
++msgid "New Zealand"
++msgstr "Neuseeland"
+-msgid "Most discussed"
+-msgstr "Heiß diskutiert"
++#: ../src/MyTubeSearch.py:218
++#: ../src/plugin.py:109
++msgid "Poland"
++msgstr "Polen"
+-msgid "Most linked"
+-msgstr "Am meisten verlinkt"
++#: ../src/MyTubeSearch.py:219
++#: ../src/plugin.py:110
++msgid "Russia"
++msgstr "Russland"
+-msgid "Most popular"
+-msgstr "Beliebteste Videos"
++#: ../src/MyTubeSearch.py:220
++#: ../src/plugin.py:111
++msgid "South Korea"
++msgstr "Süd Korea"
+-msgid "Most recent"
+-msgstr "Neueste Videos"
++#: ../src/MyTubeSearch.py:221
++#: ../src/plugin.py:112
++msgid "Spain"
++msgstr "Spanien"
+-msgid "Most responded"
+-msgstr "Meiste Antworten"
++#: ../src/MyTubeSearch.py:222
++#: ../src/plugin.py:113
++msgid "Sweden"
++msgstr "Schweden"
+-msgid "Most viewed"
+-msgstr "Meistgesehen"
++#: ../src/MyTubeSearch.py:223
++#: ../src/plugin.py:114
++msgid "Taiwan"
++msgstr "Taiwan"
+-msgid "Music"
+-msgstr "Musik"
++#: ../src/MyTubeSearch.py:224
++#: ../src/plugin.py:115
++msgid "United States"
++msgstr "USA"
+-msgid "My TubePlayer"
+-msgstr "MyTube Player"
++#: ../src/MyTubeSearch.py:228
++#: ../src/plugin.py:119
++msgid "Ascending"
++msgstr "Aufsteigend"
+-msgid "MyTube Settings"
+-msgstr "MyTube Einstellungen"
++#: ../src/MyTubeSearch.py:229
++#: ../src/plugin.py:120
++msgid "Descending"
++msgstr "Absteigend"
+-msgid "MyTubePlayer"
+-msgstr "MyTube Player"
++#: ../src/MyTubeSearch.py:237
++#: ../src/plugin.py:128
++#: ../src/plugin.py:790
++msgid "HD videos"
++msgstr "HD Videos"
+-msgid "MyTubePlayer Help"
+-msgstr "MyTube Player Hilfe"
++#: ../src/MyTubeSearch.py:238
++#: ../src/plugin.py:129
++#: ../src/plugin.py:794
++msgid "Most viewed"
++msgstr "Meistgesehen"
+-msgid "MyTubePlayer active video downloads"
+-msgstr "aktive Video downloads"
++#: ../src/MyTubeSearch.py:239
++#: ../src/plugin.py:130
++#: ../src/plugin.py:792
++msgid "Top rated"
++msgstr "Beste Bewertung"
+-msgid "MyTubePlayer settings"
+-msgstr "MyTube Player Einstellungen"
++#: ../src/MyTubeSearch.py:240
++#: ../src/plugin.py:131
++#: ../src/plugin.py:799
++msgid "Recently featured"
++msgstr "Kürzlich featured"
+-msgid "MyTubeVideoInfoScreen"
+-msgstr "MyTubeVideoInfoScreen"
++#: ../src/MyTubeSearch.py:241
++#: ../src/plugin.py:132
++#: ../src/plugin.py:797
++msgid "Most discussed"
++msgstr "Heiß diskutiert"
+-msgid "MyTubeVideohelpScreen"
+-msgstr "MyTubeVideohelpScreen"
++#: ../src/MyTubeSearch.py:242
++#: ../src/plugin.py:133
++#: ../src/plugin.py:793
++msgid "Top favorites"
++msgstr "Top-Favoriten"
+-msgid "New Zealand"
+-msgstr "Neu Seeland"
++#: ../src/MyTubeSearch.py:243
++#: ../src/plugin.py:134
++#: ../src/plugin.py:798
++msgid "Most linked"
++msgstr "Am meisten verlinkt"
+-msgid "News & Politics"
+-msgstr "Nachrichten & Politik"
++#: ../src/MyTubeSearch.py:244
++#: ../src/plugin.py:135
++#: ../src/plugin.py:800
++msgid "Most responded"
++msgstr "Meiste Antworten"
+-msgid "No"
+-msgstr "Nein"
++#: ../src/MyTubeSearch.py:245
++#: ../src/plugin.py:136
++#: ../src/plugin.py:796
++msgid "Most recent"
++msgstr "Neueste Videos"
+-msgid "No playable video found! Stop playing this movie?"
+-msgstr "Kein abspielbares Video gefunden! Wiedergabe beenden?"
++#: ../src/MyTubeSearch.py:249
++#: ../src/MyTubeSearch.py:252
++#: ../src/plugin.py:139
++#: ../src/plugin.py:142
++msgid "Ask user"
++msgstr "Nutzer fragen"
+-msgid "No videos to display"
+-msgstr "Keine Videos zum anzeigen"
++#: ../src/MyTubeSearch.py:249
++#: ../src/MyTubeSearch.py:252
++#: ../src/plugin.py:139
++#: ../src/plugin.py:142
++msgid "Return to movie list"
++msgstr "Zurück zur Videoliste"
+-msgid "No, but play video again"
+-msgstr "Nein, aber Video noch mal abspielen"
++#: ../src/MyTubeSearch.py:249
++#: ../src/plugin.py:139
++msgid "Play next video"
++msgstr "nächstes Video"
+-msgid "No, but switch to video entries."
+-msgstr "Nein, aber zu den Videos zurück."
++#: ../src/MyTubeSearch.py:249
++#: ../src/plugin.py:139
++msgid "Play video again"
++msgstr "Video noch mal abspielen"
+-msgid "No, but switch to video search."
+-msgstr "Nein, aber zur Videosuche zurück"
++#: ../src/MyTubeSearch.py:314
++msgid " Results"
++msgstr " Ergebnisse"
+-msgid "Nonprofits & Activism"
+-msgstr "Non-Profit"
++#: ../src/MyTubeSearch.py:398
++#: ../src/MyTubeSearch.py:562
++#: ../src/plugin.py:281
++#: ../src/plugin.py:1280
++#: ../src/plugin.py:1466
++msgid "Close"
++msgstr "Schließen"
+-msgid "Not fetching feed entries"
+-msgstr "Lade keine feed Einträge"
++#: ../src/MyTubeSearch.py:399
++msgid "Save"
++msgstr "Speichern"
+-msgid "People & Blogs"
+-msgstr "Leute & Blogs"
++#: ../src/MyTubeSearch.py:412
++#: ../src/MyTubeSearch.py:415
++msgid "MyTubePlayer settings"
++msgstr "MyTube Player Einstellungen"
+-msgid "Pets & Animals"
+-msgstr "Tiere"
++#: ../src/MyTubeSearch.py:419
++msgid "Display search results by:"
++msgstr "Suchergebnisse anzeigen:"
+-msgid "Play YouTube movies"
+-msgstr "YouTube Videos abspielen"
++#: ../src/MyTubeSearch.py:420
++msgid "Search restricted content:"
++msgstr "Suche ohne Altersbeschränkung:"
+-msgid "Play next video"
+-msgstr "nächstes Video"
++#: ../src/MyTubeSearch.py:421
++msgid "Search category:"
++msgstr "Such-Kategorie:"
+-msgid "Play video again"
+-msgstr "Video noch mal abspielen"
++#: ../src/MyTubeSearch.py:422
++msgid "Search region:"
++msgstr "Such-Region:"
+-msgid "Please enter your search term."
+-msgstr "Bitte geben Sie einen Suchbegriff ein."
++#: ../src/MyTubeSearch.py:423
++msgid "Load feed on startup:"
++msgstr "Feed beim Starten laden:"
+-msgid "Please select a standard feed or try searching for videos."
+-msgstr "Wählen Sie einen Standard Feed oder suchen Sie nach Videos."
++#: ../src/MyTubeSearch.py:426
++msgid "Start with following feed:"
++msgstr "Beginne mit folgendem feed:"
+-msgid "Poland"
+-msgstr "Polen"
++#: ../src/MyTubeSearch.py:427
++msgid "Videoplayer stop/exit behavior:"
++msgstr "Verhalten beim Drücken der STOPP/EXIT-Taste:"
+-msgid "Published"
+-msgstr "Veröffentlicht"
++#: ../src/MyTubeSearch.py:428
++msgid "Videobrowser exit behavior:"
++msgstr "Verhalten nach Verlassen der Videoliste:"
+-msgid "Rating"
+-msgstr "Bewertung"
++#: ../src/MyTubeSearch.py:435
++msgid "Download location"
++msgstr "Download Verzeichnis:"
+-msgid "Ratings: "
+-msgstr "Bewertungen: "
++#: ../src/MyTubeSearch.py:438
++msgid "Clear history on Exit:"
++msgstr "Verlauf beim Verlassen löschen:"
+-msgid "Really quit MyTube Player?"
+-msgstr "MyTube Player wirklich beenden?"
++#: ../src/MyTubeSearch.py:459
++msgid "Choose target folder"
++msgstr "Wähle Zielverzeichnis"
+-msgid "Recently featured"
+-msgstr "Kürzlich featured"
++#: ../src/MyTubeSearch.py:575
++#: ../src/MyTubeSearch.py:591
++msgid "MyTubePlayer active video downloads"
++msgstr "aktive Video downloads"
+-msgid "Related video entries."
+-msgstr "Ähnliche Videos"
++#: ../src/plugin.py:271
++msgid ""
++"Welcome to the MyTube Youtube Player.\n"
++"\n"
++"While entering your search term(s) you will get suggestions displayed matching your search term.\n"
++"\n"
++"To select a suggestion press DOWN on your remote, select the desired result and press OK on your remote to start the search.\n"
++"\n"
++"Press exit to get back to the input field."
++msgstr ""
++"Herzlich Willkommen beim MyTube YouTube Player.\n"
++"\n"
++"Während der Eingabe Ihres Suchwortes erhalten Sie passende Vorschläge zu Ihrer Sucheingabe.\n"
++"\n"
++"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"
++"\n"
++"Um zur Such-Eingabemaske zurück zu gelangen, drücken Sie die EXIT-Taste."
+-msgid "Relevance"
+-msgstr "Relevanz"
++#: ../src/plugin.py:272
++msgid ""
++"Welcome to the MyTube Youtube Player.\n"
++"\n"
++"Use the Bouqet+ button to navigate to the search field and the Bouqet- to navigate to the video entries.\n"
++"\n"
++"To play a movie just press OK on your remote control.\n"
++"\n"
++"Press info to see the movie description.\n"
++"\n"
++"Press the Menu button for additional options.\n"
++"\n"
++"The Help button shows this help again."
++msgstr ""
++"Herzlich Willkommen beim MyTube YouTube Player.\n"
++"\n"
++"Nutzen Sie die Bouqet+ Taste um zur Sucheingabe zu gelangen und die Bouqet- Taste für die Video Einträge.\n"
++"\n"
++"Um ein Video abzuspielen drücken Sie die OK-Taste auf Ihrer Fernbedienung.\n"
++"\n"
++"Mit der Info-Taste erhalten Sie die erweiterte Beschreibung zu einem Video.\n"
++"\n"
++"Für weitere Einstellungen drücken Sie die Menü-Taste.\n"
++"\n"
++"Um diese Hilfe erneut anzuzeigen, drücken Sie die Hilfe-Taste."
+-msgid "Response video entries."
+-msgstr "Video Antworten"
++#: ../src/plugin.py:282
++msgid "Std. Feeds"
++msgstr "Std. Feeds"
+-msgid "Return to movie list"
+-msgstr "Zurück zur Videoliste"
++#: ../src/plugin.py:283
++msgid "History"
++msgstr "Verlauf"
+-msgid "Russia"
+-msgstr "Russland"
++#: ../src/plugin.py:398
++#: ../src/plugin.py:422
++#: ../src/plugin.py:464
++msgid "Genuine Dreambox validation failed!"
++msgstr "Prüfung auf Original-Dreambox gescheitert!"
+-msgid "Save"
+-msgstr "Speichern"
++#: ../src/plugin.py:398
++#: ../src/plugin.py:422
++#: ../src/plugin.py:464
++msgid "Verify your Dreambox authenticity by running the genuine dreambox plugin!"
++msgstr "Bitte mit dem \"Genuine Dreambox Plugin\" auf Echtheit prüfen!"
+-msgid "Science & Technology"
+-msgstr "Wissenschaft & Technik"
++#: ../src/plugin.py:417
++#: ../src/plugin.py:476
++msgid "Fetching feed entries"
++msgstr "Lade feeds"
++#: ../src/plugin.py:417
++#: ../src/plugin.py:476
++msgid "Trying to download the Youtube feed entries. Please wait..."
++msgstr "YouTube feeds werden geladen, bitte warten..."
++
++#: ../src/plugin.py:434
++msgid "MyTubePlayer"
++msgstr "MyTube Player"
++
++#: ../src/plugin.py:438
+ msgid "Search Term(s)"
+ msgstr "Suchwort(e)"
+-msgid "Search category:"
+-msgstr "Such-Kategorie:"
++#: ../src/plugin.py:478
++msgid "Fetching search entries"
++msgstr "Lade Suchergebnisse"
+-msgid "Search region:"
+-msgstr "Such-Region:"
++#: ../src/plugin.py:478
++msgid "Trying to download the Youtube search results. Please wait..."
++msgstr "YouTube Suchergebnisse werden geladen, bitte warten..."
+-msgid "Search restricted content:"
+-msgstr "Suche ohne Altersbeschränkung:"
++#: ../src/plugin.py:480
++msgid "An error occured."
++msgstr "Es ist ein Fehler aufgetreten."
+-msgid "Select new feed to view."
+-msgstr "Neuen feed auswählen"
++#: ../src/plugin.py:480
++msgid "There was an error getting the feed entries. Please try again."
++msgstr "Fehler beim Laden der Suchergebnisse. Noch mal probieren."
+-msgid "Select your choice."
+-msgstr "Treffen Sie Ihre Wahl."
++#: ../src/plugin.py:483
++msgid "No videos to display"
++msgstr "Keine Videos zum anzeigen"
+-msgid "Short Movies"
+-msgstr "Kurzvideos"
++#: ../src/plugin.py:483
++msgid "Please select a standard feed or try searching for videos."
++msgstr "Wählen Sie einen Standard Feed oder suchen Sie nach Videos."
+-msgid "Sorry, video is not available!"
+-msgstr "Video nicht verfügbar!"
++#: ../src/plugin.py:485
++msgid "Not fetching feed entries"
++msgstr "Lade keine feed Einträge"
+-msgid "South Korea"
+-msgstr "Süd Korea"
++#: ../src/plugin.py:485
++msgid "Please enter your search term."
++msgstr "Bitte geben Sie einen Suchbegriff ein."
+-msgid "Spain"
+-msgstr "Spanien"
++#: ../src/plugin.py:504
++#: ../src/plugin.py:506
++#: ../src/plugin.py:513
++msgid "MyTubePlayer Help"
++msgstr "MyTube Player Hilfe"
+-msgid "Sports"
+-msgstr "Sport"
++#: ../src/plugin.py:525
++#: ../src/plugin.py:531
++msgid "MyTube Settings"
++msgstr "MyTube Einstellungen"
+-msgid "Start with following feed:"
+-msgstr "Beginne mit folgendem feed:"
++#: ../src/plugin.py:528
++#: ../src/plugin.py:543
++msgid "Select your choice."
++msgstr "Treffen Sie Ihre Wahl."
+-msgid "Std. Feeds"
+-msgstr "Std. Feeds"
++#: ../src/plugin.py:533
++msgid "View related videos"
++msgstr "Ähnliche Videos"
+-msgid "Stop playing this movie?"
+-msgstr "Wiedergabe beenden?"
++#: ../src/plugin.py:534
++msgid "View response videos"
++msgstr "Video Antworten"
+-msgid "Sweden"
+-msgstr "Schweden"
++#: ../src/plugin.py:538
++msgid "Download Video"
++msgstr "Video runterladen"
+-msgid "Tags: "
+-msgstr "Tags: "
++#: ../src/plugin.py:539
++msgid "View active downloads"
++msgstr "Aktive Downloads anzeigen"
+-msgid "Taiwan"
+-msgstr "Taiwan"
++#: ../src/plugin.py:577
++msgid "Enter your search term(s)"
++msgstr "Suchbegriff eingeben"
+-msgid "There was an error getting the feed entries. Please try again."
+-msgstr "Fehler beim Laden der Suchergebnisse. Noch mal probieren."
++#: ../src/plugin.py:621
++msgid "No, but switch to video entries."
++msgstr "Nein, aber zu den Videos zurück."
+-msgid "This Month"
+-msgstr "Diesen Monat"
++#: ../src/plugin.py:627
++msgid "No, but switch to video search."
++msgstr "Nein, aber zur Videosuche zurück"
+-msgid "This Week"
+-msgstr "Diese Woche"
++#: ../src/plugin.py:629
++msgid "Really quit MyTube Player?"
++msgstr "MyTube Player wirklich beenden?"
+-msgid "This is the help screen. Feed me with something to display."
+-msgstr ""
++#: ../src/plugin.py:722
++msgid "Sorry, video is not available!"
++msgstr "Video nicht verfügbar!"
+-msgid "Today"
+-msgstr "Heute"
++#: ../src/plugin.py:757
++msgid "Do you want to see more entries?"
++msgstr "Weitere Videos?"
+-msgid "Top favorites"
+-msgstr "Top-Favoriten"
++#: ../src/plugin.py:795
++msgid "Most popular"
++msgstr "Beliebteste Videos"
+-msgid "Top rated"
+-msgstr "Beste Bewertung"
++#: ../src/plugin.py:802
++msgid "Select new feed to view."
++msgstr "Neuen feed auswählen"
+-msgid "Travel & Events"
+-msgstr "Reisen & Events"
++#: ../src/plugin.py:968
++msgid "More video entries."
++msgstr "Weitere Video Einträge."
+-msgid "Trying to download the Youtube feed entries. Please wait..."
+-msgstr "YouTube feeds werden geladen, bitte warten..."
++#: ../src/plugin.py:976
++msgid "Related video entries."
++msgstr "Ähnliche Videos"
+-msgid "Trying to download the Youtube search results. Please wait..."
+-msgstr "YouTube Suchergebnisse werden geladen, bitte warten..."
++#: ../src/plugin.py:984
++msgid "Response video entries."
++msgstr "Video Antworten"
+-msgid "United States"
+-msgstr "USA"
++#: ../src/plugin.py:1103
++#: ../src/plugin.py:1341
++msgid "Added: "
++msgstr "Hinzugefügt: "
+-msgid "Videobrowser exit behavior:"
+-msgstr "Verhalten nach Verlassen der Videoliste:"
++#: ../src/plugin.py:1103
++#: ../src/plugin.py:1344
++msgid "Views: "
++msgstr "Aufrufe: "
+-msgid "Videoplayer stop/exit behavior:"
+-msgstr "Verhalten beim Drücken der STOPP/EXIT-Taste:"
++#: ../src/plugin.py:1103
++#: ../src/plugin.py:1335
++msgid "Duration: "
++msgstr "Dauer: "
+-msgid "View Count"
+-msgstr "Aufrufe"
++#: ../src/plugin.py:1103
++msgid "Ratings: "
++msgstr "Bewertungen: "
+-msgid "View active downloads"
+-msgstr "Aktive Downloads anzeigen"
++#: ../src/plugin.py:1309
++msgid "Downloading screenshots. Please wait..."
++msgstr "Bilder werden geladen. Bitte warten..."
+-msgid "View related videos"
+-msgstr "Ähnliche Videos"
++#: ../src/plugin.py:1338
++msgid "Author: "
++msgstr "Autor: "
+-msgid "View response videos"
+-msgstr "Video Antworten"
++#: ../src/plugin.py:1347
++msgid "Tags: "
++msgstr "Tags: "
+-msgid "Views: "
+-msgstr "Aufrufe: "
++#: ../src/plugin.py:1350
++msgid "MyTubeVideoInfoScreen"
++msgstr "MyTubeVideoInfoScreen"
+-msgid ""
+-"Welcome to the MyTube Youtube Player.\n"
+-"\n"
+-"Use the Bouqet+ button to navigate to the search field and the Bouqet- to "
+-"navigate to the video entries.\n"
+-"\n"
+-"To play a movie just press OK on your remote control.\n"
+-"\n"
+-"Press info to see the movie description.\n"
+-"\n"
+-"Press the Menu button for additional options.\n"
+-"\n"
+-"The Help button shows this help again."
+-msgstr ""
+-"Herzlich Willkommen beim MyTube YouTube Player.\n"
+-"\n"
+-"Nutzen Sie die Bouqet+ Taste um zur Sucheingabe zu gelangen und die Bouqet- "
+-"Taste für die Video Einträge.\n"
+-"\n"
+-"Um ein Video abzuspielen drücken Sie die OK-Taste auf Ihrer Fernbedienung.\n"
+-"\n"
+-"Mit der Info-Taste erhalten Sie die erweiterte Beschreibung zu einem Video.\n"
+-"\n"
+-"Für weitere Einstellungen drücken Sie die Menü-Taste.\n"
+-"\n"
+-"Um diese Hilfe erneut anzuzeigen, drücken Sie die Hilfe-Taste."
++#: ../src/plugin.py:1484
++msgid "Help"
++msgstr "Hilfe"
+-msgid ""
+-"Welcome to the MyTube Youtube Player.\n"
+-"\n"
+-"While entering your search term(s) you will get suggestions displayed "
+-"matching your search term.\n"
+-"\n"
+-"To select a suggestion press DOWN on your remote, select the desired result "
+-"and press OK on your remote to start the search.\n"
+-"\n"
+-"Press exit to get back to the input field."
+-msgstr ""
+-"Herzlich Willkommen beim MyTube YouTube Player.\n"
+-"\n"
+-"Während der Eingabe Ihres Suchwortes erhalten Sie passende Vorschläge zu "
+-"Ihrer Sucheingabe.\n"
+-"\n"
+-"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"
+-"\n"
+-"Um zur Such-Eingabemaske zurück zu gelangen drücken Sie die EXIT-Taste."
++#: ../src/plugin.py:1488
++msgid "This is the help screen. Feed me with something to display."
++msgstr "Dies ist die MyTube Hilfe. Bitte ausfüllen."
+-msgid "Yes"
+-msgstr "Ja"
++#: ../src/plugin.py:1493
++msgid "MyTubeVideohelpScreen"
++msgstr "MyTubeVideohelpScreen"
++
++#: ../src/plugin.py:1744
++msgid "No, but play video again"
++msgstr "Nein, aber Video noch mal abspielen"
++#: ../src/plugin.py:1745
+ msgid "Yes, but play next video"
+ msgstr "Ja, aber nächstes Video abspielen"
++#: ../src/plugin.py:1746
+ msgid "Yes, but play previous video"
+ msgstr "Ja, aber vorheriges Video abspielen"
++#: ../src/plugin.py:1749
++msgid "Stop playing this movie?"
++msgstr "Wiedergabe beenden?"
++
++#: ../src/plugin.py:1751
++msgid "No playable video found! Stop playing this movie?"
++msgstr "Kein abspielbares Video gefunden! Wiedergabe beenden?"
++
++#: ../src/plugin.py:1797
++msgid "My TubePlayer"
++msgstr "MyTube Player"
++
++#: ../src/plugin.py:1798
++msgid "Play YouTube movies"
++msgstr "YouTube Videos abspielen"
++
+ #~ msgid "View Downloads"
+ #~ msgstr "Downloads anzeigen"
+diff --git a/mytube/src/MyTubeSearch.py b/mytube/src/MyTubeSearch.py
+index be63669..a1a324c 100755
+--- a/mytube/src/MyTubeSearch.py
++++ b/mytube/src/MyTubeSearch.py
+@@ -1,33 +1,28 @@
++from enigma import eListboxPythonMultiContent, RT_HALIGN_LEFT, RT_HALIGN_RIGHT, gFont, eTimer
+ from MyTubeService import GoogleSuggestions
+ from Screens.Screen import Screen
+ from Screens.LocationBox import MovieLocationBox
+-from Components.config import config, Config, ConfigSelection, ConfigText, getConfigListEntry, ConfigSubsection, ConfigYesNo, ConfigIP, ConfigNumber,ConfigLocations
++from Components.config import config, ConfigText, getConfigListEntry
++from Components.config import KEY_DELETE, KEY_BACKSPACE, KEY_ASCII, KEY_TIMEOUT
+ from Components.ConfigList import ConfigListScreen
+-from Components.config import KEY_DELETE, KEY_BACKSPACE, KEY_LEFT, KEY_RIGHT, KEY_HOME, KEY_END, KEY_TOGGLEOW, KEY_ASCII, KEY_TIMEOUT
+ from Components.ActionMap import ActionMap
+ from Components.Button import Button
+ from Components.Label import Label
+-from Components.ScrollLabel import ScrollLabel
+ from Components.Sources.List import List
+-from Components.Pixmap import Pixmap
+-from Components.MultiContent import MultiContentEntryText, MultiContentEntryPixmapAlphaTest
+-from Components.Task import Task, Job, job_manager
+-from enigma import eListboxPythonMultiContent, RT_HALIGN_LEFT, RT_HALIGN_RIGHT, gFont, eListbox,ePoint,eTimer
++from Components.MultiContent import MultiContentEntryText 
+ from Components.Task import job_manager
+-from Tools.Directories import pathExists, fileExists, resolveFilename, SCOPE_HDD
++from Tools.Directories import resolveFilename, SCOPE_HDD
++
+ from threading import Thread
+ from threading import Condition
+ from xml.etree.cElementTree import parse as cet_parse
+ from StringIO import StringIO
+-
+-
+-import urllib
++#import urllib
+ from urllib import FancyURLopener
+ class MyOpener(FancyURLopener):
+       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'
+-
+ class ConfigTextWithGoogleSuggestions(ConfigText):
+       class SuggestionsThread(Thread):
+               def __init__(self, suggestionsService):
+@@ -151,122 +146,14 @@ class ConfigTextWithGoogleSuggestions(ConfigText):
+               if self.suggestionsWindow is not None:
+                       self.suggestionsWindow.enableSelection(value)
+-
+-config.plugins.mytube = ConfigSubsection()
+-config.plugins.mytube.search = ConfigSubsection()
+-
+-config.plugins.mytube.search.searchTerm = ConfigTextWithGoogleSuggestions("", False, threaded = True)
+-config.plugins.mytube.search.orderBy = ConfigSelection(
+-                              [
+-                               ("relevance", _("Relevance")),
+-                               ("viewCount", _("View Count")),
+-                               ("published", _("Published")),
+-                               ("rating", _("Rating"))
+-                              ], "relevance")
+-config.plugins.mytube.search.time = ConfigSelection(
+-                              [
+-                               ("all_time", _("All Time")),
+-                               ("this_month", _("This Month")),
+-                               ("this_week", _("This Week")),
+-                               ("today", _("Today"))
+-                              ], "all_time")
+-config.plugins.mytube.search.racy = ConfigSelection(
+-                              [
+-                               ("include", _("Yes")),
+-                               ("exclude", _("No"))
+-                              ], "include")
+-config.plugins.mytube.search.categories = ConfigSelection(
+-                              [
+-                               (None, _("All")),
+-                               ("Film", _("Film & Animation")),
+-                               ("Autos", _("Autos & Vehicles")),
+-                               ("Music", _("Music")),
+-                               ("Animals", _("Pets & Animals")),
+-                               ("Sports", _("Sports")),
+-                               ("Travel", _("Travel & Events")),
+-                               ("Shortmov", _("Short Movies")),
+-                               ("Games", _("Gaming")),
+-                               ("Comedy", _("Comedy")),
+-                               ("People", _("People & Blogs")),
+-                               ("News", _("News & Politics")),
+-                               ("Entertainment", _("Entertainment")),
+-                               ("Education", _("Education")),
+-                               ("Howto", _("Howto & Style")),
+-                               ("Nonprofit", _("Nonprofits & Activism")),
+-                               ("Tech", _("Science & Technology"))
+-                              ], None)
+-config.plugins.mytube.search.lr = ConfigSelection(
+-                              [
+-                               (None, _("All")),
+-                               ("au", _("Australia")),
+-                               ("br", _("Brazil")),                            
+-                               ("ca", _("Canada")),
+-                               ("cz", _("Czech Republic")),
+-                               ("fr", _("France")),
+-                               ("de", _("Germany")),
+-                               ("gb", _("Great Britain")),
+-                               ("au", _("Australia")),
+-                               ("nl", _("Holland")),
+-                               ("hk", _("Hong Kong")),
+-                               ("in", _("India")),
+-                               ("ie", _("Ireland")),
+-                               ("il", _("Israel")),
+-                               ("it", _("Italy")),
+-                               ("jp", _("Japan")),
+-                               ("mx", _("Mexico")),
+-                               ("nz", _("New Zealand")),
+-                               ("pl", _("Poland")),
+-                               ("ru", _("Russia")),
+-                               ("kr", _("South Korea")),
+-                               ("es", _("Spain")),
+-                               ("se", _("Sweden")),
+-                               ("tw", _("Taiwan")),
+-                               ("us", _("United States")) 
+-                              ], None)
+-config.plugins.mytube.search.sortOrder = ConfigSelection(
+-                              [
+-                               ("ascending", _("Ascending")),
+-                               ("descending", _("Descending"))
+-                              ], "ascending")
+-
+-config.plugins.mytube.general = ConfigSubsection()
+-config.plugins.mytube.general.showHelpOnOpen = ConfigYesNo(default = True)
+-config.plugins.mytube.general.loadFeedOnOpen = ConfigYesNo(default = True)
+-config.plugins.mytube.general.startFeed = ConfigSelection(
+-                              [
+-                               ("hd", _("HD videos")),
+-                               ("most_viewed", _("Most viewed")),
+-                               ("top_rated", _("Top rated")),
+-                               ("recently_featured", _("Recently featured")),
+-                               ("most_discussed", _("Most discussed")),
+-                               ("top_favorites", _("Top favorites")),
+-                               ("most_linked", _("Most linked")),
+-                               ("most_responded", _("Most responded")),
+-                               ("most_recent", _("Most recent"))
+-                              ], "most_viewed")
+-
+-config.plugins.mytube.general.on_movie_stop = ConfigSelection(default = "ask", choices = [
+-      ("ask", _("Ask user")), ("quit", _("Return to movie list")), ("playnext", _("Play next video")), ("playagain", _("Play video again")) ])
+-
+-config.plugins.mytube.general.on_exit = ConfigSelection(default = "ask", choices = [
+-      ("ask", _("Ask user")), ("quit", _("Return to movie list"))])
+-
+-
+ default = resolveFilename(SCOPE_HDD)
+ tmp = config.movielist.videodirs.value
+ if default not in tmp:
+       tmp.append(default)
+-config.plugins.mytube.general.videodir = ConfigSelection(default = default, choices = tmp)
+-config.plugins.mytube.general.history = ConfigText(default="")
+-config.plugins.mytube.general.clearHistoryOnClose = ConfigYesNo(default = False)
+-
+-#config.plugins.mytube.general.useHTTPProxy = ConfigYesNo(default = False)
+-#config.plugins.mytube.general.ProxyIP = ConfigIP(default=[0,0,0,0])
+-#config.plugins.mytube.general.ProxyPort = ConfigNumber(default=8080)
+ class MyTubeSuggestionsListScreen(Screen):
+       skin = """
+-              <screen name="MyTubeSuggestionsListScreen" position="60,93" zPosition="6" size="610,160" flags="wfNoBorder" >
++              <screen name="MyTubeSuggestionsListScreen" title="MyTube - Search" position="60,93" zPosition="6" size="610,160" flags="wfNoBorder" >
+                       <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"/>
+                       <widget source="suggestionslist" render="Listbox" position="10,5" zPosition="7" size="580,150" scrollbarMode="showOnDemand" transparent="1" >
+                               <convert type="TemplatedMultiContent">
+@@ -366,7 +253,7 @@ class MyTubeSuggestionsListScreen(Screen):
+ class MyTubeSettingsScreen(Screen, ConfigListScreen):
+       skin = """
+-              <screen name="MyTubeSettingsScreen" flags="wfNoBorder" position="0,0" size="720,576" title="MyTubePlayerMainScreen..." >
++              <screen name="MyTubeSettingsScreen" flags="wfNoBorder" position="0,0" size="720,576" title="MyTube - Settings" >
+                       <ePixmap position="0,0" zPosition="-1" size="720,576" pixmap="~/mytubemain_bg.png" alphatest="on" transparent="1" backgroundColor="transparent"/>
+                       <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" />
+                       <widget name="config" zPosition="2" position="60,120" size="610,370" scrollbarMode="showOnDemand" transparent="1" />
+@@ -524,7 +411,7 @@ class MyTubeSettingsScreen(Screen, ConfigListScreen):
+ class MyTubeTasksScreen(Screen):
+       skin = """
+-              <screen name="MyTubeTasksScreen" flags="wfNoBorder" position="0,0" size="720,576" title="MyTubePlayerMainScreen..." >
++              <screen name="MyTubeTasksScreen" flags="wfNoBorder" position="0,0" size="720,576" title="MyTube - Tasks" >
+                       <ePixmap position="0,0" zPosition="-1" size="720,576" pixmap="~/mytubemain_bg.png" alphatest="on" transparent="1" backgroundColor="transparent"/>
+                       <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" />
+                       <widget source="tasklist" render="Listbox" position="60,120" size="610,370" zPosition="7" scrollbarMode="showOnDemand" transparent="1" >
+@@ -610,7 +497,7 @@ class MyTubeTasksScreen(Screen):
+ class MyTubeHistoryScreen(Screen):
+       skin = """
+-              <screen name="MyTubeHistoryScreen" position="60,93" zPosition="6" size="610,160" flags="wfNoBorder" >
++              <screen name="MyTubeHistoryScreen" position="60,93" zPosition="6" size="610,160" flags="wfNoBorder" title="MyTube - History">
+                       <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"/>
+                       <widget source="historylist" render="Listbox" position="10,5" zPosition="7" size="580,150" scrollbarMode="showOnDemand" transparent="1" >
+                               <convert type="TemplatedMultiContent">
+diff --git a/mytube/src/MyTubeService.py b/mytube/src/MyTubeService.py
+index 246575c..fc3dafd 100755
+--- a/mytube/src/MyTubeService.py
++++ b/mytube/src/MyTubeService.py
+@@ -1,23 +1,24 @@
+ # -*- coding: iso-8859-1 -*-
+-from __init__ import bin2long, long2bin, rsa_pub1024, decrypt_block
++from enigma import ePythonMessagePump
++
++from __init__ import decrypt_block
++from ThreadQueue import ThreadQueue
+ import gdata.youtube
+ import gdata.youtube.service
+ from gdata.service import BadAuthentication
+-from Tools.LoadPixmap import LoadPixmap
+-from Components.config import config, Config, ConfigSelection, ConfigText, getConfigListEntry, ConfigSubsection, ConfigYesNo, ConfigIP, ConfigNumber
+-from Components.ConfigList import ConfigListScreen
+-from Components.config import KEY_DELETE, KEY_BACKSPACE, KEY_LEFT, KEY_RIGHT, KEY_HOME, KEY_END, KEY_TOGGLEOW, KEY_ASCII, KEY_TIMEOUT
+ from twisted.web import client
+ from twisted.internet import reactor
+-from urllib2 import Request, URLError, HTTPError, urlopen as urlopen2
+-from socket import gaierror,error
+-import re, os, sys, socket
++from urllib2 import Request, URLError, urlopen as urlopen2
++from socket import gaierror, error
++import os, socket
+ from urllib import quote, unquote_plus, unquote
+-import cookielib
+-from httplib import HTTPConnection,CannotSendRequest,BadStatusLine,HTTPException
+-HTTPConnection.debuglevel = 1
++from httplib import HTTPConnection, CannotSendRequest, BadStatusLine, HTTPException
++
+ from urlparse import parse_qs
++from threading import Thread
++
++HTTPConnection.debuglevel = 1
+ def validate_cert(cert, key):
+       buf = decrypt_block(cert[8:], key) 
+@@ -50,7 +51,7 @@ std_headers = {
+ class GoogleSuggestions():
+       def __init__(self, callback, ds = None, json = None, hl = None):
+-              self.callback = callback
++              self.gotFeed = callback
+               self.conn = HTTPConnection("google.com")
+               #GET /complete/search?output=toolbar&ds=yt&hl=en&jsonp=self.gotSuggestions&q=s
+               self.prepQuerry = "/complete/search?output=toolbar&"
+@@ -63,7 +64,7 @@ class GoogleSuggestions():
+               self.prepQuerry = self.prepQuerry + "jsonp=self.gotSuggestions&q="
+       def gotSuggestions(self, suggestslist):
+-              self.callback(suggestslist)
++              self.gotFeed(suggestslist)
+       def getSuggestions(self, querryString):
+               if querryString is not "":
+@@ -72,22 +73,22 @@ class GoogleSuggestions():
+                               self.conn.request("GET", querry)
+                       except (CannotSendRequest, gaierror, error):
+                               print "[MyTube]  Can not send request for suggestions"
+-                              self.callback(None)
++                              self.gotFeed(None)
+                       else:
+                               try:
+                                       response = self.conn.getresponse()
+                               except BadStatusLine:
+                                       print "[MyTube]  Can not get a response from google"
+-                                      self.callback(None)
++                                      self.gotFeed(None)
+                               else:
+                                       if response.status == 200:
+                                               data = response.read()
+                                               self.gotSuggestions(data)
+                                       else:
+-                                              self.callback(None)
++                                              self.gotFeed(None)
+                       self.conn.close()
+               else:
+-                      self.callback(None)
++                      self.gotFeed(None)
+ class MyTubeFeedEntry():
+@@ -224,16 +225,16 @@ class MyTubeFeedEntry():
+                       try:
+                               infopage = urlopen2(request).read()
+                               videoinfo = parse_qs(infopage)
+-                              if 'fmt_url_map' in videoinfo:
++                              if ('url_encoded_fmt_stream_map' or 'fmt_url_map') in videoinfo:
+                                       break
+                       except (URLError, HTTPException, socket.error), err:
+                               print "[MyTube] Error: unable to download video infopage",str(err)
+                               return video_url
+-              if 'fmt_url_map' not in videoinfo:
++              if ('url_encoded_fmt_stream_map' or 'fmt_url_map') not in videoinfo:
+                       # Attempt to see if YouTube has issued an error message
+                       if 'reason' not in videoinfo:
+-                              print '[MyTube] Error: unable to extract "fmt_url_map" parameter for unknown reason'
++                              print '[MyTube] Error: unable to extract "fmt_url_map" or "url_encoded_fmt_stream_map" parameter for unknown reason'
+                       else:
+                               reason = unquote_plus(videoinfo['reason'][0])
+                               print '[MyTube] Error: YouTube said: %s' % reason.decode('utf-8')
+@@ -241,22 +242,30 @@ class MyTubeFeedEntry():
+               video_fmt_map = {}
+               fmt_infomap = {}
+-              tmp_fmtUrlDATA = videoinfo['fmt_url_map'][0].split(',')
++              if videoinfo.has_key('url_encoded_fmt_stream_map'):
++                      tmp_fmtUrlDATA = videoinfo['url_encoded_fmt_stream_map'][0].split(',url=')
++              else:
++                      tmp_fmtUrlDATA = videoinfo['fmt_url_map'][0].split(',')
+               for fmtstring in tmp_fmtUrlDATA:
+-                      (fmtid,fmturl) = fmtstring.split('|')
++                      if videoinfo.has_key('url_encoded_fmt_stream_map'):
++                              (fmturl, fmtid) = fmtstring.split('&itag=')
++                              if fmturl.find("url=") !=-1:
++                                      fmturl = fmturl.replace("url=","")
++                      else:
++                              (fmtid,fmturl) = fmtstring.split('|')
+                       if VIDEO_FMT_PRIORITY_MAP.has_key(fmtid):
+                               video_fmt_map[VIDEO_FMT_PRIORITY_MAP[fmtid]] = { 'fmtid': fmtid, 'fmturl': unquote_plus(fmturl) }
+                       fmt_infomap[int(fmtid)] = unquote_plus(fmturl)
+               print "[MyTube] got",sorted(fmt_infomap.iterkeys())
+               if video_fmt_map and len(video_fmt_map):
+                       print "[MyTube] found best available video format:",video_fmt_map[sorted(video_fmt_map.iterkeys())[0]]['fmtid']
+-                      video_url = video_fmt_map[sorted(video_fmt_map.iterkeys())[0]]['fmturl']
++                      video_url = video_fmt_map[sorted(video_fmt_map.iterkeys())[0]]['fmturl'].split(';')[0]
+                       print "[MyTube] found best available video url:",video_url
+               
+               return video_url
+       
+       def getRelatedVideos(self):
+-              print "[MyTubeFeedEntry] getResponseVideos()"
++              print "[MyTubeFeedEntry] getRelatedVideos()"
+               for link in self.entry.link:
+                       #print "Related link: ", link.rel.endswith
+                       if link.rel.endswith("video.related"):
+@@ -279,13 +288,14 @@ class MyTubePlayerService():
+               print "[MyTube] MyTubePlayerService - init"
+               self.feedentries = []
+               self.feed = None
+-              
++                              
+       def startService(self):
+               print "[MyTube] MyTubePlayerService - startService"
+-              self.yt_service = gdata.youtube.service.YouTubeService()
+-              self.yt_service.developer_key = 'AI39si4AjyvU8GoJGncYzmqMCwelUnqjEMWTFCcUtK-VUzvWygvwPO-sadNwW5tNj9DDCHju3nnJEPvFy4WZZ6hzFYCx8rJ6Mw'
+-              self.yt_service.client_id = 'ytapi-dream-MyTubePlayer-i0kqrebg-0'
+-              self.loggedIn = False
++              self.yt_service = gdata.youtube.service.YouTubeService( 
++                      developer_key = 'AI39si4AjyvU8GoJGncYzmqMCwelUnqjEMWTFCcUtK-VUzvWygvwPO-sadNwW5tNj9DDCHju3nnJEPvFy4WZZ6hzFYCx8rJ6Mw',
++                      client_id = 'ytapi-dream-MyTubePlayer-i0kqrebg-0' 
++              )
++#             self.loggedIn = False
+               #os.environ['http_proxy'] = 'http://169.229.50.12:3128'
+               #proxy = os.environ.get('http_proxy')
+               #print "FOUND ENV PROXY-->",proxy
+@@ -295,23 +305,18 @@ class MyTubePlayerService():
+       def stopService(self):
+               print "[MyTube] MyTubePlayerService - stopService"
+               del self.ytService
+-              self.loggedIn = False
+-
+-      def isLoggedIn(self):
+-              return self.loggedIn
+-      def getFeed(self, url):
++      def getFeed(self, url, callback = None, errorback = None):
+               print "[MyTube] MyTubePlayerService - getFeed:",url
+               self.feedentries = []
+-              self.feed = self.yt_service.GetYouTubeVideoFeed(url)
+-              for entry in self.feed.entry:
+-                      MyFeedEntry = MyTubeFeedEntry(self, entry)
+-                      self.feedentries.append(MyFeedEntry)
+-              return self.feed                        
++              queryThread = YoutubeQueryThread(self.yt_service.GetYouTubeVideoFeed, url, self.gotFeed, self.gotFeedError, callback, errorback)
++              queryThread.start()
++              return queryThread              
+       def search(self, searchTerms, startIndex = 1, maxResults = 25,
+                                       orderby = "relevance", racy = "include", 
+-                                      author = "", lr = "", categories = "", sortOrder = "ascending"):
++                                      author = "", lr = "", categories = "", sortOrder = "ascending", 
++                                      callback = None, errorback = None):
+               print "[MyTube] MyTubePlayerService - search()"
+               self.feedentries = []
+               query = gdata.youtube.service.YouTubeVideoQuery()
+@@ -325,17 +330,24 @@ class MyTubePlayerService():
+                       query.categories = categories
+               query.start_index = startIndex
+               query.max_results = maxResults
+-              try:
+-                      feed = self.yt_service.YouTubeQuery(query)
+-              except gaierror:
+-                      feed = None
++              queryThread = YoutubeQueryThread(self.yt_service.YouTubeQuery, query, self.gotFeed, self.gotFeedError, callback, errorback)
++              queryThread.start()
++              return queryThread      
++      
++      def gotFeed(self, feed, callback):
+               if feed is not None:
+                       self.feed = feed
+                       for entry in self.feed.entry:
+                               MyFeedEntry = MyTubeFeedEntry(self, entry)
+                               self.feedentries.append(MyFeedEntry)
+-              return self.feed                
+-
++              if callback is not None:
++                      callback(self.feed)
++                      
++      def gotFeedError(self, exception, errorback):
++              if errorback is not None:
++                      errorback(exception)
++      
++      
+       def getTitle(self):
+               return self.feed.title.text
+@@ -354,5 +366,38 @@ class MyTubePlayerService():
+                               return link.href
+               return None
+-
++class YoutubeQueryThread(Thread):
++      def __init__(self, query, param, gotFeed, gotFeedError, callback, errorback):
++              Thread.__init__(self)
++              self.messagePump = ePythonMessagePump()
++              self.messages = ThreadQueue()
++              self.gotFeed = gotFeed
++              self.gotFeedError = gotFeedError
++              self.callback = callback
++              self.errorback = errorback
++              self.query = query
++              self.param = param
++              self.canceled = False
++              self.messagePump.recv_msg.get().append(self.finished)
++      
++      def cancel(self):
++              self.canceled = True
++      
++      def run(self):
++              try:
++                      feed = self.query(self.param)
++                      self.messages.push((True, feed, self.callback))
++                      self.messagePump.send(0)
++              except Exception, ex:
++                      self.messages.push((False, ex, self.errorback))
++                      self.messagePump.send(0)                        
++      
++      def finished(self, val):                
++              if not self.canceled:
++                      message = self.messages.pop()
++                      if message[0]:          
++                              self.gotFeed(message[1], message[2])
++                      else:
++                              self.gotFeedError(message[1], message[2])
++              
+ myTubeService = MyTubePlayerService()
+diff --git a/mytube/src/ThreadQueue.py b/mytube/src/ThreadQueue.py
+new file mode 100644
+index 0000000..ddec604
+--- /dev/null
++++ b/mytube/src/ThreadQueue.py
+@@ -0,0 +1,20 @@
++from threading import Lock
++
++class ThreadQueue:
++      def __init__(self):
++              self.__list = [ ]
++              self.__lock = Lock()
++
++      def push(self, val):
++              lock = self.__lock
++              lock.acquire()
++              self.__list.append(val)
++              lock.release()
++
++      def pop(self):
++              lock = self.__lock
++              lock.acquire()
++              ret = self.__list.pop()
++              lock.release()
++              return ret
++
+diff --git a/mytube/src/__init__.py b/mytube/src/__init__.py
+index c8c21ef..b7b3a56 100755
+--- a/mytube/src/__init__.py
++++ b/mytube/src/__init__.py
+@@ -1,8 +1,7 @@
+ # -*- coding: ISO-8859-1 -*-
+ from Components.Language import language
+ from Tools.Directories import resolveFilename, SCOPE_PLUGINS, SCOPE_LANGUAGE
+-import os,gettext
+-import sha
++import os, gettext, hashlib
+ PluginLanguageDomain = "MyTube"
+ PluginLanguagePath = "Extensions/MyTube/locale"
+@@ -35,7 +34,7 @@ def decrypt_block(src, mod):
+       if len(src) != 128 and len(src) != 202:
+               return None
+       dest = rsa_pub1024(src[:128], mod)
+-      hash = sha.new(dest[1:107])
++      hash = hashlib.sha1(dest[1:107])
+       if len(src) == 202:
+               hash.update(src[131:192])       
+       result = hash.digest()
+diff --git a/mytube/src/plugin.py b/mytube/src/plugin.py
+index 93b54c1..84b98c4 100755
+--- a/mytube/src/plugin.py
++++ b/mytube/src/plugin.py
+@@ -1,51 +1,44 @@
+-from Plugins.Plugin import PluginDescriptor
+-from MyTubeService import GoogleSuggestions, validate_cert, get_rnd
+-from MyTubeSearch import ConfigTextWithGoogleSuggestions
+-from Tools.BoundFunction import boundFunction
+-from Screens.MessageBox import MessageBox
+-from Screens.Screen import Screen
+-from Screens.ChoiceBox import ChoiceBox
+-from Screens.InfoBar import MoviePlayer
+-from Screens.VirtualKeyBoard import VirtualKeyBoard
+-from Components.ActionMap import ActionMap, NumberActionMap
++from Components.AVSwitch import AVSwitch
++from Components.ActionMap import ActionMap
++from Components.Button import Button
++from Components.ConfigList import ConfigListScreen
+ from Components.Label import Label
+-from Components.ScrollLabel import ScrollLabel
+-from Components.ProgressBar import ProgressBar
++from Components.MultiContent import MultiContentEntryText, MultiContentEntryPixmapAlphaTest
+ from Components.Pixmap import Pixmap
+-from Components.Button import Button
++from Components.ProgressBar import ProgressBar
++from Components.ScrollLabel import ScrollLabel
++from Components.ServiceEventTracker import ServiceEventTracker
+ from Components.Sources.List import List
+-from Components.MultiContent import MultiContentEntryText, MultiContentEntryPixmapAlphaTest
+-from Components.AVSwitch import AVSwitch
+-from Components.ActionMap import HelpableActionMap
+-from Components.config import config, Config, ConfigSelection, ConfigSubsection, ConfigText, getConfigListEntry, ConfigYesNo, ConfigIP, ConfigNumber,ConfigLocations
+-from Components.config import KEY_DELETE, KEY_BACKSPACE, KEY_LEFT, KEY_RIGHT, KEY_HOME, KEY_END, KEY_TOGGLEOW, KEY_ASCII, KEY_TIMEOUT
+-from Components.ConfigList import ConfigListScreen
+-from Components.ServiceEventTracker import ServiceEventTracker, InfoBarBase
+-from Components.Console import Console
+-from Components.Sources.Source import Source
+ from Components.Task import Task, Job, job_manager
++from Components.config import config, ConfigSelection, ConfigSubsection, ConfigText, ConfigYesNo, getConfigListEntry
++#, ConfigIP, ConfigNumber, ConfigLocations
++from MyTubeSearch import ConfigTextWithGoogleSuggestions, MyTubeSettingsScreen, MyTubeTasksScreen, MyTubeHistoryScreen
++from MyTubeService import validate_cert, get_rnd, myTubeService
++from Plugins.Plugin import PluginDescriptor
++from Screens.ChoiceBox import ChoiceBox
++from Screens.InfoBarGenerics import InfoBarNotifications
++from Screens.MessageBox import MessageBox
++from Screens.Screen import Screen
++from Screens.VirtualKeyBoard import VirtualKeyBoard
++from Tools.BoundFunction import boundFunction
++from Tools.Directories import resolveFilename, SCOPE_HDD, SCOPE_CURRENT_PLUGIN
++from Tools.Downloader import downloadWithProgress
+-from threading import Thread
+-from threading import Condition
++from __init__ import decrypt_block
+-from Tools.Directories import pathExists, fileExists, resolveFilename, SCOPE_PLUGINS, SCOPE_SKIN_IMAGE, SCOPE_HDD, SCOPE_CURRENT_PLUGIN
+-from Tools.LoadPixmap import LoadPixmap
+-from Tools.Downloader import HTTPProgressDownloader, downloadWithProgress
+-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
+-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
++from enigma import eTPM, eTimer, ePoint, RT_HALIGN_LEFT, RT_VALIGN_CENTER, gFont, ePicLoad, eServiceReference, iPlayableService
++from os import path as os_path, remove as os_remove
+ from twisted.web import client
+-from twisted.internet import reactor
+-from time import time
+-from Screens.InfoBarGenerics import InfoBarShowHide, InfoBarSeek, InfoBarNotifications, InfoBarServiceNotifications
+-from enigma import eTPM
+-from __init__ import bin2long, long2bin, rsa_pub1024, decrypt_block
++
++
+ etpm = eTPM()
+ 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', ':', '?']
+ config.plugins.mytube = ConfigSubsection()
+ config.plugins.mytube.search = ConfigSubsection()
++
+ config.plugins.mytube.search.searchTerm = ConfigTextWithGoogleSuggestions("", False, threaded = True)
+ config.plugins.mytube.search.orderBy = ConfigSelection(
+                               [
+@@ -152,6 +145,7 @@ config.plugins.mytube.general.clearHistoryOnClose = ConfigYesNo(default = False)
+ #config.plugins.mytube.general.ProxyIP = ConfigIP(default=[0,0,0,0])
+ #config.plugins.mytube.general.ProxyPort = ConfigNumber(default=8080)
++
+ class downloadJob(Job):
+       def __init__(self, url, file, title):
+               Job.__init__(self, title)
+@@ -189,8 +183,6 @@ class downloadTask(Task):
+-from MyTubeService import myTubeService
+-from MyTubeSearch import MyTubeSettingsScreen,MyTubeTasksScreen,MyTubeHistoryScreen
+ class MyTubePlayerMainScreen(Screen, ConfigListScreen):
+@@ -198,7 +190,7 @@ class MyTubePlayerMainScreen(Screen, ConfigListScreen):
+       Details = {}
+       #(entry, Title, Description, TubeID, thumbnail, PublishedDate,Views,duration,ratings )  
+       skin = """
+-              <screen name="MyTubePlayerMainScreen" flags="wfNoBorder" position="0,0" size="720,576" title="MyTubePlayerMainScreen..." >
++              <screen name="MyTubePlayerMainScreen" flags="wfNoBorder" position="0,0" size="720,576" title="MyTube - Browser" >
+                       <ePixmap position="0,0" zPosition="-1" size="720,576" pixmap="~/mytubemain_bg.png" alphatest="on" transparent="1" backgroundColor="transparent"/>
+                       <widget name="config" zPosition="2" position="60,60" size="600,50" scrollbarMode="showNever" transparent="1" />
+                       <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" >
+@@ -248,6 +240,8 @@ class MyTubePlayerMainScreen(Screen, ConfigListScreen):
+               self.ytfeed = None
+               self.currentFeedName = None
+               self.videolist = []
++              self.queryThread = None
++              self.queryRunning = False
+               self.video_playlist = []
+               self.statuslist = []
+@@ -339,6 +333,7 @@ class MyTubePlayerMainScreen(Screen, ConfigListScreen):
+                       "nextBouquet": self.switchToConfigList,
+                       "green": self.keyStdFeed,
+                       "yellow": self.handleHistory,
++                      "menu": self.handleMenu
+               }, -2)
+               self["historyactions"] = ActionMap(["ShortcutActions", "WizardActions", "MediaPlayerActions", "MovieSelectionActions", "HelpActions"],
+@@ -385,10 +380,12 @@ class MyTubePlayerMainScreen(Screen, ConfigListScreen):
+               current = self["config"].getCurrent()
+               if current[1].help_window.instance is not None:
+                       current[1].help_window.instance.hide()
++
+               self.statuslist.append(( _("Fetching feed entries"), _("Trying to download the Youtube feed entries. Please wait..." ) ))
+               self["feedlist"].style = "state"
+               self['feedlist'].setList(self.statuslist)
+-              self.Timer.start(200)
++              self.Timer.start(200)           
++      
+       def TimerFire(self):
+               self.Timer.stop()
+               if config.plugins.mytube.general.loadFeedOnOpen.value:
+@@ -473,7 +470,7 @@ class MyTubePlayerMainScreen(Screen, ConfigListScreen):
+                       self.switchToConfigList()
+       def handleMenu(self):
+-              if self.currList == "configlist":
++              if self.currList == "configlist" or self.currList == "status":
+                       menulist = (
+                                       (_("MyTube Settings"), "settings"),
+                               )
+@@ -644,6 +641,7 @@ class MyTubePlayerMainScreen(Screen, ConfigListScreen):
+               config.plugins.mytube.general.history.save()
+               config.plugins.mytube.general.save()
+               config.plugins.mytube.save()
++              self.cancelThread()
+               self.close()
+                       
+       def keyOK(self):
+@@ -901,16 +899,8 @@ class MyTubePlayerMainScreen(Screen, ConfigListScreen):
+               self.propagateUpDownNormally = True
+       def getFeed(self, feedUrl, feedName):
+-              try:
+-                      feed = myTubeService.getFeed(feedUrl)
+-              except Exception, e:
+-                      feed = None
+-                      print "Error querying feed :",feedName
+-                      print "E-->",e
+-                      self.setState('Error')
+-              if feed is not None:
+-                      self.ytfeed = feed
+-              self.buildEntryList()
++              self.queryStarted()
++              self.queryThread = myTubeService.getFeed(feedUrl, self.gotFeed, self.gotFeedError)
+       def getNextEntries(self, result):
+               if not result:
+@@ -943,26 +933,53 @@ class MyTubePlayerMainScreen(Screen, ConfigListScreen):
+                       self.searchFeed(searchContext)
+       def searchFeed(self, searchContext):
+-              print "[MyTubePlayer] searchFeed"
++              print "[MyTubePlayer] searchFeed"               
++              self.queryStarted()             
+               self.appendEntries = False
+-              try:
+-                      feed = myTubeService.search(searchContext, 
++              self.queryThread = myTubeService.search(searchContext, 
+                                       orderby = config.plugins.mytube.search.orderBy.value,
+                                       racy = config.plugins.mytube.search.racy.value,
+                                       lr = config.plugins.mytube.search.lr.value,
+                                       categories = [ config.plugins.mytube.search.categories.value ],
+-                                      sortOrder = config.plugins.mytube.search.sortOrder.value)
+-              except Exception, e:
+-                      feed = None
+-                      print "Error querying search for :",config.plugins.mytube.search.searchTerm.value
+-                      print "E-->",e
+-                      self.setState('Error')
++                                      sortOrder = config.plugins.mytube.search.sortOrder.value,
++                                      callback = self.gotSearchFeed, errorback = self.gotSearchFeedError)
++      
++      def queryStarted(self):
++              if self.queryRunning:
++                      self.cancelThread()
++              self.queryRunning = True                
++      
++      def queryFinished(self):
++              self.queryRunning = False
++      
++      def cancelThread(self):
++              print "[MyTubePlayer] cancelThread"
++              if self.queryThread is not None:
++                      self.queryThread.cancel()
++              self.queryFinished()
++      
++      def gotFeed(self, feed):
++              print "[MyTubePlayer] gotFeed"
++              self.queryFinished()
+               if feed is not None:
+                       self.ytfeed = feed
+-              if self.FirstRun == True:       
+-                      self.FirstRun = False
+               self.buildEntryList()
+-
++      
++      def gotFeedError(self, exception):
++              print "[MyTubePlayer] gotFeedError"
++              self.queryFinished()
++              self.setState('Error')
++      
++      def gotSearchFeed(self, feed):
++              if self.FirstRun:       
++                      self.FirstRun = False
++              self.gotFeed(feed)
++      
++      def gotSearchFeedError(self, exception):
++              if self.FirstRun:       
++                      self.FirstRun = False
++              self.gotFeedError(exception)
++      
+       def buildEntryList(self):
+               self.mytubeentries = None
+               self.screenshotList = []
+@@ -989,7 +1006,7 @@ class MyTubePlayerMainScreen(Screen, ConfigListScreen):
+                                       self["feedlist"].setIndex(0)
+                                       self["feedlist"].setList(self.videolist)
+                                       self["feedlist"].updateList(self.videolist)
+-                                      if self.FirstRun == True:       
++                                      if self.FirstRun and not config.plugins.mytube.general.loadFeedOnOpen.value:
+                                               self.switchToConfigList()
+                                       else:
+                                               self.switchToFeedList()
+@@ -1157,7 +1174,7 @@ class MyTubePlayerMainScreen(Screen, ConfigListScreen):
+                       if self.Details.has_key(tubeid):
+                               self.Details[tubeid]["thumbnail"] = ptr
+                       if (os_path.exists(thumbnailFile) == True):
+-                              remove(thumbnailFile)
++                              os_remove(thumbnailFile)
+                       del self.picloads[tubeid]
+               else:
+                       del self.picloads[tubeid]
+@@ -1186,7 +1203,7 @@ class MyTubePlayerMainScreen(Screen, ConfigListScreen):
+ class MyTubeVideoInfoScreen(Screen):
+       skin = """
+-              <screen name="MyTubeVideoInfoScreen" flags="wfNoBorder" position="0,0" size="720,576" title="MyTubePlayerMainScreen..." >
++              <screen name="MyTubeVideoInfoScreen" flags="wfNoBorder" position="0,0" size="720,576" title="MyTube - Video Info" >
+                       <ePixmap position="0,0" zPosition="-1" size="720,576" pixmap="~/mytubemain_bg.png" alphatest="on" transparent="1" backgroundColor="transparent"/>
+                       <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" />
+                       <widget name="starsbg" pixmap="~/starsbar_empty.png" position="560,220" zPosition="5" size="100,20" transparent="1" alphatest="on" />
+@@ -1361,7 +1378,7 @@ class MyTubeVideoInfoScreen(Screen):
+                       self.thumbnails[picindex][3] = ptr
+                       if (os_path.exists(self.thumbnails[picindex][2]) == True):
+                               print "removing", self.thumbnails[picindex][2]
+-                              remove(self.thumbnails[picindex][2])
++                              os_remove(self.thumbnails[picindex][2])
+                               del self.picloads[picindex]
+                               if len(self.picloads) == 0:
+                                       self.timer.startLongTimer(3)
+@@ -1400,7 +1417,7 @@ class MyTubeVideoInfoScreen(Screen):
+ class MyTubeVideoHelpScreen(Screen):
+       skin = """
+-              <screen name="MyTubeVideoHelpScreen" flags="wfNoBorder" position="0,0" size="720,576" title="MyTubePlayerMainScreen..." >
++              <screen name="MyTubeVideoHelpScreen" flags="wfNoBorder" position="0,0" size="720,576" title="MyTube - Help" >
+                       <ePixmap position="0,0" zPosition="-1" size="720,576" pixmap="~/mytubemain_bg.png" alphatest="on" transparent="1" backgroundColor="transparent"/>
+                       <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" />
+                       <widget name="detailtext" position="60,120" size="610,370" zPosition="10" font="Regular;21" transparent="1" halign="left" valign="top"/>
+@@ -1561,7 +1578,6 @@ class MyTubePlayer(Screen, InfoBarNotifications):
+               if self.infoCallback is not None:       
+                       self.infoCallback()
+-
+       def playNextFile(self):
+               print "playNextFile"
+               nextservice,error = self.nextCallback()