import enigma2-plugin-extensions-mediaportal 2020052001 v2020052001
authorChristian Weiske <cweiske@cweiske.de>
Wed, 20 May 2020 23:15:23 +0000 (01:15 +0200)
committerChristian Weiske <cweiske@cweiske.de>
Wed, 20 May 2020 23:15:23 +0000 (01:15 +0200)
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/mediatheken/youtube.py
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/locale/de/LC_MESSAGES/MediaPortal.mo
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/locale/de/LC_MESSAGES/MediaPortal.po
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/plugin.py
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/resources/simpleplayer.py
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/resources/youtubeplayer.py
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/resources/yt_url.py

index 27974dc..4719cbe 100644 (file)
@@ -62,13 +62,15 @@ def getAPIKEY():
                APIKEYV3_MASTER = master.group(1).strip()
                if len(APIKEYV3_MASTER) < 8:
                        APIKEYV3_MASTER = ''
-               apikeys.append(APIKEYV3_MASTER)
+               else:
+                       apikeys.append(APIKEYV3_MASTER)
        backup = re.search('backup=(.*?)\n', data)
        if backup:
                APIKEYV3_BACKUP = backup.group(1).strip()
                if len(APIKEYV3_BACKUP) < 8:
                        APIKEYV3_BACKUP = ''
-               apikeys.append(APIKEYV3_BACKUP)
+               else:
+                       apikeys.append(APIKEYV3_BACKUP)
        if len(apikeys) > 0:
                APIKEYV3 = random.choice(apikeys)
 
@@ -264,6 +266,7 @@ class youtubeGenreScreen(MenuHelper):
                        ('Mitsubishi Motors Europe', 'https://www.youtube.com/channel/UCejAnh9OrFJ_ubho2IIAexQ'),
                        ('Moto Guzzi', 'https://www.youtube.com/user/motoguzziofficial'),
                        ('Nissan Deutschland', 'https://www.youtube.com/user/NissanDeutsch'),
+                       ('PEUGEOT Deutschland', 'https://www.youtube.com/user/PEUGEOTdeutschland'),
                        ('Porsche', 'https://www.youtube.com/user/Porsche'),
                        ('SEAT Deutschland', 'https://www.youtube.com/user/SEATde'),
                        ('ŠKODA AUTO Deutschland', 'https://www.youtube.com/user/skodade'),
@@ -1309,7 +1312,7 @@ class YT_ListScreen(MPScreen, ThumbsHelper):
                                                                                if str(runitem["id"]) == url:
                                                                                        views = str(runitem["statistics"]["viewCount"])
                                                                                        runtime = self.convertDuration(str(runitem["contentDetails"]["duration"]))
-                                                                                       if runtime == "00:00":
+                                                                                       if runtime == "00:00" or runtime == "0 00 00":
                                                                                                runtime = "live"
                                                                                        if runtime != "live":
                                                                                                desc = _("Views:") + " " + views + "\n" + desc
@@ -1339,7 +1342,7 @@ class YT_ListScreen(MPScreen, ThumbsHelper):
                                                                                if str(runitem["id"]) == url:
                                                                                        views = str(runitem["statistics"]["viewCount"])
                                                                                        runtime = self.convertDuration(str(runitem["contentDetails"]["duration"]))
-                                                                                       if runtime == "00:00":
+                                                                                       if runtime == "00:00" or runtime == "0 00 00":
                                                                                                runtime = "live"
                                                                                        if runtime != "live":
                                                                                                desc = _("Views:") + " " + views + "\n" + desc
@@ -1988,10 +1991,10 @@ class YT_Oauth2:
                        fp = open(oauth2_file)
                        data = fp.read()
                        fp.close()
-                       client_id = re.search('client_id=(.*?)\n', data).group(1)
+                       client_id = re.search('client_id=(.*?)\n', data).group(1).strip()
                        if client_id:
                                self.CLIENT_ID = 'client_id='+client_id
-                       client_secret = re.search('client_secret=(.*?)\n', data).group(1)
+                       client_secret = re.search('client_secret=(.*?)\n', data).group(1).strip()
                        if client_secret:
                                self.CLIENT_SECRET = '&client_secret='+client_secret
                except:
@@ -2124,4 +2127,4 @@ class YT_Oauth2:
                else:
                        return self.accessToken
 
-yt_oauth2 = YT_Oauth2()
\ No newline at end of file
+yt_oauth2 = YT_Oauth2()
index 70f5181..a543431 100644 (file)
Binary files a/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/locale/de/LC_MESSAGES/MediaPortal.mo and b/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/locale/de/LC_MESSAGES/MediaPortal.mo differ
index 7eb81ab..f1ed354 100644 (file)
@@ -1,8 +1,8 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: MediaPortal\n"
-"POT-Creation-Date: 2020-05-17 12:24+0200\n"
-"PO-Revision-Date: 2020-05-17 12:24+0200\n"
+"POT-Creation-Date: 2020-05-20 14:29+0200\n"
+"PO-Revision-Date: 2020-05-20 14:29+0200\n"
 "Last-Translator: dhwz <dhwz@gmx.net>\n"
 "Language-Team: MediaPortal Team\n"
 "Language: de_DE\n"
@@ -36,7 +36,7 @@ msgstr ""
 #: mpgz/src/additions/porn/pornstreams.py:110
 #: mpgz/src/additions/porn/pornvex.py:90
 #: mpgz/src/additions/porn/streammdh.py:89
-#: mpgz/src/additions/porn/streamxxx.py:153
+#: mpgz/src/additions/porn/streamxxx.py:152
 #: mpgz/src/additions/porn/yourpornsexy.py:144
 #: mpgz/src/additions/porn/yourpornsexy.py:206
 #: mpgz/src/additions/porn/yourpornsexy.py:274
@@ -112,7 +112,7 @@ msgstr "Seite"
 #: mpgz/src/additions/porn/pornstreams.py:112
 #: mpgz/src/additions/porn/pornvex.py:92
 #: mpgz/src/additions/porn/streammdh.py:92
-#: mpgz/src/additions/porn/streamxxx.py:155
+#: mpgz/src/additions/porn/streamxxx.py:154
 #: mpgz/src/additions/porn/yourpornsexy.py:146
 #: mpgz/src/additions/porn/yourpornsexy.py:208
 #: mpgz/src/additions/porn/yourpornsexy.py:276
@@ -133,7 +133,7 @@ msgstr "Seite"
 #: src/additions/mediatheken/funk.py:280
 #: src/additions/mediatheken/servustv.py:136
 #: src/additions/mediatheken/srg.py:187
-#: src/additions/mediatheken/youtube.py:925
+#: src/additions/mediatheken/youtube.py:928
 #: src/additions/mediatheken/zdf.py:403 src/additions/music/radio.py:258
 #: src/additions/newsdoku/autobild.py:105
 #: src/additions/newsdoku/dokus4_me.py:129 src/additions/porn/ahme.py:188
@@ -203,9 +203,9 @@ msgstr "Seite:"
 #: mpgz/src/additions/porn/pornvex.py:105
 #: mpgz/src/additions/porn/streammdh.py:105
 #: mpgz/src/additions/porn/streamxxx.py:95
-#: mpgz/src/additions/porn/streamxxx.py:152
-#: mpgz/src/additions/porn/streamxxx.py:167
-#: mpgz/src/additions/porn/streamxxx.py:230
+#: mpgz/src/additions/porn/streamxxx.py:151
+#: mpgz/src/additions/porn/streamxxx.py:166
+#: mpgz/src/additions/porn/streamxxx.py:229
 #: mpgz/src/additions/porn/yourpornsexy.py:160
 #: mpgz/src/additions/porn/yourpornsexy.py:221
 #: mpgz/src/additions/porn/yourpornsexy.py:290
@@ -244,8 +244,8 @@ msgstr "Seite:"
 #: src/additions/mediatheken/southpark.py:144
 #: src/additions/mediatheken/southpark.py:226
 #: src/additions/mediatheken/tvnow.py:293
-#: src/additions/mediatheken/youtube.py:980
-#: src/additions/mediatheken/youtube.py:1031
+#: src/additions/mediatheken/youtube.py:983
+#: src/additions/mediatheken/youtube.py:1034
 #: src/additions/mediatheken/zdf.py:156 src/additions/mediatheken/zdf.py:284
 #: src/additions/mediatheken/zdf.py:293 src/additions/mediatheken/zdf.py:393
 #: src/additions/mediatheken/zdf.py:589 src/additions/music/mtvdecharts.py:191
@@ -336,7 +336,7 @@ msgstr "Bitte warten..."
 #: src/additions/mediatheken/dreisat.py:382
 #: src/additions/mediatheken/netzkino.py:179
 #: src/additions/mediatheken/popcorntimes.py:191
-#: src/additions/mediatheken/youtube.py:1673 src/additions/porn/ahme.py:217
+#: src/additions/mediatheken/youtube.py:1676 src/additions/porn/ahme.py:217
 #: src/additions/porn/anyporn.py:358 src/additions/porn/beeg.py:191
 #: src/additions/porn/brazzers.py:180 src/additions/porn/camhub.py:165
 #: src/additions/porn/cliphunter.py:273 src/additions/porn/crocotube.py:175
