From e8ab21342b25e4e1506a5a4f704beaaa73fade63 Mon Sep 17 00:00:00 2001 From: "Chang.H.S" Date: Tue, 4 Dec 2012 11:24:21 +0900 Subject: [PATCH] enigma2-plugins : update patch. --- .../recipes-vuplus/enigma2/enigma2-plugins.bb | 6 +- .../enigma2/enigma2-plugins/dreamboxweb.png | Bin 0 -> 2619 bytes .../enigma2/enigma2-plugins/dreamboxwebtv.png | Bin 0 -> 1905 bytes .../enigma2-plugins/enigma2_plugins_20121113.patch | 1835 ++++++++++++++++++++ .../enigma2_plugins_ac3lipsync_dolby.patch | 13 + .../enigma2_plugins_autoresolution_fix.patch | 14 + .../enigma2_plugins_dependency.patch | 10 + .../enigma2_plugins_gst_plugins_pkgname.patch | 53 + .../enigma2_plugins_mytube_entry_vuplus.patch | 13 + .../enigma2_plugins_mytube_tpm.patch | 149 ++ .../enigma2_plugins_mytube_vuplus.patch | 74 + .../enigma2_plugins_webinterface_tpm.patch | 31 + .../enigma2/enigma2-plugins/favicon.ico | Bin 0 -> 4286 bytes .../enigma2/enigma2-plugins/vuplus/dreamboxweb.png | Bin 2619 -> 0 bytes .../enigma2-plugins/vuplus/dreamboxwebtv.png | Bin 1905 -> 0 bytes .../vuplus/enigma2_plugins_20110810.patch | 1808 ------------------- .../vuplus/enigma2_plugins_ac3lipsync_dolby.patch | 13 - .../enigma2_plugins_autoresolution_fix.patch | 14 - .../vuplus/enigma2_plugins_dependency.patch | 10 - .../enigma2_plugins_gst_plugins_pkgname.patch | 53 - .../enigma2_plugins_mytube_entry_vuplus.patch | 13 - .../vuplus/enigma2_plugins_mytube_tpm.patch | 149 -- .../vuplus/enigma2_plugins_mytube_vuplus.patch | 74 - .../vuplus/enigma2_plugins_webinterface_tpm.patch | 31 - .../enigma2/enigma2-plugins/vuplus/favicon.ico | Bin 4286 -> 0 bytes 25 files changed, 2195 insertions(+), 2168 deletions(-) create mode 100755 meta-openvuplus/recipes-vuplus/enigma2/enigma2-plugins/dreamboxweb.png create mode 100755 meta-openvuplus/recipes-vuplus/enigma2/enigma2-plugins/dreamboxwebtv.png create mode 100644 meta-openvuplus/recipes-vuplus/enigma2/enigma2-plugins/enigma2_plugins_20121113.patch create mode 100644 meta-openvuplus/recipes-vuplus/enigma2/enigma2-plugins/enigma2_plugins_ac3lipsync_dolby.patch create mode 100644 meta-openvuplus/recipes-vuplus/enigma2/enigma2-plugins/enigma2_plugins_autoresolution_fix.patch create mode 100644 meta-openvuplus/recipes-vuplus/enigma2/enigma2-plugins/enigma2_plugins_dependency.patch create mode 100644 meta-openvuplus/recipes-vuplus/enigma2/enigma2-plugins/enigma2_plugins_gst_plugins_pkgname.patch create mode 100644 meta-openvuplus/recipes-vuplus/enigma2/enigma2-plugins/enigma2_plugins_mytube_entry_vuplus.patch create mode 100644 meta-openvuplus/recipes-vuplus/enigma2/enigma2-plugins/enigma2_plugins_mytube_tpm.patch create mode 100644 meta-openvuplus/recipes-vuplus/enigma2/enigma2-plugins/enigma2_plugins_mytube_vuplus.patch create mode 100644 meta-openvuplus/recipes-vuplus/enigma2/enigma2-plugins/enigma2_plugins_webinterface_tpm.patch create mode 100755 meta-openvuplus/recipes-vuplus/enigma2/enigma2-plugins/favicon.ico delete mode 100755 meta-openvuplus/recipes-vuplus/enigma2/enigma2-plugins/vuplus/dreamboxweb.png delete mode 100755 meta-openvuplus/recipes-vuplus/enigma2/enigma2-plugins/vuplus/dreamboxwebtv.png delete mode 100644 meta-openvuplus/recipes-vuplus/enigma2/enigma2-plugins/vuplus/enigma2_plugins_20110810.patch delete mode 100644 meta-openvuplus/recipes-vuplus/enigma2/enigma2-plugins/vuplus/enigma2_plugins_ac3lipsync_dolby.patch delete mode 100644 meta-openvuplus/recipes-vuplus/enigma2/enigma2-plugins/vuplus/enigma2_plugins_autoresolution_fix.patch delete mode 100644 meta-openvuplus/recipes-vuplus/enigma2/enigma2-plugins/vuplus/enigma2_plugins_dependency.patch delete mode 100644 meta-openvuplus/recipes-vuplus/enigma2/enigma2-plugins/vuplus/enigma2_plugins_gst_plugins_pkgname.patch delete mode 100644 meta-openvuplus/recipes-vuplus/enigma2/enigma2-plugins/vuplus/enigma2_plugins_mytube_entry_vuplus.patch delete mode 100644 meta-openvuplus/recipes-vuplus/enigma2/enigma2-plugins/vuplus/enigma2_plugins_mytube_tpm.patch delete mode 100644 meta-openvuplus/recipes-vuplus/enigma2/enigma2-plugins/vuplus/enigma2_plugins_mytube_vuplus.patch delete mode 100644 meta-openvuplus/recipes-vuplus/enigma2/enigma2-plugins/vuplus/enigma2_plugins_webinterface_tpm.patch delete mode 100755 meta-openvuplus/recipes-vuplus/enigma2/enigma2-plugins/vuplus/favicon.ico diff --git a/meta-openvuplus/recipes-vuplus/enigma2/enigma2-plugins.bb b/meta-openvuplus/recipes-vuplus/enigma2/enigma2-plugins.bb index 44d72d0..b8a16c8 100755 --- a/meta-openvuplus/recipes-vuplus/enigma2/enigma2-plugins.bb +++ b/meta-openvuplus/recipes-vuplus/enigma2/enigma2-plugins.bb @@ -11,9 +11,9 @@ SRCREV="c8fc96e8e51e1ef71e1709f9dd6f733007f9463e" SRCDATE="20110215" BRANCH="master" PV = "experimental-git${SRCDATE}" -PR = "r6" +PR = "r7" -FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}/vuplus:" +FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:" SRC_URI="git://code.vuplus.com/git/dvbapp-plugin.git;protocol=git;branch=${BRANCH};tag=${SRCREV}" @@ -26,7 +26,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_20121113.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/meta-openvuplus/recipes-vuplus/enigma2/enigma2-plugins/dreamboxweb.png b/meta-openvuplus/recipes-vuplus/enigma2/enigma2-plugins/dreamboxweb.png new file mode 100755 index 0000000000000000000000000000000000000000..9a2c570cea0d4250243a5822b8aca2cec9fc23d8 GIT binary patch literal 2619 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 + + +- ++ ++ + + + +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" ++ ++#: ../src/MyTubeSearch.py:218 ++#: ../src/plugin.py:109 ++msgid "Poland" ++msgstr "Polen" ++ ++#: ../src/MyTubeSearch.py:219 ++#: ../src/plugin.py:110 ++msgid "Russia" ++msgstr "Russland" ++ ++#: ../src/MyTubeSearch.py:220 ++#: ../src/plugin.py:111 ++msgid "South Korea" ++msgstr "Süd Korea" ++ ++#: ../src/MyTubeSearch.py:221 ++#: ../src/plugin.py:112 ++msgid "Spain" ++msgstr "Spanien" ++ ++#: ../src/MyTubeSearch.py:222 ++#: ../src/plugin.py:113 ++msgid "Sweden" ++msgstr "Schweden" ++ ++#: ../src/MyTubeSearch.py:223 ++#: ../src/plugin.py:114 ++msgid "Taiwan" ++msgstr "Taiwan" ++ ++#: ../src/MyTubeSearch.py:224 ++#: ../src/plugin.py:115 ++msgid "United States" ++msgstr "USA" ++ ++#: ../src/MyTubeSearch.py:228 ++#: ../src/plugin.py:119 ++msgid "Ascending" ++msgstr "Aufsteigend" ++ ++#: ../src/MyTubeSearch.py:229 ++#: ../src/plugin.py:120 ++msgid "Descending" ++msgstr "Absteigend" ++ ++#: ../src/MyTubeSearch.py:237 ++#: ../src/plugin.py:128 ++#: ../src/plugin.py:790 ++msgid "HD videos" ++msgstr "HD Videos" ++ ++#: ../src/MyTubeSearch.py:238 ++#: ../src/plugin.py:129 ++#: ../src/plugin.py:794 ++msgid "Most viewed" ++msgstr "Meistgesehen" ++ ++#: ../src/MyTubeSearch.py:239 ++#: ../src/plugin.py:130 ++#: ../src/plugin.py:792 ++msgid "Top rated" ++msgstr "Beste Bewertung" ++ ++#: ../src/MyTubeSearch.py:240 ++#: ../src/plugin.py:131 ++#: ../src/plugin.py:799 ++msgid "Recently featured" ++msgstr "Kürzlich featured" + ++#: ../src/MyTubeSearch.py:241 ++#: ../src/plugin.py:132 ++#: ../src/plugin.py:797 + msgid "Most discussed" + msgstr "Heiß diskutiert" + ++#: ../src/MyTubeSearch.py:242 ++#: ../src/plugin.py:133 ++#: ../src/plugin.py:793 ++msgid "Top favorites" ++msgstr "Top-Favoriten" ++ ++#: ../src/MyTubeSearch.py:243 ++#: ../src/plugin.py:134 ++#: ../src/plugin.py:798 + msgid "Most linked" + msgstr "Am meisten verlinkt" + +-msgid "Most popular" +-msgstr "Beliebteste Videos" ++#: ../src/MyTubeSearch.py:244 ++#: ../src/plugin.py:135 ++#: ../src/plugin.py:800 ++msgid "Most responded" ++msgstr "Meiste Antworten" + ++#: ../src/MyTubeSearch.py:245 ++#: ../src/plugin.py:136 ++#: ../src/plugin.py:796 + msgid "Most recent" + msgstr "Neueste Videos" + +-msgid "Most responded" +-msgstr "Meiste Antworten" +- +-msgid "Most viewed" +-msgstr "Meistgesehen" ++#: ../src/MyTubeSearch.py:249 ++#: ../src/MyTubeSearch.py:252 ++#: ../src/plugin.py:139 ++#: ../src/plugin.py:142 ++msgid "Ask user" ++msgstr "Nutzer fragen" + +-msgid "Music" +-msgstr "Musik" ++#: ../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 "My TubePlayer" +-msgstr "MyTube Player" ++#: ../src/MyTubeSearch.py:249 ++#: ../src/plugin.py:139 ++msgid "Play next video" ++msgstr "nächstes Video" + +-msgid "MyTube Settings" +-msgstr "MyTube Einstellungen" ++#: ../src/MyTubeSearch.py:249 ++#: ../src/plugin.py:139 ++msgid "Play video again" ++msgstr "Video noch mal abspielen" + +-msgid "MyTubePlayer" +-msgstr "MyTube Player" ++#: ../src/MyTubeSearch.py:314 ++msgid " Results" ++msgstr " Ergebnisse" + +-msgid "MyTubePlayer Help" +-msgstr "MyTube Player Hilfe" ++#: ../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 "MyTubePlayer active video downloads" +-msgstr "aktive Video downloads" ++#: ../src/MyTubeSearch.py:399 ++msgid "Save" ++msgstr "Speichern" + ++#: ../src/MyTubeSearch.py:412 ++#: ../src/MyTubeSearch.py:415 + msgid "MyTubePlayer settings" + msgstr "MyTube Player Einstellungen" + +-msgid "MyTubeVideoInfoScreen" +-msgstr "MyTubeVideoInfoScreen" ++#: ../src/MyTubeSearch.py:419 ++msgid "Display search results by:" ++msgstr "Suchergebnisse anzeigen:" + +-msgid "MyTubeVideohelpScreen" +-msgstr "MyTubeVideohelpScreen" ++#: ../src/MyTubeSearch.py:420 ++msgid "Search restricted content:" ++msgstr "Suche ohne Altersbeschränkung:" + +-msgid "New Zealand" +-msgstr "Neu Seeland" ++#: ../src/MyTubeSearch.py:421 ++msgid "Search category:" ++msgstr "Such-Kategorie:" + +-msgid "News & Politics" +-msgstr "Nachrichten & Politik" ++#: ../src/MyTubeSearch.py:422 ++msgid "Search region:" ++msgstr "Such-Region:" + +-msgid "No" +-msgstr "Nein" ++#: ../src/MyTubeSearch.py:423 ++msgid "Load feed on startup:" ++msgstr "Feed beim Starten laden:" + +-msgid "No playable video found! Stop playing this movie?" +-msgstr "Kein abspielbares Video gefunden! Wiedergabe beenden?" ++#: ../src/MyTubeSearch.py:426 ++msgid "Start with following feed:" ++msgstr "Beginne mit folgendem feed:" + +-msgid "No videos to display" +-msgstr "Keine Videos zum anzeigen" ++#: ../src/MyTubeSearch.py:427 ++msgid "Videoplayer stop/exit behavior:" ++msgstr "Verhalten beim Drücken der STOPP/EXIT-Taste:" + +-msgid "No, but play video again" +-msgstr "Nein, aber Video noch mal abspielen" ++#: ../src/MyTubeSearch.py:428 ++msgid "Videobrowser exit behavior:" ++msgstr "Verhalten nach Verlassen der Videoliste:" + +-msgid "No, but switch to video entries." +-msgstr "Nein, aber zu den Videos zurück." ++#: ../src/MyTubeSearch.py:435 ++msgid "Download location" ++msgstr "Download Verzeichnis:" + +-msgid "No, but switch to video search." +-msgstr "Nein, aber zur Videosuche zurück" ++#: ../src/MyTubeSearch.py:438 ++msgid "Clear history on Exit:" ++msgstr "Verlauf beim Verlassen löschen:" + +-msgid "Nonprofits & Activism" +-msgstr "Non-Profit" ++#: ../src/MyTubeSearch.py:459 ++msgid "Choose target folder" ++msgstr "Wähle Zielverzeichnis" + +-msgid "Not fetching feed entries" +-msgstr "Lade keine feed Einträge" +- +-msgid "People & Blogs" +-msgstr "Leute & Blogs" +- +-msgid "Pets & Animals" +-msgstr "Tiere" +- +-msgid "Play YouTube movies" +-msgstr "YouTube Videos abspielen" +- +-msgid "Play next video" +-msgstr "nächstes Video" +- +-msgid "Play video again" +-msgstr "Video noch mal abspielen" ++#: ../src/MyTubeSearch.py:575 ++#: ../src/MyTubeSearch.py:591 ++msgid "MyTubePlayer active video downloads" ++msgstr "aktive Video downloads" + +-msgid "Please enter your search term." +-msgstr "Bitte geben Sie einen Suchbegriff ein." ++#: ../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 "Please select a standard feed or try searching for videos." +-msgstr "Wählen Sie einen Standard Feed oder suchen Sie nach Videos." ++#: ../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 "Poland" +-msgstr "Polen" ++#: ../src/plugin.py:282 ++msgid "Std. Feeds" ++msgstr "Std. Feeds" + +-msgid "Published" +-msgstr "Veröffentlicht" ++#: ../src/plugin.py:283 ++msgid "History" ++msgstr "Verlauf" + +-msgid "Rating" +-msgstr "Bewertung" ++#: ../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 "Ratings: " +-msgstr "Bewertungen: " ++#: ../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 "Really quit MyTube Player?" +-msgstr "MyTube Player wirklich beenden?" ++#: ../src/plugin.py:417 ++#: ../src/plugin.py:476 ++msgid "Fetching feed entries" ++msgstr "Lade feeds" + +-msgid "Recently featured" +-msgstr "Kürzlich featured" ++#: ../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..." + +-msgid "Related video entries." +-msgstr "Ähnliche Videos" ++#: ../src/plugin.py:434 ++msgid "MyTubePlayer" ++msgstr "MyTube Player" + +-msgid "Relevance" +-msgstr "Relevanz" ++#: ../src/plugin.py:438 ++msgid "Search Term(s)" ++msgstr "Suchwort(e)" + +-msgid "Response video entries." +-msgstr "Video Antworten" ++#: ../src/plugin.py:478 ++msgid "Fetching search entries" ++msgstr "Lade Suchergebnisse" + +-msgid "Return to movie list" +-msgstr "Zurück zur Videoliste" ++#: ../src/plugin.py:478 ++msgid "Trying to download the Youtube search results. Please wait..." ++msgstr "YouTube Suchergebnisse werden geladen, bitte warten..." + +-msgid "Russia" +-msgstr "Russland" ++#: ../src/plugin.py:480 ++msgid "An error occured." ++msgstr "Es ist ein Fehler aufgetreten." + +-msgid "Save" +-msgstr "Speichern" ++#: ../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 "Science & Technology" +-msgstr "Wissenschaft & Technik" ++#: ../src/plugin.py:483 ++msgid "No videos to display" ++msgstr "Keine Videos zum anzeigen" + +-msgid "Search Term(s)" +-msgstr "Suchwort(e)" ++#: ../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 "Search category:" +-msgstr "Such-Kategorie:" ++#: ../src/plugin.py:485 ++msgid "Not fetching feed entries" ++msgstr "Lade keine feed Einträge" + +-msgid "Search region:" +-msgstr "Such-Region:" ++#: ../src/plugin.py:485 ++msgid "Please enter your search term." ++msgstr "Bitte geben Sie einen Suchbegriff ein." + +-msgid "Search restricted content:" +-msgstr "Suche ohne Altersbeschränkung:" ++#: ../src/plugin.py:504 ++#: ../src/plugin.py:506 ++#: ../src/plugin.py:513 ++msgid "MyTubePlayer Help" ++msgstr "MyTube Player Hilfe" + +-msgid "Select new feed to view." +-msgstr "Neuen feed auswählen" ++#: ../src/plugin.py:525 ++#: ../src/plugin.py:531 ++msgid "MyTube Settings" ++msgstr "MyTube Einstellungen" + ++#: ../src/plugin.py:528 ++#: ../src/plugin.py:543 + msgid "Select your choice." + msgstr "Treffen Sie Ihre Wahl." + +-msgid "Short Movies" +-msgstr "Kurzvideos" +- +-msgid "Sorry, video is not available!" +-msgstr "Video nicht verfügbar!" +- +-msgid "South Korea" +-msgstr "Süd Korea" +- +-msgid "Spain" +-msgstr "Spanien" +- +-msgid "Sports" +-msgstr "Sport" +- +-msgid "Start with following feed:" +-msgstr "Beginne mit folgendem feed:" ++#: ../src/plugin.py:533 ++msgid "View related videos" ++msgstr "Ähnliche Videos" + +-msgid "Std. Feeds" +-msgstr "Std. Feeds" ++#: ../src/plugin.py:534 ++msgid "View response videos" ++msgstr "Video Antworten" + +-msgid "Stop playing this movie?" +-msgstr "Wiedergabe beenden?" ++#: ../src/plugin.py:538 ++msgid "Download Video" ++msgstr "Video runterladen" + +-msgid "Sweden" +-msgstr "Schweden" ++#: ../src/plugin.py:539 ++msgid "View active downloads" ++msgstr "Aktive Downloads anzeigen" + +-msgid "Tags: " +-msgstr "Tags: " ++#: ../src/plugin.py:577 ++msgid "Enter your search term(s)" ++msgstr "Suchbegriff eingeben" + +-msgid "Taiwan" +-msgstr "Taiwan" ++#: ../src/plugin.py:621 ++msgid "No, but switch to video entries." ++msgstr "Nein, aber zu den Videos zurück." + +-msgid "There was an error getting the feed entries. Please try again." +-msgstr "Fehler beim Laden der Suchergebnisse. Noch mal probieren." ++#: ../src/plugin.py:627 ++msgid "No, but switch to video search." ++msgstr "Nein, aber zur Videosuche zurück" + +-msgid "This Month" +-msgstr "Diesen Monat" ++#: ../src/plugin.py:629 ++msgid "Really quit MyTube Player?" ++msgstr "MyTube Player wirklich beenden?" + +-msgid "This Week" +-msgstr "Diese Woche" ++#: ../src/plugin.py:722 ++msgid "Sorry, video is not available!" ++msgstr "Video nicht verfügbar!" + +-msgid "This is the help screen. Feed me with something to display." +-msgstr "" ++#: ../src/plugin.py:757 ++msgid "Do you want to see more entries?" ++msgstr "Weitere Videos?" + +-msgid "Today" +-msgstr "Heute" ++#: ../src/plugin.py:795 ++msgid "Most popular" ++msgstr "Beliebteste Videos" + +-msgid "Top favorites" +-msgstr "Top-Favoriten" ++#: ../src/plugin.py:802 ++msgid "Select new feed to view." ++msgstr "Neuen feed auswählen" + +-msgid "Top rated" +-msgstr "Beste Bewertung" ++#: ../src/plugin.py:968 ++msgid "More video entries." ++msgstr "Weitere Video Einträge." + +-msgid "Travel & Events" +-msgstr "Reisen & Events" ++#: ../src/plugin.py:976 ++msgid "Related video entries." ++msgstr "Ähnliche Videos" + +-msgid "Trying to download the Youtube feed entries. Please wait..." +-msgstr "YouTube feeds werden geladen, bitte warten..." ++#: ../src/plugin.py:984 ++msgid "Response video entries." ++msgstr "Video Antworten" + +-msgid "Trying to download the Youtube search results. Please wait..." +-msgstr "YouTube Suchergebnisse werden geladen, bitte warten..." ++#: ../src/plugin.py:1103 ++#: ../src/plugin.py:1341 ++msgid "Added: " ++msgstr "Hinzugefügt: " + +-msgid "United States" +-msgstr "USA" ++#: ../src/plugin.py:1103 ++#: ../src/plugin.py:1344 ++msgid "Views: " ++msgstr "Aufrufe: " + +-msgid "Videobrowser exit behavior:" +-msgstr "Verhalten nach Verlassen der Videoliste:" ++#: ../src/plugin.py:1103 ++#: ../src/plugin.py:1335 ++msgid "Duration: " ++msgstr "Dauer: " + +-msgid "Videoplayer stop/exit behavior:" +-msgstr "Verhalten beim Drücken der STOPP/EXIT-Taste:" ++#: ../src/plugin.py:1103 ++msgid "Ratings: " ++msgstr "Bewertungen: " + +-msgid "View Count" +-msgstr "Aufrufe" ++#: ../src/plugin.py:1309 ++msgid "Downloading screenshots. Please wait..." ++msgstr "Bilder werden geladen. Bitte warten..." + +-msgid "View active downloads" +-msgstr "Aktive Downloads anzeigen" ++#: ../src/plugin.py:1338 ++msgid "Author: " ++msgstr "Autor: " + +-msgid "View related videos" +-msgstr "Ähnliche Videos" ++#: ../src/plugin.py:1347 ++msgid "Tags: " ++msgstr "Tags: " + +-msgid "View response videos" +-msgstr "Video Antworten" ++#: ../src/plugin.py:1350 ++msgid "MyTubeVideoInfoScreen" ++msgstr "MyTubeVideoInfoScreen" + +-msgid "Views: " +-msgstr "Aufrufe: " ++#: ../src/plugin.py:1484 ++msgid "Help" ++msgstr "Hilfe" + +-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:1488 ++msgid "This is the help screen. Feed me with something to display." ++msgstr "Dies ist die MyTube Hilfe. Bitte ausfüllen." + +-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:1493 ++msgid "MyTubeVideohelpScreen" ++msgstr "MyTubeVideohelpScreen" + +-msgid "Yes" +-msgstr "Ja" ++#: ../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..9a1d6fd 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,51 @@ 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(',') ++ else: ++ tmp_fmtUrlDATA = videoinfo['fmt_url_map'][0].split(',') + for fmtstring in tmp_fmtUrlDATA: +- (fmtid,fmturl) = fmtstring.split('|') +- if VIDEO_FMT_PRIORITY_MAP.has_key(fmtid): ++ fmturl = fmtid = fmtsig = "" ++ if videoinfo.has_key('url_encoded_fmt_stream_map'): ++ try: ++ for arg in fmtstring.split('&'): ++ if arg.find('=') >= 0: ++ print arg.split('=') ++ key, value = arg.split('=') ++ if key == 'itag': ++ if len(value) > 3: ++ value = value[:2] ++ fmtid = value ++ elif key == 'url': ++ fmturl = value ++ elif key == 'sig': ++ fmtsig = value ++ ++ if fmtid != "" and fmturl != "" and fmtsig != "" and VIDEO_FMT_PRIORITY_MAP.has_key(fmtid): ++ video_fmt_map[VIDEO_FMT_PRIORITY_MAP[fmtid]] = { 'fmtid': fmtid, 'fmturl': unquote_plus(fmturl), 'fmtsig': fmtsig } ++ fmt_infomap[int(fmtid)] = "%s&signature=%s" %(unquote_plus(fmturl), fmtsig) ++ fmturl = fmtid = fmtsig = "" ++ ++ except: ++ print "error parsing fmtstring:",fmtstring ++ ++ else: ++ (fmtid,fmturl) = fmtstring.split('|') ++ if VIDEO_FMT_PRIORITY_MAP.has_key(fmtid) and fmtid != "": + video_fmt_map[VIDEO_FMT_PRIORITY_MAP[fmtid]] = { 'fmtid': fmtid, 'fmturl': unquote_plus(fmturl) } +- fmt_infomap[int(fmtid)] = 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'] ++ best_video = video_fmt_map[sorted(video_fmt_map.iterkeys())[0]] ++ video_url = "%s&signature=%s" %(best_video['fmturl'].split(';')[0], best_video['fmtsig']) + 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 +309,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 +326,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 +351,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 +387,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() diff --git a/meta-openvuplus/recipes-vuplus/enigma2/enigma2-plugins/enigma2_plugins_ac3lipsync_dolby.patch b/meta-openvuplus/recipes-vuplus/enigma2/enigma2-plugins/enigma2_plugins_ac3lipsync_dolby.patch new file mode 100644 index 0000000..13dc932 --- /dev/null +++ b/meta-openvuplus/recipes-vuplus/enigma2/enigma2-plugins/enigma2_plugins_ac3lipsync_dolby.patch @@ -0,0 +1,13 @@ +diff --git a/audiosync/src/AC3delay.py b/audiosync/src/AC3delay.py +index a92c859..6bbc86d 100644 +--- a/audiosync/src/AC3delay.py ++++ b/audiosync/src/AC3delay.py +@@ -177,7 +177,7 @@ class AC3delay: + + tlist.append((description, x)) + if x == self.selectedAudioIndex: +- if ((description.find("AC3") != -1 or description.find("AC-3") != -1) and not bDownmixEnabled) or description.find("DTS") != -1: ++ if ((description.find("Dolby") != -1 or description.find("AC3") != -1 or description.find("AC-3") != -1) and not bDownmixEnabled) or description.find("DTS") != -1: + self.whichAudio = AC3 + self.channelAudio = AC3 + else: diff --git a/meta-openvuplus/recipes-vuplus/enigma2/enigma2-plugins/enigma2_plugins_autoresolution_fix.patch b/meta-openvuplus/recipes-vuplus/enigma2/enigma2-plugins/enigma2_plugins_autoresolution_fix.patch new file mode 100644 index 0000000..481d00d --- /dev/null +++ b/meta-openvuplus/recipes-vuplus/enigma2/enigma2-plugins/enigma2_plugins_autoresolution_fix.patch @@ -0,0 +1,14 @@ +diff --git a/autoresolution/src/plugin.py b/autoresolution/src/plugin.py +old mode 100644 +new mode 100755 +index f034c06..0dee6ce +--- a/autoresolution/src/plugin.py ++++ b/autoresolution/src/plugin.py +@@ -302,6 +302,7 @@ class AutoResSetupMenu(Screen, ConfigListScreen): + + def apply(self): + for x in self["config"].list: ++ x[1].onDeselect(self.session) + x[1].save() + self.close() + diff --git a/meta-openvuplus/recipes-vuplus/enigma2/enigma2-plugins/enigma2_plugins_dependency.patch b/meta-openvuplus/recipes-vuplus/enigma2/enigma2-plugins/enigma2_plugins_dependency.patch new file mode 100644 index 0000000..711e5ce --- /dev/null +++ b/meta-openvuplus/recipes-vuplus/enigma2/enigma2-plugins/enigma2_plugins_dependency.patch @@ -0,0 +1,10 @@ +diff --git a/fancontrol2/CONTROL/control b/fancontrol2/CONTROL/control +index b42c485..356ab02 100644 +--- a/fancontrol2/CONTROL/control ++++ b/fancontrol2/CONTROL/control +@@ -3,4 +3,4 @@ Version: 2.5r1 + Description: Temperature dependent fan control + Maintainer: IHAD joergm6 + Homepage: http://www.i-have-a-dreambox.com +-Depends: enigma2 (>> 2.6) ++Depends: enigma2 (>> 2.6), enigma2-plugin-extensions-webinterface diff --git a/meta-openvuplus/recipes-vuplus/enigma2/enigma2-plugins/enigma2_plugins_gst_plugins_pkgname.patch b/meta-openvuplus/recipes-vuplus/enigma2/enigma2-plugins/enigma2_plugins_gst_plugins_pkgname.patch new file mode 100644 index 0000000..cee82c6 --- /dev/null +++ b/meta-openvuplus/recipes-vuplus/enigma2/enigma2-plugins/enigma2_plugins_gst_plugins_pkgname.patch @@ -0,0 +1,53 @@ +diff --git a/lastfm/CONTROL/control b/lastfm/CONTROL/control +index 6255b30..d955011 100644 +--- a/lastfm/CONTROL/control ++++ b/lastfm/CONTROL/control +@@ -2,4 +2,4 @@ Package: enigma2-plugin-extensions-lastfm + Version: 0.4-20070408-r0 + Description: a client to use last.fm, the social music revolution + Maintainer: 3c5x9 <3c5x9@gmx.net> +-Depends: enigma2 (>> 1.0git20070908), python-twisted-web, gst-plugin-neonhttpsrc, python-crypt ++Depends: enigma2 (>> 1.0git20070908), python-twisted-web, gst-plugins-bad-neonhttpsrc, python-crypt +diff --git a/mytube/CONTROL/control b/mytube/CONTROL/control +index 43f3093..6f343c9 100644 +--- a/mytube/CONTROL/control ++++ b/mytube/CONTROL/control +@@ -3,4 +3,4 @@ Version: 1.0-20090420-r0 + Description: MyTube Player for direct playback of Youtube movies + Maintainer: Mladen Horvat + Homepage: http://www.dream-multimedia-tv.de/ +-Depends: enigma2 (>= 2.6git20090520), python-twisted-web, python-gdata, gst-plugin-flv ++Depends: enigma2 (>= 2.6git20090520), python-twisted-web, python-gdata, gst-plugins-good-flv +diff --git a/netcaster/CONTROL/control b/netcaster/CONTROL/control +index 0e69a47..83ac563 100644 +--- a/netcaster/CONTROL/control ++++ b/netcaster/CONTROL/control +@@ -3,4 +3,4 @@ Version: 0.1-20072203-r0 + Description: Player for Network and Internet Streams + Maintainer: 3c5x9 <3c5x9@gmx.net> + Homepage: http://enigma2-plugins.schwerkraft.elitedvb.net/ +-Depends: enigma2 (>= 1.0git20071803), gst-plugin-neonhttpsrc (>= 0.10.4), gst-plugin-icydemux (>= 0.10.14) ++Depends: enigma2 (>= 1.0git20071803), gst-plugins-bad-neonhttpsrc (>= 0.10.4), gst-plugins-good-icydemux (>= 0.10.14) +diff --git a/podcast/CONTROL/control b/podcast/CONTROL/control +index 4bce2da..24209f5 100644 +--- a/podcast/CONTROL/control ++++ b/podcast/CONTROL/control +@@ -3,4 +3,4 @@ Version: 0.1-r0 + Description: Stream podcasts + Maintainer: Nabil Hanna + Homepage: http://www.lt-forums.org/ali +-Depends: enigma2 (>= 2.6git20090520), gst-plugin-neonhttpsrc, python-twisted-web ++Depends: enigma2 (>= 2.6git20090520), gst-plugins-good-neonhttpsrc, pythons-twisted-web +diff --git a/zdfmediathek/src/plugin.py b/zdfmediathek/src/plugin.py +index b46d12f..3b27d56 100644 +--- a/zdfmediathek/src/plugin.py ++++ b/zdfmediathek/src/plugin.py +@@ -46,7 +46,7 @@ PLAY_MP4 = False + if not deviceName.startswith("dm7025"): + try: + #FIXMEE add better check ! ? ! +- for line in popen("opkg info gst-plugin-rtsp").readlines(): ++ for line in popen("opkg info gst-plugins-good-rtsp").readlines(): + if line.find("Version: ") != -1: + if line[9:] >= "0.10.23-r7.1": + PLAY_MP4 = True diff --git a/meta-openvuplus/recipes-vuplus/enigma2/enigma2-plugins/enigma2_plugins_mytube_entry_vuplus.patch b/meta-openvuplus/recipes-vuplus/enigma2/enigma2-plugins/enigma2_plugins_mytube_entry_vuplus.patch new file mode 100644 index 0000000..21f754c --- /dev/null +++ b/meta-openvuplus/recipes-vuplus/enigma2/enigma2-plugins/enigma2_plugins_mytube_entry_vuplus.patch @@ -0,0 +1,13 @@ +diff --git a/mytube/src/MyTubeService.py b/mytube/src/MyTubeService.py +index 7371026..1794db9 100755 +--- a/mytube/src/MyTubeService.py ++++ b/mytube/src/MyTubeService.py +@@ -115,7 +115,7 @@ class MyTubeFeedEntry(): + if self.entry.media.player: + split = self.entry.media.player.url.split("=") + ret = split.pop() +- if ret == 'youtube_gdata': ++ if ret == 'youtube_gdata' or ret == 'youtube_gdata_player': + tmpval=split.pop() + if tmpval.endswith("&feature"): + tmp = tmpval.split("&") diff --git a/meta-openvuplus/recipes-vuplus/enigma2/enigma2-plugins/enigma2_plugins_mytube_tpm.patch b/meta-openvuplus/recipes-vuplus/enigma2/enigma2-plugins/enigma2_plugins_mytube_tpm.patch new file mode 100644 index 0000000..53f3173 --- /dev/null +++ b/meta-openvuplus/recipes-vuplus/enigma2/enigma2-plugins/enigma2_plugins_mytube_tpm.patch @@ -0,0 +1,149 @@ +diff --git a/mytube/src/plugin.py b/mytube/src/plugin.py +index d6fbe85..93b54c1 100755 +--- a/mytube/src/plugin.py ++++ b/mytube/src/plugin.py +@@ -385,44 +385,10 @@ class MyTubePlayerMainScreen(Screen, ConfigListScreen): + current = self["config"].getCurrent() + if current[1].help_window.instance is not None: + current[1].help_window.instance.hide() +- +- l3cert = etpm.getCert(eTPM.TPMD_DT_LEVEL3_CERT) +- if l3cert is None or l3cert is "": +- self["videoactions"].setEnabled(False) +- self["searchactions"].setEnabled(False) +- self["config_actions"].setEnabled(False) +- self["historyactions"].setEnabled(False) +- self["statusactions"].setEnabled(True) +- self.hideSuggestions() +- self.statuslist = [] +- self.statuslist.append(( _("Genuine Dreambox validation failed!"), _("Verify your Dreambox authenticity by running the genuine dreambox plugin!" ) )) +- self["feedlist"].style = "state" +- self['feedlist'].setList(self.statuslist) +- return +- +- self.l3key = validate_cert(l3cert, self.l2key) +- if self.l3key is None: +- print "l3cert invalid" +- return +- rnd = get_rnd() +- if rnd is None: +- print "random error" +- return +- +- val = etpm.challenge(rnd) +- result = decrypt_block(val, self.l3key) +- +- self.statuslist = [] +- if result[80:88] == rnd: +- 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) +- else: +- self.statuslist.append(( _("Genuine Dreambox validation failed!"), _("Verify your Dreambox authenticity by running the genuine dreambox plugin!" ) )) +- self["feedlist"].style = "state" +- self['feedlist'].setList(self.statuslist) +- ++ 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) + def TimerFire(self): + self.Timer.stop() + if config.plugins.mytube.general.loadFeedOnOpen.value: +@@ -453,49 +419,36 @@ class MyTubePlayerMainScreen(Screen, ConfigListScreen): + self.statuslist = [] + self.hideSuggestions() + result = None +- if self.l3key is not None: +- rnd = get_rnd() +- if rnd is None: +- return +- val = etpm.challenge(rnd) +- result = decrypt_block(val, self.l3key) +- if not result or result[80:88] != rnd: ++ print "Genuine Dreambox validation passed" ++ if self.FirstRun == True: ++ self.appendEntries = False ++ myTubeService.startService() ++ if self.HistoryWindow is not None: ++ self.HistoryWindow.deactivate() ++ self.HistoryWindow.instance.hide() ++ if status == 'getFeed': ++ self.statuslist.append(( _("Fetching feed entries"), _("Trying to download the Youtube feed entries. Please wait..." ) )) ++ elif status == 'getSearchFeed': ++ self.statuslist.append(( _("Fetching search entries"), _("Trying to download the Youtube search results. Please wait..." ) )) ++ elif status == 'Error': ++ self.statuslist.append(( _("An error occured."), _("There was an error getting the feed entries. Please try again." ) )) ++ elif status == 'noVideos': + self["key_green"].show() +- self.statuslist.append(( _("Genuine Dreambox validation failed!"), _("Verify your Dreambox authenticity by running the genuine dreambox plugin!" ) )) +- self["feedlist"].style = "state" +- self['feedlist'].setList(self.statuslist) +- else: +- print "Genuine Dreambox validation passed" +- if self.FirstRun == True: +- self.appendEntries = False +- myTubeService.startService() +- if self.HistoryWindow is not None: +- self.HistoryWindow.deactivate() +- self.HistoryWindow.instance.hide() +- if status == 'getFeed': +- self.statuslist.append(( _("Fetching feed entries"), _("Trying to download the Youtube feed entries. Please wait..." ) )) +- elif status == 'getSearchFeed': +- self.statuslist.append(( _("Fetching search entries"), _("Trying to download the Youtube search results. Please wait..." ) )) +- elif status == 'Error': +- self.statuslist.append(( _("An error occured."), _("There was an error getting the feed entries. Please try again." ) )) +- elif status == 'noVideos': +- self["key_green"].show() +- self.statuslist.append(( _("No videos to display"), _("Please select a standard feed or try searching for videos." ) )) +- elif status == 'byPass': +- self.statuslist.append(( _("Not fetching feed entries"), _("Please enter your search term." ) )) +- self["feedlist"].style = "state" +- self['feedlist'].setList(self.statuslist) +- self.switchToConfigList() ++ self.statuslist.append(( _("No videos to display"), _("Please select a standard feed or try searching for videos." ) )) ++ elif status == 'byPass': ++ self.statuslist.append(( _("Not fetching feed entries"), _("Please enter your search term." ) )) + self["feedlist"].style = "state" + self['feedlist'].setList(self.statuslist) +- if self.FirstRun == True: +- if config.plugins.mytube.general.loadFeedOnOpen.value: +- if config.plugins.mytube.general.startFeed.value == 'hd': +- self.FeedURL = "http://gdata.youtube.com/feeds/api/videos/-/HD" +- else: +- self.FeedURL = self.BASE_STD_FEEDURL + str(config.plugins.mytube.general.startFeed.value) +- self.getFeed(self.FeedURL, str(config.plugins.mytube.general.startFeed.value)) +- ++ self.switchToConfigList() ++ self["feedlist"].style = "state" ++ self['feedlist'].setList(self.statuslist) ++ if self.FirstRun == True: ++ if config.plugins.mytube.general.loadFeedOnOpen.value: ++ if config.plugins.mytube.general.startFeed.value == 'hd': ++ self.FeedURL = "http://gdata.youtube.com/feeds/api/videos/-/HD" ++ else: ++ self.FeedURL = self.BASE_STD_FEEDURL + str(config.plugins.mytube.general.startFeed.value) ++ self.getFeed(self.FeedURL, str(config.plugins.mytube.general.startFeed.value)) + + def handleHelpWindow(self): + print "[handleHelpWindow]" +@@ -1775,17 +1728,8 @@ class MyTubePlayer(Screen, InfoBarNotifications): + + + def MyTubeMain(session, **kwargs): +- l2 = False +- l2cert = etpm.getCert(eTPM.TPMD_DT_LEVEL2_CERT) +- if l2cert is None: +- print "l2cert not found" +- return +- +- l2key = validate_cert(l2cert, rootkey) +- if l2key is None: +- print "l2cert invalid" +- return + l2 = True ++ l2key = None + if l2: + session.open(MyTubePlayerMainScreen,l2key) + diff --git a/meta-openvuplus/recipes-vuplus/enigma2/enigma2-plugins/enigma2_plugins_mytube_vuplus.patch b/meta-openvuplus/recipes-vuplus/enigma2/enigma2-plugins/enigma2_plugins_mytube_vuplus.patch new file mode 100644 index 0000000..be02279 --- /dev/null +++ b/meta-openvuplus/recipes-vuplus/enigma2/enigma2-plugins/enigma2_plugins_mytube_vuplus.patch @@ -0,0 +1,74 @@ +diff --git a/mytube/src/plugin.py b/mytube/src/plugin.py +index 8f9c71d..4420fe2 100755 +--- a/mytube/src/plugin.py ++++ b/mytube/src/plugin.py +@@ -386,8 +386,10 @@ class MyTubePlayerMainScreen(Screen, ConfigListScreen): + if current[1].help_window.instance is not None: + current[1].help_window.instance.hide() + +- l3cert = etpm.getCert(eTPM.TPMD_DT_LEVEL3_CERT) +- if l3cert is None or l3cert is "": ++# l3cert = etpm.getCert(eTPM.TPMD_DT_LEVEL3_CERT) ++# if l3cert is None or l3cert is "": ++ l3cert = 0 ++ if False: + self["videoactions"].setEnabled(False) + self["searchactions"].setEnabled(False) + self["config_actions"].setEnabled(False) +@@ -400,7 +402,8 @@ class MyTubePlayerMainScreen(Screen, ConfigListScreen): + self['feedlist'].setList(self.statuslist) + return + +- self.l3key = validate_cert(l3cert, self.l2key) ++# self.l3key = validate_cert(l3cert, self.l2key) ++ self.l3key = 0 + if self.l3key is None: + print "l3cert invalid" + return +@@ -409,11 +412,12 @@ class MyTubePlayerMainScreen(Screen, ConfigListScreen): + print "random error" + return + +- val = etpm.challenge(rnd) +- result = decrypt_block(val, self.l3key) ++# val = etpm.challenge(rnd) ++# result = decrypt_block(val, self.l3key) + + self.statuslist = [] +- if result[80:88] == rnd: ++# if result[80:88] == rnd: ++ if True: + self.statuslist.append(( _("Fetching feed entries"), _("Trying to download the Youtube feed entries. Please wait..." ) )) + self["feedlist"].style = "state" + self['feedlist'].setList(self.statuslist) +@@ -457,9 +461,10 @@ class MyTubePlayerMainScreen(Screen, ConfigListScreen): + rnd = get_rnd() + if rnd is None: + return +- val = etpm.challenge(rnd) +- result = decrypt_block(val, self.l3key) +- if not result or result[80:88] != rnd: ++# val = etpm.challenge(rnd) ++# result = decrypt_block(val, self.l3key) ++# if not result or result[80:88] != rnd: ++ if False: + self["key_green"].show() + self.statuslist.append(( _("Genuine Dreambox validation failed!"), _("Verify your Dreambox authenticity by running the genuine dreambox plugin!" ) )) + self["feedlist"].style = "state" +@@ -1776,12 +1781,14 @@ class MyTubePlayer(Screen, InfoBarNotifications): + + def MyTubeMain(session, **kwargs): + l2 = False +- l2cert = etpm.getCert(eTPM.TPMD_DT_LEVEL2_CERT) ++# l2cert = etpm.getCert(eTPM.TPMD_DT_LEVEL2_CERT) ++ l2cert = 0 + if l2cert is None: + print "l2cert not found" + return + +- l2key = validate_cert(l2cert, rootkey) ++# l2key = validate_cert(l2cert, rootkey) ++ l2key = 0 + if l2key is None: + print "l2cert invalid" + return diff --git a/meta-openvuplus/recipes-vuplus/enigma2/enigma2-plugins/enigma2_plugins_webinterface_tpm.patch b/meta-openvuplus/recipes-vuplus/enigma2/enigma2-plugins/enigma2_plugins_webinterface_tpm.patch new file mode 100644 index 0000000..918f74f --- /dev/null +++ b/meta-openvuplus/recipes-vuplus/enigma2/enigma2-plugins/enigma2_plugins_webinterface_tpm.patch @@ -0,0 +1,31 @@ +diff --git a/webinterface/src/plugin.py b/webinterface/src/plugin.py +index cbf42f8..caebbb0 100644 +--- a/webinterface/src/plugin.py ++++ b/webinterface/src/plugin.py +@@ -228,7 +228,7 @@ def stopWebserver(session): + # on given ipaddress, port, w/o auth, w/o ssl + #=============================================================================== + def startServerInstance(session, ipaddress, port, useauth=False, l2k=None, usessl=False): +- if hw.get_device_name().lower() != "dm7025": ++ if 0: + l3k = None + l3c = tpm.getCert(eTPM.TPMD_DT_LEVEL3_CERT) + +@@ -550,7 +550,7 @@ def checkBonjour(): + def networkstart(reason, **kwargs): + l2r = False + l2k = None +- if hw.get_device_name().lower() != "dm7025": ++ if 0: + l2c = tpm.getCert(eTPM.TPMD_DT_LEVEL2_CERT) + + if l2c is None: +@@ -579,7 +579,7 @@ def openconfig(session, **kwargs): + def configCB(result, session): + l2r = False + l2k = None +- if hw.get_device_name().lower() != "dm7025": ++ if 0: + l2c = tpm.getCert(eTPM.TPMD_DT_LEVEL2_CERT) + + if l2c is None: diff --git a/meta-openvuplus/recipes-vuplus/enigma2/enigma2-plugins/favicon.ico b/meta-openvuplus/recipes-vuplus/enigma2/enigma2-plugins/favicon.ico new file mode 100755 index 0000000000000000000000000000000000000000..0d6f32576bf058fe2a7aa259de8e2d5c5fbcbc02 GIT binary patch literal 4286 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 - - -- -+ -+ - - - -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() diff --git a/meta-openvuplus/recipes-vuplus/enigma2/enigma2-plugins/vuplus/enigma2_plugins_ac3lipsync_dolby.patch b/meta-openvuplus/recipes-vuplus/enigma2/enigma2-plugins/vuplus/enigma2_plugins_ac3lipsync_dolby.patch deleted file mode 100644 index 13dc932..0000000 --- a/meta-openvuplus/recipes-vuplus/enigma2/enigma2-plugins/vuplus/enigma2_plugins_ac3lipsync_dolby.patch +++ /dev/null @@ -1,13 +0,0 @@ -diff --git a/audiosync/src/AC3delay.py b/audiosync/src/AC3delay.py -index a92c859..6bbc86d 100644 ---- a/audiosync/src/AC3delay.py -+++ b/audiosync/src/AC3delay.py -@@ -177,7 +177,7 @@ class AC3delay: - - tlist.append((description, x)) - if x == self.selectedAudioIndex: -- if ((description.find("AC3") != -1 or description.find("AC-3") != -1) and not bDownmixEnabled) or description.find("DTS") != -1: -+ if ((description.find("Dolby") != -1 or description.find("AC3") != -1 or description.find("AC-3") != -1) and not bDownmixEnabled) or description.find("DTS") != -1: - self.whichAudio = AC3 - self.channelAudio = AC3 - else: diff --git a/meta-openvuplus/recipes-vuplus/enigma2/enigma2-plugins/vuplus/enigma2_plugins_autoresolution_fix.patch b/meta-openvuplus/recipes-vuplus/enigma2/enigma2-plugins/vuplus/enigma2_plugins_autoresolution_fix.patch deleted file mode 100644 index 481d00d..0000000 --- a/meta-openvuplus/recipes-vuplus/enigma2/enigma2-plugins/vuplus/enigma2_plugins_autoresolution_fix.patch +++ /dev/null @@ -1,14 +0,0 @@ -diff --git a/autoresolution/src/plugin.py b/autoresolution/src/plugin.py -old mode 100644 -new mode 100755 -index f034c06..0dee6ce ---- a/autoresolution/src/plugin.py -+++ b/autoresolution/src/plugin.py -@@ -302,6 +302,7 @@ class AutoResSetupMenu(Screen, ConfigListScreen): - - def apply(self): - for x in self["config"].list: -+ x[1].onDeselect(self.session) - x[1].save() - self.close() - diff --git a/meta-openvuplus/recipes-vuplus/enigma2/enigma2-plugins/vuplus/enigma2_plugins_dependency.patch b/meta-openvuplus/recipes-vuplus/enigma2/enigma2-plugins/vuplus/enigma2_plugins_dependency.patch deleted file mode 100644 index 711e5ce..0000000 --- a/meta-openvuplus/recipes-vuplus/enigma2/enigma2-plugins/vuplus/enigma2_plugins_dependency.patch +++ /dev/null @@ -1,10 +0,0 @@ -diff --git a/fancontrol2/CONTROL/control b/fancontrol2/CONTROL/control -index b42c485..356ab02 100644 ---- a/fancontrol2/CONTROL/control -+++ b/fancontrol2/CONTROL/control -@@ -3,4 +3,4 @@ Version: 2.5r1 - Description: Temperature dependent fan control - Maintainer: IHAD joergm6 - Homepage: http://www.i-have-a-dreambox.com --Depends: enigma2 (>> 2.6) -+Depends: enigma2 (>> 2.6), enigma2-plugin-extensions-webinterface diff --git a/meta-openvuplus/recipes-vuplus/enigma2/enigma2-plugins/vuplus/enigma2_plugins_gst_plugins_pkgname.patch b/meta-openvuplus/recipes-vuplus/enigma2/enigma2-plugins/vuplus/enigma2_plugins_gst_plugins_pkgname.patch deleted file mode 100644 index cee82c6..0000000 --- a/meta-openvuplus/recipes-vuplus/enigma2/enigma2-plugins/vuplus/enigma2_plugins_gst_plugins_pkgname.patch +++ /dev/null @@ -1,53 +0,0 @@ -diff --git a/lastfm/CONTROL/control b/lastfm/CONTROL/control -index 6255b30..d955011 100644 ---- a/lastfm/CONTROL/control -+++ b/lastfm/CONTROL/control -@@ -2,4 +2,4 @@ Package: enigma2-plugin-extensions-lastfm - Version: 0.4-20070408-r0 - Description: a client to use last.fm, the social music revolution - Maintainer: 3c5x9 <3c5x9@gmx.net> --Depends: enigma2 (>> 1.0git20070908), python-twisted-web, gst-plugin-neonhttpsrc, python-crypt -+Depends: enigma2 (>> 1.0git20070908), python-twisted-web, gst-plugins-bad-neonhttpsrc, python-crypt -diff --git a/mytube/CONTROL/control b/mytube/CONTROL/control -index 43f3093..6f343c9 100644 ---- a/mytube/CONTROL/control -+++ b/mytube/CONTROL/control -@@ -3,4 +3,4 @@ Version: 1.0-20090420-r0 - Description: MyTube Player for direct playback of Youtube movies - Maintainer: Mladen Horvat - Homepage: http://www.dream-multimedia-tv.de/ --Depends: enigma2 (>= 2.6git20090520), python-twisted-web, python-gdata, gst-plugin-flv -+Depends: enigma2 (>= 2.6git20090520), python-twisted-web, python-gdata, gst-plugins-good-flv -diff --git a/netcaster/CONTROL/control b/netcaster/CONTROL/control -index 0e69a47..83ac563 100644 ---- a/netcaster/CONTROL/control -+++ b/netcaster/CONTROL/control -@@ -3,4 +3,4 @@ Version: 0.1-20072203-r0 - Description: Player for Network and Internet Streams - Maintainer: 3c5x9 <3c5x9@gmx.net> - Homepage: http://enigma2-plugins.schwerkraft.elitedvb.net/ --Depends: enigma2 (>= 1.0git20071803), gst-plugin-neonhttpsrc (>= 0.10.4), gst-plugin-icydemux (>= 0.10.14) -+Depends: enigma2 (>= 1.0git20071803), gst-plugins-bad-neonhttpsrc (>= 0.10.4), gst-plugins-good-icydemux (>= 0.10.14) -diff --git a/podcast/CONTROL/control b/podcast/CONTROL/control -index 4bce2da..24209f5 100644 ---- a/podcast/CONTROL/control -+++ b/podcast/CONTROL/control -@@ -3,4 +3,4 @@ Version: 0.1-r0 - Description: Stream podcasts - Maintainer: Nabil Hanna - Homepage: http://www.lt-forums.org/ali --Depends: enigma2 (>= 2.6git20090520), gst-plugin-neonhttpsrc, python-twisted-web -+Depends: enigma2 (>= 2.6git20090520), gst-plugins-good-neonhttpsrc, pythons-twisted-web -diff --git a/zdfmediathek/src/plugin.py b/zdfmediathek/src/plugin.py -index b46d12f..3b27d56 100644 ---- a/zdfmediathek/src/plugin.py -+++ b/zdfmediathek/src/plugin.py -@@ -46,7 +46,7 @@ PLAY_MP4 = False - if not deviceName.startswith("dm7025"): - try: - #FIXMEE add better check ! ? ! -- for line in popen("opkg info gst-plugin-rtsp").readlines(): -+ for line in popen("opkg info gst-plugins-good-rtsp").readlines(): - if line.find("Version: ") != -1: - if line[9:] >= "0.10.23-r7.1": - PLAY_MP4 = True diff --git a/meta-openvuplus/recipes-vuplus/enigma2/enigma2-plugins/vuplus/enigma2_plugins_mytube_entry_vuplus.patch b/meta-openvuplus/recipes-vuplus/enigma2/enigma2-plugins/vuplus/enigma2_plugins_mytube_entry_vuplus.patch deleted file mode 100644 index 21f754c..0000000 --- a/meta-openvuplus/recipes-vuplus/enigma2/enigma2-plugins/vuplus/enigma2_plugins_mytube_entry_vuplus.patch +++ /dev/null @@ -1,13 +0,0 @@ -diff --git a/mytube/src/MyTubeService.py b/mytube/src/MyTubeService.py -index 7371026..1794db9 100755 ---- a/mytube/src/MyTubeService.py -+++ b/mytube/src/MyTubeService.py -@@ -115,7 +115,7 @@ class MyTubeFeedEntry(): - if self.entry.media.player: - split = self.entry.media.player.url.split("=") - ret = split.pop() -- if ret == 'youtube_gdata': -+ if ret == 'youtube_gdata' or ret == 'youtube_gdata_player': - tmpval=split.pop() - if tmpval.endswith("&feature"): - tmp = tmpval.split("&") diff --git a/meta-openvuplus/recipes-vuplus/enigma2/enigma2-plugins/vuplus/enigma2_plugins_mytube_tpm.patch b/meta-openvuplus/recipes-vuplus/enigma2/enigma2-plugins/vuplus/enigma2_plugins_mytube_tpm.patch deleted file mode 100644 index 53f3173..0000000 --- a/meta-openvuplus/recipes-vuplus/enigma2/enigma2-plugins/vuplus/enigma2_plugins_mytube_tpm.patch +++ /dev/null @@ -1,149 +0,0 @@ -diff --git a/mytube/src/plugin.py b/mytube/src/plugin.py -index d6fbe85..93b54c1 100755 ---- a/mytube/src/plugin.py -+++ b/mytube/src/plugin.py -@@ -385,44 +385,10 @@ class MyTubePlayerMainScreen(Screen, ConfigListScreen): - current = self["config"].getCurrent() - if current[1].help_window.instance is not None: - current[1].help_window.instance.hide() -- -- l3cert = etpm.getCert(eTPM.TPMD_DT_LEVEL3_CERT) -- if l3cert is None or l3cert is "": -- self["videoactions"].setEnabled(False) -- self["searchactions"].setEnabled(False) -- self["config_actions"].setEnabled(False) -- self["historyactions"].setEnabled(False) -- self["statusactions"].setEnabled(True) -- self.hideSuggestions() -- self.statuslist = [] -- self.statuslist.append(( _("Genuine Dreambox validation failed!"), _("Verify your Dreambox authenticity by running the genuine dreambox plugin!" ) )) -- self["feedlist"].style = "state" -- self['feedlist'].setList(self.statuslist) -- return -- -- self.l3key = validate_cert(l3cert, self.l2key) -- if self.l3key is None: -- print "l3cert invalid" -- return -- rnd = get_rnd() -- if rnd is None: -- print "random error" -- return -- -- val = etpm.challenge(rnd) -- result = decrypt_block(val, self.l3key) -- -- self.statuslist = [] -- if result[80:88] == rnd: -- 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) -- else: -- self.statuslist.append(( _("Genuine Dreambox validation failed!"), _("Verify your Dreambox authenticity by running the genuine dreambox plugin!" ) )) -- self["feedlist"].style = "state" -- self['feedlist'].setList(self.statuslist) -- -+ 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) - def TimerFire(self): - self.Timer.stop() - if config.plugins.mytube.general.loadFeedOnOpen.value: -@@ -453,49 +419,36 @@ class MyTubePlayerMainScreen(Screen, ConfigListScreen): - self.statuslist = [] - self.hideSuggestions() - result = None -- if self.l3key is not None: -- rnd = get_rnd() -- if rnd is None: -- return -- val = etpm.challenge(rnd) -- result = decrypt_block(val, self.l3key) -- if not result or result[80:88] != rnd: -+ print "Genuine Dreambox validation passed" -+ if self.FirstRun == True: -+ self.appendEntries = False -+ myTubeService.startService() -+ if self.HistoryWindow is not None: -+ self.HistoryWindow.deactivate() -+ self.HistoryWindow.instance.hide() -+ if status == 'getFeed': -+ self.statuslist.append(( _("Fetching feed entries"), _("Trying to download the Youtube feed entries. Please wait..." ) )) -+ elif status == 'getSearchFeed': -+ self.statuslist.append(( _("Fetching search entries"), _("Trying to download the Youtube search results. Please wait..." ) )) -+ elif status == 'Error': -+ self.statuslist.append(( _("An error occured."), _("There was an error getting the feed entries. Please try again." ) )) -+ elif status == 'noVideos': - self["key_green"].show() -- self.statuslist.append(( _("Genuine Dreambox validation failed!"), _("Verify your Dreambox authenticity by running the genuine dreambox plugin!" ) )) -- self["feedlist"].style = "state" -- self['feedlist'].setList(self.statuslist) -- else: -- print "Genuine Dreambox validation passed" -- if self.FirstRun == True: -- self.appendEntries = False -- myTubeService.startService() -- if self.HistoryWindow is not None: -- self.HistoryWindow.deactivate() -- self.HistoryWindow.instance.hide() -- if status == 'getFeed': -- self.statuslist.append(( _("Fetching feed entries"), _("Trying to download the Youtube feed entries. Please wait..." ) )) -- elif status == 'getSearchFeed': -- self.statuslist.append(( _("Fetching search entries"), _("Trying to download the Youtube search results. Please wait..." ) )) -- elif status == 'Error': -- self.statuslist.append(( _("An error occured."), _("There was an error getting the feed entries. Please try again." ) )) -- elif status == 'noVideos': -- self["key_green"].show() -- self.statuslist.append(( _("No videos to display"), _("Please select a standard feed or try searching for videos." ) )) -- elif status == 'byPass': -- self.statuslist.append(( _("Not fetching feed entries"), _("Please enter your search term." ) )) -- self["feedlist"].style = "state" -- self['feedlist'].setList(self.statuslist) -- self.switchToConfigList() -+ self.statuslist.append(( _("No videos to display"), _("Please select a standard feed or try searching for videos." ) )) -+ elif status == 'byPass': -+ self.statuslist.append(( _("Not fetching feed entries"), _("Please enter your search term." ) )) - self["feedlist"].style = "state" - self['feedlist'].setList(self.statuslist) -- if self.FirstRun == True: -- if config.plugins.mytube.general.loadFeedOnOpen.value: -- if config.plugins.mytube.general.startFeed.value == 'hd': -- self.FeedURL = "http://gdata.youtube.com/feeds/api/videos/-/HD" -- else: -- self.FeedURL = self.BASE_STD_FEEDURL + str(config.plugins.mytube.general.startFeed.value) -- self.getFeed(self.FeedURL, str(config.plugins.mytube.general.startFeed.value)) -- -+ self.switchToConfigList() -+ self["feedlist"].style = "state" -+ self['feedlist'].setList(self.statuslist) -+ if self.FirstRun == True: -+ if config.plugins.mytube.general.loadFeedOnOpen.value: -+ if config.plugins.mytube.general.startFeed.value == 'hd': -+ self.FeedURL = "http://gdata.youtube.com/feeds/api/videos/-/HD" -+ else: -+ self.FeedURL = self.BASE_STD_FEEDURL + str(config.plugins.mytube.general.startFeed.value) -+ self.getFeed(self.FeedURL, str(config.plugins.mytube.general.startFeed.value)) - - def handleHelpWindow(self): - print "[handleHelpWindow]" -@@ -1775,17 +1728,8 @@ class MyTubePlayer(Screen, InfoBarNotifications): - - - def MyTubeMain(session, **kwargs): -- l2 = False -- l2cert = etpm.getCert(eTPM.TPMD_DT_LEVEL2_CERT) -- if l2cert is None: -- print "l2cert not found" -- return -- -- l2key = validate_cert(l2cert, rootkey) -- if l2key is None: -- print "l2cert invalid" -- return - l2 = True -+ l2key = None - if l2: - session.open(MyTubePlayerMainScreen,l2key) - diff --git a/meta-openvuplus/recipes-vuplus/enigma2/enigma2-plugins/vuplus/enigma2_plugins_mytube_vuplus.patch b/meta-openvuplus/recipes-vuplus/enigma2/enigma2-plugins/vuplus/enigma2_plugins_mytube_vuplus.patch deleted file mode 100644 index be02279..0000000 --- a/meta-openvuplus/recipes-vuplus/enigma2/enigma2-plugins/vuplus/enigma2_plugins_mytube_vuplus.patch +++ /dev/null @@ -1,74 +0,0 @@ -diff --git a/mytube/src/plugin.py b/mytube/src/plugin.py -index 8f9c71d..4420fe2 100755 ---- a/mytube/src/plugin.py -+++ b/mytube/src/plugin.py -@@ -386,8 +386,10 @@ class MyTubePlayerMainScreen(Screen, ConfigListScreen): - if current[1].help_window.instance is not None: - current[1].help_window.instance.hide() - -- l3cert = etpm.getCert(eTPM.TPMD_DT_LEVEL3_CERT) -- if l3cert is None or l3cert is "": -+# l3cert = etpm.getCert(eTPM.TPMD_DT_LEVEL3_CERT) -+# if l3cert is None or l3cert is "": -+ l3cert = 0 -+ if False: - self["videoactions"].setEnabled(False) - self["searchactions"].setEnabled(False) - self["config_actions"].setEnabled(False) -@@ -400,7 +402,8 @@ class MyTubePlayerMainScreen(Screen, ConfigListScreen): - self['feedlist'].setList(self.statuslist) - return - -- self.l3key = validate_cert(l3cert, self.l2key) -+# self.l3key = validate_cert(l3cert, self.l2key) -+ self.l3key = 0 - if self.l3key is None: - print "l3cert invalid" - return -@@ -409,11 +412,12 @@ class MyTubePlayerMainScreen(Screen, ConfigListScreen): - print "random error" - return - -- val = etpm.challenge(rnd) -- result = decrypt_block(val, self.l3key) -+# val = etpm.challenge(rnd) -+# result = decrypt_block(val, self.l3key) - - self.statuslist = [] -- if result[80:88] == rnd: -+# if result[80:88] == rnd: -+ if True: - self.statuslist.append(( _("Fetching feed entries"), _("Trying to download the Youtube feed entries. Please wait..." ) )) - self["feedlist"].style = "state" - self['feedlist'].setList(self.statuslist) -@@ -457,9 +461,10 @@ class MyTubePlayerMainScreen(Screen, ConfigListScreen): - rnd = get_rnd() - if rnd is None: - return -- val = etpm.challenge(rnd) -- result = decrypt_block(val, self.l3key) -- if not result or result[80:88] != rnd: -+# val = etpm.challenge(rnd) -+# result = decrypt_block(val, self.l3key) -+# if not result or result[80:88] != rnd: -+ if False: - self["key_green"].show() - self.statuslist.append(( _("Genuine Dreambox validation failed!"), _("Verify your Dreambox authenticity by running the genuine dreambox plugin!" ) )) - self["feedlist"].style = "state" -@@ -1776,12 +1781,14 @@ class MyTubePlayer(Screen, InfoBarNotifications): - - def MyTubeMain(session, **kwargs): - l2 = False -- l2cert = etpm.getCert(eTPM.TPMD_DT_LEVEL2_CERT) -+# l2cert = etpm.getCert(eTPM.TPMD_DT_LEVEL2_CERT) -+ l2cert = 0 - if l2cert is None: - print "l2cert not found" - return - -- l2key = validate_cert(l2cert, rootkey) -+# l2key = validate_cert(l2cert, rootkey) -+ l2key = 0 - if l2key is None: - print "l2cert invalid" - return diff --git a/meta-openvuplus/recipes-vuplus/enigma2/enigma2-plugins/vuplus/enigma2_plugins_webinterface_tpm.patch b/meta-openvuplus/recipes-vuplus/enigma2/enigma2-plugins/vuplus/enigma2_plugins_webinterface_tpm.patch deleted file mode 100644 index 918f74f..0000000 --- a/meta-openvuplus/recipes-vuplus/enigma2/enigma2-plugins/vuplus/enigma2_plugins_webinterface_tpm.patch +++ /dev/null @@ -1,31 +0,0 @@ -diff --git a/webinterface/src/plugin.py b/webinterface/src/plugin.py -index cbf42f8..caebbb0 100644 ---- a/webinterface/src/plugin.py -+++ b/webinterface/src/plugin.py -@@ -228,7 +228,7 @@ def stopWebserver(session): - # on given ipaddress, port, w/o auth, w/o ssl - #=============================================================================== - def startServerInstance(session, ipaddress, port, useauth=False, l2k=None, usessl=False): -- if hw.get_device_name().lower() != "dm7025": -+ if 0: - l3k = None - l3c = tpm.getCert(eTPM.TPMD_DT_LEVEL3_CERT) - -@@ -550,7 +550,7 @@ def checkBonjour(): - def networkstart(reason, **kwargs): - l2r = False - l2k = None -- if hw.get_device_name().lower() != "dm7025": -+ if 0: - l2c = tpm.getCert(eTPM.TPMD_DT_LEVEL2_CERT) - - if l2c is None: -@@ -579,7 +579,7 @@ def openconfig(session, **kwargs): - def configCB(result, session): - l2r = False - l2k = None -- if hw.get_device_name().lower() != "dm7025": -+ if 0: - l2c = tpm.getCert(eTPM.TPMD_DT_LEVEL2_CERT) - - if l2c is None: diff --git a/meta-openvuplus/recipes-vuplus/enigma2/enigma2-plugins/vuplus/favicon.ico b/meta-openvuplus/recipes-vuplus/enigma2/enigma2-plugins/vuplus/favicon.ico deleted file mode 100755 index 0d6f32576bf058fe2a7aa259de8e2d5c5fbcbc02..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4286 zcmeHJF>4}G5Z=Q-AP84)B`N&}u}N=bt+qD)1cg{xDEI?}Tw@SpW0N#1LIPr;7UmKV zYz|_RQ?asodEbT^W}mypyM&dHOnA=hn{VcunYV9=W&O~9wry##t!C7+eroH)eX^{i z*4nFowP>G@oawzkdZ~~XIKllCGOz6OnB20CZ#(?=@1U96wyl!Mq>4tP2jTH9|4)qH z9Z028ie$N5szf3YSOe;7G#UyxDf9VUWipw-I6q$6L#!0XaeVWjUz1nH!A5PA_Yf_6 zm$|@Y#-lDNqtVFaGwc7CIdnQ5nUd{dvFPDPJyJ{#^i2{pKeHd4r4-p8dXjiKC-g0S zu+92Rzu$AAP+)qTtC<7$f#NU^lA!*`4^46VH2NT^R;zA|oPm6oKAInQObXpOoGS@t zLf?b;@<$>OC0DIhBN{axkJ%TC#XNT`m&>`nQmMrFUa!Y^nUew9ko&OX@wjKL*K3BC z%Vm$R-EOmQFc`SLdcD50XXa#pHcVeSomR9em5PL_Y&Oe2VC1X;%;)o})oO9fbUO9m zDK7)GL3^an&&!I|!^0y(Vbi|UtJR7z{eIsUBk^z97Z<-2RB(fm zxXotciy^G3yWOr@EEeka_HHL`I2>}`?RLB4r(9Q8-tXe|^-Um_Vn_oEK@YS?`uX`U z^WWe9-tiL-8a