import enigma2-plugin-extensions-mediaportal 2020051701 v2020051701
authorChristian Weiske <cweiske@cweiske.de>
Sun, 17 May 2020 23:15:18 +0000 (01:15 +0200)
committerChristian Weiske <cweiske@cweiske.de>
Sun, 17 May 2020 23:15:18 +0000 (01:15 +0200)
12 files changed:
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/mediatheken/servustv.py
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/debuglog.py
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/resources/hosters/clipwatching.py
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/resources/hosters/hosters.xml
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/resources/hosters/vup.py [new file with mode: 0644]
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/resources/simpleplayer.py
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/resources/streams.py
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/resources/update.py

index 02bc173..10b11e9 100644 (file)
@@ -153,7 +153,7 @@ class sTVids(MPScreen):
 
        def loadPageData(self, data):
                self.getLastPage(data, 'class="pagination">(.*?)</ul>')
-               shows = re.findall('class="component__card media_asset.*?href="(https://www.servustv.com/videos/(.*?)/)".*?class="card__image-container">.*?img\ssrc="(.*?\.(?:jpg|png)).*?".*?card__label">(.*?)</div.*?heading--two">(.*?)</.*?card__date">(.*?)</div', data, re.S)
+               shows = re.findall('class="component__card media_asset.*?href="(https://www.servustv.com/videos/(.*?)/)".*?class="card__image-container">.*?img\ssrc="(.*?\.(?:jpg|png)).*?".*?card__label">(.*?)</div.*?heading--two">(.*?)</.*?card__date\s{0,1}">(.*?)</div', data, re.S)
                if shows:
                        for (url,id,image,title,subtitle,date) in shows:
                                id = id.upper()
index a275311..27974dc 100644 (file)
@@ -45,6 +45,33 @@ std_headers = {
 }
 default_cover = "file://%s/youtube.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
 
+def getAPIKEY():
+       global APIKEYV3
+       global APIKEYV3_MASTER
+       global APIKEYV3_BACKUP
+       APIKEYV3 = ''
+       APIKEYV3_MASTER = ''
+       APIKEYV3_BACKUP = ''
+       apikeys = []
+       api_file = config_mp.mediaportal.watchlistpath.value + "mp_yt-apikey"
+       fp = open(api_file)
+       data = fp.read()
+       fp.close()
+       master = re.search('master=(.*?)\n', data)
+       if master:
+               APIKEYV3_MASTER = master.group(1).strip()
+               if len(APIKEYV3_MASTER) < 8:
+                       APIKEYV3_MASTER = ''
+               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)
+       if len(apikeys) > 0:
+               APIKEYV3 = random.choice(apikeys)
+
 class youtubeGenreScreen(MenuHelper):
        def __init__(self, session):
                global yt_oauth2
@@ -479,29 +506,7 @@ class youtubeGenreScreen(MenuHelper):
                self.channelId = None
 
        def initSubCat(self):
-               global APIKEYV3
-               global APIKEYV3_MASTER
-               global APIKEYV3_BACKUP
-               apikeys = []
-               api_file = config_mp.mediaportal.watchlistpath.value + "mp_yt-apikey"
-               fp = open(api_file)
-               data = fp.read()
-               fp.close()
-               master = re.search('master=(.*?)\n', data)
-               if master:
-                       APIKEYV3_MASTER = master.group(1).strip()
-                       if len(APIKEYV3_MASTER) < 8:
-                               APIKEYV3_MASTER = ''
-                       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)
-               if len(apikeys) > 0:
-                       APIKEYV3 = random.choice(apikeys)
-
+               getAPIKEY()
                if fileExists("/tmp/mp_yt_cache"):
                        tmp = open("/tmp/mp_yt_cache","r")
                        data = tmp.read()
@@ -514,7 +519,7 @@ class youtubeGenreScreen(MenuHelper):
                        twAgentGetPage(url, agent=agent, headers=std_headers).addCallback(self.parseCats)
 
        def parseCats(self, data):
-               if not fileExists("/tmp/mp_yt_cache"):
+               if not fileExists("/tmp/mp_yt_cache") and "videoCategoryListResponse" in data:
                        tmp = open("/tmp/mp_yt_cache","w")
                        tmp.write(data)
                        tmp.close()
@@ -949,42 +954,45 @@ class YT_ListScreen(MPScreen, ThumbsHelper):
                self.mine = False
                self.ytdl_playlist = False
 
+               self.onLayoutFinish.append(self.checkAPICall)
+
+       def checkAPICall(self):
+               if not APIKEYV3:
+                       getAPIKEY()
+
                if not self.apiUrl and not '/videos?' in self.stvLink:
-                       self.onLayoutFinish.append(self.loadPageData)
+                       reactor.callLater(0, self.loadPageData)
                else:
-                       self.onLayoutFinish.append(self.checkAPICallv2)
-
-       def checkAPICallv2(self):
-               m = re.search('/api/users/(.*?)/uploads\?', self.stvLink, re.S)
-               if not m:
-                       m = re.search('/user/(.*?)/videos\?$', self.stvLink, re.S)
-               if not m:
-                       m = re.search('/channel/(.*?)/videos\?$', self.stvLink, re.S)
-               if m:
-                       if m.group(1).startswith('PL'):
-                               if self.stvLink.endswith('/videos?'):
-                                       self.stvLink = "https://www.googleapis.com/youtube/v3/playlistItems?part=snippet&order=date&playlistId=%s&key=%s" % (m.group(1), APIKEYV3)
-                                       self.apiUrl = False
-                                       self.apiUrlv3 = True
-                               elif youtubedl:
-                                       self.keyLocked = True
-                                       self.stvLink = "https://www.youtube.com/playlist?list=%s" % m.group(1)
-                                       self.ml.setList(map(self.YT_ListEntry, [('',_('Please wait...'),'','','','','')]))
-                                       thread.start_new_thread(self.get_playlist,("GetPlaylist",))
-                                       return
+                       m = re.search('/api/users/(.*?)/uploads\?', self.stvLink, re.S)
+                       if not m:
+                               m = re.search('/user/(.*?)/videos\?$', self.stvLink, re.S)
+                       if not m:
+                               m = re.search('/channel/(.*?)/videos\?$', self.stvLink, re.S)
+                       if m:
+                               if m.group(1).startswith('PL'):
+                                       if self.stvLink.endswith('/videos?'):
+                                               self.stvLink = "https://www.googleapis.com/youtube/v3/playlistItems?part=snippet&order=date&playlistId=%s&key=%s" % (m.group(1), APIKEYV3)
+                                               self.apiUrl = False
+                                               self.apiUrlv3 = True
+                                       elif youtubedl:
+                                               self.keyLocked = True
+                                               self.stvLink = "https://www.youtube.com/playlist?list=%s" % m.group(1)
+                                               self.ml.setList(map(self.YT_ListEntry, [('',_('Please wait...'),'','','','','')]))
+                                               thread.start_new_thread(self.get_playlist,("GetPlaylist",))
+                                               return
+                                       else:
+                                               self.stvLink = "https://www.googleapis.com/youtube/v3/playlistItems?part=snippet&order=date&playlistId=%s&key=%s" % (m.group(1), APIKEYV3)
+                                               self.apiUrl = False
+                                               self.apiUrlv3 = True
+                               elif not m.group(1).startswith('UC'):
+                                       url = 'https://www.googleapis.com/youtube/v3/channels?part=contentDetails&forUsername=%s&key=%s' % (m.group(1), APIKEYV3)
+                                       return twAgentGetPage(url, agent=agent, headers=self.headers).addCallback(self.parsePlaylistId).addErrback(self.dataError)
                                else:
-                                       self.stvLink = "https://www.googleapis.com/youtube/v3/playlistItems?part=snippet&order=date&playlistId=%s&key=%s" % (m.group(1), APIKEYV3)
                                        self.apiUrl = False
                                        self.apiUrlv3 = True
-                       elif not m.group(1).startswith('UC'):
-                               url = 'https://www.googleapis.com/youtube/v3/channels?part=contentDetails&forUsername=%s&key=%s' % (m.group(1), APIKEYV3)
-                               return twAgentGetPage(url, agent=agent, headers=self.headers).addCallback(self.parsePlaylistId).addErrback(self.dataError)
-                       else:
-                               self.apiUrl = False
-                               self.apiUrlv3 = True
-                               self.stvLink = 'https://www.googleapis.com/youtube/v3/search?part=snippet&order=date&channelId=%s&key=%s' % (m.group(1), APIKEYV3)
+                                       self.stvLink = 'https://www.googleapis.com/youtube/v3/search?part=snippet&order=date&channelId=%s&key=%s' % (m.group(1), APIKEYV3)
 
-               reactor.callLater(0, self.loadPageData)
+                       reactor.callLater(0, self.loadPageData)
 
        def get_playlist(self, threadName):
                try:
@@ -2060,7 +2068,7 @@ class YT_Oauth2:
                                        f.write(json.dumps(tokenData))
                                        f.close()
                                        self.waitingBox.cancel()