@@ -384,7 +384,7 @@ msgstr ""
 #: mpgz/src/additions/porn/pornrewind.py:130
 #: mpgz/src/additions/porn/pornstreams.py:141
 #: mpgz/src/additions/porn/pornvex.py:119
-#: mpgz/src/additions/porn/streamxxx.py:188
+#: mpgz/src/additions/porn/streamxxx.py:187
 #: mpgz/src/additions/useradditions/filmpalast.py:203
 #: mpgz/src/additions/useradditions/filmpalast.py:277
 #: mpgz/src/additions/useradditions/movie4k.py:231
@@ -417,7 +417,7 @@ msgstr "Keine Filme gefunden!"
 #: mpgz/src/additions/porn/pornfromczech.py:188
 #: mpgz/src/additions/porn/pornrewind.py:207
 #: mpgz/src/additions/porn/pornstreams.py:203
-#: mpgz/src/additions/porn/streamxxx.py:253
+#: mpgz/src/additions/porn/streamxxx.py:252
 #: mpgz/src/additions/useradditions/ddl_me.py:562
 #: mpgz/src/additions/useradditions/filmpalast.py:348
 #: mpgz/src/additions/useradditions/filmpalast.py:359
@@ -538,14 +538,14 @@ msgstr "Dieses Plugin benötigt das Paket nodejs."
 msgid "Error executing Javascript, please report to the developers."
 msgstr "Fehler beim Ausführen von Javascript, bitte an die Entwickler melden."
 
-#: mpgz/src/additions/porn/streamxxx.py:116
+#: mpgz/src/additions/porn/streamxxx.py:115
 msgid "Nothing found!"
 msgstr "Nichts gefunden!"
 
 #: mpgz/src/additions/useradditions/ddl_me.py:112
 #: mpgz/src/additions/useradditions/kinoxto.py:78
 #: mpgz/src/additions/useradditions/movie4k.py:115
-#: src/additions/mediatheken/ard.py:90 src/additions/mediatheken/youtube.py:576
+#: src/additions/mediatheken/ard.py:90 src/additions/mediatheken/youtube.py:579
 #: src/additions/mediatheken/zdf.py:103 src/additions/newsdoku/dokus4_me.py:74
 #: src/resources/mpscreen.py:400
 msgid "Enter search criteria"
@@ -635,7 +635,7 @@ msgstr "Keine Episoden gefunden!"
 
 #: mpgz/src/additions/useradditions/kinoxto.py:648
 #: mpgz/src/additions/useradditions/serienstream.py:391
-#: src/additions/fun/twitch.py:134 src/additions/mediatheken/youtube.py:917
+#: src/additions/fun/twitch.py:134 src/additions/mediatheken/youtube.py:920
 #: src/additions/music/radio.py:381 src/additions/music/shoutcast.py:327
 #: src/additions/music/tunein.py:364 src/additions/porn/x2search4porn.py:80
 #: src/resources/simplelist.py:528 src/resources/simpleplayer.py:633
@@ -688,7 +688,7 @@ msgstr "Auswahl"
 #: src/additions/porn/slutload.py:316 src/additions/porn/slutload.py:318
 #: src/additions/porn/youporn.py:77 src/additions/porn/youporn.py:221
 #: src/additions/porn/youporn.py:223 src/plugin.py:498
-#: src/resources/simpleplayer.py:2272
+#: src/resources/simpleplayer.py:2268
 msgid "Setup"
 msgstr "Einstellungen"
 
@@ -802,17 +802,17 @@ msgstr "alle"
 msgid "Add to Favorites"
 msgstr "Zu Favoriten hinzufügen"
 
-#: src/additions/fun/twitch.py:137 src/additions/mediatheken/youtube.py:175
-#: src/additions/mediatheken/youtube.py:181
-#: src/additions/mediatheken/youtube.py:185
-#: src/additions/mediatheken/youtube.py:195
-#: src/additions/mediatheken/youtube.py:201
+#: src/additions/fun/twitch.py:137 src/additions/mediatheken/youtube.py:177
+#: src/additions/mediatheken/youtube.py:183
+#: src/additions/mediatheken/youtube.py:187
+#: src/additions/mediatheken/youtube.py:197
+#: src/additions/mediatheken/youtube.py:203
 msgid "Videos"
 msgstr "Videos"
 
 #: src/additions/fun/twitch.py:143 src/additions/fun/twitch.py:403
-#: src/additions/mediatheken/youtube.py:164
-#: src/additions/mediatheken/youtube.py:479 src/additions/music/radio.py:112
+#: src/additions/mediatheken/youtube.py:166
+#: src/additions/mediatheken/youtube.py:482 src/additions/music/radio.py:112
 msgid "Language"
 msgstr "Sprache"
 
@@ -831,9 +831,9 @@ msgstr "Keine Spiele gefunden!"
 msgid "No streams found!"
 msgstr "Keine Streams gefunden!"
 
-#: src/additions/fun/twitch.py:344 src/additions/mediatheken/youtube.py:439
-#: src/additions/mediatheken/youtube.py:455
-#: src/additions/mediatheken/youtube.py:1027
+#: src/additions/fun/twitch.py:344 src/additions/mediatheken/youtube.py:442
+#: src/additions/mediatheken/youtube.py:458
+#: src/additions/mediatheken/youtube.py:1030
 #: src/additions/mediatheken/youtube_user.py:76
 #: src/additions/porn/cumlouder.py:317 src/additions/porn/pornhub.py:1020
 #: src/additions/porn/xvideos.py:364
@@ -865,8 +865,8 @@ msgstr "Genre:"
 #: src/additions/mediatheken/arte.py:277 src/additions/mediatheken/arte.py:279
 #: src/additions/mediatheken/arte.py:311 src/additions/mediatheken/arte.py:313
 #: src/additions/mediatheken/arte.py:360
-#: src/additions/mediatheken/youtube.py:1316
-#: src/additions/mediatheken/youtube.py:1346 src/resources/tmdb.py:148
+#: src/additions/mediatheken/youtube.py:1319
+#: src/additions/mediatheken/youtube.py:1349 src/resources/tmdb.py:148
 msgid "Runtime:"
 msgstr "Laufzeit:"
 
@@ -879,8 +879,8 @@ msgid "This video is not available."
 msgstr "Dieses Video ist nicht verfügbar."
 
 #: src/additions/mediatheken/dreisat.py:272
-#: src/additions/mediatheken/youtube.py:1533
-#: src/additions/mediatheken/youtube.py:1551 src/additions/music/tunein.py:225
+#: src/additions/mediatheken/youtube.py:1536
+#: src/additions/mediatheken/youtube.py:1554 src/additions/music/tunein.py:225
 msgid "No contents / results found!"
 msgstr "Keine Inhalte / Ergebnisse gefunden!"
 
@@ -941,421 +941,421 @@ msgstr "Episoden:"
 msgid "Currently no playable/free episodes available!"
 msgstr "Momentan sind keine abspielbaren/kostenlosen Folgen verfügbar!"
 
-#: src/additions/mediatheken/youtube.py:88
-#: src/additions/mediatheken/youtube.py:1693
+#: src/additions/mediatheken/youtube.py:90
+#: src/additions/mediatheken/youtube.py:1696
 msgid "Date"
 msgstr "Datum"
 
-#: src/additions/mediatheken/youtube.py:89
-#: src/additions/mediatheken/youtube.py:1694
+#: src/additions/mediatheken/youtube.py:91
+#: src/additions/mediatheken/youtube.py:1697
 msgid "Rating"
 msgstr "Bewertung"
 
-#: src/additions/mediatheken/youtube.py:90
-#: src/additions/mediatheken/youtube.py:1695
+#: src/additions/mediatheken/youtube.py:92
+#: src/additions/mediatheken/youtube.py:1698
 msgid "Relevance"
 msgstr "Relevanz"
 
-#: src/additions/mediatheken/youtube.py:91
-#: src/additions/mediatheken/youtube.py:1696
+#: src/additions/mediatheken/youtube.py:93
+#: src/additions/mediatheken/youtube.py:1699
 msgid "Title"
 msgstr "Titel"
 
-#: src/additions/mediatheken/youtube.py:92
-#: src/additions/mediatheken/youtube.py:1697
+#: src/additions/mediatheken/youtube.py:94
+#: src/additions/mediatheken/youtube.py:1700
 msgid "Video count"
 msgstr "Anzahl der Videos"
 
-#: src/additions/mediatheken/youtube.py:93
-#: src/additions/mediatheken/youtube.py:1698
+#: src/additions/mediatheken/youtube.py:95
+#: src/additions/mediatheken/youtube.py:1701
 msgid "View count"
 msgstr "Anzahl der Aufrufe"
 
-#: src/additions/mediatheken/youtube.py:97
+#: src/additions/mediatheken/youtube.py:99
 msgid "English"
 msgstr "Englisch"
 
