X-Git-Url: http://code.vuplus.com/gitweb/?a=blobdiff_plain;f=recipes%2Fenigma2%2Fenigma2-plugins%2Fvuplus%2Fenigma2_plugins_20110810.patch;fp=recipes%2Fenigma2%2Fenigma2-plugins%2Fvuplus%2Fenigma2_plugins_20110810.patch;h=0000000000000000000000000000000000000000;hb=c05e256b4b7f29135d86edbe2d685a8031122235;hp=31ea5a565754fc1aaee2dfdb6bc87d5d9ec5f0d8;hpb=a24f1f8844c7c8c7350693f30da80e62e5f16a15;p=vuplus_openembedded diff --git a/recipes/enigma2/enigma2-plugins/vuplus/enigma2_plugins_20110810.patch b/recipes/enigma2/enigma2-plugins/vuplus/enigma2_plugins_20110810.patch deleted file mode 100644 index 31ea5a5..0000000 --- a/recipes/enigma2/enigma2-plugins/vuplus/enigma2_plugins_20110810.patch +++ /dev/null @@ -1,1808 +0,0 @@ -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 @@ - - - -- -+ -+ - - - -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 \n" -+"POT-Creation-Date: 2011-06-12 19:07+0100\n" -+"PO-Revision-Date: 2011-06-12 19:22+0100\n" -+"Last-Translator: JuSt611 \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 = """ -- -+ - - - -@@ -366,7 +253,7 @@ class MyTubeSuggestionsListScreen(Screen): - - class MyTubeSettingsScreen(Screen, ConfigListScreen): - skin = """ -- -+ - - - -@@ -524,7 +411,7 @@ class MyTubeSettingsScreen(Screen, ConfigListScreen): - - class MyTubeTasksScreen(Screen): - skin = """ -- -+ - - - -@@ -610,7 +497,7 @@ class MyTubeTasksScreen(Screen): - - class MyTubeHistoryScreen(Screen): - skin = """ -- -+ - - - -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 = """ -- -+ - - - -@@ -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 = """ -- -+ - - - -@@ -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 = """ -- -+ - - - -@@ -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()