-                                       self.session.open(MessageBoxExt, _('Access granted :)\nFor safety you should create backup\'s of enigma2 settings and \'mp_yt-access-tokens.json\'.\nThe tokens are valid until they are revoked in Your Google Account.'), MessageBoxExt.TYPE_INFO)
+                                       self.session.open(MessageBoxExt, _('Access granted.\nThe tokens are valid until they are revoked in your Google Account.'), MessageBoxExt.TYPE_INFO)
                                elif not self.abortPoll:
                                        print tokenData.get('error','').encode('utf-8')
                                        reactor.callLater(self._interval, self._pollOauth2Server)
@@ -2116,4 +2124,4 @@ class YT_Oauth2:
                else:
                        return self.accessToken
 
-yt_oauth2 = YT_Oauth2()
+yt_oauth2 = YT_Oauth2()
\ No newline at end of file
index aae049f..70f5181 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 de23502..7eb81ab 100644 (file)
@@ -1,8 +1,8 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: MediaPortal\n"
-"POT-Creation-Date: 2020-05-13 17:25+0200\n"
-"PO-Revision-Date: 2020-05-13 17:28+0200\n"
+"POT-Creation-Date: 2020-05-17 12:24+0200\n"
+"PO-Revision-Date: 2020-05-17 12:24+0200\n"
 "Last-Translator: dhwz <dhwz@gmx.net>\n"
 "Language-Team: MediaPortal Team\n"
 "Language: de_DE\n"
@@ -74,7 +74,7 @@ msgstr ""
 #: src/additions/porn/pornxio.py:306 src/additions/porn/realgfporn.py:160
 #: src/additions/porn/redtube.py:181 src/additions/porn/sexu.py:131
 #: src/additions/porn/shemalez.py:165 src/additions/porn/shesfreaky.py:139
-#: src/additions/porn/slutload.py:422 src/additions/porn/spankbang.py:167
+#: src/additions/porn/slutload.py:434 src/additions/porn/spankbang.py:167
 #: src/additions/porn/spankwire.py:204 src/additions/porn/sunporno.py:192
 #: src/additions/porn/tnaflix.py:153 src/additions/porn/tube8.py:205
 #: src/additions/porn/tubepornclassic.py:159 src/additions/porn/tubewolf.py:162
@@ -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:912
+#: src/additions/mediatheken/youtube.py:925
 #: 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
@@ -164,7 +164,7 @@ msgstr "Seite"
 #: src/additions/porn/porntv.py:246 src/additions/porn/pornxio.py:308
 #: src/additions/porn/realgfporn.py:162 src/additions/porn/redtube.py:185
 #: src/additions/porn/sexu.py:133 src/additions/porn/shemalez.py:167
-#: src/additions/porn/shesfreaky.py:141 src/additions/porn/slutload.py:424
+#: src/additions/porn/shesfreaky.py:141 src/additions/porn/slutload.py:436
 #: src/additions/porn/spankbang.py:173 src/additions/porn/spankwire.py:233
 #: src/additions/porn/sunporno.py:194 src/additions/porn/tnaflix.py:155
 #: src/additions/porn/tube8.py:209 src/additions/porn/tubepornclassic.py:161
@@ -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:964
-#: src/additions/mediatheken/youtube.py:1015
+#: src/additions/mediatheken/youtube.py:980
+#: src/additions/mediatheken/youtube.py:1031
 #: 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
@@ -293,9 +293,9 @@ msgstr "Seite:"
 #: src/additions/porn/realgfporn.py:175 src/additions/porn/redtube.py:206
 #: src/additions/porn/sexu.py:69 src/additions/porn/sexu.py:146
 #: src/additions/porn/shemalez.py:180 src/additions/porn/shesfreaky.py:72
-#: src/additions/porn/shesfreaky.py:154 src/additions/porn/slutload.py:184
-#: src/additions/porn/slutload.py:439 src/additions/porn/slutload.py:627
-#: src/additions/porn/slutload.py:631 src/additions/porn/spankbang.py:204
+#: src/additions/porn/shesfreaky.py:154 src/additions/porn/slutload.py:188
+#: src/additions/porn/slutload.py:451 src/additions/porn/slutload.py:639
+#: src/additions/porn/slutload.py:643 src/additions/porn/spankbang.py:204
 #: src/additions/porn/spankwire.py:87 src/additions/porn/spankwire.py:218
 #: src/additions/porn/sunporno.py:86 src/additions/porn/sunporno.py:207
 #: src/additions/porn/tnaflix.py:168 src/additions/porn/tube8.py:233
@@ -330,13 +330,13 @@ msgstr "Bitte warten..."
 #: src/additions/fun/gaskrank_tv.py:134 src/additions/fun/gaskrank_tv.py:158
 #: src/additions/fun/hornoxe.py:92 src/additions/fun/lachschon_de.py:223
 #: src/additions/fun/liveleak.py:143 src/additions/fun/liveleak.py:181
-#: src/additions/fun/twitch.py:312 src/additions/fun/twitch.py:330
+#: src/additions/fun/twitch.py:311 src/additions/fun/twitch.py:329
 #: src/additions/mediatheken/arte.py:368 src/additions/mediatheken/atv.py:150
 #: src/additions/mediatheken/brf.py:145
 #: src/additions/mediatheken/dreisat.py:382
 #: src/additions/mediatheken/netzkino.py:179
 #: src/additions/mediatheken/popcorntimes.py:191
-#: src/additions/mediatheken/youtube.py:1656 src/additions/porn/ahme.py:217
+#: src/additions/mediatheken/youtube.py:1673 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
@@ -351,7 +351,7 @@ msgstr "Bitte warten..."
 #: src/additions/porn/pornicom.py:254 src/additions/porn/pornid.py:260
 #: src/additions/porn/pornoreino.py:167 src/additions/porn/porntrex.py:318
 #: src/additions/porn/pornxio.py:409 src/additions/porn/redtube.py:252
-#: src/additions/porn/shemalez.py:202 src/additions/porn/slutload.py:597
+#: src/additions/porn/shemalez.py:202 src/additions/porn/slutload.py:609
 #: src/additions/porn/spankwire.py:247 src/additions/porn/sunporno.py:227
 #: src/additions/porn/tnaflix.py:183 src/additions/porn/tubepornclassic.py:193
 #: src/additions/porn/tubewolf.py:200 src/additions/porn/txxx.py:355
@@ -419,7 +419,8 @@ msgstr "Keine Filme gefunden!"
 #: mpgz/src/additions/porn/pornstreams.py:203
 #: mpgz/src/additions/porn/streamxxx.py:253
 #: mpgz/src/additions/useradditions/ddl_me.py:562
-#: mpgz/src/additions/useradditions/filmpalast.py:342
+#: mpgz/src/additions/useradditions/filmpalast.py:348
+#: mpgz/src/additions/useradditions/filmpalast.py:359
 #: mpgz/src/additions/useradditions/flimmerstube.py:173
 #: mpgz/src/additions/useradditions/flimmerstube.py:181
 #: mpgz/src/additions/useradditions/kinoxto.py:776
@@ -520,7 +521,7 @@ msgstr "Wähle Aktion"
 
 #: mpgz/src/additions/porn/porn00.py:252 mpgz/src/additions/porn/porn00.py:260
 #: mpgz/src/additions/porn/porn00.py:278
-#: mpgz/src/additions/useradditions/filmpalast.py:355
+#: mpgz/src/additions/useradditions/filmpalast.py:370
 #: mpgz/src/additions/useradditions/serienstream.py:805
 msgid "Broken URL parsing, please report to the developers."
 msgstr "Defektes URL Parsing, bitte an die Entwickler melden."
@@ -544,7 +545,7 @@ 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:563
+#: src/additions/mediatheken/ard.py:90 src/additions/mediatheken/youtube.py:576
 #: src/additions/mediatheken/zdf.py:103 src/additions/newsdoku/dokus4_me.py:74
 #: src/resources/mpscreen.py:400
 msgid "Enter search criteria"
@@ -634,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:904
+#: src/additions/fun/twitch.py:134 src/additions/mediatheken/youtube.py:917
 #: 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
@@ -665,7 +666,7 @@ msgstr "PIN eingeben"
 #: mpgz/src/additions/useradditions/movie4k.py:654
 #: mpgz/src/additions/useradditions/movie4k.py:742
 #: mpgz/src/additions/useradditions/movie4k.py:746
-#: src/additions/mediatheken/kindertube.py:215 src/resources/streams.py:580
+#: src/additions/mediatheken/kindertube.py:215 src/resources/streams.py:586
 msgid "Stream not found, try another Stream Hoster."
 msgstr "Stream nicht gefunden, versuche einen anderen Stream Hoster."
 
@@ -683,11 +684,11 @@ msgstr "Auswahl"
 #: src/additions/music/tunein.py:324 src/additions/porn/pornhub.py:158
 #: src/additions/porn/pornhub.py:331 src/additions/porn/pornhub.py:333
 #: src/additions/porn/porntrex.py:97 src/additions/porn/porntrex.py:186
-#: src/additions/porn/porntrex.py:188 src/additions/porn/slutload.py:172
-#: src/additions/porn/slutload.py:309 src/additions/porn/slutload.py:311
+#: src/additions/porn/porntrex.py:188 src/additions/porn/slutload.py:176
+#: 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:2268
+#: src/resources/simpleplayer.py:2272
 msgid "Setup"
 msgstr "Einstellungen"
 