-#: src/additions/mediatheken/youtube.py:98
+#: src/additions/mediatheken/youtube.py:100
 msgid "German"
 msgstr "Deutsch"
 
-#: src/additions/mediatheken/youtube.py:99
+#: src/additions/mediatheken/youtube.py:101
 msgid "French"
 msgstr "Französisch"
 
-#: src/additions/mediatheken/youtube.py:100
+#: src/additions/mediatheken/youtube.py:102
 msgid "Italian"
 msgstr "Italienisch"
 
-#: src/additions/mediatheken/youtube.py:101
+#: src/additions/mediatheken/youtube.py:103
 msgid "Spanish"
 msgstr "Spanisch"
 
-#: src/additions/mediatheken/youtube.py:102
+#: src/additions/mediatheken/youtube.py:104
 msgid "Portuguese"
 msgstr "Portugiesisch"
 
-#: src/additions/mediatheken/youtube.py:103
+#: src/additions/mediatheken/youtube.py:105
 msgid "Polish"
 msgstr "Polnisch"
 
-#: src/additions/mediatheken/youtube.py:104
+#: src/additions/mediatheken/youtube.py:106
 msgid "Danish"
 msgstr "Dänisch"
 
-#: src/additions/mediatheken/youtube.py:105
+#: src/additions/mediatheken/youtube.py:107
 msgid "Norwegian"
 msgstr "Norwegisch"
 
-#: src/additions/mediatheken/youtube.py:106
+#: src/additions/mediatheken/youtube.py:108
 msgid "Swedish"
 msgstr "Schwedisch"
 
-#: src/additions/mediatheken/youtube.py:107
+#: src/additions/mediatheken/youtube.py:109
 msgid "Finnish"
 msgstr "Finnisch"
 
-#: src/additions/mediatheken/youtube.py:108
-#: src/additions/mediatheken/youtube.py:129
-#: src/additions/mediatheken/youtube.py:136
-#: src/additions/mediatheken/youtube.py:142
-#: src/additions/mediatheken/youtube.py:155
+#: src/additions/mediatheken/youtube.py:110
+#: src/additions/mediatheken/youtube.py:131
+#: src/additions/mediatheken/youtube.py:138
+#: src/additions/mediatheken/youtube.py:144
+#: src/additions/mediatheken/youtube.py:157
 msgid "Any"
 msgstr "Beliebig"
 
-#: src/additions/mediatheken/youtube.py:112
+#: src/additions/mediatheken/youtube.py:114
 msgid "Whole world"
 msgstr "Weltweit"
 
-#: src/additions/mediatheken/youtube.py:113
+#: src/additions/mediatheken/youtube.py:115
 msgid "Great Britain"
 msgstr "Großbritannien"
 
-#: src/additions/mediatheken/youtube.py:114 src/additions/music/radio.py:42
+#: src/additions/mediatheken/youtube.py:116 src/additions/music/radio.py:42
 msgid "Germany"
 msgstr "Deutschland"
 
-#: src/additions/mediatheken/youtube.py:115 src/additions/music/radio.py:42
+#: src/additions/mediatheken/youtube.py:117 src/additions/music/radio.py:42
 msgid "Austria"
 msgstr "Österreich"
 
-#: src/additions/mediatheken/youtube.py:116
+#: src/additions/mediatheken/youtube.py:118
 msgid "Switzerland"
 msgstr "Schweiz"
 
-#: src/additions/mediatheken/youtube.py:117 src/additions/music/radio.py:42
+#: src/additions/mediatheken/youtube.py:119 src/additions/music/radio.py:42
 msgid "France"
 msgstr "Frankreich"
 
-#: src/additions/mediatheken/youtube.py:118 src/additions/music/radio.py:42
+#: src/additions/mediatheken/youtube.py:120 src/additions/music/radio.py:42
 msgid "Italy"
 msgstr "Italien"
 
-#: src/additions/mediatheken/youtube.py:119 src/additions/music/radio.py:42
+#: src/additions/mediatheken/youtube.py:121 src/additions/music/radio.py:42
 msgid "Spain"
 msgstr "Spanien"
 
-#: src/additions/mediatheken/youtube.py:120 src/additions/music/radio.py:42
+#: src/additions/mediatheken/youtube.py:122 src/additions/music/radio.py:42
 msgid "Portugal"
 msgstr "Portugal"
 
-#: src/additions/mediatheken/youtube.py:121 src/additions/music/radio.py:42
+#: src/additions/mediatheken/youtube.py:123 src/additions/music/radio.py:42
 msgid "Poland"
 msgstr "Polen"
 
-#: src/additions/mediatheken/youtube.py:122 src/additions/music/radio.py:42
+#: src/additions/mediatheken/youtube.py:124 src/additions/music/radio.py:42
 msgid "Denmark"
 msgstr "Dänemark"
 
-#: src/additions/mediatheken/youtube.py:123
+#: src/additions/mediatheken/youtube.py:125
 msgid "Norway"
 msgstr "Norwegen"
 
-#: src/additions/mediatheken/youtube.py:124 src/additions/music/radio.py:42
+#: src/additions/mediatheken/youtube.py:126 src/additions/music/radio.py:42
 msgid "Sweden"
 msgstr "Schweden"
 
-#: src/additions/mediatheken/youtube.py:125
+#: src/additions/mediatheken/youtube.py:127
 msgid "Finland"
 msgstr "Finnland"
 
-#: src/additions/mediatheken/youtube.py:137
+#: src/additions/mediatheken/youtube.py:139
 msgid "2D"
 msgstr "2D"
 
-#: src/additions/mediatheken/youtube.py:138
+#: src/additions/mediatheken/youtube.py:140
 msgid "3D"
 msgstr "3D"
 
-#: src/additions/mediatheken/youtube.py:143 src/plugin.py:225
+#: src/additions/mediatheken/youtube.py:145 src/plugin.py:225
 msgid "High"
 msgstr "Hoch"
 
-#: src/additions/mediatheken/youtube.py:144 src/plugin.py:225
+#: src/additions/mediatheken/youtube.py:146 src/plugin.py:225
 msgid "Low"
 msgstr "Niedrig"
 
-#: src/additions/mediatheken/youtube.py:148
+#: src/additions/mediatheken/youtube.py:150
 msgid "None"
 msgstr "Keine"
 
-#: src/additions/mediatheken/youtube.py:149
+#: src/additions/mediatheken/youtube.py:151
 msgid "Completed"
 msgstr "Abgeschlossene"
 
-#: src/additions/mediatheken/youtube.py:150
-#: src/additions/mediatheken/youtube.py:239
+#: src/additions/mediatheken/youtube.py:152
+#: src/additions/mediatheken/youtube.py:241
 msgid "Live"
 msgstr "Live"
 
-#: src/additions/mediatheken/youtube.py:151
+#: src/additions/mediatheken/youtube.py:153
 msgid "Upcoming"
 msgstr "Bevorstehende"
 
-#: src/additions/mediatheken/youtube.py:156
+#: src/additions/mediatheken/youtube.py:158
 msgid "Episode"
 msgstr "Episode"
 
-#: src/additions/mediatheken/youtube.py:157 src/resources/tmdb.py:54
+#: src/additions/mediatheken/youtube.py:159 src/resources/tmdb.py:54
 msgid "Movie"
 msgstr "Film"
 
-#: src/additions/mediatheken/youtube.py:161
-#: src/additions/mediatheken/youtube.py:475
+#: src/additions/mediatheken/youtube.py:163
+#: src/additions/mediatheken/youtube.py:478
 msgid "Search request"
 msgstr "Suchanfrage"
 
-#: src/additions/mediatheken/youtube.py:162
-#: src/additions/mediatheken/youtube.py:485
+#: src/additions/mediatheken/youtube.py:164
+#: src/additions/mediatheken/youtube.py:488
 msgid "Event type"
 msgstr "Event Typ"
 
-#: src/additions/mediatheken/youtube.py:163
-#: src/additions/mediatheken/youtube.py:477
-#: src/additions/mediatheken/youtube.py:920
-#: src/additions/mediatheken/youtube.py:1700
+#: src/additions/mediatheken/youtube.py:165
+#: src/additions/mediatheken/youtube.py:480
+#: src/additions/mediatheken/youtube.py:923
+#: src/additions/mediatheken/youtube.py:1703
 msgid "Sort by"
 msgstr "Sortieren nach"
 
-#: src/additions/mediatheken/youtube.py:165
-#: src/additions/mediatheken/youtube.py:481
+#: src/additions/mediatheken/youtube.py:167
+#: src/additions/mediatheken/youtube.py:484
 msgid "Search region"
 msgstr "Suchregion"
 
-#: src/additions/mediatheken/youtube.py:166
-#: src/additions/mediatheken/youtube.py:483
+#: src/additions/mediatheken/youtube.py:168
+#: src/additions/mediatheken/youtube.py:486
 msgid "User name"
 msgstr "Username"
 