@@ -703,8 +704,8 @@ msgstr "Email:"
 #: mpgz/src/additions/useradditions/serienstream.py:113
 #: src/additions/porn/pornhub.py:340 src/additions/porn/pornhub.py:343
 #: src/additions/porn/porntrex.py:195 src/additions/porn/porntrex.py:198
-#: src/additions/porn/porntrex.py:201 src/additions/porn/slutload.py:318
-#: src/additions/porn/youporn.py:229
+#: src/additions/porn/porntrex.py:201 src/additions/porn/slutload.py:325
+#: src/additions/porn/slutload.py:328 src/additions/porn/youporn.py:229
 msgid "Password:"
 msgstr "Passwort:"
 
@@ -790,8 +791,8 @@ msgid "Movie Selection"
 msgstr "Film Auswahl"
 
 #: src/additions/fun/twitch.py:101 src/additions/fun/twitch.py:107
-#: src/additions/fun/twitch.py:140 src/additions/fun/twitch.py:380
-#: src/additions/fun/twitch.py:398 src/additions/fun/twitch.py:400
+#: src/additions/fun/twitch.py:140 src/additions/fun/twitch.py:379
+#: src/additions/fun/twitch.py:397 src/additions/fun/twitch.py:399
 msgid "any"
 msgstr "alle"
 
@@ -801,54 +802,54 @@ msgstr "alle"
 msgid "Add to Favorites"
 msgstr "Zu Favoriten hinzufügen"
 
-#: src/additions/fun/twitch.py:137 src/additions/mediatheken/youtube.py:148
-#: src/additions/mediatheken/youtube.py:154
-#: src/additions/mediatheken/youtube.py:158
-#: src/additions/mediatheken/youtube.py:168
-#: src/additions/mediatheken/youtube.py:174
+#: 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
 msgid "Videos"
 msgstr "Videos"
 
-#: src/additions/fun/twitch.py:143 src/additions/fun/twitch.py:404
-#: src/additions/mediatheken/youtube.py:137
-#: src/additions/mediatheken/youtube.py:452 src/additions/music/radio.py:112
+#: 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
 msgid "Language"
 msgstr "Sprache"
 
-#: src/additions/fun/twitch.py:239 src/additions/music/radio.py:407
+#: src/additions/fun/twitch.py:238 src/additions/music/radio.py:407
 #: src/additions/music/shoutcast.py:353 src/additions/music/tunein.py:390
 #: src/resources/simplelist.py:178 src/resources/simplelist.py:331
 #: src/resources/simplelist.py:597
 msgid "No entries found!"
 msgstr "Keine Einträge gefunden!"
 
-#: src/additions/fun/twitch.py:253 src/additions/fun/twitch.py:294
+#: src/additions/fun/twitch.py:252 src/additions/fun/twitch.py:293
 msgid "No games found!"
 msgstr "Keine Spiele gefunden!"
 
-#: src/additions/fun/twitch.py:268 src/additions/fun/twitch.py:283
+#: src/additions/fun/twitch.py:267 src/additions/fun/twitch.py:282
 msgid "No streams found!"
 msgstr "Keine Streams gefunden!"
 
-#: src/additions/fun/twitch.py:345 src/additions/mediatheken/youtube.py:412
-#: src/additions/mediatheken/youtube.py:428
-#: src/additions/mediatheken/youtube.py:1011
+#: 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/mediatheken/youtube_user.py:76
 #: src/additions/porn/cumlouder.py:317 src/additions/porn/pornhub.py:1020
 #: src/additions/porn/xvideos.py:364
 msgid "No channels found!"
 msgstr "Keine Kanäle gefunden!"
 
-#: src/additions/fun/twitch.py:381
+#: src/additions/fun/twitch.py:380
 msgid "Select language"
 msgstr "Wähle Sprache"
 
-#: src/additions/fun/twitch.py:421 src/additions/music/radio.py:358
+#: src/additions/fun/twitch.py:420 src/additions/music/radio.py:358
 #: src/additions/music/shoutcast.py:304 src/additions/music/tunein.py:285
 msgid "Selection was added to the favorites."
 msgstr "Auswahl wurde zu den Favoriten hinzugefügt."
 
-#: src/additions/fun/twitch.py:460
+#: src/additions/fun/twitch.py:459
 msgid "There is currently no live stream available on this channel."
 msgstr "Derzeit ist kein Live-Stream auf diesem Kanal verfügbar."
 
@@ -864,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:1299
-#: src/additions/mediatheken/youtube.py:1329 src/resources/tmdb.py:148
+#: src/additions/mediatheken/youtube.py:1316
+#: src/additions/mediatheken/youtube.py:1346 src/resources/tmdb.py:148
 msgid "Runtime:"
 msgstr "Laufzeit:"
 
@@ -878,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:1516
-#: src/additions/mediatheken/youtube.py:1534 src/additions/music/tunein.py:225
+#: src/additions/mediatheken/youtube.py:1533
+#: src/additions/mediatheken/youtube.py:1551 src/additions/music/tunein.py:225
 msgid "No contents / results found!"
 msgstr "Keine Inhalte / Ergebnisse gefunden!"
 
@@ -940,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:61
-#: src/additions/mediatheken/youtube.py:1676
+#: src/additions/mediatheken/youtube.py:88
+#: src/additions/mediatheken/youtube.py:1693
 msgid "Date"
 msgstr "Datum"
 
-#: src/additions/mediatheken/youtube.py:62
-#: src/additions/mediatheken/youtube.py:1677
+#: src/additions/mediatheken/youtube.py:89
+#: src/additions/mediatheken/youtube.py:1694
 msgid "Rating"
 msgstr "Bewertung"
 
-#: src/additions/mediatheken/youtube.py:63
-#: src/additions/mediatheken/youtube.py:1678
+#: src/additions/mediatheken/youtube.py:90
+#: src/additions/mediatheken/youtube.py:1695
 msgid "Relevance"
 msgstr "Relevanz"
 
-#: src/additions/mediatheken/youtube.py:64
-#: src/additions/mediatheken/youtube.py:1679
+#: src/additions/mediatheken/youtube.py:91
+#: src/additions/mediatheken/youtube.py:1696
 msgid "Title"
 msgstr "Titel"
 
-#: src/additions/mediatheken/youtube.py:65
-#: src/additions/mediatheken/youtube.py:1680
+#: src/additions/mediatheken/youtube.py:92
+#: src/additions/mediatheken/youtube.py:1697
 msgid "Video count"
 msgstr "Anzahl der Videos"
 
-#: src/additions/mediatheken/youtube.py:66
-#: src/additions/mediatheken/youtube.py:1681
+#: src/additions/mediatheken/youtube.py:93
+#: src/additions/mediatheken/youtube.py:1698
 msgid "View count"
 msgstr "Anzahl der Aufrufe"
 
-#: src/additions/mediatheken/youtube.py:70
+#: src/additions/mediatheken/youtube.py:97
 msgid "English"
 msgstr "Englisch"
 
-#: src/additions/mediatheken/youtube.py:71
+#: src/additions/mediatheken/youtube.py:98
 msgid "German"
 msgstr "Deutsch"
 
-#: src/additions/mediatheken/youtube.py:72
+#: src/additions/mediatheken/youtube.py:99
 msgid "French"
 msgstr "Französisch"
 
-#: src/additions/mediatheken/youtube.py:73
+#: src/additions/mediatheken/youtube.py:100
 msgid "Italian"
 msgstr "Italienisch"
 
-#: src/additions/mediatheken/youtube.py:74
+#: src/additions/mediatheken/youtube.py:101
 msgid "Spanish"
 msgstr "Spanisch"
 
-#: src/additions/mediatheken/youtube.py:75
+#: src/additions/mediatheken/youtube.py:102
 msgid "Portuguese"
 msgstr "Portugiesisch"
 
-#: src/additions/mediatheken/youtube.py:76
+#: src/additions/mediatheken/youtube.py:103
 msgid "Polish"
 msgstr "Polnisch"
 
-#: src/additions/mediatheken/youtube.py:77
+#: src/additions/mediatheken/youtube.py:104
 msgid "Danish"
 msgstr "Dänisch"
 
-#: src/additions/mediatheken/youtube.py:78
+#: src/additions/mediatheken/youtube.py:105
 msgid "Norwegian"
 msgstr "Norwegisch"
 
-#: src/additions/mediatheken/youtube.py:79
+#: src/additions/mediatheken/youtube.py:106
 msgid "Swedish"
 msgstr "Schwedisch"
 
-#: src/additions/mediatheken/youtube.py:80
+#: src/additions/mediatheken/youtube.py:107
 msgid "Finnish"
 msgstr "Finnisch"
 
-#: src/additions/mediatheken/youtube.py:81
-#: src/additions/mediatheken/youtube.py:102
-#: src/additions/mediatheken/youtube.py:109
-#: src/additions/mediatheken/youtube.py:115
-#: src/additions/mediatheken/youtube.py:128
+#: 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
 msgid "Any"
 msgstr "Beliebig"
 
-#: src/additions/mediatheken/youtube.py:85
+#: src/additions/mediatheken/youtube.py:112
 msgid "Whole world"
 msgstr "Weltweit"
 