-#: src/additions/mediatheken/youtube.py:167
-#: src/additions/mediatheken/youtube.py:487
+#: src/additions/mediatheken/youtube.py:169
+#: src/additions/mediatheken/youtube.py:490
 msgid "3D Search"
 msgstr "3D Suche"
 
-#: src/additions/mediatheken/youtube.py:168
-#: src/additions/mediatheken/youtube.py:489
+#: src/additions/mediatheken/youtube.py:170
+#: src/additions/mediatheken/youtube.py:492
 msgid "Runtime"
 msgstr "Laufzeit"
 
-#: src/additions/mediatheken/youtube.py:169
-#: src/additions/mediatheken/youtube.py:491
+#: src/additions/mediatheken/youtube.py:171
+#: src/additions/mediatheken/youtube.py:494
 msgid "Video definition"
 msgstr "Videoauflösung"
 
-#: src/additions/mediatheken/youtube.py:170
-#: src/additions/mediatheken/youtube.py:493
+#: src/additions/mediatheken/youtube.py:172
+#: src/additions/mediatheken/youtube.py:496
 msgid "Video type"
 msgstr "Videotyp"
 
-#: src/additions/mediatheken/youtube.py:174
-#: src/additions/mediatheken/youtube.py:190
-#: src/additions/mediatheken/youtube.py:194
-#: src/additions/mediatheken/youtube.py:200
+#: src/additions/mediatheken/youtube.py:176
+#: src/additions/mediatheken/youtube.py:192
+#: src/additions/mediatheken/youtube.py:196
+#: src/additions/mediatheken/youtube.py:202
 msgid "Featured"
 msgstr "Empfohlen"
 
-#: src/additions/mediatheken/youtube.py:176
-#: src/additions/mediatheken/youtube.py:196
-#: src/additions/mediatheken/youtube.py:205
-#: src/additions/mediatheken/youtube.py:209
+#: src/additions/mediatheken/youtube.py:178
+#: src/additions/mediatheken/youtube.py:198
+#: src/additions/mediatheken/youtube.py:207
+#: src/additions/mediatheken/youtube.py:211
 msgid "Playlists"
 msgstr "Playlisten"
 
-#: src/additions/mediatheken/youtube.py:177
-#: src/additions/mediatheken/youtube.py:1411
+#: src/additions/mediatheken/youtube.py:179
+#: src/additions/mediatheken/youtube.py:1414
 msgid "Channels"
 msgstr "Kanäle"
 
-#: src/additions/mediatheken/youtube.py:186
+#: src/additions/mediatheken/youtube.py:188
 msgid "Full Playlist"
 msgstr "Vollständige Playlist"
 
-#: src/additions/mediatheken/youtube.py:210
+#: src/additions/mediatheken/youtube.py:212
 msgid "Uploads"
 msgstr "Uploads"
 
-#: src/additions/mediatheken/youtube.py:211
+#: src/additions/mediatheken/youtube.py:213
 msgid "Likes"
 msgstr "Likes"
 
-#: src/additions/mediatheken/youtube.py:212
+#: src/additions/mediatheken/youtube.py:214
 msgid "Subscriptions"
 msgstr "Abonnements"
 
-#: src/additions/mediatheken/youtube.py:216
+#: src/additions/mediatheken/youtube.py:218
 msgid "Video search"
 msgstr "Video Suche"
 
-#: src/additions/mediatheken/youtube.py:217
+#: src/additions/mediatheken/youtube.py:219
 msgid "Playlist search"
 msgstr "Playlisten Suche"
 
-#: src/additions/mediatheken/youtube.py:218
+#: src/additions/mediatheken/youtube.py:220
 msgid "Channel search"
 msgstr "Kanal Suche"
 
-#: src/additions/mediatheken/youtube.py:219
+#: src/additions/mediatheken/youtube.py:221
 msgid "Trends"
 msgstr "Trends"
 
-#: src/additions/mediatheken/youtube.py:221
-#: src/additions/mediatheken/youtube.py:803
+#: src/additions/mediatheken/youtube.py:223
+#: src/additions/mediatheken/youtube.py:806
 msgid "My channel"
 msgstr "Mein Kanal"
 
-#: src/additions/mediatheken/youtube.py:222
-#: src/additions/mediatheken/youtube.py:789
-#: src/additions/mediatheken/youtube.py:875 src/additions/music/radio.py:104
+#: src/additions/mediatheken/youtube.py:224
+#: src/additions/mediatheken/youtube.py:792
+#: src/additions/mediatheken/youtube.py:878 src/additions/music/radio.py:104
 #: src/additions/music/radio.py:125 src/additions/music/shoutcast.py:105
 #: src/additions/music/tunein.py:222
 msgid "Favorites"
 msgstr "Favoriten"
 
-#: src/additions/mediatheken/youtube.py:223
+#: src/additions/mediatheken/youtube.py:225
 #: src/additions/mediatheken/youtube_user.py:23
 msgid "User Channels"
 msgstr "Benutzer-Kanäle"
 
-#: src/additions/mediatheken/youtube.py:225
+#: src/additions/mediatheken/youtube.py:227
 msgid "YouTube Channels"
 msgstr "YouTube-Kanäle"
 
-#: src/additions/mediatheken/youtube.py:226
+#: src/additions/mediatheken/youtube.py:228
 msgid "Selected Channels"
 msgstr "Ausgewählte Kanäle"
 
-#: src/additions/mediatheken/youtube.py:227
+#: src/additions/mediatheken/youtube.py:229
 msgid "Music Channels"
 msgstr "Musik-Kanäle"
 
-#: src/additions/mediatheken/youtube.py:228
+#: src/additions/mediatheken/youtube.py:230
 msgid "Music Playlists"
 msgstr "Musik-Playlisten"
 
-#: src/additions/mediatheken/youtube.py:229
+#: src/additions/mediatheken/youtube.py:231
 msgid "Gaming Channels"
 msgstr "Gaming-Kanäle"
 
-#: src/additions/mediatheken/youtube.py:230
+#: src/additions/mediatheken/youtube.py:232
 msgid "Car & Vehicle Channels"
 msgstr "Auto- & Fahrzeug-Kanäle"
 
-#: src/additions/mediatheken/youtube.py:234
+#: src/additions/mediatheken/youtube.py:236
 msgid "Popular on YouTube"
 msgstr "Beliebt auf YouTube"
 
-#: src/additions/mediatheken/youtube.py:235
+#: src/additions/mediatheken/youtube.py:237
 msgid "News"
 msgstr "Nachrichten"
 
-#: src/additions/mediatheken/youtube.py:236
-#: src/additions/mediatheken/youtube.py:527 src/plugin.py:811
+#: src/additions/mediatheken/youtube.py:238
+#: src/additions/mediatheken/youtube.py:530 src/plugin.py:811
 #: src/plugin.py:1006 src/plugin.py:1344 src/plugin.py:1705 src/plugin.py:1831
 #: src/plugin.py:1862 src/plugin.py:2409 src/plugin.py:2646 src/plugin.py:2761
 #: src/plugin.py:2792 src/plugin.py:3243
 msgid "Music"
 msgstr "Musik"
 
-#: src/additions/mediatheken/youtube.py:237
-#: src/additions/mediatheken/youtube.py:527
+#: src/additions/mediatheken/youtube.py:239
+#: src/additions/mediatheken/youtube.py:530
 msgid "Gaming"
 msgstr "Gaming"
 
-#: src/additions/mediatheken/youtube.py:238
-#: src/additions/mediatheken/youtube.py:527 src/plugin.py:812
+#: src/additions/mediatheken/youtube.py:240
+#: src/additions/mediatheken/youtube.py:530 src/plugin.py:812
 #: src/plugin.py:1008 src/plugin.py:1344 src/plugin.py:1706 src/plugin.py:1833
 #: src/plugin.py:1864 src/plugin.py:2409 src/plugin.py:2647 src/plugin.py:2763
 #: src/plugin.py:2794 src/plugin.py:3243
 msgid "Sports"
 msgstr "Sport"
 
-#: src/additions/mediatheken/youtube.py:473
+#: src/additions/mediatheken/youtube.py:476
 msgid "Genres"
 msgstr "Genres"
 
-#: src/additions/mediatheken/youtube.py:499
-#: src/additions/mediatheken/youtube.py:719
-#: src/additions/mediatheken/youtube.py:742
+#: src/additions/mediatheken/youtube.py:502
+#: src/additions/mediatheken/youtube.py:722
+#: src/additions/mediatheken/youtube.py:745
 msgid "Edit Parameter"
 msgstr "Parameter Editieren"
 
-#: src/additions/mediatheken/youtube.py:500
+#: src/additions/mediatheken/youtube.py:503
 msgid "Request YT-Token"
 msgstr "YT-Token Anfordern"
 
-#: src/additions/mediatheken/youtube.py:527
+#: src/additions/mediatheken/youtube.py:530
 msgid "Autos & Vehicles"
 msgstr "Autos & Fahrzeuge"
 
-#: src/additions/mediatheken/youtube.py:527
+#: src/additions/mediatheken/youtube.py:530
 msgid "Comedy"
 msgstr "Komödie"
 
-#: src/additions/mediatheken/youtube.py:527
+#: src/additions/mediatheken/youtube.py:530
 msgid "Education"
 msgstr "Bildung"
 
-#: src/additions/mediatheken/youtube.py:527
+#: src/additions/mediatheken/youtube.py:530
 msgid "Entertainment"
 msgstr "Unterhaltung"
 
-#: src/additions/mediatheken/youtube.py:527
+#: src/additions/mediatheken/youtube.py:530
 msgid "Film & Animation"
 msgstr "Film & Animation"
 
-#: src/additions/mediatheken/youtube.py:527
+#: src/additions/mediatheken/youtube.py:530
 msgid "Howto & Style"
 msgstr "Praktische Tipps & Styling"
 
-#: src/additions/mediatheken/youtube.py:527
+#: src/additions/mediatheken/youtube.py:530
 msgid "News & Politics"
 msgstr "Nachrichten & Politik"
 
-#: src/additions/mediatheken/youtube.py:527
+#: src/additions/mediatheken/youtube.py:530
 msgid "People & Blogs"
 msgstr "Menschen & Blogs"
 
-#: src/additions/mediatheken/youtube.py:527
+#: src/additions/mediatheken/youtube.py:530
 msgid "Pets & Animals"
 msgstr "Tiere"
 
-#: src/additions/mediatheken/youtube.py:527
+#: src/additions/mediatheken/youtube.py:530
 msgid "Science & Technology"
 msgstr "Wissenschaft & Technik"
 
-#: src/additions/mediatheken/youtube.py:527
+#: src/additions/mediatheken/youtube.py:530
 msgid "Travel & Events"
 msgstr "Reisen & Events"
 
-#: src/additions/mediatheken/youtube.py:533
+#: src/additions/mediatheken/youtube.py:536
 msgid "No Category"
 msgstr "Keine Kategorie"
 
-#: src/additions/mediatheken/youtube.py:586
+#: src/additions/mediatheken/youtube.py:589
 msgid "Author"
 msgstr "Autor"
 
-#: src/additions/mediatheken/youtube.py:799
+#: src/additions/mediatheken/youtube.py:802
 msgid ""
 "Missing API-key, please fill the file 'mp_yt-apikey' first then restart the "
 "plugin."
@@ -1363,27 +1363,27 @@ msgstr ""
 "Fehlender API-Key, bitte befüllen Sie die Datei 'mp_yt-apikey' zuerst und "
 "starten Sie dann das Plugin neu."
 
-#: src/additions/mediatheken/youtube.py:805
+#: src/additions/mediatheken/youtube.py:808
 msgid "You need to request a token to allow access to your YouTube account."
 msgstr ""
 "Es muss ein Token angefordert werden, um Zugang zu Ihrem YouTube-Konto zu "
 "ermöglichen."
 
-#: src/additions/mediatheken/youtube.py:813
+#: src/additions/mediatheken/youtube.py:816
 msgid "Did you revoke the access?"
 msgstr "Wurde der Zugriff widerrufen?"
 
-#: src/additions/mediatheken/youtube.py:915
+#: src/additions/mediatheken/youtube.py:918
 msgid "Favorite"
 msgstr "Favorit"
 
-#: src/additions/mediatheken/youtube.py:1010
+#: src/additions/mediatheken/youtube.py:1013
 msgid "Playlist loading failed! Please try again."
 msgstr ""
 "Das Laden der Playlist ist fehlgeschlagen! Bitte versuchen Sie es erneut."
 
-#: src/additions/mediatheken/youtube.py:1184
-#: src/additions/mediatheken/youtube.py:1185
+#: src/additions/mediatheken/youtube.py:1187
+#: src/additions/mediatheken/youtube.py:1188
 msgid ""
 "YouTube API quota of your master key exceeded, switched to your API backup "
 "key, please try again!"
@@ -1391,8 +1391,8 @@ msgstr ""
 "YouTube API-Kontingent Ihres Master-Schlüssels überschritten, auf Ihren API-"
 "Backup-Schlüssel umgeschaltet, bitte versuchen Sie es erneut!"
 
-#: src/additions/mediatheken/youtube.py:1188
-#: src/additions/mediatheken/youtube.py:1189
+#: src/additions/mediatheken/youtube.py:1191
+#: src/additions/mediatheken/youtube.py:1192
 msgid ""
 "YouTube API quota of your backup key exceeded, switched to your API master "
 "key, please try again!"
@@ -1400,40 +1400,40 @@ msgstr ""
 "YouTube API-Kontingent Ihres Backup-Schlüssels überschritten, auf Ihren API-"
 "Master-Schlüssel umgeschaltet, bitte versuchen Sie es erneut!"
 
-#: src/additions/mediatheken/youtube.py:1315
-#: src/additions/mediatheken/youtube.py:1345
+#: src/additions/mediatheken/youtube.py:1318
+#: src/additions/mediatheken/youtube.py:1348
 msgid "Views:"
 msgstr "Aufrufe:"
 
-#: src/additions/mediatheken/youtube.py:1323
-#: src/additions/mediatheken/youtube.py:1353
+#: src/additions/mediatheken/youtube.py:1326
+#: src/additions/mediatheken/youtube.py:1356
 msgid "Published:"
 msgstr "Veröffentlicht:"
 
-#: src/additions/mediatheken/youtube.py:1327
-#: src/additions/mediatheken/youtube.py:1357
+#: src/additions/mediatheken/youtube.py:1330
+#: src/additions/mediatheken/youtube.py:1360
 msgid "Channel:"
 msgstr "Kanal:"
 
-#: src/additions/mediatheken/youtube.py:1573
+#: src/additions/mediatheken/youtube.py:1576
 msgid "Unfortunately, this video can not be played!\n"
 msgstr "Das Video kann leider nicht abgespielt werden!\n"
 
-#: src/additions/mediatheken/youtube.py:1604
-#: src/additions/mediatheken/youtube.py:1650
-#: src/additions/mediatheken/youtube.py:1688
+#: src/additions/mediatheken/youtube.py:1607
+#: src/additions/mediatheken/youtube.py:1653
+#: src/additions/mediatheken/youtube.py:1691
 msgid "Error!\n"
 msgstr "Fehler!\n"
 
-#: src/additions/mediatheken/youtube.py:1639
+#: src/additions/mediatheken/youtube.py:1642
 msgid "Favorite already exists"
 msgstr "Favorit schon vorhanden"
 
-#: src/additions/mediatheken/youtube.py:1645
+#: src/additions/mediatheken/youtube.py:1648
 msgid "Favorite added"
 msgstr "Favorit hinzugefügt"
 
-#: src/additions/mediatheken/youtube.py:2018
+#: src/additions/mediatheken/youtube.py:2021
 msgid ""
 "Missing OAuth2 data, please fill the file 'mp_yt-oauth2' first and restart "
 "the Enigma2 GUI."
@@ -1441,12 +1441,12 @@ msgstr ""
 "Fehlende OAuth2-Daten, bitte befüllen Sie die Datei 'mp_yt-oauth2' zuerst "
 "und starten Sie die Enigma2 GUI neu."
 
-#: src/additions/mediatheken/youtube.py:2022
-#: src/additions/mediatheken/youtube.py:2023
+#: src/additions/mediatheken/youtube.py:2025
+#: src/additions/mediatheken/youtube.py:2026
 msgid "Error: Unable to request the Device code"
 msgstr "Fehler: Kann den Gerätecode nicht anfordern"
 
-#: src/additions/mediatheken/youtube.py:2029
+#: src/additions/mediatheken/youtube.py:2032
 #, python-brace-format
 msgid ""
 "You've to visit:\n"
@@ -1459,7 +1459,7 @@ msgstr ""
 "und diesen Code eingeben: {code}\n"
 "Aktion abbrechen?"
 
-#: src/additions/mediatheken/youtube.py:2033
+#: src/additions/mediatheken/youtube.py:2036
 msgid ""
 "Waiting for response from the server.\n"
 "Cancel action?"
@@ -1467,17 +1467,13 @@ msgstr ""
 "Warten auf Antwort vom Server.\n"
 "Aktion abbrechen?"
 
-#: src/additions/mediatheken/youtube.py:2049
-#: src/additions/mediatheken/youtube.py:2050
-#: src/additions/mediatheken/youtube.py:2056
+#: src/additions/mediatheken/youtube.py:2052
+#: src/additions/mediatheken/youtube.py:2053
+#: src/additions/mediatheken/youtube.py:2059
 msgid "Error: Unable to get tokens!"
 msgstr "Fehler: Der Token konnte nicht angefordert werden!"
 
-#: src/additions/mediatheken/youtube.py:2071
-#, fuzzy
-#| msgid ""
-#| "Access granted.\n"
-#| "The tokens are valid until they are revoked in Your Google Account."
+#: src/additions/mediatheken/youtube.py:2074
 msgid ""
 "Access granted.\n"
 "The tokens are valid until they are revoked in your Google Account."