-#: src/additions/mediatheken/youtube.py:86
+#: src/additions/mediatheken/youtube.py:113
 msgid "Great Britain"
 msgstr "Großbritannien"
 
-#: src/additions/mediatheken/youtube.py:87 src/additions/music/radio.py:42
+#: src/additions/mediatheken/youtube.py:114 src/additions/music/radio.py:42
 msgid "Germany"
 msgstr "Deutschland"
 
-#: src/additions/mediatheken/youtube.py:88 src/additions/music/radio.py:42
+#: src/additions/mediatheken/youtube.py:115 src/additions/music/radio.py:42
 msgid "Austria"
 msgstr "Österreich"
 
-#: src/additions/mediatheken/youtube.py:89
+#: src/additions/mediatheken/youtube.py:116
 msgid "Switzerland"
 msgstr "Schweiz"
 
-#: src/additions/mediatheken/youtube.py:90 src/additions/music/radio.py:42
+#: src/additions/mediatheken/youtube.py:117 src/additions/music/radio.py:42
 msgid "France"
 msgstr "Frankreich"
 
-#: src/additions/mediatheken/youtube.py:91 src/additions/music/radio.py:42
+#: src/additions/mediatheken/youtube.py:118 src/additions/music/radio.py:42
 msgid "Italy"
 msgstr "Italien"
 
-#: src/additions/mediatheken/youtube.py:92 src/additions/music/radio.py:42
+#: src/additions/mediatheken/youtube.py:119 src/additions/music/radio.py:42
 msgid "Spain"
 msgstr "Spanien"
 
-#: src/additions/mediatheken/youtube.py:93 src/additions/music/radio.py:42
+#: src/additions/mediatheken/youtube.py:120 src/additions/music/radio.py:42
 msgid "Portugal"
 msgstr "Portugal"
 
-#: src/additions/mediatheken/youtube.py:94 src/additions/music/radio.py:42
+#: src/additions/mediatheken/youtube.py:121 src/additions/music/radio.py:42
 msgid "Poland"
 msgstr "Polen"
 
-#: src/additions/mediatheken/youtube.py:95 src/additions/music/radio.py:42
+#: src/additions/mediatheken/youtube.py:122 src/additions/music/radio.py:42
 msgid "Denmark"
 msgstr "Dänemark"
 
-#: src/additions/mediatheken/youtube.py:96
+#: src/additions/mediatheken/youtube.py:123
 msgid "Norway"
 msgstr "Norwegen"
 
-#: src/additions/mediatheken/youtube.py:97 src/additions/music/radio.py:42
+#: src/additions/mediatheken/youtube.py:124 src/additions/music/radio.py:42
 msgid "Sweden"
 msgstr "Schweden"
 
-#: src/additions/mediatheken/youtube.py:98
+#: src/additions/mediatheken/youtube.py:125
 msgid "Finland"
 msgstr "Finnland"
 
-#: src/additions/mediatheken/youtube.py:110
+#: src/additions/mediatheken/youtube.py:137
 msgid "2D"
 msgstr "2D"
 
-#: src/additions/mediatheken/youtube.py:111
+#: src/additions/mediatheken/youtube.py:138
 msgid "3D"
 msgstr "3D"
 
-#: src/additions/mediatheken/youtube.py:116 src/plugin.py:225
+#: src/additions/mediatheken/youtube.py:143 src/plugin.py:225
 msgid "High"
 msgstr "Hoch"
 
-#: src/additions/mediatheken/youtube.py:117 src/plugin.py:225
+#: src/additions/mediatheken/youtube.py:144 src/plugin.py:225
 msgid "Low"
 msgstr "Niedrig"
 
-#: src/additions/mediatheken/youtube.py:121
+#: src/additions/mediatheken/youtube.py:148
 msgid "None"
 msgstr "Keine"
 
-#: src/additions/mediatheken/youtube.py:122
+#: src/additions/mediatheken/youtube.py:149
 msgid "Completed"
 msgstr "Abgeschlossene"
 
-#: src/additions/mediatheken/youtube.py:123
-#: src/additions/mediatheken/youtube.py:212
+#: src/additions/mediatheken/youtube.py:150
+#: src/additions/mediatheken/youtube.py:239
 msgid "Live"
 msgstr "Live"
 
-#: src/additions/mediatheken/youtube.py:124
+#: src/additions/mediatheken/youtube.py:151
 msgid "Upcoming"
 msgstr "Bevorstehende"
 
-#: src/additions/mediatheken/youtube.py:129
+#: src/additions/mediatheken/youtube.py:156
 msgid "Episode"
 msgstr "Episode"
 
-#: src/additions/mediatheken/youtube.py:130 src/resources/tmdb.py:54
+#: src/additions/mediatheken/youtube.py:157 src/resources/tmdb.py:54
 msgid "Movie"
 msgstr "Film"
 
-#: src/additions/mediatheken/youtube.py:134
-#: src/additions/mediatheken/youtube.py:448
+#: src/additions/mediatheken/youtube.py:161
+#: src/additions/mediatheken/youtube.py:475
 msgid "Search request"
 msgstr "Suchanfrage"
 
-#: src/additions/mediatheken/youtube.py:135
-#: src/additions/mediatheken/youtube.py:458
+#: src/additions/mediatheken/youtube.py:162
+#: src/additions/mediatheken/youtube.py:485
 msgid "Event type"
 msgstr "Event Typ"
 
-#: src/additions/mediatheken/youtube.py:136
-#: src/additions/mediatheken/youtube.py:450
-#: src/additions/mediatheken/youtube.py:907
-#: src/additions/mediatheken/youtube.py:1683
+#: src/additions/mediatheken/youtube.py:163
+#: src/additions/mediatheken/youtube.py:477
+#: src/additions/mediatheken/youtube.py:920
+#: src/additions/mediatheken/youtube.py:1700
 msgid "Sort by"
 msgstr "Sortieren nach"
 
-#: src/additions/mediatheken/youtube.py:138
-#: src/additions/mediatheken/youtube.py:454
+#: src/additions/mediatheken/youtube.py:165
+#: src/additions/mediatheken/youtube.py:481
 msgid "Search region"
 msgstr "Suchregion"
 
-#: src/additions/mediatheken/youtube.py:139
-#: src/additions/mediatheken/youtube.py:456
+#: src/additions/mediatheken/youtube.py:166
+#: src/additions/mediatheken/youtube.py:483
 msgid "User name"
 msgstr "Username"
 
-#: src/additions/mediatheken/youtube.py:140
-#: src/additions/mediatheken/youtube.py:460
+#: src/additions/mediatheken/youtube.py:167
+#: src/additions/mediatheken/youtube.py:487
 msgid "3D Search"
 msgstr "3D Suche"
 
-#: src/additions/mediatheken/youtube.py:141
-#: src/additions/mediatheken/youtube.py:462
+#: src/additions/mediatheken/youtube.py:168
+#: src/additions/mediatheken/youtube.py:489
 msgid "Runtime"
 msgstr "Laufzeit"
 
-#: src/additions/mediatheken/youtube.py:142
-#: src/additions/mediatheken/youtube.py:464
+#: src/additions/mediatheken/youtube.py:169
+#: src/additions/mediatheken/youtube.py:491
 msgid "Video definition"
 msgstr "Videoauflösung"
 
-#: src/additions/mediatheken/youtube.py:143
-#: src/additions/mediatheken/youtube.py:466
+#: src/additions/mediatheken/youtube.py:170
+#: src/additions/mediatheken/youtube.py:493
 msgid "Video type"
 msgstr "Videotyp"
 
-#: src/additions/mediatheken/youtube.py:147
-#: src/additions/mediatheken/youtube.py:163
-#: src/additions/mediatheken/youtube.py:167
-#: src/additions/mediatheken/youtube.py:173
+#: src/additions/mediatheken/youtube.py:174
+#: src/additions/mediatheken/youtube.py:190
+#: src/additions/mediatheken/youtube.py:194
+#: src/additions/mediatheken/youtube.py:200
 msgid "Featured"
 msgstr "Empfohlen"
 
-#: src/additions/mediatheken/youtube.py:149
-#: src/additions/mediatheken/youtube.py:169
-#: src/additions/mediatheken/youtube.py:178
-#: src/additions/mediatheken/youtube.py:182
+#: src/additions/mediatheken/youtube.py:176
+#: src/additions/mediatheken/youtube.py:196
+#: src/additions/mediatheken/youtube.py:205
+#: src/additions/mediatheken/youtube.py:209
 msgid "Playlists"
 msgstr "Playlisten"
 
-#: src/additions/mediatheken/youtube.py:150
-#: src/additions/mediatheken/youtube.py:1394
+#: src/additions/mediatheken/youtube.py:177
+#: src/additions/mediatheken/youtube.py:1411
 msgid "Channels"
 msgstr "Kanäle"
 
-#: src/additions/mediatheken/youtube.py:159
+#: src/additions/mediatheken/youtube.py:186
 msgid "Full Playlist"
 msgstr "Vollständige Playlist"
 
-#: src/additions/mediatheken/youtube.py:183
+#: src/additions/mediatheken/youtube.py:210
 msgid "Uploads"
 msgstr "Uploads"
 
-#: src/additions/mediatheken/youtube.py:184
+#: src/additions/mediatheken/youtube.py:211
 msgid "Likes"
 msgstr "Likes"
 
-#: src/additions/mediatheken/youtube.py:185
+#: src/additions/mediatheken/youtube.py:212
 msgid "Subscriptions"
 msgstr "Abonnements"
 
-#: src/additions/mediatheken/youtube.py:189
+#: src/additions/mediatheken/youtube.py:216
 msgid "Video search"
 msgstr "Video Suche"
 
-#: src/additions/mediatheken/youtube.py:190
+#: src/additions/mediatheken/youtube.py:217
 msgid "Playlist search"
 msgstr "Playlisten Suche"
 
-#: src/additions/mediatheken/youtube.py:191
+#: src/additions/mediatheken/youtube.py:218
 msgid "Channel search"
 msgstr "Kanal Suche"
 
-#: src/additions/mediatheken/youtube.py:192
+#: src/additions/mediatheken/youtube.py:219
 msgid "Trends"
 msgstr "Trends"
 
-#: src/additions/mediatheken/youtube.py:194
-#: src/additions/mediatheken/youtube.py:790
+#: src/additions/mediatheken/youtube.py:221
+#: src/additions/mediatheken/youtube.py:803
 msgid "My channel"
 msgstr "Mein Kanal"
 
-#: src/additions/mediatheken/youtube.py:195
-#: src/additions/mediatheken/youtube.py:776
-#: src/additions/mediatheken/youtube.py:862 src/additions/music/radio.py:104
+#: 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/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:196
+#: src/additions/mediatheken/youtube.py:223
 #: src/additions/mediatheken/youtube_user.py:23
 msgid "User Channels"
 msgstr "Benutzer-Kanäle"
 
-#: src/additions/mediatheken/youtube.py:198
+#: src/additions/mediatheken/youtube.py:225
 msgid "YouTube Channels"
 msgstr "YouTube-Kanäle"
 
-#: src/additions/mediatheken/youtube.py:199
+#: src/additions/mediatheken/youtube.py:226
 msgid "Selected Channels"
 msgstr "Ausgewählte Kanäle"
 
-#: src/additions/mediatheken/youtube.py:200
+#: src/additions/mediatheken/youtube.py:227
 msgid "Music Channels"
 msgstr "Musik-Kanäle"
 
-#: src/additions/mediatheken/youtube.py:201
+#: src/additions/mediatheken/youtube.py:228
 msgid "Music Playlists"
 msgstr "Musik-Playlisten"
 
-#: src/additions/mediatheken/youtube.py:202
+#: src/additions/mediatheken/youtube.py:229
 msgid "Gaming Channels"
 msgstr "Gaming-Kanäle"
 
-#: src/additions/mediatheken/youtube.py:203
+#: src/additions/mediatheken/youtube.py:230
 msgid "Car & Vehicle Channels"
 msgstr "Auto- & Fahrzeug-Kanäle"
 
-#: src/additions/mediatheken/youtube.py:207
+#: src/additions/mediatheken/youtube.py:234
 msgid "Popular on YouTube"
 msgstr "Beliebt auf YouTube"
 
-#: src/additions/mediatheken/youtube.py:208
+#: src/additions/mediatheken/youtube.py:235
 msgid "News"
 msgstr "Nachrichten"
 
-#: src/additions/mediatheken/youtube.py:209
-#: src/additions/mediatheken/youtube.py:514 src/plugin.py:811
+#: src/additions/mediatheken/youtube.py:236
+#: src/additions/mediatheken/youtube.py:527 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:210
-#: src/additions/mediatheken/youtube.py:514
+#: src/additions/mediatheken/youtube.py:237
+#: src/additions/mediatheken/youtube.py:527
 msgid "Gaming"
 msgstr "Gaming"
 
-#: src/additions/mediatheken/youtube.py:211
-#: src/additions/mediatheken/youtube.py:514 src/plugin.py:812
+#: src/additions/mediatheken/youtube.py:238
+#: src/additions/mediatheken/youtube.py:527 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:446
+#: src/additions/mediatheken/youtube.py:473
 msgid "Genres"
 msgstr "Genres"
 
-#: src/additions/mediatheken/youtube.py:472
-#: src/additions/mediatheken/youtube.py:706
-#: src/additions/mediatheken/youtube.py:729
+#: src/additions/mediatheken/youtube.py:499
+#: src/additions/mediatheken/youtube.py:719
+#: src/additions/mediatheken/youtube.py:742
 msgid "Edit Parameter"
 msgstr "Parameter Editieren"
 
-#: src/additions/mediatheken/youtube.py:473
+#: src/additions/mediatheken/youtube.py:500
 msgid "Request YT-Token"
 msgstr "YT-Token Anfordern"
 
-#: src/additions/mediatheken/youtube.py:514
+#: src/additions/mediatheken/youtube.py:527
 msgid "Autos & Vehicles"
 msgstr "Autos & Fahrzeuge"
 
-#: src/additions/mediatheken/youtube.py:514
+#: src/additions/mediatheken/youtube.py:527
 msgid "Comedy"
 msgstr "Komödie"
 
-#: src/additions/mediatheken/youtube.py:514
+#: src/additions/mediatheken/youtube.py:527
 msgid "Education"
 msgstr "Bildung"
 
-#: src/additions/mediatheken/youtube.py:514
+#: src/additions/mediatheken/youtube.py:527
 msgid "Entertainment"
 msgstr "Unterhaltung"
 
-#: src/additions/mediatheken/youtube.py:514
+#: src/additions/mediatheken/youtube.py:527
 msgid "Film & Animation"
 msgstr "Film & Animation"
 
-#: src/additions/mediatheken/youtube.py:514
+#: src/additions/mediatheken/youtube.py:527
 msgid "Howto & Style"
 msgstr "Praktische Tipps & Styling"
 
-#: src/additions/mediatheken/youtube.py:514
+#: src/additions/mediatheken/youtube.py:527
 msgid "News & Politics"
 msgstr "Nachrichten & Politik"
 
-#: src/additions/mediatheken/youtube.py:514
+#: src/additions/mediatheken/youtube.py:527
 msgid "People & Blogs"
 msgstr "Menschen & Blogs"
 
-#: src/additions/mediatheken/youtube.py:514
+#: src/additions/mediatheken/youtube.py:527
 msgid "Pets & Animals"
 msgstr "Tiere"
 
-#: src/additions/mediatheken/youtube.py:514
+#: src/additions/mediatheken/youtube.py:527
 msgid "Science & Technology"
 msgstr "Wissenschaft & Technik"
 
-#: src/additions/mediatheken/youtube.py:514
+#: src/additions/mediatheken/youtube.py:527
 msgid "Travel & Events"
 msgstr "Reisen & Events"
 
-#: src/additions/mediatheken/youtube.py:520
+#: src/additions/mediatheken/youtube.py:533
 msgid "No Category"
 msgstr "Keine Kategorie"
 
-#: src/additions/mediatheken/youtube.py:573
+#: src/additions/mediatheken/youtube.py:586
 msgid "Author"
 msgstr "Autor"
 
-#: src/additions/mediatheken/youtube.py:786
+#: src/additions/mediatheken/youtube.py:799
 msgid ""
 "Missing API-key, please fill the file 'mp_yt-apikey' first then restart the "
 "plugin."
@@ -1362,26 +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:792
+#: src/additions/mediatheken/youtube.py:805
 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:800
+#: src/additions/mediatheken/youtube.py:813
 msgid "Did you revoke the access?"
 msgstr "Wurde der Zugriff widerrufen?"
 
-#: src/additions/mediatheken/youtube.py:902
+#: src/additions/mediatheken/youtube.py:915
 msgid "Favorite"
 msgstr "Favorit"
 
-#: src/additions/mediatheken/youtube.py:994
+#: src/additions/mediatheken/youtube.py:1010
 msgid "Playlist loading failed! Please try again."
 msgstr ""
 "Das Laden der Playlist ist fehlgeschlagen! Bitte versuchen Sie es erneut."
 
-#: src/additions/mediatheken/youtube.py:1168
+#: src/additions/mediatheken/youtube.py:1184
+#: src/additions/mediatheken/youtube.py:1185
 msgid ""
 "YouTube API quota of your master key exceeded, switched to your API backup "
 "key, please try again!"
@@ -1389,7 +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:1171
+#: src/additions/mediatheken/youtube.py:1188
+#: src/additions/mediatheken/youtube.py:1189
 msgid ""
 "YouTube API quota of your backup key exceeded, switched to your API master "
 "key, please try again!"
@@ -1397,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:1298
-#: src/additions/mediatheken/youtube.py:1328
+#: src/additions/mediatheken/youtube.py:1315
+#: src/additions/mediatheken/youtube.py:1345
 msgid "Views:"
 msgstr "Aufrufe:"
 
-#: src/additions/mediatheken/youtube.py:1306
-#: src/additions/mediatheken/youtube.py:1336
+#: src/additions/mediatheken/youtube.py:1323
+#: src/additions/mediatheken/youtube.py:1353
 msgid "Published:"
 msgstr "Veröffentlicht:"
 