@@ -1485,7 +1481,7 @@ msgstr ""
 "Zugriff gewährt.\n"
 "Die Token sind gültig, bis sie in Ihrem Google-Konto widerrufen werden."
 
-#: src/additions/mediatheken/youtube.py:2088
+#: src/additions/mediatheken/youtube.py:2091
 msgid "Error: Unable to refresh token!"
 msgstr "Fehler: Der Token konnte nicht aktualisert werden!"
 
@@ -1835,7 +1831,7 @@ msgstr "Film am Ende pausieren"
 
 #: src/plugin.py:247 src/resources/simplelist.py:494
 #: src/resources/simplelist.py:669 src/resources/simplelist.py:693
-#: src/resources/simpleplayer.py:1731 src/resources/simpleplayer.py:1737
+#: src/resources/simpleplayer.py:1727 src/resources/simpleplayer.py:1733
 msgid "No"
 msgstr "Nein"
 
@@ -1923,7 +1919,7 @@ msgstr "Hellgrün"
 msgid "premiumize.me is not activated."
 msgstr "premiumize.me ist nicht aktiviert."
 
-#: src/plugin.py:532 src/resources/simpleplayer.py:2197
+#: src/plugin.py:532 src/resources/simpleplayer.py:2193
 msgid "GENERAL"
 msgstr "ALLGEMEIN"
 
@@ -2007,7 +2003,7 @@ msgstr "Temporäres Cacheverzeichnis:"
 msgid "Icon Cachepath:"
 msgstr "Icon Cacheverzeichnis:"
 
-#: src/plugin.py:559 src/resources/simpleplayer.py:2200
+#: src/plugin.py:559 src/resources/simpleplayer.py:2196
 msgid "Videoquality:"
 msgstr "Videoqualität:"
 
@@ -2015,39 +2011,39 @@ msgstr "Videoqualität:"
 msgid "Watchlist/Playlist/Userchan path:"
 msgstr "Watchlist/Playlist/Userchan Verzeichnis:"
 
-#: src/plugin.py:562 src/resources/simpleplayer.py:2211
+#: src/plugin.py:562 src/resources/simpleplayer.py:2207
 msgid "YOUTUBE"
 msgstr "YOUTUBE"
 
-#: src/plugin.py:563 src/resources/simpleplayer.py:2212
+#: src/plugin.py:563 src/resources/simpleplayer.py:2208
 msgid "Highest resolution for playback:"
 msgstr "Höchste Auflösung für die Wiedergabe:"
 
-#: src/plugin.py:565 src/resources/simpleplayer.py:2214
+#: src/plugin.py:565 src/resources/simpleplayer.py:2210
 msgid "Enable DASH format:"
 msgstr "DASH Format aktivieren:"
 
-#: src/plugin.py:567 src/resources/simpleplayer.py:2216
+#: src/plugin.py:567 src/resources/simpleplayer.py:2212
 msgid "Enable DASH format (no seeking possible):"
 msgstr "DASH Format aktivieren (kein Spulen möglich):"
 
-#: src/plugin.py:569 src/resources/simpleplayer.py:2218
+#: src/plugin.py:569 src/resources/simpleplayer.py:2214
 msgid "Use DASH format for 480p:"
 msgstr "DASH Format verwenden für 480p:"
 
-#: src/plugin.py:570 src/resources/simpleplayer.py:2219
+#: src/plugin.py:570 src/resources/simpleplayer.py:2215
 msgid "Use DASH format for 720p:"
 msgstr "DASH Format verwenden für 720p:"
 
-#: src/plugin.py:571 src/resources/simpleplayer.py:2220
+#: src/plugin.py:571 src/resources/simpleplayer.py:2216
 msgid "Enable VP9 codec (required for resolutions >1080p):"
 msgstr "VP9 Codec aktivieren (erforderlich für Auflösungen >1080p):"
 
-#: src/plugin.py:573 src/resources/simpleplayer.py:2222
+#: src/plugin.py:573 src/resources/simpleplayer.py:2218
 msgid "Enable VP9 HDR (only for resolutions 720p and higher):"
 msgstr "VP9 HDR aktivieren (nur für Auflösungen ab 720p):"
 
-#: src/plugin.py:575 src/resources/simpleplayer.py:2224
+#: src/plugin.py:575 src/resources/simpleplayer.py:2220
 msgid "Enable Opus codec:"
 msgstr "Opus Codec aktivieren:"
 
@@ -2609,8 +2605,8 @@ msgid "Stream not supported."
 msgstr "Stream wird nicht unterstützt."
 
 #: src/resources/simplelist.py:493 src/resources/simplelist.py:668
-#: src/resources/simplelist.py:692 src/resources/simpleplayer.py:1729
-#: src/resources/simpleplayer.py:1736
+#: src/resources/simplelist.py:692 src/resources/simpleplayer.py:1725
+#: src/resources/simpleplayer.py:1732
 msgid "Yes"
 msgstr "Ja"
 
@@ -2726,138 +2722,138 @@ msgstr "Streaming Fehler: %s"
 msgid "Buffering..."
 msgstr "Puffern..."
 
-#: src/resources/simpleplayer.py:1730
+#: src/resources/simpleplayer.py:1726
 #, python-format
 msgid "Yes & Add Service to global Playlist-%02d"
 msgstr "Ja & Service zur globalen Playlist-%02d hinzufügen"
 
-#: src/resources/simpleplayer.py:1732 src/resources/simpleplayer.py:1738
+#: src/resources/simpleplayer.py:1728 src/resources/simpleplayer.py:1734
 msgid "No, but start over from the beginning"
 msgstr "Nein, aber von Anfang an neu beginnen"
 
-#: src/resources/simpleplayer.py:1741
+#: src/resources/simpleplayer.py:1737
 msgid "Stop playing this movie?"
 msgstr "Wiedergabe dieses Films stoppen?"
 
-#: src/resources/simpleplayer.py:1899
+#: src/resources/simpleplayer.py:1895
 msgid "No entries in the playlist available!"
 msgstr "Keine Einträge in der Playlist vorhanden!"
 
-#: src/resources/simpleplayer.py:1981
+#: src/resources/simpleplayer.py:1977
 msgid "Error: Service may be added only from the local playlist"
 msgstr "Fehler: Service darf nur von der lokalen Playlist hinzugefügt werden"
 
-#: src/resources/simpleplayer.py:1995
+#: src/resources/simpleplayer.py:1991
 msgid "Error: URL is not persistent!"
 msgstr "Fehler: URL ist nicht persistent!"
 
-#: src/resources/simpleplayer.py:2001
+#: src/resources/simpleplayer.py:1997
 msgid "Added entry"
 msgstr "Eintrag hinzugefügt"
 
-#: src/resources/simpleplayer.py:2003
+#: src/resources/simpleplayer.py:1999
 msgid "Entry already exists"
 msgstr "Eintrag schon vorhanden"
 
-#: src/resources/simpleplayer.py:2005
+#: src/resources/simpleplayer.py:2001
 msgid "Error!"
 msgstr "Fehler!"
 
-#: src/resources/simpleplayer.py:2179 src/resources/simpleplayer.py:2180
+#: src/resources/simpleplayer.py:2175 src/resources/simpleplayer.py:2176
 msgid "SimplePlayer Setup"
 msgstr "SimplePlayer Einstellungen"
 
-#: src/resources/simpleplayer.py:2198
+#: src/resources/simpleplayer.py:2194
 msgid "Global playlist number:"
 msgstr "Globale Playlist-Nummer:"
 
-#: src/resources/simpleplayer.py:2199
+#: src/resources/simpleplayer.py:2195
 msgid "Playmode:"
 msgstr "Abspielmodus:"
 
-#: src/resources/simpleplayer.py:2202
+#: src/resources/simpleplayer.py:2198
 msgid "Buffersize (in seconds):"
 msgstr "Puffergröße (in Sekunden):"
 
-#: src/resources/simpleplayer.py:2203
+#: src/resources/simpleplayer.py:2199
 msgid "Save resume cache in flash memory:"
 msgstr "Speichere Wiederaufnahme-Cache im Flashspeicher:"
 
-#: src/resources/simpleplayer.py:2204
+#: src/resources/simpleplayer.py:2200
 msgid "Behavior on movie start:"
 msgstr "Verhalten bei Filmstart:"
 
-#: src/resources/simpleplayer.py:2205
+#: src/resources/simpleplayer.py:2201
 msgid "Behavior on movie stop:"
 msgstr "Verhalten bei Filmstopp:"
 
-#: src/resources/simpleplayer.py:2206
+#: src/resources/simpleplayer.py:2202
 msgid "Behavior on movie end:"
 msgstr "Verhalten bei Filmende:"
 
-#: src/resources/simpleplayer.py:2207
+#: src/resources/simpleplayer.py:2203
 msgid "Seekbar sensibility:"
 msgstr "Suchleistenempfindlichkeit:"
 