-#: src/additions/mediatheken/youtube.py:1310
-#: src/additions/mediatheken/youtube.py:1340
+#: src/additions/mediatheken/youtube.py:1327
+#: src/additions/mediatheken/youtube.py:1357
 msgid "Channel:"
 msgstr "Kanal:"
 
-#: src/additions/mediatheken/youtube.py:1556
+#: src/additions/mediatheken/youtube.py:1573
 msgid "Unfortunately, this video can not be played!\n"
 msgstr "Das Video kann leider nicht abgespielt werden!\n"
 
-#: src/additions/mediatheken/youtube.py:1587
-#: src/additions/mediatheken/youtube.py:1633
-#: src/additions/mediatheken/youtube.py:1671
+#: src/additions/mediatheken/youtube.py:1604
+#: src/additions/mediatheken/youtube.py:1650
+#: src/additions/mediatheken/youtube.py:1688
 msgid "Error!\n"
 msgstr "Fehler!\n"
 
-#: src/additions/mediatheken/youtube.py:1622
+#: src/additions/mediatheken/youtube.py:1639
 msgid "Favorite already exists"
 msgstr "Favorit schon vorhanden"
 
-#: src/additions/mediatheken/youtube.py:1628
+#: src/additions/mediatheken/youtube.py:1645
 msgid "Favorite added"
 msgstr "Favorit hinzugefügt"
 
-#: src/additions/mediatheken/youtube.py:2001
+#: src/additions/mediatheken/youtube.py:2018
 msgid ""
 "Missing OAuth2 data, please fill the file 'mp_yt-oauth2' first and restart "
 "the Enigma2 GUI."
@@ -1438,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:2005
-#: src/additions/mediatheken/youtube.py:2006
+#: src/additions/mediatheken/youtube.py:2022
+#: src/additions/mediatheken/youtube.py:2023
 msgid "Error: Unable to request the Device code"
 msgstr "Fehler: Kann den Gerätecode nicht anfordern"
 
-#: src/additions/mediatheken/youtube.py:2012
+#: src/additions/mediatheken/youtube.py:2029
 #, python-brace-format
 msgid ""
 "You've to visit:\n"
@@ -1456,7 +1459,7 @@ msgstr ""
 "und diesen Code eingeben: {code}\n"
 "Aktion abbrechen?"
 
-#: src/additions/mediatheken/youtube.py:2016
+#: src/additions/mediatheken/youtube.py:2033
 msgid ""
 "Waiting for response from the server.\n"
 "Cancel action?"
@@ -1464,25 +1467,25 @@ msgstr ""
 "Warten auf Antwort vom Server.\n"
 "Aktion abbrechen?"
 
-#: src/additions/mediatheken/youtube.py:2032
-#: src/additions/mediatheken/youtube.py:2033
-#: src/additions/mediatheken/youtube.py:2039
+#: src/additions/mediatheken/youtube.py:2049
+#: src/additions/mediatheken/youtube.py:2050
+#: src/additions/mediatheken/youtube.py:2056
 msgid "Error: Unable to get tokens!"
 msgstr "Fehler: Der Token konnte nicht angefordert werden!"
 
-#: src/additions/mediatheken/youtube.py:2054
+#: src/additions/mediatheken/youtube.py:2071
+#, fuzzy
+#| msgid ""
+#| "Access granted.\n"
+#| "The tokens are valid until they are revoked in Your Google Account."
 msgid ""
-"Access granted :)\n"
-"For safety you should create backup's of enigma2 settings and 'mp_yt-access-"
-"tokens.json'.\n"
-"The tokens are valid until they are revoked in Your Google Account."
+"Access granted.\n"
+"The tokens are valid until they are revoked in your Google Account."
 msgstr ""
-"Zugriff gewährt :)\n"
-"Zur Sicherheit sollte ein Backup der enigma2-Einstellungen und 'mp_yt-access-"
-"tokens.json' gemacht werden.\n"
+"Zugriff gewährt.\n"
 "Die Token sind gültig, bis sie in Ihrem Google-Konto widerrufen werden."
 
-#: src/additions/mediatheken/youtube.py:2071
+#: src/additions/mediatheken/youtube.py:2088
 msgid "Error: Unable to refresh token!"
 msgstr "Fehler: Der Token konnte nicht aktualisert werden!"
 
@@ -1615,7 +1618,7 @@ msgstr "Keine Dokus gefunden!"
 
 #: src/additions/porn/beeg.py:238 src/additions/porn/camhub.py:192
 #: src/additions/porn/camhub.py:218 src/additions/porn/faapy.py:294
-#: src/additions/porn/slutload.py:678 src/additions/porn/tube8.py:335
+#: src/additions/porn/slutload.py:690 src/additions/porn/tube8.py:335
 #: src/additions/porn/xnxx.py:469 src/additions/porn/xvideos.py:783
 msgid "Stream not found"
 msgstr "Stream nicht gefunden"
@@ -1651,8 +1654,8 @@ msgstr "Keine Girls gefunden!"
 
 #: src/additions/porn/pornhub.py:339 src/additions/porn/pornhub.py:342
 #: src/additions/porn/porntrex.py:194 src/additions/porn/porntrex.py:197
-#: src/additions/porn/porntrex.py:200 src/additions/porn/slutload.py:317
-#: src/additions/porn/youporn.py:228
+#: src/additions/porn/porntrex.py:200 src/additions/porn/slutload.py:324
+#: src/additions/porn/slutload.py:327 src/additions/porn/youporn.py:228
 msgid "Username:"
 msgstr "Username:"
 
@@ -1832,7 +1835,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:1727 src/resources/simpleplayer.py:1733
+#: src/resources/simpleplayer.py:1731 src/resources/simpleplayer.py:1737
 msgid "No"
 msgstr "Nein"
 
@@ -1920,7 +1923,7 @@ msgstr "Hellgrün"
 msgid "premiumize.me is not activated."
 msgstr "premiumize.me ist nicht aktiviert."
 
-#: src/plugin.py:532 src/resources/simpleplayer.py:2193
+#: src/plugin.py:532 src/resources/simpleplayer.py:2197
 msgid "GENERAL"
 msgstr "ALLGEMEIN"
 
@@ -2004,7 +2007,7 @@ msgstr "Temporäres Cacheverzeichnis:"
 msgid "Icon Cachepath:"
 msgstr "Icon Cacheverzeichnis:"
 
-#: src/plugin.py:559 src/resources/simpleplayer.py:2196
+#: src/plugin.py:559 src/resources/simpleplayer.py:2200
 msgid "Videoquality:"
 msgstr "Videoqualität:"
 
@@ -2012,39 +2015,39 @@ msgstr "Videoqualität:"
 msgid "Watchlist/Playlist/Userchan path:"
 msgstr "Watchlist/Playlist/Userchan Verzeichnis:"
 
-#: src/plugin.py:562 src/resources/simpleplayer.py:2207
+#: src/plugin.py:562 src/resources/simpleplayer.py:2211
 msgid "YOUTUBE"
 msgstr "YOUTUBE"
 
-#: src/plugin.py:563 src/resources/simpleplayer.py:2208
+#: src/plugin.py:563 src/resources/simpleplayer.py:2212
 msgid "Highest resolution for playback:"
 msgstr "Höchste Auflösung für die Wiedergabe:"
 
-#: src/plugin.py:565 src/resources/simpleplayer.py:2210
+#: src/plugin.py:565 src/resources/simpleplayer.py:2214
 msgid "Enable DASH format:"
 msgstr "DASH Format aktivieren:"
 
-#: src/plugin.py:567 src/resources/simpleplayer.py:2212
+#: src/plugin.py:567 src/resources/simpleplayer.py:2216
 msgid "Enable DASH format (no seeking possible):"
 msgstr "DASH Format aktivieren (kein Spulen möglich):"
 
-#: src/plugin.py:569 src/resources/simpleplayer.py:2214
+#: src/plugin.py:569 src/resources/simpleplayer.py:2218
 msgid "Use DASH format for 480p:"
 msgstr "DASH Format verwenden für 480p:"
 
-#: src/plugin.py:570 src/resources/simpleplayer.py:2215
+#: src/plugin.py:570 src/resources/simpleplayer.py:2219
 msgid "Use DASH format for 720p:"
 msgstr "DASH Format verwenden für 720p:"
 
-#: src/plugin.py:571 src/resources/simpleplayer.py:2216
+#: src/plugin.py:571 src/resources/simpleplayer.py:2220
 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:2218
+#: src/plugin.py:573 src/resources/simpleplayer.py:2222
 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:2220
+#: src/plugin.py:575 src/resources/simpleplayer.py:2224
 msgid "Enable Opus codec:"
 msgstr "Opus Codec aktivieren:"
 
@@ -2606,8 +2609,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:1725
-#: src/resources/simpleplayer.py:1732
+#: src/resources/simplelist.py:692 src/resources/simpleplayer.py:1729
+#: src/resources/simpleplayer.py:1736
 msgid "Yes"
 msgstr "Ja"
 
@@ -2723,138 +2726,138 @@ msgstr "Streaming Fehler: %s"
 msgid "Buffering..."
 msgstr "Puffern..."
 
-#: src/resources/simpleplayer.py:1726
+#: src/resources/simpleplayer.py:1730
 #, python-format
 msgid "Yes & Add Service to global Playlist-%02d"
 msgstr "Ja & Service zur globalen Playlist-%02d hinzufügen"
 
-#: src/resources/simpleplayer.py:1728 src/resources/simpleplayer.py:1734
+#: src/resources/simpleplayer.py:1732 src/resources/simpleplayer.py:1738
 msgid "No, but start over from the beginning"
 msgstr "Nein, aber von Anfang an neu beginnen"
 
-#: src/resources/simpleplayer.py:1737
+#: src/resources/simpleplayer.py:1741
 msgid "Stop playing this movie?"
 msgstr "Wiedergabe dieses Films stoppen?"
 
-#: src/resources/simpleplayer.py:1895
+#: src/resources/simpleplayer.py:1899
 msgid "No entries in the playlist available!"
 msgstr "Keine Einträge in der Playlist vorhanden!"
 
-#: src/resources/simpleplayer.py:1977
+#: src/resources/simpleplayer.py:1981
 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:1991
+#: src/resources/simpleplayer.py:1995
 msgid "Error: URL is not persistent!"
 msgstr "Fehler: URL ist nicht persistent!"
 
-#: src/resources/simpleplayer.py:1997
+#: src/resources/simpleplayer.py:2001
 msgid "Added entry"
 msgstr "Eintrag hinzugefügt"
 
-#: src/resources/simpleplayer.py:1999
+#: src/resources/simpleplayer.py:2003
 msgid "Entry already exists"
 msgstr "Eintrag schon vorhanden"
 
-#: src/resources/simpleplayer.py:2001
+#: src/resources/simpleplayer.py:2005
 msgid "Error!"
 msgstr "Fehler!"
 
-#: src/resources/simpleplayer.py:2175 src/resources/simpleplayer.py:2176
+#: src/resources/simpleplayer.py:2179 src/resources/simpleplayer.py:2180
 msgid "SimplePlayer Setup"
 msgstr "SimplePlayer Einstellungen"
 
-#: src/resources/simpleplayer.py:2194
+#: src/resources/simpleplayer.py:2198
 msgid "Global playlist number:"
 msgstr "Globale Playlist-Nummer:"
 
-#: src/resources/simpleplayer.py:2195
+#: src/resources/simpleplayer.py:2199
 msgid "Playmode:"
 msgstr "Abspielmodus:"
 
-#: src/resources/simpleplayer.py:2198
+#: src/resources/simpleplayer.py:2202
 msgid "Buffersize (in seconds):"
 msgstr "Puffergröße (in Sekunden):"
 
-#: src/resources/simpleplayer.py:2199
+#: src/resources/simpleplayer.py:2203
 msgid "Save resume cache in flash memory:"
 msgstr "Speichere Wiederaufnahme-Cache im Flashspeicher:"
 
-#: src/resources/simpleplayer.py:2200
+#: src/resources/simpleplayer.py:2204
 msgid "Behavior on movie start:"
 msgstr "Verhalten bei Filmstart:"
 
-#: src/resources/simpleplayer.py:2201
+#: src/resources/simpleplayer.py:2205
 msgid "Behavior on movie stop:"
 msgstr "Verhalten bei Filmstopp:"
 
-#: src/resources/simpleplayer.py:2202
+#: src/resources/simpleplayer.py:2206
 msgid "Behavior on movie end:"
 msgstr "Verhalten bei Filmende:"
 
-#: src/resources/simpleplayer.py:2203
+#: src/resources/simpleplayer.py:2207
 msgid "Seekbar sensibility:"
 msgstr "Suchleistenempfindlichkeit:"
 
-#: src/resources/simpleplayer.py:2204
+#: src/resources/simpleplayer.py:2208
 msgid "Infobar cover always off:"
 msgstr "Infobar-Coveranzeige immer aus:"
 
-#: src/resources/simpleplayer.py:2205
+#: src/resources/simpleplayer.py:2209
 msgid "Use SP number seek:"
 msgstr "Verwende SP Nummernsuche:"
 
-#: src/resources/simpleplayer.py:2222
+#: src/resources/simpleplayer.py:2226
 msgid "RADIO"
 msgstr "RADIO"
 
-#: src/resources/simpleplayer.py:2223
+#: src/resources/simpleplayer.py:2227
 msgid "Radio cover:"
 msgstr "Radio-Cover:"
 
-#: src/resources/simpleplayer.py:2224
+#: src/resources/simpleplayer.py:2228
 msgid "Radio visualization:"
 msgstr "Radio-Visualisierung:"
 
-#: src/resources/simpleplayer.py:2225
+#: src/resources/simpleplayer.py:2229
 msgid "Radio screensaver:"
 msgstr "Radio-Bildschirmschoner:"
 
-#: src/resources/simpleplayer.py:2226
+#: src/resources/simpleplayer.py:2230
 msgid "Radio screensaver keywords:"
 msgstr "Schlüsselwörter für den Radio-Bildschirmschoner:"
 
-#: src/resources/simpleplayer.py:2256 src/resources/simpleplayer.py:2257
+#: src/resources/simpleplayer.py:2260 src/resources/simpleplayer.py:2261
 msgid "SimplePlayer Menu"
 msgstr "SimplePlayer Menü"
 
-#: src/resources/simpleplayer.py:2271
+#: src/resources/simpleplayer.py:2275
 #, python-format
 msgid "Add service to global playlist-%02d"
 msgstr "Füge Service zu globaler Playlist-%02d hinzu"
 
-#: src/resources/simpleplayer.py:2273
+#: src/resources/simpleplayer.py:2277
 #, python-format
 msgid "Open global playlist-%02d"
 msgstr "Öffne globale Playlist-%02d"
 
-#: src/resources/simpleplayer.py:2275
+#: src/resources/simpleplayer.py:2279
 msgid "Open local playlist"
 msgstr "Öffne lokale Playlist"
 
-#: src/resources/simpleplayer.py:2277
+#: src/resources/simpleplayer.py:2281
 msgid "A/V Settings"
 msgstr "A/V Einstellungen"
 
-#: src/resources/simpleplayer.py:2279
+#: src/resources/simpleplayer.py:2283
 msgid "Advanced Audio Settings"
 msgstr "Erweiterte Audioeinstellungen"
 
-#: src/resources/simpleplayer.py:2280
+#: src/resources/simpleplayer.py:2284
 msgid "Mainmenu"
 msgstr "Hauptmenü"
 
-#: src/resources/simpleplayer.py:2348
+#: src/resources/simpleplayer.py:2352
 #, python-format
 msgid ""
 "The directory path does not end with '/':\n"
@@ -2863,7 +2866,7 @@ msgstr ""
 "Der Verzeichnispfad endet nicht mit '/':\n"
 "%s"
 
-#: src/resources/simpleplayer.py:2349
+#: src/resources/simpleplayer.py:2353
 #, python-format
 msgid ""
 "File with the same name exists in the directory path:\n"
@@ -2872,7 +2875,7 @@ msgstr ""
 "Datei mit gleichen Namen im Verzeichnispfad vorhanden:\n"
 "%s"
 
-#: src/resources/simpleplayer.py:2350
+#: src/resources/simpleplayer.py:2354
 #, python-format
 msgid ""
 "The missing directory:\n"
@@ -2881,7 +2884,7 @@ msgstr ""
 "Das fehlende Verzeichnis:\n"
 "%s konnte nicht angelegt werden!"
 
-#: src/resources/simpleplayer.py:2351
+#: src/resources/simpleplayer.py:2355
 #, python-format
 msgid ""
 "The directory path:\n"
@@ -2890,7 +2893,7 @@ msgstr ""
 "Der Verzeichnispfad:\n"
 "%s ist nicht vorhanden!"
 
-#: src/resources/simpleplayer.py:2352
+#: src/resources/simpleplayer.py:2356
 #, python-format
 msgid ""
 "There exists already a directory with this name:\n"
@@ -2899,7 +2902,7 @@ msgstr ""
 "Es existiert schon ein Verzeichnis mit diesem Namen:\n"
 "%s"
 
-#: src/resources/simpleplayer.py:2353
+#: src/resources/simpleplayer.py:2357
 #, python-format
 msgid ""
 "The path is OK, the file name was not specified:\n"
@@ -2908,7 +2911,7 @@ msgstr ""
 "Der Pfad ist i.O., der Dateiname wurde nicht angegeben:\n"
 "%s"
 
-#: src/resources/simpleplayer.py:2354
+#: src/resources/simpleplayer.py:2358
 #, python-format
 msgid ""
 "The directory path and file name is OK:\n"
@@ -2917,11 +2920,11 @@ msgstr ""
 "Der Verzeichnispfad & Dateiname ist i.O.:\n"
 "%s"
 
-#: src/resources/simpleplayer.py:2355
+#: src/resources/simpleplayer.py:2359
 msgid "The directory path is not specified!"
 msgstr "Der Verzeichnispfad wurde nicht angegeben!"
 
-#: src/resources/simpleplayer.py:2356
+#: src/resources/simpleplayer.py:2360
 #, python-format
 msgid ""
 "Symbolic link with the same name in the directory path:\n"
@@ -2930,7 +2933,7 @@ msgstr ""
 "Symbolischer Link mit gleichen Namen im Verzeichnispfad:\n"
 "%s vorhanden!"
 