-#: src/resources/simpleplayer.py:2208
+#: src/resources/simpleplayer.py:2204
 msgid "Infobar cover always off:"
 msgstr "Infobar-Coveranzeige immer aus:"
 
-#: src/resources/simpleplayer.py:2209
+#: src/resources/simpleplayer.py:2205
 msgid "Use SP number seek:"
 msgstr "Verwende SP Nummernsuche:"
 
-#: src/resources/simpleplayer.py:2226
+#: src/resources/simpleplayer.py:2222
 msgid "RADIO"
 msgstr "RADIO"
 
-#: src/resources/simpleplayer.py:2227
+#: src/resources/simpleplayer.py:2223
 msgid "Radio cover:"
 msgstr "Radio-Cover:"
 
-#: src/resources/simpleplayer.py:2228
+#: src/resources/simpleplayer.py:2224
 msgid "Radio visualization:"
 msgstr "Radio-Visualisierung:"
 
-#: src/resources/simpleplayer.py:2229
+#: src/resources/simpleplayer.py:2225
 msgid "Radio screensaver:"
 msgstr "Radio-Bildschirmschoner:"
 
-#: src/resources/simpleplayer.py:2230
+#: src/resources/simpleplayer.py:2226
 msgid "Radio screensaver keywords:"
 msgstr "Schlüsselwörter für den Radio-Bildschirmschoner:"
 
-#: src/resources/simpleplayer.py:2260 src/resources/simpleplayer.py:2261
+#: src/resources/simpleplayer.py:2256 src/resources/simpleplayer.py:2257
 msgid "SimplePlayer Menu"
 msgstr "SimplePlayer Menü"
 
-#: src/resources/simpleplayer.py:2275
+#: src/resources/simpleplayer.py:2271
 #, python-format
 msgid "Add service to global playlist-%02d"
 msgstr "Füge Service zu globaler Playlist-%02d hinzu"
 
-#: src/resources/simpleplayer.py:2277
+#: src/resources/simpleplayer.py:2273
 #, python-format
 msgid "Open global playlist-%02d"
 msgstr "Öffne globale Playlist-%02d"
 
-#: src/resources/simpleplayer.py:2279
+#: src/resources/simpleplayer.py:2275
 msgid "Open local playlist"
 msgstr "Öffne lokale Playlist"
 
-#: src/resources/simpleplayer.py:2281
+#: src/resources/simpleplayer.py:2277
 msgid "A/V Settings"
 msgstr "A/V Einstellungen"
 
-#: src/resources/simpleplayer.py:2283
+#: src/resources/simpleplayer.py:2279
 msgid "Advanced Audio Settings"
 msgstr "Erweiterte Audioeinstellungen"
 
-#: src/resources/simpleplayer.py:2284
+#: src/resources/simpleplayer.py:2280
 msgid "Mainmenu"
 msgstr "Hauptmenü"
 
-#: src/resources/simpleplayer.py:2352
+#: src/resources/simpleplayer.py:2348
 #, python-format
 msgid ""
 "The directory path does not end with '/':\n"
@@ -2866,7 +2862,7 @@ msgstr ""
 "Der Verzeichnispfad endet nicht mit '/':\n"
 "%s"
 
-#: src/resources/simpleplayer.py:2353
+#: src/resources/simpleplayer.py:2349
 #, python-format
 msgid ""
 "File with the same name exists in the directory path:\n"
@@ -2875,7 +2871,7 @@ msgstr ""
 "Datei mit gleichen Namen im Verzeichnispfad vorhanden:\n"
 "%s"
 
-#: src/resources/simpleplayer.py:2354
+#: src/resources/simpleplayer.py:2350
 #, python-format
 msgid ""
 "The missing directory:\n"
@@ -2884,7 +2880,7 @@ msgstr ""
 "Das fehlende Verzeichnis:\n"
 "%s konnte nicht angelegt werden!"
 
-#: src/resources/simpleplayer.py:2355
+#: src/resources/simpleplayer.py:2351
 #, python-format
 msgid ""
 "The directory path:\n"
@@ -2893,7 +2889,7 @@ msgstr ""
 "Der Verzeichnispfad:\n"
 "%s ist nicht vorhanden!"
 
-#: src/resources/simpleplayer.py:2356
+#: src/resources/simpleplayer.py:2352
 #, python-format
 msgid ""
 "There exists already a directory with this name:\n"
@@ -2902,7 +2898,7 @@ msgstr ""
 "Es existiert schon ein Verzeichnis mit diesem Namen:\n"
 "%s"
 
-#: src/resources/simpleplayer.py:2357
+#: src/resources/simpleplayer.py:2353
 #, python-format
 msgid ""
 "The path is OK, the file name was not specified:\n"
@@ -2911,7 +2907,7 @@ msgstr ""
 "Der Pfad ist i.O., der Dateiname wurde nicht angegeben:\n"
 "%s"
 
-#: src/resources/simpleplayer.py:2358
+#: src/resources/simpleplayer.py:2354
 #, python-format
 msgid ""
 "The directory path and file name is OK:\n"
@@ -2920,11 +2916,11 @@ msgstr ""
 "Der Verzeichnispfad & Dateiname ist i.O.:\n"
 "%s"
 
-#: src/resources/simpleplayer.py:2359
+#: src/resources/simpleplayer.py:2355
 msgid "The directory path is not specified!"
 msgstr "Der Verzeichnispfad wurde nicht angegeben!"
 
-#: src/resources/simpleplayer.py:2360
+#: src/resources/simpleplayer.py:2356
 #, python-format
 msgid ""
 "Symbolic link with the same name in the directory path:\n"
@@ -2933,7 +2929,7 @@ msgstr ""
 "Symbolischer Link mit gleichen Namen im Verzeichnispfad:\n"
 "%s vorhanden!"
 
-#: src/resources/simpleplayer.py:2361
+#: src/resources/simpleplayer.py:2357
 #, python-format
 msgid ""
 "The directory path does not begin with '/':\n"
@@ -3045,3 +3041,67 @@ msgstr ""
 #: src/resources/update.py:146
 msgid "MediaPortal update failed! Check the update log carefully!"
 msgstr "MediaPortal Update fehlgeschlagen! Überprüfe das Updatelog sorgfältig!"
+
+#: src/resources/yt_url.py:91
+msgid "Error: No callBack set"
+msgstr "Fehler: kein callBack gesetzt"
+
+#: src/resources/yt_url.py:222
+#, python-format
+msgid "Error: Unable to retrieve: %s"
+msgstr "Fehler: Kann nicht abgerufen werden: %s"
+
+#: src/resources/yt_url.py:279
+msgid "Error: Cannot decrypt url"
+msgstr "Fehler: kann URL nicht entschlüsseln"
+
+#: src/resources/yt_url.py:423 src/resources/yt_url.py:462
+msgid "Error: No video url found"
+msgstr "Fehler: keine Video-URL gefunden"
+
+#: src/resources/yt_url.py:471
+msgid "Error: Paid Content"
+msgstr "Fehler: Kostenpflichtiger Inhalt"
+
+#: src/resources/yt_url.py:478
+#, python-format
+msgid "Error: %s"
+msgstr "Fehler: %s"
+
+#: src/resources/yt_url.py:482
+msgid ""
+"Error: Unable to extract \"url_encoded_fmt_stream_map\" parameter for "
+"unknown reason"
+msgstr ""
+"Fehler: Parameter \"url_encoded_fmt_stream_map\" konnte  aus unbekanntem "
+"Grund nicht extrahiert werden"
+
+#: src/resources/yt_url.py:498
+msgid ""
+"Error: Missing youtube-dl dependency, please reinstall MediaPortal properly"
+msgstr ""
+"Fehler: Fehlende youtube-dl-Abhängigkeit, bitte installieren Sie MediaPortal "
+"korrekt neu"
+
+#: src/resources/yt_url.py:503
+msgid "Error: youtube-dl not found"
+msgstr "Fehler: youtube-dl nicht gefunden"
+
+#: src/resources/yt_url.py:507 src/resources/yt_url.py:520
+#, python-format
+msgid ""
+"Error: YouTube said:\n"
+"\n"
+"%s"
+msgstr ""
+"Fehler: YouTube hat mitgeteilt:\n"
+"\n"
+"%s"
+
+#: src/resources/yt_url.py:524
+msgid "Error: Failed calling youtube-dl"
+msgstr "Fehler: fehlgeschlagener Aufruf von youtube-dl"
+
+#: src/resources/yt_url.py:572
+msgid "Playback error:"
+msgstr "Fehler bei der Wiedergabe:"
index 580f0e6..a3c3d4a 100644 (file)
@@ -154,7 +154,7 @@ config_mp.mediaportal = ConfigSubsection()
 config_mp.mediaportal.fake_entry = NoSave(ConfigNothing())
 
 # Allgemein
-config_mp.mediaportal.version = NoSave(ConfigText(default="2020051701"))
+config_mp.mediaportal.version = NoSave(ConfigText(default="2020052001"))
 config_mp.mediaportal.autoupdate = ConfigYesNo(default = True)
 
 config_mp.mediaportal.skinfail = ConfigYesNo(default = False)