-#: src/resources/simpleplayer.py:2357
+#: src/resources/simpleplayer.py:2361
 #, python-format
 msgid ""
 "The directory path does not begin with '/':\n"
@@ -2939,19 +2942,19 @@ msgstr ""
 "Der Verzeichnispfad beginnt nicht mit '/':\n"
 "%s"
 
-#: src/resources/streams.py:573
+#: src/resources/streams.py:579
 msgid "No supported Stream Hoster, try another one!"
 msgstr "Kein unterstützter Stream Hoster, versuche einen anderen!"
 
-#: src/resources/streams.py:575
+#: src/resources/streams.py:581
 msgid "Invalid Stream link, try another Stream Hoster!"
 msgstr "Ungültiger Stream Link, versuche eine anderen Stream Hoster!"
 
-#: src/resources/streams.py:584
+#: src/resources/streams.py:590
 msgid "This hoster is only working with enabled Premium support."
 msgstr "Dieser Hoster funktioniert nur mit aktivierter Premium-Unterstützung."
 
-#: src/resources/streams.py:586
+#: src/resources/streams.py:592
 msgid ""
 "This Stream link is currently not available via Premium, try another Stream "
 "Hoster."
@@ -2959,7 +2962,7 @@ msgstr ""
 "Dieser Stream ist aktuell nicht über Premium verfügbar, versuche einen "
 "anderen Stream Hoster."
 
-#: src/resources/streams.py:590
+#: src/resources/streams.py:596
 msgid "Unknown error, check MP logfile."
 msgstr "Unbekannter Fehler, MP Logfile überprüfen."
 
index e2117a0..580f0e6 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="2020051502"))
+config_mp.mediaportal.version = NoSave(ConfigText(default="2020051701"))
 config_mp.mediaportal.autoupdate = ConfigYesNo(default = True)
 
 config_mp.mediaportal.skinfail = ConfigYesNo(default = False)
@@ -3566,7 +3566,7 @@ def _hosters():
        open_hosters = open(hosters_file)
        data = open_hosters.read()
        open_hosters.close()
-       hosters = re.findall('<name>(.*?)</name><hoster>(.*?)</hoster><regex>(.*?)</regex>(?:<premium>(.*?)</premium>|)', data)
+       hosters = re.findall('^(?!#)<name>(.*?)</name><hoster>(.*?)</hoster><regex>(.*?)</regex>(?:<premium>(.*?)</premium>|)', data, re.M)
        mp_globals.hosters = ["|".join(["(?P<%s>%s)" % (name, hoster) for name,hoster,regex,premium in hosters])]
        mp_globals.hosters += ["|".join(["(?P<%s>%s)" % (name, regex) for name,hoster,regex,premium in hosters])]
        mp_globals.premium_hosters_prz = ["|".join(["%s" % name.replace('_space_',' ').replace('_dot_','.').replace('___','') for name,hoster,regex,premium in hosters if "p" in premium])]
index 2a97e6a..d32c624 100644 (file)
@@ -10,7 +10,7 @@ mp_LogFile = None
 VERB_ERROR       = 1  # "E" shows error
 VERB_WARNING     = 2  # "W" shows warning
 VERB_STARTING    = 3  # "S" shows started functions/classes etc.
-VERB_HIGHLIGHT   = 4  # "H" shows important hightlights to have better overview if somehtings really happening or not
+VERB_HIGHLIGHT   = 4  # "H" shows important hightlights to have better overview if somehting really happening or not
 VERB_ADDITIONAL  = 5  # "A" shows additional information for better debugging
 VERB_CLOSING     = 6  # "C" shows closing functions/classes etc.
 VERB_DEFAULT     = 10 # "I" default verbose level when not specified
index acc2f96..f9adc76 100644 (file)
@@ -4,7 +4,7 @@ from Plugins.Extensions.MediaPortal.resources.imports import *
 from Plugins.Extensions.MediaPortal.resources.packer import unpack, detect
 
 def clipwatching(self, data):
-       stream_url = re.search('sources:\s{0,1}\["(.*?)"\],', data, re.S)
+       stream_url = re.search('sources:\s{0,1}\[\{src:\s{0,1}"(.*?)",', data, re.S)
        if stream_url:
                self._callback(stream_url.group(1))
        else:
index 983c951..fe6e59f 100644 (file)
@@ -1,4 +1,4 @@
-<name>FlashX</name><hoster>flashx</hoster><regex>flashx\.co</regex><premium>pr</premium>
+<name>FlashX</name><hoster>flashx</hoster><regex>flashx\.co</regex><premium>p</premium>
 <name>Youwatch</name><hoster>youwatch</hoster><regex>youwatch\.org</regex>
 <name>Rapidgator</name><hoster>rapidgator</hoster><regex>rapidgator\.net|rg\.to</regex><premium>r</premium>
 <name>Uploaded</name><hoster>uploaded</hoster><regex>uploaded\.net|ul\.to</regex><premium>pr</premium>
@@ -42,6 +42,7 @@
 <name>Onlystream</name><hoster>onlystream</hoster><regex>onlystream\.tv</regex>
 <name>Videobin</name><hoster>videobin</hoster><regex>videobin\.co</regex>
 <name>Mixdrop</name><hoster>mixdrop</hoster><regex>mixdrop\.(?:co|to)</regex>
-<name>Jetload</name><hoster>jetload</hoster><regex>jetload\.net</regex>
+#<name>Jetload</name><hoster>jetload</hoster><regex>jetload\.net</regex>
 <name>Upstream</name><hoster>upstream</hoster><regex>upstream\.to</regex>
-<name>Voe_dot_sx</name><hoster>voe</hoster><regex>voe\.sx</regex>
\ No newline at end of file
+<name>Voe_dot_sx</name><hoster>voe</hoster><regex>voe\.sx</regex>
+<name>Vup_dot_to</name><hoster>vup</hoster><regex>vup\.to</regex>
\ No newline at end of file
diff --git a/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/resources/hosters/vup.py b/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/resources/hosters/vup.py
new file mode 100644 (file)
index 0000000..85db5e9
--- /dev/null
@@ -0,0 +1,10 @@
+# -*- coding: utf-8 -*-
+from Plugins.Extensions.MediaPortal.plugin import _
+from Plugins.Extensions.MediaPortal.resources.imports import *
+
+def vup(self, data):
+       stream_url = re.findall('sources:\s{0,1}\[\{src:\s{0,1}"(.*?)",', data, re.S)
+       if stream_url:
+               self._callback(stream_url[-1])
+       else:
+               self.stream_not_found()
\ No newline at end of file
index e976349..8f72e84 100644 (file)
@@ -1577,6 +1577,10 @@ 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 7371948..ea3bb3f 100644 (file)
@@ -109,6 +109,7 @@ class get_stream_link:
        from hosters.vkme import vkme, vkmeHash, vkmeHashGet, vkmeHashData, vkPrivat, vkPrivatData
        from hosters.voe import voe
        from hosters.vshare import vshare
+       from hosters.vup import vup
        from hosters.yourupload import yourupload
        from hosters.youwatch import youwatch, youwatchLink
 
@@ -387,6 +388,11 @@ class get_stream_link:
                                mp_globals.player_agent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36'
                                twAgentGetPage(link, agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36').addCallback(self.voe).addErrback(self.errorload)
 
+                       elif re.search('vup\.to', data, re.S):
+                               link = data
+                               mp_globals.player_agent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36'
+                               twAgentGetPage(link, agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36').addCallback(self.vup).addErrback(self.errorload)
+
                        elif re.search('fembed\.com|smartshare\.tv|kissmovies\.cc|vcdn\.io|mm9841\.com|feurl\.com', data, re.S):
                                link = data.split('/v/')[0] + '/api/source/' + data.split('/v/')[-1]
                                if not "fembed" in link:
@@ -400,7 +406,7 @@ class get_stream_link:
                                if id:
                                        link = "http://www.flashx.co/%s.html" % id.group(3)
                                        if config_mp.mediaportal.premiumize_use.value and not self.fallback:
-                                               self.rdb = 1
+                                               self.rdb = 0
                                                self.prz = 1
                                                self.callPremium(link)
                                        else:
index 9c8bbf3..935b874 100644 (file)
@@ -129,7 +129,7 @@ class MPUpdateScreen(MPScreen):
                                        feed = tmp_infolines[i].split('#FEED#')[-1]
                        if not feed:
                                feed = 'https://apt.fury.io/mediaportal/'
-                       self.container.execute("rm -f /etc/apt/sources.list.d/mediaportal.list && echo deb [trusted=yes] %s ./ > /etc/apt/sources.list.d/mediaportal.list && apt-get update && apt-get --only-upgrade install -y enigma2-plugin-extensions-mediaportal" % feed)
+                       self.container.execute("rm -f /etc/apt/sources.list.d/mediaportal.list && echo deb \[trusted=yes\] %s ./ > /etc/apt/sources.list.d/mediaportal.list && apt-get update && apt-get --only-upgrade install -y enigma2-plugin-extensions-mediaportal" % feed)
                else:
                        self.container.appClosed.append(self.finishedPluginUpdate)
                        self.container.stdoutAvail.append(self.mplog)