index 8f72e84..8055893 100644 (file)
@@ -1453,7 +1453,7 @@ class SimplePlayer(Screen, CoverSearchHelper, SimpleSeekHelper, SimplePlayerResu
                                self.pl_event.genEvent()
 
                printl(str(error),self,"E")
-               self.session.open(MessageBoxExt, str(error), MessageBoxExt.TYPE_INFO, timeout=5)
+               self.session.open(MessageBoxExt, str(error), MessageBoxExt.TYPE_INFO, timeout=10)
                self.keyPlayNextLocked = False
                reactor.callLater(1, self.playNextStream, config_mp.mediaportal.sp_on_movie_eof.value)
 
@@ -1577,10 +1577,6 @@ class SimplePlayer(Screen, CoverSearchHelper, SimpleSeekHelper, SimplePlayerResu
                                                                        sref.setSuburi(suburi)
                                                        elif 'hlssrv.com' in url and 'm3u8' in url and mp_globals.model in ["one","two"]:
                                                                sref = eServiceReference(0x2223, 0, url)
-                                                       elif 'megaupload.to/hls' in url and 'm3u8' in url and mp_globals.model in ["one","two"]:
-                                                               sref = eServiceReference(0x2223, 0, url)
-                                                       elif 'clipwatching.com/hls' in url and 'm3u8' in url and mp_globals.model in ["one","two"]:
-                                                               sref = eServiceReference(0x2223, 0, url)
                                                        else:
                                                                sref = eServiceReference(0x1001, 0, url)
                                                                if suburi:
index 2ce6e28..7a52f63 100644 (file)
@@ -23,5 +23,4 @@ class YoutubePlayer(SimplePlayer):
                self._YoutubeLink(self.session).getLink(self.playStream, self.ytError, dhTitle, dhVideoId, imgurl)
 
        def ytError(self, error):
-               msg = "Title: %s\n%s" % (self.playList[self.playIdx][self.title_inr], error)
-               self.dataError(msg)
\ No newline at end of file
+               self.dataError(error)
\ No newline at end of file
index a5f084e..2ea17aa 100644 (file)
@@ -1,8 +1,10 @@
 # -*- coding: utf-8 -*-
 
+from Plugins.Extensions.MediaPortal.plugin import _
 import urlparse
 import thread
 import requests
+import subprocess
 from Tools.BoundFunction import boundFunction
 from messageboxext import MessageBoxExt
 import mp_globals
@@ -67,8 +69,7 @@ class youtubeUrl(object):
        self.errBack = errFunc
 
   def dataError(self, error):
-       self.error += str(error)
-       self.errReturn()
+       printl(error,self,"E")
 
   def errReturn(self, url=None):
        if self.errBack == None:
@@ -87,7 +88,7 @@ class youtubeUrl(object):
        self.dash = config_mp.mediaportal.youtubeenabledash.value
 
        if not self.__callBack:
-               self.error = '[YoutubeURL] Error: no callBack set'
+               self.error = '[YouTubeURL] ' + _('Error: No callBack set')
                self.errReturn()
 
        if self.videoPrio == 0: #360p
@@ -218,7 +219,7 @@ class youtubeUrl(object):
 
        # Getting video webpage
        watch_url = 'https://www.youtube.com/watch?v=%s' % self.video_id
-       self.error = "[YoutubeURL] Error: Unable to retrieve watchpage:\n%s\n" % watch_url
+       self.error = '[YouTubeURL] ' + _("Error: Unable to retrieve: %s") % watch_url
        self.yt_dwnld_agent.getWebPage(watch_url).addCallback(self.parseVInfo, watch_url).addErrback(self.dataError)
 
   def parseVInfo(self, videoinfo, watch_url):
@@ -275,7 +276,7 @@ class youtubeUrl(object):
                                flashvars = self.extractFlashVars(videoinfo, 1)
                                signature = decryptor.decryptSignature(sig, flashvars[u"js"])
                                if not signature:
-                                       self.error = "[YoutubeURL] Error: cannot decrypt url"
+                                       self.error = '[YouTubeURL] ' + _("Error: Cannot decrypt url")
                                        self.errReturn(None)
                                        return
                                else:
@@ -419,7 +420,7 @@ class youtubeUrl(object):
                        else:
                                self.callBack(self.video_url, self.audio_url)
                except (KeyError,IndexError):
-                       self.error = "[YoutubeURL] Error: no video url found"
+                       self.error = '[YouTubeURL] ' + _("Error: No video url found")
                        self.errReturn(self.video_url)
 
   def parseVInfo2(self, results):
@@ -458,7 +459,7 @@ class youtubeUrl(object):
 
                self.callBack(self.video_url, self.audio_url)
        except (KeyError,IndexError):
-               self.error = "[YoutubeURL] Error: no video url found"
+               self.error = '[YouTubeURL] ' + _("Error: No video url found")
                self.errReturn(self.video_url)
 
   def checkFlashvars(self, flashvars, videoinfo):
@@ -467,18 +468,18 @@ class youtubeUrl(object):
                pc = False
                if 'offerButtonText' in videoinfo:
                        pc = True
-                       self.error = '[YoutubeURL] Error: Paid Content'
+                       self.error = '[YouTubeURL] ' + _("Error: Paid Content")
 
                msg = re.search('reason":{"simpleText":"(.*?)"},', videoinfo, re.S)
                if msg:
                        txt = msg.group(1).strip()
 
                        if not pc:
-                               self.error = '[YoutubeURL] Error: %s' % txt
+                               self.error = '[YouTubeURL] ' + _('Error: %s') % txt
                        else:
                                self.error += txt
                elif not pc:
-                       self.error = '[YoutubeURL] Error: unable to extract "url_encoded_fmt_stream_map" parameter for unknown reason'
+                       self.error = '[YouTubeURL] ' + _('Error: Unable to extract "url_encoded_fmt_stream_map" parameter for unknown reason')
 
                if not pc:
                        hlsdata = videoinfo.replace('\\/','/').replace('\\"','"')
@@ -487,15 +488,23 @@ class youtubeUrl(object):
                        if url:
                                self.callBack(url[-1], None)
                                return
-                       if youtubedl: # fallback to youtubedl resolver
+                       if mp_globals.isVTi:
+                               check = subprocess.check_output('opkg list_installed|grep youtube-dl', shell=True)
+                               check = re.findall('(20[\d]{2})\.(\d\d).(\d\d)', check, re.S)
+                               if check:
+                                       if (int(check[0][0]) >= 2020 and int(check[0][1]) >= 5 and int(check[0][2]) >= 8) and youtubedl: # fallback to youtubedl resolver
+                                               thread.start_new_thread(self.get_video,("GetVideo",))
+                                               return
+                               self.error = '[YouTubeURL] ' + _("Error: Missing youtube-dl dependency, please reinstall MediaPortal properly")
+                       elif youtubedl: # fallback to youtubedl resolver
                                thread.start_new_thread(self.get_video,("GetVideo",))
                                return
                        else:
-                               self.error = "[YoutubeURL] Error: youtube-dl not found"
+                               self.error = '[YouTubeURL] ' + _("Error: youtube-dl not found")
        else:
                from imports import stripAllTags
                reason = unquote_plus(flashvars['reason'][0])
-               self.error = '[YoutubeURL] Error: YouTube said: %s' % stripAllTags(str(reason))
+               self.error = '[YouTubeURL] ' + _('Error: YouTube said:\n\n%s') % stripAllTags(str(reason))
 
        self.errReturn(self.video_url)
 
@@ -507,10 +516,12 @@ class youtubeUrl(object):
                results = ytdl.extract_info(link, ie_key="Youtube", download=False, process=True)
                reactor.callFromThread(boundFunction(self.parseVInfo2, results))
        except DownloadError, e:
-               self.error = "[YoutubeURL] %s" % e
+               if "YouTube said:" in str(e):
+                       e = _('Error: YouTube said:\n\n%s') % str(e).split('YouTube said:')[-1].replace('Sorry about that.','').strip()
+               self.error = '[YouTubeURL] ' + "%s" % e
                reactor.callFromThread(boundFunction(self.errReturn, self.video_url))
        except:
-               self.error = "[YoutubeURL] Error: failed calling youtube-dl"
+               self.error = '[YouTubeURL] ' + _("Error: Failed calling youtube-dl")
                reactor.callFromThread(boundFunction(self.errReturn, self.video_url))
 
   def removeAdditionalEndingDelimiter(self, data):
@@ -558,7 +569,7 @@ class youtubeUrl(object):
        elif url.startswith('file://'):
                self.__callBack(url, None)
        elif url.startswith('http') and not '.m3u8' in url:
-               self.error = '[YoutubeURL] Playback error:'
+               self.error = '[YouTubeURL] ' + _('Playback error:')
                try:
                        return self.tw_agent_hlp.getRedirectedUrl(url, True).addCallback(self.getRedirect, url).addErrback(self.dataError)
                except: