import enigma2-plugin-extensions-mediaportal 2019090101 v2019090101
authorChristian Weiske <cweiske@cweiske.de>
Sun, 1 Sep 2019 23:15:24 +0000 (01:15 +0200)
committerChristian Weiske <cweiske@cweiske.de>
Sun, 1 Sep 2019 23:15:24 +0000 (01:15 +0200)
118 files changed:
usr/lib/enigma2/python/Components/Converter/MPServiceInfo.py
usr/lib/enigma2/python/Components/Converter/MPValueToPixmap.py [new file with mode: 0644]
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/additions.xml
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/fun/failto.py
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/fun/heisevideo.py
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/fun/liveleak.py
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/fun/twitch.py
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/mediatheken/redbull.py
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/mediatheken/servustv.py
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/mediatheken/srg.py
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/mediatheken/tvnow.py
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/mediatheken/zdf.py
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/music/mtvdecharts.py
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/music/shoutcast.py
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/porn/badoinkvr.py
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/porn/bangbros.py
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/porn/beeg.py
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/porn/befuck.py
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/porn/bongacams.py
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/porn/brazzers.py
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/porn/cam4.py
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/porn/chaturbate.py
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/porn/cliphunter.py
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/porn/cumlouder.py
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/porn/ddfnetwork.py
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/porn/digitalplayground.py
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/porn/drtuber.py
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/porn/extremetube.py
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/porn/hotscope.py
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/porn/julesjordan.py
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/porn/kink.py
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/porn/mofos.py
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/porn/naughtyamerica.py
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/porn/nubilefilms.py
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/porn/pinflix.py
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/porn/porncom.py
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/porn/porndoe.py
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/porn/pornhub.py
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/porn/porntv.py
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/porn/realgfporn.py
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/porn/realitykings.py
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/porn/redtube.py
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/porn/sexu.py
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/porn/shesfreaky.py [new file with mode: 0644]
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/porn/spankwire.py
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/porn/teamskeet.py
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/porn/tube8.py
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/porn/wetplace.py
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/porn/wicked.py
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/porn/x4tube.py
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/porn/xhamster.py
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/porn/xnxx.py
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/porn/xvideos.py
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/porn/youporn.py
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/sport/sporttotal.py
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/images/countries/CZ.png [new file with mode: 0644]
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/images/countries/DE.png [new file with mode: 0644]
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/images/countries/EN.png [new file with mode: 0644]
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/images/countries/ENDE.png [new file with mode: 0644]
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/images/countries/ES.png [new file with mode: 0644]
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/images/countries/FI.png [new file with mode: 0644]
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/images/countries/FR.png [new file with mode: 0644]
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/images/countries/GR.png [new file with mode: 0644]
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/images/countries/IN.png [new file with mode: 0644]
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/images/countries/IT.png [new file with mode: 0644]
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/images/countries/JP.png [new file with mode: 0644]
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/images/countries/KR.png [new file with mode: 0644]
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/images/countries/PL.png [new file with mode: 0644]
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/images/countries/RU.png [new file with mode: 0644]
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/images/countries/SE.png [new file with mode: 0644]
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/images/countries/SK.png [new file with mode: 0644]
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/images/countries/TR.png [new file with mode: 0644]
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/MPLivestreamcomUriResolver.py
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/resources/MPYoutubeUriResolver.py
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/resources/api.py
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/resources/config.py
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/resources/hosters/verystream.py
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/resources/imports.py
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/resources/keyboardext.py
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/resources/mp_globals.py
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/resources/mp_hlsp_m3u8.py
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/resources/mpscreen.py
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/yt_url.py
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins_1080/clean_fhd/MP_ChoiceBox.xml
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins_1080/clean_fhd/MP_InputHelpDialog.xml
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins_1080/clean_fhd/MP_PluginSetup.xml
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins_1080/clean_fhd/MP_VirtualKeyBoard.xml
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins_1080/clean_fhd/images/DE.png [deleted file]
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins_1080/clean_fhd/images/DEUS.png [deleted file]
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins_1080/clean_fhd/images/EN.png [deleted file]
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins_1080/clean_fhd/images/ES.png [deleted file]
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins_1080/clean_fhd/images/FR.png [deleted file]
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins_1080/clean_fhd/images/GR.png [deleted file]
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins_1080/clean_fhd/images/IN.png [deleted file]
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins_1080/clean_fhd/images/IT.png [deleted file]
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins_1080/clean_fhd/images/JP.png [deleted file]
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins_1080/clean_fhd/images/RU.png [deleted file]
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins_1080/clean_fhd/images/TR.png [deleted file]
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins_720/clean_hd/MP_ChoiceBox.xml
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins_720/clean_hd/MP_InputHelpDialog.xml
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins_720/clean_hd/MP_PluginSetup.xml
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins_720/clean_hd/MP_VirtualKeyBoard.xml
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins_720/clean_hd/images/DE.png [deleted file]
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins_720/clean_hd/images/DEUS.png [deleted file]
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins_720/clean_hd/images/EN.png [deleted file]
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins_720/clean_hd/images/ES.png [deleted file]
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins_720/clean_hd/images/FR.png [deleted file]
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins_720/clean_hd/images/GR.png [deleted file]
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins_720/clean_hd/images/IN.png [deleted file]
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins_720/clean_hd/images/IT.png [deleted file]
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins_720/clean_hd/images/JP.png [deleted file]
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins_720/clean_hd/images/RU.png [deleted file]
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins_720/clean_hd/images/TR.png [deleted file]

index 044c047..5623c09 100644 (file)
@@ -3,6 +3,7 @@ from enigma import iServiceInformation, iPlayableService
 from Components.Element import cached
 from os import path
 from Plugins.Extensions.MediaPortal.resources import mp_globals
+from Plugins.Extensions.MediaPortal.resources.imports import TimerCall
 
 if mp_globals.isDreamOS and mp_globals.model in ["one"]:
        from enigma import CT_MPEG2, CT_H264, CT_MPEG1, CT_MPEG4_PART2, CT_VC1, CT_VC1_SIMPLE_MAIN, CT_H265, CT_DIVX311, CT_DIVX4, CT_SPARK, CT_VP6, CT_VP8, CT_VP9, CT_H263, CT_MJPEG, CT_REAL, CT_AVS, CT_UNKNOWN
@@ -82,6 +83,13 @@ class MPServiceInfo(Converter, object):
                                except:
                                        pass
                                f.close()
+                       elif path.exists("/sys/class/video/frame_width"):
+                               f = open("/sys/class/video/frame_width", "r")
+                               try:
+                                       xres = int(f.read())
+                               except:
+                                       pass
+                               f.close()
                        if not xres:
                                xres = info.getInfo(iServiceInformation.sVideoWidth)
 
@@ -93,11 +101,27 @@ class MPServiceInfo(Converter, object):
                                except:
                                        pass
                                f.close()
+                       elif path.exists("/sys/class/video/frame_height"):
+                               f = open("/sys/class/video/frame_height", "r")
+                               try:
+                                       yres = int(f.read())
+                               except:
+                                       pass
+                               f.close()
                        if not yres:
                                yres = info.getInfo(iServiceInformation.sVideoHeight)
 
                        if mp_globals.isDreamOS:
-                               progressive = info.getInfo(iServiceInformation.sProgressive)
+                               if mp_globals.model in ["one"] and path.exists("/sys/class/deinterlace/di0/frame_format"):
+                                       f = open("/sys/class/deinterlace/di0/frame_format", "r")
+                                       try:
+                                               progressive = str(f.read())
+                                               progressive = False if progressive.strip() == "interlace" else True
+                                       except:
+                                               pass
+                                       f.close()
+                               else:
+                                       progressive = info.getInfo(iServiceInformation.sProgressive)
                                frame_rate = info.getInfo(iServiceInformation.sFrameRate)
                                if not progressive:
                                        frame_rate *= 2
diff --git a/usr/lib/enigma2/python/Components/Converter/MPValueToPixmap.py b/usr/lib/enigma2/python/Components/Converter/MPValueToPixmap.py
new file mode 100644 (file)
index 0000000..24f1360
--- /dev/null
@@ -0,0 +1,40 @@
+from Components.Converter.Converter import Converter
+from Components.Element import cached, ElementError
+from Tools.Directories import fileExists
+from Tools.LoadPixmap import LoadPixmap
+from Plugins.Extensions.MediaPortal.resources import mp_globals
+
+class MPValueToPixmap(Converter, object):
+        LANGUAGE_CODE = 0
+        PATH = 1
+
+        def __init__(self, type):
+                Converter.__init__(self, type)
+                if type == "LanguageCode":
+                        self.type = self.LANGUAGE_CODE
+                elif type == "Path":
+                        self.type = self.PATH
+                else:
+                        raise ElementError("'%s' is not <LanguageCode|Path> for MPValueToPixmap converter" % type)
+
+        @cached
+        def getPixmap(self):
+                if self.source is not None:
+                        val = self.source.text
+                        if val in (None, ""):
+                                return None
+                if self.type == self.PATH:
+                        return LoadPixmap(val)
+                if self.type == self.LANGUAGE_CODE:
+                        code = val[3:].upper()
+                       skin_path = mp_globals.pluginPath + mp_globals.skinsPath
+                       filepath = "%s/%s/images/countries/%s.png" % (skin_path, mp_globals.currentskin, code)
+                       if not fileExists(filepath):
+                               filepath = "%s/%s/images/countries/%s.png" % (skin_path, mp_globals.skinFallback, code)
+                               if not fileExists(filepath):
+                                       filepath = "/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/images/countries/%s.png" % code
+                        flag = LoadPixmap(cached=False, path=filepath)
+                        return flag
+                return None
+
+        pixmap = property(getPixmap)
\ No newline at end of file
index eba4d49..778772b 100644 (file)
@@ -46,7 +46,7 @@
                <plugin type="mod" modfile="mediatheken.kindertube" confopt="showkindertube" default="True" confcat="mediatheken" gz="0" name="KinderTube" icon="kindertube" filter="Mediathek" screen="kindertubeMain" param1="" param2="" kids="1"/>
                <plugin type="mod" modfile="mediatheken.myspass" confopt="showmyspass" default="True" confcat="mediatheken" gz="0" name="MySpass" icon="myspass" filter="Mediathek" screen="myspassGenreScreen" param1="" param2=""/>
                <plugin type="mod" modfile="mediatheken.netzkino" confopt="showNetzKino" default="True" confcat="mediatheken" gz="0" name="Netzkino" icon="netzkino" filter="Mediathek" screen="netzKinoGenreScreen" param1="" param2=""/>
-               <plugin type="mod" modfile="mediatheken.redbull" confopt="showRedBullTV" default="True" confcat="mediatheken" gz="0" name="Red Bull TV" icon="redbull" filter="Mediathek/Sport" screen="RBtvGenreScreen" param1="" param2=""/>
+               <!--<plugin type="mod" modfile="mediatheken.redbull" confopt="showRedBullTV" default="True" confcat="mediatheken" gz="0" name="Red Bull TV" icon="redbull" filter="Mediathek/Sport" screen="RBtvGenreScreen" param1="" param2=""/>-->
                <plugin type="mod" modfile="mediatheken.servustv" confopt="showServusTV" default="True" confcat="mediatheken" gz="0" name="ServusTV" icon="servustv" filter="Mediathek" screen="sTVGenreScreen" param1="" param2=""/>
                <plugin type="mod" modfile="mediatheken.southpark" confopt="showsouthpark" default="True" confcat="mediatheken" gz="0" name="Southpark.de" icon="southpark" filter="Mediathek" screen="SouthparkGenreScreen" param1="" param2=""/>
                <plugin type="mod" modfile="mediatheken.srg" confopt="showSRG" default="True" confcat="mediatheken" gz="0" name="SRG Play" icon="srg" filter="Mediathek" screen="SRGGenreScreen" param1="" param2=""/>
                <plugin type="mod" modfile="porn.pornoxo" confopt="showashemaletube" default="False" confcat="porn" gz="0" name="aShemaletube" icon="ashemaletube" filter="Porn" screen="pornoxoGenreScreen" param1="ashemaletube" param2="" search="1" delim="_" searchurl="%s" searchscreen="pornoxoFilmScreen" searchparam=", &quot;aShemaletube.com&quot;, &quot;https://www.ashemaletube.com&quot;"/>
                <plugin type="mod" modfile="porn.pornoxo" confopt="showfetishpapa" default="False" confcat="porn" gz="0" name="Fetishpapa" icon="fetishpapa" filter="Porn" screen="pornoxoGenreScreen" param1="fetishpapa" param2="" search="1" delim="_" searchurl="%s" searchscreen="pornoxoFilmScreen" searchparam=", &quot;Fetishpapa.com&quot;, &quot;https://www.fetishpapa.com&quot;"/>
                <plugin type="mod" modfile="porn.fetishshrine" confopt="showfetishshrine" default="False" confcat="porn" gz="0" name="FetishShrine" icon="fetishshrine" filter="Porn" screen="fetishshrineGenreScreen" param1="" param2="" search="1" delim="+" searchurl="%s" searchscreen="fetishshrineFilmScreen" searchparam=""/>
+               <plugin type="mod" modfile="porn.shesfreaky" confopt="showshesfreaky" default="False" confcat="porn" gz="0" name="ShesFreaky" icon="shesfreaky" filter="Porn" screen="shesfreakyGenreScreen" param1="" param2="" search="1" delim="-" searchurl="%s" searchscreen="shesfreakyFilmScreen" searchparam=""/>
                <plugin type="mod" modfile="porn.spankwire" confopt="showspankwire" default="False" confcat="porn" gz="0" name="Spankwire" icon="spankwire" filter="Porn" screen="spankwireGenreScreen" param1="" param2="" search="1" delim="+" searchurl="%s" searchscreen="spankwireFilmScreen" searchparam=", ''"/>
                <plugin type="mod" modfile="porn.extremetube" confopt="showextremetube" default="False" confcat="porn" gz="0" name="ExtremeTube" icon="extremetube" filter="Porn" screen="extremetubeGenreScreen" param1="" param2="" search="1" delim="+" searchurl="http://www.extremetube.com/videos?search=%s" searchscreen="extremetubeFilmScreen" searchparam=""/>
                <plugin type="mod" modfile="porn.porntv" confopt="showporntv" default="False" confcat="porn" gz="0" name="PornTV" icon="porntv" filter="Porn" screen="porntvGenreScreen" param1="porntv" param2="" search="1" delim="+" searchurl="%s" searchscreen="porntvFilmScreen" searchparam=", &quot;PornTV.com&quot;, &quot;https://www.porntv.com&quot;"/>
index 556f5ee..8730ddf 100644 (file)
@@ -76,6 +76,7 @@ class failScreen(MPScreen, ThumbsHelper):
 
        def loadPage(self):
                self.keyLocked = True
+               self['name'].setText(_('Please wait...'))
                url = "https://www.fail.to/genre/1-videos/p-%s" % str(self.page)
                twAgentGetPage(url).addCallback(self.loadPageData).addErrback(self.dataError)
 
@@ -90,11 +91,13 @@ class failScreen(MPScreen, ThumbsHelper):
                                Image = "https://www.fail.to" + Image
                                Descr = stripAllTags(Descr).strip()
                                self.filmliste.append((Title, Url, Image, Descr))
-                       self.ml.setList(map(self._defaultlistleft, self.filmliste))
-                       self.ml.moveToIndex(0)
-                       self.keyLocked = False
-                       self.th_ThumbsQuery(self.filmliste, 0, 1, 2, None, None, self.page, 999, mode=1)
-                       self.showInfos()
+               if len(self.filmliste) == 0:
+                       self.filmliste.append((_('No videos found!'), None, None, ''))
+               self.ml.setList(map(self._defaultlistleft, self.filmliste))
+               self.ml.moveToIndex(0)
+               self.keyLocked = False
+               self.th_ThumbsQuery(self.filmliste, 0, 1, 2, None, None, self.page, 999, mode=1)
+               self.showInfos()
 
        def showInfos(self):
                Title = self['liste'].getCurrent()[0][0]
index 9af64e3..f76bbdd 100644 (file)
@@ -236,7 +236,7 @@ class HeiseTvListScreen(MPScreen, ThumbsHelper):
                for each in match_sec_m3u8:
                        bandwith,resolution,url = each
                        self.bandwith_list.append((int(bandwith),url))
-               _, best = min((abs(int(x[0]) - bw), x) for x in self.bandwith_list)
+               _x, best = min((abs(int(x[0]) - bw), x) for x in self.bandwith_list)
                url = "https://cdnapisec.kaltura.com/p/%s/sp/%s00/playManifest/entryId/%s/flavorIds/%s/" % (partnerid, partnerid, entry_id, best[1])
                getPage(url, agent=heiseAgent).addCallback(self.getVideo).addErrback(self.dataError)
 
index faf12f5..71d0207 100644 (file)
@@ -105,6 +105,7 @@ class LiveLeakClips(MPScreen, ThumbsHelper):
 
        def loadPage(self):
                self.keyLocked = True
+               self['name'].setText(_('Please wait...'))
                url = "%s%s&safe_mode=off" % (self.streamGenreLink, str(self.page))
                getPage(url).addCallback(self.loadPageData).addErrback(self.dataError)
 
@@ -117,11 +118,13 @@ class LiveLeakClips(MPScreen, ThumbsHelper):
                                        if image.startswith('//'):
                                                image = "https:" + image
                                        self.feedliste.append((decodeHtml(title).strip(),url,image,decodeHtml(desc.strip())))
-                       self.ml.setList(map(self._defaultlistleft, self.feedliste))
-                       self.ml.moveToIndex(0)
-                       self.keyLocked = False
-                       self.th_ThumbsQuery(self.feedliste, 0, 1, 2, None, None, self.page, 999, mode=1)
-                       self.showInfos()
+               if len(self.feedliste) == 0:
+                       self.feedliste.append((_('No videos found!'), None, None, ''))
+               self.ml.setList(map(self._defaultlistleft, self.feedliste))
+               self.ml.moveToIndex(0)
+               self.keyLocked = False
+               self.th_ThumbsQuery(self.feedliste, 0, 1, 2, None, None, self.page, 999, mode=1)
+               self.showInfos()
 
        def showInfos(self):
                Title = self['liste'].getCurrent()[0][0]
index a769916..c28a1d4 100644 (file)
@@ -427,50 +427,31 @@ class twitchGames(MPScreen):
                        url = url.replace("{channel}", str(self.vodid[1:]))
                else:
                        url = url.replace("{channel}", str(self.channelName))
-               twAgentGetPage(url, agent=agent).addCallback(self.parseM3U).addErrback(self.dataError)
+               twAgentGetPage(url, agent=agent).addCallback(self.loadplaylist).addErrback(self.dataError)
 
-       def parseM3U(self, data):
-               if "error_code" in data:
+       def loadplaylist(self, data):
+               if ("error_code" in data or "Can not find channel" in data):
                        self.session.open(MessageBoxExt, _("There is currently no live stream available on this channel."), MessageBoxExt.TYPE_INFO, timeout=3)
                else:
-                       self.session.open(twitchStreamQuality, data, self.displayName, self.gameName)
-
-class twitchStreamQuality(MPScreen):
-
-       def __init__(self, session, m3u8, channel, game):
-               self.m3u8 = str(m3u8)
-               self.channel = channel
-               self.game = game
-               MPScreen.__init__(self, session, skin='MP_Plugin', default_cover=default_cover)
-
-               self["actions"] = ActionMap(["MP_Actions"], {
-                       "ok"    : self.keyOK,
-                       "0" : self.closeAll,
-                       "cancel": self.keyCancel
-               }, -1)
-
-               self['title'] = Label("Twitch")
-               self['ContentTitle'] = Label("Quality:")
-
-               self.qualityList = []
-               self.ml = MenuList([], enableWrapAround=True, content=eListboxPythonMultiContent)
-               self['liste'] = self.ml
-
-               self.keyLocked = True
-               self.onLayoutFinish.append(self.parseData)
-
-       def parseData(self):
-               result = re.findall('NAME="(.*?)".*?(http://.*?)\n', self.m3u8, re.S)
-               for (quality, url) in result:
-                       if quality != "Mobile":
-                               self.qualityList.append((quality, url))
-               self.ml.setList(map(self._defaultlistleft, self.qualityList))
-               self.keyLocked = False
-
-       def keyOK(self):
-               if self.keyLocked or self['liste'].getCurrent() == None:
-                       return
-               url = self['liste'].getCurrent()[0][1]
-               title = self.game + " - " + self.channel
-               title = title.strip(" - ")
-               self.session.open(SimplePlayer, [(title, url)], showPlaylist=False, ltype='twitch')
\ No newline at end of file
+                       self.bandwith_list = []
+                       match_sec_m3u8=re.findall('BANDWIDTH=(\d+).*?\n(.*?m3u8)', data, re.S)
+                       max = 0
+                       for x in match_sec_m3u8:
+                               if int(x[0]) > max:
+                                       max = int(x[0])
+                       videoPrio = int(config_mp.mediaportal.videoquali_others.value)
+                       if videoPrio == 2:
+                               bw = max
+                       elif videoPrio == 1:
+                               bw = max/2
+                       else:
+                               bw = max/3
+                       for each in match_sec_m3u8:
+                               bandwith,url = each
+                               self.bandwith_list.append((int(bandwith),url))
+                       _x, best = min((abs(int(x[0]) - bw), x) for x in self.bandwith_list)
+                       url = best[1]
+                       mp_globals.player_agent = agent
+                       title = self.gameName + " - " + self.displayName
+                       title = title.strip(" - ")
+                       self.session.open(SimplePlayer, [(title, url)], showPlaylist=False, ltype='twitch', eServiceStream=True)
\ No newline at end of file
index 825c345..c2b05af 100644 (file)
@@ -271,7 +271,7 @@ class RBtvGenreScreen(MPScreen):
                for each in match_sec_m3u8:
                        bandwith,resolution,url = each
                        self.bandwith_list.append((int(bandwith),url))
-               _, best = min((abs(int(x[0]) - bw), x) for x in self.bandwith_list)
+               _x, best = min((abs(int(x[0]) - bw), x) for x in self.bandwith_list)
                title = self['liste'].getCurrent()[0][0]
                self['name'].setText(title)
                self.keyLocked = False
index 673c28b..7e24354 100644 (file)
@@ -207,7 +207,7 @@ class sTVids(MPScreen):
                for each in match_sec_m3u8:
                        bandwith,url = each
                        self.bandwith_list.append((int(bandwith),url))
-               _, best = min((abs(int(x[0]) - bw), x) for x in self.bandwith_list)
+               _x, best = min((abs(int(x[0]) - bw), x) for x in self.bandwith_list)
                url = basepath + best[1]
                Name = self['liste'].getCurrent()[0][0]
                mp_globals.player_agent = stvAgent
index f688237..e125368 100644 (file)
@@ -342,7 +342,7 @@ class SRGStreamScreen(MPScreen):
                        for each in match_sec_m3u8:
                                bandwith,url = each
                                bandwith_list.append((int(bandwith),url))
-                       _, best = min((abs(int(x[0]) - bw), x) for x in bandwith_list)
+                       _x, best = min((abs(int(x[0]) - bw), x) for x in bandwith_list)
                        url = best[1]
 
                        self.session.open(SimplePlayer, [(self.serie, url)], showPlaylist=False, ltype='srg')
index c275865..91f6da5 100644 (file)
@@ -456,7 +456,7 @@ class tvnowEpisodenScreen(MPScreen, ThumbsHelper):
                for each in match_sec_m3u8:
                        bandwith,url = each
                        self.bandwith_list.append((int(bandwith),url))
-               _, best = min((abs(int(x[0]) - bw), x) for x in self.bandwith_list)
+               _x, best = min((abs(int(x[0]) - bw), x) for x in self.bandwith_list)
                url = baseurl.replace('fairplay.m3u8', '') + best[1]
                Name = self['liste'].getCurrent()[0][0]
                mp_globals.player_agent = nowAgent
index 30ea267..496c647 100644 (file)
@@ -438,7 +438,7 @@ class ZDFStreamScreen(MPScreen, ThumbsHelper):
                                                assetPath = BASE_URL + assetPath
                                                try:
                                                        sendung = re.findall('class="teaser-cat\s{0,1}">.*?class="teaser-cat-brand">(.*?)</span',data,re.S)[0]
-                                                       sendung = decodeHtml(sendung)
+                                                       sendung = decodeHtml(sendung).replace('<span class="teaser-cat-brand-ellipsis">', '')
                                                        sendung = sendung.split("|")[-1].strip()
                                                except:
                                                        sendung = "---"
@@ -489,6 +489,8 @@ class ZDFStreamScreen(MPScreen, ThumbsHelper):
                                        dur = re.search('class="teaser-info">(.*?)</dd>',data, re.S).group(1)
                                        if "Bilder" in dur:
                                                continue
+                                       elif "time-label" in dur:
+                                               continue
                                else:
                                        continue
                                if "data-station" in data:
@@ -547,7 +549,7 @@ class ZDFStreamScreen(MPScreen, ThumbsHelper):
                                        info = decodeHtml(stripAllTags(info).strip())
                                try:
                                        sendung = re.findall('class="teaser-cat\s{0,1}">.*?class="teaser-cat-brand">(.*?)</span',data,re.S)[0]
-                                       sendung = decodeHtml(sendung)
+                                       sendung = decodeHtml(sendung).replace('<span class="teaser-cat-brand-ellipsis">', '')
                                        sendung = sendung.split("|")[-1].strip()
                                except:
                                        sendung = "---"
index 71a0ae5..28e12ad 100644 (file)
@@ -93,10 +93,10 @@ class MTVdeChartsGenreScreen(MPScreen):
                                ('MTV.co.uk\tOfficial UK Audio Streaming Charts','http://www.mtv.co.uk/music/charts/the-official-uk-audio-streaming-chart-top-20'),
                                ('MTV.it\tEuro Top20 Charts','http://classifiche.mtv.it/euro-top-20/c22lpa'),
                                ('MTV.it\tHitlist Italia - Single','http://classifiche.mtv.it/hitlist-italia-classifica-singoli/cgmo2j'),
-                               ('MTV.it\tHitlist Italia - Album','http://classifiche.mtv.it/hitlist-italia-classifica-album/s8x0tp'),
+                               #('MTV.it\tHitlist Italia - Album','http://classifiche.mtv.it/hitlist-italia-classifica-album/s8x0tp'),
                                ('MTV.it\tUK Charts','http://classifiche.mtv.it/classifica-musica-inglese/d901ei'),
                                ('MTV.it\tUSA Charts','http://classifiche.mtv.it/classifica-musica-americana/a6i0r1'),
-                               ('MTV.it\tMost Viewed Video Ranking','http://classifiche.mtv.it/mtv-it-classifica-mtv-video/4cadoe'),
+                               #('MTV.it\tMost Viewed Video Ranking','http://classifiche.mtv.it/mtv-it-classifica-mtv-video/4cadoe'),
                                ('MTV.it\tMost Beautiful Songs To Download','http://classifiche.mtv.it/imtv-chart/xrbmn1'),
                                ('MTV.it\tBest Summer Song Ever','http://classifiche.mtv.it/best-summer-song-ever-classifica-migliori-canzoni-estate-di-sempre/igfbtk'),
                                ('MTV.it\tSummer Hits 2019','http://classifiche.mtv.it/summer-hits-classifica-canzoni-estate-2019/n27py3'),
index 3185aca..d99cfff 100644 (file)
 from Plugins.Extensions.MediaPortal.plugin import _
 from Plugins.Extensions.MediaPortal.resources.imports import *
 from Plugins.Extensions.MediaPortal.resources.choiceboxext import ChoiceBoxExt
+from Plugins.Extensions.MediaPortal.resources.configlistext import ConfigListScreenExt
 
 default_cover = "file://%s/shoutcast.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
 BASE_URL = "https://directory.shoutcast.com/"
 
+config_mp.mediaportal.shoutcast_sort = ConfigYesNo(default=True)
+
 agent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36'
 
 json_headers = {
@@ -60,12 +63,14 @@ class ShoutcastGenreScreen(MPScreen):
                self["actions"] = ActionMap(["MP_Actions"], {
                        "ok"    : self.keyOK,
                        "0" : self.closeAll,
-                       "cancel": self.keyCancel
+                       "cancel": self.keyCancel,
+                       "blue": self.keySetup
                }, -1)
 
                self.keyLocked = True
                self['title'] = Label("shoutcast")
                self['ContentTitle'] = Label(_("Genre:"))
+               self['F4'] = Label(_("Setup"))
 
                self.genreliste = []
                self.suchString = ''
@@ -76,6 +81,7 @@ class ShoutcastGenreScreen(MPScreen):
                self.onClose.append(self.restoreRadio)
 
        def loadPage(self):
+               self.genreliste = []
                self['name'].setText(_('Please wait...'))
                self.keyLocked = True
                twAgentGetPage(BASE_URL, agent=agent).addCallback(self.loadPageData).addErrback(self.dataError)
@@ -96,6 +102,7 @@ class ShoutcastGenreScreen(MPScreen):
                        self.genreliste.sort(key=lambda t : t[0].lower())
                        self.genreliste.insert(0, (_("Top Stations"),_("Top Stations"),"top"))
                        self.genreliste.insert(0, (_("Search"),_("Search"),"search"))
+                       self.genreliste.insert(0, (_('Favorites'),_('Favorites'),"favorites"))
 
                if len(self.genreliste) == 0:
                        self.genreliste.append((_('No genres found!'), None, None))
@@ -117,6 +124,8 @@ class ShoutcastGenreScreen(MPScreen):
                        self.session.open(ShoutcastStationsScreen, Genre, Id, Type)
                elif Type == "top":
                        self.session.open(ShoutcastStationsScreen, Genre, Id, Type)
+               elif Type == "favorites":
+                       self.session.open(ShoutcastFavoritesScreen)
                elif Type == "search":
                        self.suchen()
 
@@ -126,9 +135,46 @@ class ShoutcastGenreScreen(MPScreen):
                        self.suchString = callback
                        self.session.open(ShoutcastStationsScreen, _("Search"), self.suchString, "search")
 
+       def keySetup(self):
+               if mp_globals.isDreamOS:
+                       self.session.openWithCallback(self.setupCallback, ShoutcastSetupScreen, is_dialog=True)
+               else:
+                       self.session.openWithCallback(self.setupCallback, ShoutcastSetupScreen)
+
+       def setupCallback(self, answer=False):
+               self.loadPage()
+
        def restoreRadio(self):
                config_mp.mediaportal.is_radio.value = False
 
+class ShoutcastSetupScreen(MPSetupScreen, ConfigListScreenExt):
+
+       def __init__(self, session):
+               MPSetupScreen.__init__(self, session, skin='MP_PluginSetup')
+
+               self['title'] = Label("shoutcast " + _("Setup"))
+               self['F4'] = Label('')
+               self.setTitle("Radio " + _("Setup"))
+
+               self.list = []
+               ConfigListScreenExt.__init__(self, self.list)
+
+               self.list.append(getConfigListEntry(_("Sort Favorites:"), config_mp.mediaportal.shoutcast_sort))
+
+               self["config"].setList(self.list)
+
+               self["setupActions"] = ActionMap(["MP_Actions"],
+               {
+                       "ok"    : self.keySave,
+                       "cancel": self.keyCancel
+               }, -1)
+
+       def keySave(self):
+               for x in self["config"].list:
+                       if len(x) > 1:
+                               x[1].save()
+               self.close(True)
+
 class ShoutcastStationsScreen(MPScreen):
 
        def __init__(self, session, genre, id, type):
@@ -146,12 +192,14 @@ class ShoutcastStationsScreen(MPScreen):
                        "right" : self.keyRight,
                        "left" : self.keyLeft,
                        "cancel": self.keyCancel,
+                       "green": self.keyAdd,
                        "yellow" : self.keySort,
                }, -1)
 
                self.keyLocked = True
                self['title'] = Label("shoutcast")
                self['ContentTitle'] = Label(_("Stations:"))
+               self['F2'] = Label(_("Add to Favorites"))
                self['F3'] = Label(_("Sort"))
 
                self.sort = "listeners"
@@ -239,4 +287,106 @@ class ShoutcastStationsScreen(MPScreen):
                name = self['liste'].getCurrent()[0][0]
                url = data[1:-1]
                config_mp.mediaportal.is_radio.value = True
-               self.session.open(SimplePlayer, [(name, url, 'file:///usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/images/none.png')], showPlaylist=False, ltype='shoutcast', playerMode='RADIO', cover=True)
\ No newline at end of file
+               self.session.open(SimplePlayer, [(name, url, 'file:///usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/images/none.png')], showPlaylist=False, ltype='shoutcast', playerMode='RADIO', cover=True)
+
+       def keyAdd(self):
+               stationName = self['liste'].getCurrent()[0][0]
+               stationId = self['liste'].getCurrent()[0][1]
+               if self.keyLocked or not stationId:
+                       return
+               fn = config_mp.mediaportal.watchlistpath.value+"mp_shoutcast_playlist"
+               if not fileExists(fn):
+                       open(fn,"w").close()
+               try:
+                       writePlaylist = open(fn, "a")
+                       writePlaylist.write('"%s" "%s"\n' % (stationName, stationId))
+                       writePlaylist.close()
+                       message = self.session.open(MessageBoxExt, _("Selection was added to the favorites."), MessageBoxExt.TYPE_INFO, timeout=3)
+               except:
+                       pass
+
+class ShoutcastFavoritesScreen(MPScreen):
+
+       def __init__(self, session):
+               MPScreen.__init__(self, session, skin='MP_Plugin', default_cover=default_cover)
+
+               self["actions"] = ActionMap(["MP_Actions"], {
+                       "ok"    : self.keyOK,
+                       "0" : self.closeAll,
+                       "up" : self.keyUp,
+                       "down" : self.keyDown,
+                       "right" : self.keyRight,
+                       "left" : self.keyLeft,
+                       "cancel": self.keyCancel,
+                       "red": self.keyDel
+               }, -1)
+
+               self.keyLocked = True
+               self['title'] = Label("shoutcast")
+               self['ContentTitle'] = Label(_("Favorites:"))
+               self['F1'] = Label(_("Delete"))
+
+               self.playList = []
+               self.ml = MenuList([], enableWrapAround=True, content=eListboxPythonMultiContent)
+               self['liste'] = self.ml
+
+               self.onLayoutFinish.append(self.loadStations)
+
+       def loadStations(self):
+               self.playList = []
+               if not fileExists(config_mp.mediaportal.watchlistpath.value+"mp_shoutcast_playlist"):
+                       open(config_mp.mediaportal.watchlistpath.value+"mp_shoutcast_playlist","w").close()
+               if fileExists(config_mp.mediaportal.watchlistpath.value+"mp_shoutcast_playlist"):
+                       path = config_mp.mediaportal.watchlistpath.value+"mp_shoutcast_playlist"
+
+               if fileExists(path):
+                       readStations = open(path,"r")
+                       for rawData in readStations.readlines():
+                               data = re.findall('"(.*?)" "(.*?)"', rawData, re.S)
+                               if data:
+                                       (stationName, stationId) = data[0]
+                                       self.playList.append((stationName, stationId))
+                       if config_mp.mediaportal.shoutcast_sort.value:
+                               self.playList.sort()
+                       readStations.close()
+               if len(self.playList) == 0:
+                       self.playList.append((_('No entries found!'), None, default_cover))
+               self.ml.setList(map(self._defaultlistleft, self.playList))
+               self.keyLocked = False
+
+       def keyOK(self):
+               if self.keyLocked:
+                       return
+               stationId = self['liste'].getCurrent()[0][1]
+               if not stationId:
+                       return
+               url = BASE_URL + "/Player/GetStreamUrl"
+               postdata = {'station': stationId}
+               twAgentGetPage(url, method='POST', postdata=urlencode(postdata), agent=agent, headers=json_headers).addCallback(self.getStreamURL).addErrback(self.dataError)
+
+       def getStreamURL(self, data):
+               name = self['liste'].getCurrent()[0][0]
+               url = data[1:-1]
+               config_mp.mediaportal.is_radio.value = True
+               self.session.open(SimplePlayer, [(name, url, 'file:///usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/images/none.png')], showPlaylist=False, ltype='shoutcast', playerMode='RADIO', cover=True)
+
+       def keyDel(self):
+               exist = self['liste'].getCurrent()
+               if self.keyLocked or exist == None:
+                       return
+
+               i = self['liste'].getSelectedIndex()
+               c = j = 0
+               l = len(self.playList)
+               fn = config_mp.mediaportal.watchlistpath.value+"mp_shoutcast_playlist"
+               try:
+                       f1 = open(fn, 'w')
+                       while j < l:
+                               if j != i:
+                                       (stationName, stationId) = self.playList[j]
+                                       f1.write('"%s" "%s"\n' % (stationName, stationId))
+                               j += 1
+                       f1.close()
+                       self.loadStations()
+               except:
+                       pass
\ No newline at end of file
index f8b0d13..f88e711 100644 (file)
@@ -260,4 +260,4 @@ class badoinkvrFilmScreen(MPScreen, ThumbsHelper):
 
        def play(self, url):
                title = self['liste'].getCurrent()[0][0]
-               self.session.open(SimplePlayer, [(title, url.replace('%2F','%252F').replace('%3D','%253D').replace('%2B','%252B'))], showPlaylist=False, ltype='badoinkvr')
\ No newline at end of file
+               self.session.open(SimplePlayer, [(title, url)], showPlaylist=False, ltype='badoinkvr')
\ No newline at end of file
index cb96f5a..2ce18a9 100644 (file)
@@ -205,4 +205,4 @@ class bangbrosFilmScreen(MPScreen, ThumbsHelper):
 
        def play(self, url):
                title = self['liste'].getCurrent()[0][0]
-               self.session.open(SimplePlayer, [(title, url.replace('%2F','%252F').replace('%3D','%253D').replace('%2B','%252B'))], showPlaylist=False, ltype='bangbros')
\ No newline at end of file
+               self.session.open(SimplePlayer, [(title, url)], showPlaylist=False, ltype='bangbros')
\ No newline at end of file
index 1303eae..26fb991 100644 (file)
@@ -83,22 +83,18 @@ class beegGenreScreen(MPScreen):
                twAgentGetPage(url, agent=IPhone5Agent, headers=MyHeaders).addCallback(self.genreData).addErrback(self.dataError)
 
        def genreData(self, data):
-               parse = re.search('"tags":\[(.*?)\]', data, re.S)
-               if parse:
-                       Cats = re.findall('"tag":"(.*?)"', parse.group(1), re.S)
-                       if Cats:
-                               for Title in Cats:
-                                       Url = 'https://beeg.com/api/v6/%s/index/tag/$PAGE$/mobile?tag=%s' % (beeg_apikey, Title)
-                                       Title = Title.title()
-                                       self.genreliste.append((Title, Url))
-                       self.genreliste.sort()
-                       self.genreliste.insert(0, ("Longest", "https://beeg.com/api/v6/%s/index/tag/$PAGE$/mobile?tag=long%svideos" % (beeg_apikey, "%20")))
-                       self.genreliste.insert(0, ("Newest", "https://beeg.com/api/v6/%s/index/main/$PAGE$/mobile" % beeg_apikey))
-                       #self.genreliste.insert(0, ("--- Search ---", "callSuchen"))
-                       self.ml.setList(map(self._defaultlistcenter, self.genreliste))
-                       self.keyLocked = False
-               else:
-                       message = self.session.open(MessageBoxExt, _("Broken URL parsing, please report to the developers."), MessageBoxExt.TYPE_INFO, timeout=3)
+               json_data = json.loads(data)
+               for node in json_data["tags"]:
+                       if int(node["videos"]) > 50:
+                               Url = 'https://beeg.com/api/v6/%s/index/tag/$PAGE$/mobile?tag=%s' % (beeg_apikey, urllib.quote_plus(str(node["tag"])))
+                               Title = str(node["tag"]).title()
+                               self.genreliste.append((Title, Url))
+               self.genreliste.sort()
+               self.genreliste.insert(0, ("Longest", "https://beeg.com/api/v6/%s/index/tag/$PAGE$/mobile?tag=long%svideos" % (beeg_apikey, "%20")))
+               self.genreliste.insert(0, ("Newest", "https://beeg.com/api/v6/%s/index/main/$PAGE$/mobile" % beeg_apikey))
+               self.genreliste.insert(0, ("--- Search ---", "callSuchen"))
+               self.ml.setList(map(self._defaultlistcenter, self.genreliste))
+               self.keyLocked = False
 
        def keyOK(self):
                if self.keyLocked:
@@ -169,14 +165,27 @@ class beegFilmScreen(MPScreen, ThumbsHelper):
 
        def loadData(self, data):
                self.getLastPage(data, '', '"pages":(.*?),')
-               Videos = re.findall('\{"title":"(.*?)","id":(\d+)', data, re.S)
-               if Videos:
-                       for (Title, VideoId) in Videos:
-                               Url = 'https://beeg.com/api/v6/%s/video/%s' % (beeg_apikey, VideoId)
-                               Image = 'https://img.beeg.com/800x450/%s.jpg' % VideoId
-                               self.filmliste.append((decodeHtml(Title), Url, Image))
+               json_data = json.loads(data)
+               for node in json_data["videos"]:
+                       title = str(node["title"])
+                       if not title:
+                               title = str(node["ps_name"])
+                       elif title.strip() == "-":
+                               title = str(node["ps_name"])
+                       url = 'https://beeg.com/api/v6/%s/video/%s' % (beeg_apikey, str(node["id"]))
+                       try:
+                               image = 'https://img.beeg.com/800x450/%s' % str(node["thumbs"][0]["image"])
+                       except:
+                               image = 'https://img.beeg.com/800x450/%s.jpg' % str(node["id"])
+                       try:
+                               url2 = 'https://beeg.com/api/v6/%s/video/%s?v=2' % (beeg_apikey, str(node["svid"]))
+                       except:
+                               url2 = None
+                       duration = str(node["duration"])
+                       added = str(node["datetime"])
+                       self.filmliste.append((title, url, image, duration, added, url2))
                if len(self.filmliste) == 0:
-                       self.filmliste.append((_('No videos found!'), '', None))
+                       self.filmliste.append((_('No videos found!'), '', None, None, None, None))
                self.ml.setList(map(self._defaultlistleft, self.filmliste))
                self.ml.moveToIndex(0)
                self.keyLocked = False
@@ -186,7 +195,21 @@ class beegFilmScreen(MPScreen, ThumbsHelper):
        def showInfos(self):
                title = self['liste'].getCurrent()[0][0]
                pic = self['liste'].getCurrent()[0][2]
+               runtime = self['liste'].getCurrent()[0][3]
+               date = self['liste'].getCurrent()[0][4]
                self['name'].setText(title)
+               if runtime:
+                       m, s = divmod(int(runtime), 60)
+                       runtime = "Runtime: " + "%02d:%02d\n" % (m, s)
+               else:
+                       runtime = ""
+               if date:
+                       date = re.findall('(\d{4})-(\d{2})-(\d{2})\s(.*?)$', date)
+                       date = date[0][2] + "." + date[0][1] + "." + date[0][0]
+                       date = "Added: " + date
+               else:
+                       date = ""
+               self['handlung'].setText(runtime+date)
                CoverHelper(self['coverArt']).getCover(pic)
 
        def keyOK(self):
@@ -196,6 +219,7 @@ class beegFilmScreen(MPScreen, ThumbsHelper):
                twAgentGetPage(url, agent=IPhone5Agent, headers=MyHeaders).addCallback(self.getVideoPage).addErrback(self.dataError)
 
        def getVideoPage(self, data):
+               url2 = self['liste'].getCurrent()[0][5]
                streamlinks = re.findall('\d{3}p":"(.*?)"', data , re.S)
                if streamlinks:
                        streamlink = streamlinks[-1].replace('/{DATA_MARKERS}/', '/data=pc_XX__%s/' % beeg_apikey)
@@ -205,5 +229,7 @@ class beegFilmScreen(MPScreen, ThumbsHelper):
                        Cover = self['liste'].getCurrent()[0][2]
                        mp_globals.player_agent = IPhone5Agent
                        self.session.open(SimplePlayer, [(Title, streamlink, Cover)], showPlaylist=False, ltype='beeg', cover=True)
+               elif url2:
+                       twAgentGetPage(url2, agent=IPhone5Agent, headers=MyHeaders).addCallback(self.getVideoPage).addErrback(self.dataError)
                else:
                        message = self.session.open(MessageBoxExt, _("Stream not found"), MessageBoxExt.TYPE_INFO, timeout=3)
\ No newline at end of file
index 2675320..610a553 100644 (file)
@@ -77,7 +77,7 @@ class befuckGenreScreen(MPScreen):
                raw = re.findall('class="ic">.*?<a\shref="(.*?)".*?src="(.*?)">.*?<figcaption>(.*?)</figcaption>.*?</span><b>', data, re.S)
                if raw:
                        for (Url, Image, Title) in raw:
-                               Title = Title.strip().title().replace('. ','')
+                               Title = upperString(Title.strip()).replace('. ','')
                                if not Url.endswith('/'):
                                        Url = Url + '/'
                                self.filmliste.append((decodeHtml(Title), Url, Image))
index ca1d389..c16ed20 100644 (file)
@@ -172,7 +172,10 @@ class bongacamsFilmScreen(MPScreen, ThumbsHelper):
                                continue
                        Url = str(node["username"])
                        Image = 'http:' + str(node["thumb_image"])
-                       Status = str(node["about_me"])
+                       if node.has_key('about_me'):
+                               Status = str(node["about_me"])
+                       else:
+                               Status = ""
                        if not node["is_away"] and not str(node["room"])=="private" and not str(node["room"])=="vip":
                                self.filmliste.append((Title, Url, Image, Status))
                if len(self.filmliste):
@@ -214,9 +217,36 @@ class bongacamsFilmScreen(MPScreen, ThumbsHelper):
        def play_stream(self, data):
                url = re.findall('"videoServerUrl":"(.*?)"', data, re.S)
                if url:
-                       url = 'https:' + url[-1].replace('\/','/') + '/hls/stream_' + self.username + '/playlist.m3u8'
+                       baseurl = 'https:' + url[-1].replace('\/','/') + '/hls/stream_' + self.username + '/'
+                       url = baseurl + 'playlist.m3u8'
                        title = self['liste'].getCurrent()[0][0]
                        self['name'].setText(title)
+                       twAgentGetPage(url, agent=bongacamsAgent, timeout=10).addCallback(self.loadplaylist, baseurl).addErrback(self.dataError)
+               else:
+                       self.session.open(MessageBoxExt, _("Cam is currently offline."), MessageBoxExt.TYPE_INFO)
+
+       def loadplaylist(self, data, baseurl):
+               print data
+               self.bandwith_list = []
+               match_sec_m3u8=re.findall('BANDWIDTH=(\d+).*?\n(.*?m3u8)', data, re.S)
+               max = 0
+               for x in match_sec_m3u8:
+                       if int(x[0]) > max:
+                               max = int(x[0])
+               videoPrio = int(config_mp.mediaportal.videoquali_others.value)
+               if videoPrio == 2:
+                       bw = max
+               elif videoPrio == 1:
+                       bw = max/2
+               else:
+                       bw = max/3
+               for each in match_sec_m3u8:
+                       bandwith,url = each
+                       self.bandwith_list.append((int(bandwith),url))
+               if len(self.bandwith_list) > 0:
+                       _x, best = min((abs(int(x[0]) - bw), x) for x in self.bandwith_list)
+                       url = baseurl + best[1]
+                       title = self['liste'].getCurrent()[0][0]
                        mp_globals.player_agent = bongacamsAgent
                        self.session.open(SimplePlayer, [(title, url)], showPlaylist=False, ltype='bongacams')
                else:
index 6bcee1e..09a91c1 100644 (file)
@@ -201,4 +201,4 @@ class brazzersFilmScreen(MPScreen, ThumbsHelper):
 
        def play(self, url):
                title = self['liste'].getCurrent()[0][0]
-               self.session.open(SimplePlayer, [(title, url.replace('%2F','%252F').replace('%3D','%253D').replace('%2B','%252B'))], showPlaylist=False, ltype='brazzers')
\ No newline at end of file
+               self.session.open(SimplePlayer, [(title, url)], showPlaylist=False, ltype='brazzers')
\ No newline at end of file
index 0c0fd3b..868899e 100644 (file)
@@ -275,7 +275,7 @@ class cam4FilmScreen(MPScreen, ThumbsHelper):
                for each in match_sec_m3u8:
                        bandwith,url = each
                        self.bandwith_list.append((int(bandwith),url))
-               _, best = min((abs(int(x[0]) - bw), x) for x in self.bandwith_list)
+               _x, best = min((abs(int(x[0]) - bw), x) for x in self.bandwith_list)
 
                url = baseurl.replace('playlist.m3u8','') + best[1]
                title = self['liste'].getCurrent()[0][0]
index 7a50033..97609b9 100644 (file)
@@ -286,7 +286,7 @@ class chaturbateFilmScreen(MPScreen, ThumbsHelper):
                        bandwith,res,url = each
                        if (int(res) <= 1920 or mp_globals.model in ["one","duo4k"]):
                                self.bandwith_list.append((int(bandwith),url))
-               _, best = min((abs(int(x[0]) - bw), x) for x in self.bandwith_list)
+               _x, best = min((abs(int(x[0]) - bw), x) for x in self.bandwith_list)
 
                url = baseurl.replace('playlist.m3u8','') + best[1]
                title = self['liste'].getCurrent()[0][0]
index bfe7b89..d5e4582 100644 (file)
@@ -193,7 +193,7 @@ class cliphunterPornstarScreen(MPScreen, ThumbsHelper):
                if Cats:
                        for (Url, Image, Title) in Cats:
                                Url = "http://www.cliphunter.com" + Url + "/movies/"
-                               self.genreliste.append((Title.title(), Url, Image))
+                               self.genreliste.append((upperString(Title), Url, Image))
                        self.ml.setList(map(self._defaultlistleft, self.genreliste))
                        self.ml.moveToIndex(0)
                        self.keyLocked = False
index 82fb98b..ccf7c5f 100644 (file)
@@ -77,11 +77,11 @@ class cumlouderGenreScreen(MPScreen):
                twAgentGetPage(url, agent=myagent).addCallback(self.genreData).addErrback(self.dataError)
 
        def genreData(self, data):
-               Cats = re.findall('<a\stag-url=.*?href="(.*?)\?.*?"\stitle="(.*?)".*?data-lazy="(.*?)"', data, re.S)
+               Cats = re.findall('<a\stag-url=.*?href="(.*?)\?.*?data-lazy="(.*?)".*?alt="(.*?)">', data, re.S)
                if Cats:
-                       for (Url, Title, Image) in Cats:
+                       for (Url, Image, Title) in Cats:
                                Url = 'http://www.cumlouder.com%s' % Url
-                               self.genreliste.append((decodeHtml(Title).title(), Url, Image))
+                               self.genreliste.append((decodeHtml(upperString(Title)), Url, Image))
                        self.count += 1
                if self.count == 2:
                        self.genreliste.sort()
@@ -230,9 +230,9 @@ class cumlouderSitesScreen(MPScreen):
                twAgentGetPage(self.Link, agent=myagent).addCallback(self.loadData).addErrback(self.dataError)
 
        def loadData(self, data):
-               Sites = re.findall('class="muestra-escena">.*?href="(.*?)"\stitle="(.*?)".*?data-lazy="(.*?)"', data, re.S)
+               Sites = re.findall('class="muestra-escena">.*?href="(.*?)".*?data-lazy="(.*?)".*?alt="(.*?)"', data, re.S)
                if Sites:
-                       for (Url, Title, Image) in Sites:
+                       for (Url, Image, Title) in Sites:
                                Url = "https://www.cumlouder.com" + Url
                                if Image.startswith('//'):
                                        Image = 'http:' + Image
@@ -303,9 +303,9 @@ class cumlouderChannelsScreen(MPScreen):
 
        def loadData(self, data):
                self.getLastPage(data, 'class="paginador"(.*?)</ul>')
-               Girls = re.findall('channel-url=.*?href="(.*?)"\stitle="(.*?)".*?data-lazy="(.*?)".*?videos sprite"></span>(.*?)\sVideos', data, re.S)
+               Girls = re.findall('channel-url=.*?href="(.*?)".*?data-lazy="(.*?)".*?alt="(.*?)".*?videos sprite"></span>(.*?)\sVideos', data, re.S)
                if Girls:
-                       for (Url, Title, Image, Count) in Girls:
+                       for (Url, Image, Title, Count) in Girls:
                                Url = "http://www.cumlouder.com" + Url
                                if Image.startswith('//'):
                                        Image = 'http:' + Image
@@ -377,9 +377,9 @@ class cumlouderGirlsScreen(MPScreen):
 
        def loadData(self, data):
                self.getLastPage(data, 'class="paginador"(.*?)</ul>')
-               Girls = re.findall('girl-url=.*?href="(.*?)"\stitle="(.*?)".*?data-lazy="(.*?)".*?videos sprite"></span>(.*?)\sVideos.*?puntaje sprite"></span>(.*?)</span', data, re.S)
+               Girls = re.findall('girl-url=.*?href="(.*?)".*?data-lazy="(.*?)".*?alt="(.*?)".*?videos sprite"></span>(.*?)\sVideos.*?puntaje sprite"></span>(.*?)</span', data, re.S)
                if Girls:
-                       for (Url, Title, Image, Count, Rating) in Girls:
+                       for (Url, Image, Title, Count, Rating) in Girls:
                                Url = "http://www.cumlouder.com" + Url
                                if Image.startswith('//'):
                                        Image = 'http:' + Image
@@ -474,17 +474,17 @@ class cumlouderFilmScreen(MPScreen):
        def loadData(self, data):
                self.getLastPage(data, 'class="paginador"(.*?)</ul>')
                if 'class="box-link-productora">' in data:
-                       Movies = re.findall('class="muestra-escena"\shref="(.*?)"\stitle="(.*?)".*?data-lazy="(.*?)".*?vistas sprite"></span>(.*?)views.*?minutos sprite"></span>(.*?)(?:\sm|)</span.*?class="link-productora"\stitle="(.*?)"', data, re.S)
+                       Movies = re.findall('class="muestra-escena"\shref="(.*?)".*?data-lazy="(.*?)".*?alt="(.*?)".*?vistas sprite"></span>(.*?)views.*?minutos sprite"></span>(.*?)(?:\sm|)</span.*?class="link-productora.*?>(.*?)</a', data, re.S)
                        if Movies:
-                               for (Url, Title, Image, Views, Runtime, Channel) in Movies:
+                               for (Url, Image, Title, Views, Runtime, Channel) in Movies:
                                        Url = "https://www.cumlouder.com" + Url
                                        if Image.startswith('//'):
                                                Image = 'http:' + Image
                                        self.filmliste.append((decodeHtml(Title), Url, Image, None, Runtime, Views, Channel))
                else:
-                       Movies = re.findall('class="muestra-escena"\shref="(.*?)"\stitle="(.*?)".*?data-lazy="(.*?)".*?vistas sprite"></span>(.*?)views.*?fecha sprite"></span>(.*?)</span.*?minutos sprite"></span>(.*?)(?:\sm|)</span', data, re.S)
+                       Movies = re.findall('class="muestra-escena"\shref="(.*?)".*?data-lazy="(.*?)".*?alt="(.*?)".*?vistas sprite"></span>(.*?)views.*?fecha sprite"></span>(.*?)</span.*?minutos sprite"></span>(.*?)(?:\sm|)</span', data, re.S)
                        if Movies:
-                               for (Url, Title, Image, Views, Date, Runtime) in Movies:
+                               for (Url, Image, Title, Views, Date, Runtime) in Movies:
                                        Url = "https://www.cumlouder.com" + Url
                                        if Image.startswith('//'):
                                                Image = 'http:' + Image
index b33121f..5cede70 100644 (file)
@@ -85,7 +85,7 @@ class ddfnetworkGenreScreen(MPScreen):
                        for (Url, Title) in Cats:
                                if self.mode == "Genres":
                                        Url = "https://ddfnetwork.com/videos/search/latest/ever/allsite/%s/" % Url
-                                       Title = Title.title()
+                                       Title = upperString(Title)
                                else:
                                        Url = "https://ddfnetwork.com/videos/search/latest/ever/%s/-/" % Url
                                self.genreliste.append((decodeHtml(Title), Url, default_cover))
@@ -297,4 +297,4 @@ class ddfnetworkFilmScreen(MPScreen, ThumbsHelper):
 
        def play(self, url):
                title = self['liste'].getCurrent()[0][0]
-               self.session.open(SimplePlayer, [(title, url.replace('%2F','%252F').replace('%3D','%253D').replace('%2B','%252B'))], showPlaylist=False, ltype='ddfnetwork')
\ No newline at end of file
+               self.session.open(SimplePlayer, [(title, url)], showPlaylist=False, ltype='ddfnetwork')
\ No newline at end of file
index 20a516b..746a56a 100644 (file)
@@ -214,4 +214,4 @@ class digitalplaygroundFilmScreen(MPScreen, ThumbsHelper):
 
        def play(self, url):
                title = self['liste'].getCurrent()[0][0]
-               self.session.open(SimplePlayer, [(title, url.replace('%2F','%252F').replace('%3D','%253D').replace('%2B','%252B'))], showPlaylist=False, ltype='digitalplayground')
\ No newline at end of file
+               self.session.open(SimplePlayer, [(title, url)], showPlaylist=False, ltype='digitalplayground')
\ No newline at end of file
index e154147..6d00121 100644 (file)
@@ -95,7 +95,7 @@ class drtuberGenreScreen(MPScreen):
                        if genre:
                                for genreurl, genrename in genre:
                                        genreurl = BASE_URL + genreurl
-                                       self.genreliste.append((genrename.title(), genreurl))
+                                       self.genreliste.append((upperString(genrename), genreurl))
                self.genreliste.sort()
                self.genreliste.insert(0, ("Longest", "longest"))
                self.genreliste.insert(0, ("Most Commented (All Time)", "comments_all"))
index 01f3da2..8a6dfa8 100644 (file)
@@ -239,4 +239,4 @@ class extremetubeFilmScreen(MPScreen, ThumbsHelper):
                                url = "https:" + url
                        self.keyLocked = False
                        Title = self['liste'].getCurrent()[0][0]
-                       self.session.open(SimplePlayer, [(Title, url.replace('%2F','%252F').replace('%3D','%253D').replace('%2B','%252B'))], showPlaylist=False, ltype='extremetube')
\ No newline at end of file
+                       self.session.open(SimplePlayer, [(Title, url)], showPlaylist=False, ltype='extremetube')
\ No newline at end of file
index ebd7410..1e05502 100644 (file)
@@ -235,7 +235,7 @@ class hotscopeFilmScreen(MPScreen, ThumbsHelper):
                mp_globals.player_agent = agent
                if "&hash=" in fetchurl:
                        url = fetchurl.split('&hash=')
-                       url = url[0] + "&hash=" + url[1].replace('/','%252F').replace('=','%253D').replace('+','%252B')
+                       url = url[0] + "&hash=" + url[1].replace('/','%2F').replace('=','%3D').replace('+','%2B')
                else:
                        url = fetchurl
                self.session.open(SimplePlayer, [(Title, url)], showPlaylist=False, ltype='hotscope')
\ No newline at end of file
index 3177271..5380fe0 100644 (file)
@@ -272,4 +272,4 @@ class julesjordanFilmScreen(MPScreen, ThumbsHelper):
 
        def play(self, url):
                title = self['liste'].getCurrent()[0][0]
-               self.session.open(SimplePlayer, [(title, url.replace('%2F','%252F').replace('%3D','%253D').replace('%2B','%252B'))], showPlaylist=False, ltype='julesjordan')
\ No newline at end of file
+               self.session.open(SimplePlayer, [(title, url)], showPlaylist=False, ltype='julesjordan')
\ No newline at end of file
index 83f3005..425cbdf 100644 (file)
@@ -201,4 +201,4 @@ class kinkFilmScreen(MPScreen, ThumbsHelper):
 
        def play(self, url):
                title = self['liste'].getCurrent()[0][0]
-               self.session.open(SimplePlayer, [(title, url.replace('%2F','%252F').replace('%3D','%253D').replace('%2B','%252B'))], showPlaylist=False, ltype='kink')
\ No newline at end of file
+               self.session.open(SimplePlayer, [(title, url)], showPlaylist=False, ltype='kink')
\ No newline at end of file
index 73e6a7c..1196ca2 100644 (file)
@@ -262,4 +262,4 @@ class mofosFilmScreen(MPScreen, ThumbsHelper):
 
        def play(self, url):
                title = self['liste'].getCurrent()[0][0]
-               self.session.open(SimplePlayer, [(title, url.replace('%2F','%252F').replace('%3D','%253D').replace('%2B','%252B'))], showPlaylist=False, ltype='mofos')
\ No newline at end of file
+               self.session.open(SimplePlayer, [(title, url)], showPlaylist=False, ltype='mofos')
\ No newline at end of file
index f1ad602..b172e2c 100644 (file)
@@ -206,4 +206,4 @@ class naughtyamericaFilmScreen(MPScreen, ThumbsHelper):
 
        def play(self, url):
                title = self['liste'].getCurrent()[0][0]
-               self.session.open(SimplePlayer, [(title, url.replace('%2F','%252F').replace('%3D','%253D').replace('%2B','%252B'))], showPlaylist=False, ltype='naughtyamerica')
\ No newline at end of file
+               self.session.open(SimplePlayer, [(title, url)], showPlaylist=False, ltype='naughtyamerica')
\ No newline at end of file
index d68e001..1e49f29 100644 (file)
@@ -260,4 +260,4 @@ class nubilefilmsFilmScreen(MPScreen, ThumbsHelper):
 
        def play(self, url):
                title = self['liste'].getCurrent()[0][0]
-               self.session.open(SimplePlayer, [(title, url.replace('%2F','%252F').replace('%3D','%253D').replace('%2B','%252B'))], showPlaylist=False, ltype='nubilefilms')
\ No newline at end of file
+               self.session.open(SimplePlayer, [(title, url)], showPlaylist=False, ltype='nubilefilms')
\ No newline at end of file
index 1e6f60e..f46abf7 100644 (file)
@@ -95,7 +95,7 @@ class pinflixGenreScreen(MPScreen):
                if Cats:
                        for (Url, Title, Image) in Cats:
                                Url = self.baseurl + Url
-                               Title = Title.title()
+                               Title = upperString(Title)
                                self.genreliste.append((Title, Url, Image))
                self.genreliste.sort()
                if not self.mode == "pinflix":
index aa4b47e..71ce293 100644 (file)
@@ -762,7 +762,7 @@ class porncomFilmScreen(MPScreen, ThumbsHelper):
                else:
                        match = re.findall('"\d+p",url:"(http.*?)"', data)
                if match:
-                       url = match[-1].replace('\/','/').replace('%2F','%252F').replace('%3D','%253D').replace('%2B','%252B')
+                       url = match[-1].replace('\/','/')#.replace('%2F','%252F').replace('%3D','%253D').replace('%2B','%252B')
                        self.session.open(SimplePlayer, [(Title, url)], showPlaylist=False, ltype='porncom')
                else:
                        message = self.session.open(MessageBoxExt, _("Stream not found"), MessageBoxExt.TYPE_INFO, timeout=5)
\ No newline at end of file
index 71a02e2..cb9207d 100644 (file)
@@ -237,7 +237,7 @@ class porndoeFilmScreen(MPScreen, ThumbsHelper):
                                        url = vidurl
                        if url.startswith('//'):
                                url = 'http:' + url
-                       url = url.replace('%2F','%252F').replace('%3D','%253D').replace('%2B','%252B')
+                       #url = url.replace('%2F','%252F').replace('%3D','%253D').replace('%2B','%252B')
                        self.keyLocked = False
                        Title = self['liste'].getCurrent()[0][0]
                        headers = '&Referer=' + self['liste'].getCurrent()[0][1]
index c15c827..d38999a 100644 (file)
@@ -168,7 +168,7 @@ class pornhubGenreScreen(MPScreen, LoginFunc):
                        self.filmliste.insert(0, (400 * "—", None, default_cover))
                        self.filmliste.insert(0, ("Previously Viewed", "%s/users/%s/videos/recent?page=" % (base_url, self.username), default_cover))
                        self.filmliste.insert(0, ("My Feed", "%s/feeds?section=videos&page=" % base_url, default_cover))
-                       self.filmliste.insert(0, ("Recommended", "%s/recommended?page=" % base_url, default_cover))
+                       self.filmliste.insert(0, ("Recommended", "%s/recommended?ajax=1&page=" % base_url, default_cover))
                        self.filmliste.insert(0, ("Member Subscriptions", "%s/users/%s/subscriptions?page=" % (base_url, self.username), default_cover))
                        self.filmliste.insert(0, ("Channel Subscriptions", "%s/users/%s/channel_subscriptions?page=" % (base_url, self.username), default_cover))
                        self.filmliste.insert(0, ("Pornstar Subscriptions", "%s/users/%s/pornstar_subscriptions?page=" % (base_url, self.username), default_cover))
@@ -190,7 +190,7 @@ class pornhubGenreScreen(MPScreen, LoginFunc):
                self.filmliste.insert(0, ("Most Viewed", "%s/video?o=mv&page=" % base_url, default_cover))
                self.filmliste.insert(0, ("Community Feed", "%s/community?content=videos&page=" % base_url, default_cover))
                if not phLoggedIn:
-                       self.filmliste.insert(0, ("Recommended", "%s/recommended?page=" % base_url, default_cover))
+                       self.filmliste.insert(0, ("Recommended", "%s/recommended?ajax=1&page=" % base_url, default_cover))
                self.filmliste.insert(0, ("Featured Recently", "%s/video?o=mr&page=" % base_url, default_cover))
                self.filmliste.insert(0, ("Newest", "%s/video?o=cm&page=" % base_url, default_cover))
                self.filmliste.insert(0, ("--- Search ---", "callSuchen", default_cover))
@@ -1205,7 +1205,7 @@ class pornhubFilmScreen(MPScreen, ThumbsHelper, LoginFunc):
                mp_globals.player_agent = phAgent
                if "&hash=" in fetchurl:
                        url = fetchurl.split('&hash=')
-                       url = url[0] + "&hash=" + url[1].replace('/','%252F').replace('=','%253D').replace('+','%252B')
+                       url = url[0] + "&hash=" + url[1].replace('/','%2F').replace('=','%3D').replace('+','%2B')
                else:
                        url = fetchurl
                self.session.open(SimplePlayer, [(Title, url)], showPlaylist=False, ltype='pornhub')
index 056efc8..0a36861 100644 (file)
@@ -179,7 +179,7 @@ class porntvGenreScreen(MPScreen):
                                                Url = self.baseurl + Url
                                if self.mode == "porntitan":
                                        Title = Title.split(' Porn')[0]
-                               self.genreliste.append((Title.title(), Url, Image))
+                               self.genreliste.append((upperString(Title), Url, Image))
                        self.genreliste.sort()
                self.genreliste.insert(0, ("Longest", "%s/videos/straight/all-length-$$PAGE$$.html" % self.baseurl, default_cover))
                self.genreliste.insert(0, ("Top Rated", "%s/videos/straight/all-rate-$$PAGE$$.html" % self.baseurl, default_cover))
index 5d7fd2e..89d0e88 100644 (file)
@@ -222,4 +222,4 @@ class realgfpornFilmScreen(MPScreen, ThumbsHelper):
                if videoPage:
                        self.keyLocked = False
                        Title = self['liste'].getCurrent()[0][0]
-                       self.session.open(SimplePlayer, [(Title, videoPage[0].replace('%2F','%252F').replace('%3D','%253D').replace('%2B','%252B'))], showPlaylist=False, ltype='realgfporn')
\ No newline at end of file
+                       self.session.open(SimplePlayer, [(Title, videoPage[0])], showPlaylist=False, ltype='realgfporn')
\ No newline at end of file
index 8c38ebe..5d8e3ec 100644 (file)
@@ -211,4 +211,4 @@ class realitykingsFilmScreen(MPScreen, ThumbsHelper):
 
        def play(self, url):
                title = self['liste'].getCurrent()[0][0]
-               self.session.open(SimplePlayer, [(title, url.replace('%2F','%252F').replace('%3D','%253D').replace('%2B','%252B'))], showPlaylist=False, ltype='realitykings')
\ No newline at end of file
+               self.session.open(SimplePlayer, [(title, url))], showPlaylist=False, ltype='realitykings')
\ No newline at end of file
index cd05401..9847f45 100644 (file)
@@ -286,4 +286,4 @@ class redtubeFilmScreen(MPScreen, ThumbsHelper):
                                url = 'http:' + url
                        self.keyLocked = False
                        Title = self['liste'].getCurrent()[0][0]
-                       self.session.open(SimplePlayer, [(Title, url.replace('%2F','%252F').replace('%3D','%253D').replace('%2B','%252B'))], showPlaylist=False, ltype='redtube')
\ No newline at end of file
+                       self.session.open(SimplePlayer, [(Title, url)], showPlaylist=False, ltype='redtube')
\ No newline at end of file
index cd4ce0c..0b22503 100644 (file)
@@ -75,7 +75,7 @@ class sexuGenreScreen(MPScreen):
                if Cats:
                        for (Url, Title) in Cats:
                                Url = "https://sexu.com" + Url + '/'
-                               self.genreliste.append((Title.title(), Url))
+                               self.genreliste.append((upperString(Title), Url))
                        self.genreliste.sort()
                        self.genreliste.insert(0, ("Most Interesting", "https://sexu.com/engaging/"))
                        self.genreliste.insert(0, ("Trending", "https://sexu.com/trending/"))
diff --git a/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/porn/shesfreaky.py b/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/porn/shesfreaky.py
new file mode 100644 (file)
index 0000000..a921841
--- /dev/null
@@ -0,0 +1,209 @@
+# -*- coding: utf-8 -*-
+#######################################################################################################
+#
+#    MediaPortal for Dreambox OS
+#
+#    Coded by MediaPortal Team (c) 2013-2019
+#
+#  This plugin is open source but it is NOT free software.
+#
+#  This plugin may only be distributed to and executed on hardware which
+#  is licensed by Dream Property GmbH. This includes commercial distribution.
+#  In other words:
+#  It's NOT allowed to distribute any parts of this plugin or its source code in ANY way
+#  to hardware which is NOT licensed by Dream Property GmbH.
+#  It's NOT allowed to execute this plugin and its source code or even parts of it in ANY way
+#  on hardware which is NOT licensed by Dream Property GmbH.
+#
+#  This applies to the source code as a whole as well as to parts of it, unless explicitely
+#  stated otherwise.
+#
+#  If you want to use or modify the code or parts of it, permission from the authors is necessary.
+#  You have to keep OUR license and inform us about any modification, but it may NOT be distributed
+#  other than under the conditions noted above.
+#
+#  As an exception regarding modifcations, you are NOT permitted to remove
+#  any copy protections implemented in this plugin or change them for means of disabling
+#  or working around the copy protections, unless the change has been explicitly permitted
+#  by the original authors. Also decompiling and modification of the closed source
+#  parts is NOT permitted.
+#
+#  Advertising with this plugin is NOT allowed.
+#
+#  For other uses, permission from the authors is necessary.
+#
+#######################################################################################################
+
+from Plugins.Extensions.MediaPortal.plugin import _
+from Plugins.Extensions.MediaPortal.resources.imports import *
+
+agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'
+default_cover = "file://%s/shesfreaky.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
+
+class shesfreakyGenreScreen(MPScreen):
+
+       def __init__(self, session):
+               MPScreen.__init__(self, session, skin='MP_Plugin', default_cover=default_cover)
+
+               self["actions"] = ActionMap(["MP_Actions"], {
+                       "ok" : self.keyOK,
+                       "0" : self.closeAll,
+                       "cancel" : self.keyCancel,
+                       "up" : self.keyUp,
+                       "down" : self.keyDown,
+                       "right" : self.keyRight,
+                       "left" : self.keyLeft
+               }, -1)
+
+               self['title'] = Label("ShesFreaky.com")
+               self['ContentTitle'] = Label("Genre:")
+
+               self.keyLocked = True
+               self.suchString = ''
+
+               self.genreliste = []
+               self.ml = MenuList([], enableWrapAround=True, content=eListboxPythonMultiContent)
+               self['liste'] = self.ml
+
+               self.onLayoutFinish.append(self.layoutFinished)
+
+       def layoutFinished(self):
+               self.keyLocked = True
+               self['name'].setText(_('Please wait...'))
+               url = "https://www.shesfreaky.com"
+               twAgentGetPage(url, agent=agent).addCallback(self.genreData).addErrback(self.dataError)
+
+       def genreData(self, data):
+               parse = re.search('<span>Categories</span>.*?<div class="cat-box">(.*?)</ul', data, re.S)
+               if parse:
+                       Cats = re.findall("<li><a href='(.*?)(?:page1.html|)'>(.*?)</a>", parse.group(1), re.S)
+                       if Cats:
+                               for (Url, Title) in Cats:
+                                       self.genreliste.append((decodeHtml(upperString(Title)), Url, default_cover))
+               self.genreliste.sort()
+               self.genreliste.insert(0, ("Longest", "https://www.shesfreaky.com/longest/", default_cover))
+               self.genreliste.insert(0, ("Most Viewed", "https://www.shesfreaky.com/most-viewed/", default_cover))
+               self.genreliste.insert(0, ("Top Rated", "https://www.shesfreaky.com/top-rated/", default_cover))
+               self.genreliste.insert(0, ("Most Recent", "https://www.shesfreaky.com/most-recent/", default_cover))
+               self.genreliste.insert(0, ("--- Search ---", "callSuchen", default_cover))
+               self.ml.setList(map(self._defaultlistcenter, self.genreliste))
+               self.keyLocked = False
+               self.showInfos()
+
+       def showInfos(self):
+               self['name'].setText('')
+               Image = self['liste'].getCurrent()[0][2]
+               CoverHelper(self['coverArt']).getCover(Image, agent=agent)
+
+       def keyOK(self):
+               if self.keyLocked:
+                       return
+               Name = self['liste'].getCurrent()[0][0]
+               if Name == "--- Search ---":
+                       self.suchen()
+               else:
+                       Link = self['liste'].getCurrent()[0][1]
+                       self.session.open(shesfreakyFilmScreen, Link, Name)
+
+       def SuchenCallback(self, callback = None):
+               if callback is not None and len(callback):
+                       Name = "--- Search ---"
+                       self.suchString = callback
+                       Link = urllib.quote(callback).replace(' ', '-')
+                       self.session.open(shesfreakyFilmScreen, Link, Name)
+
+class shesfreakyFilmScreen(MPScreen, ThumbsHelper):
+
+       def __init__(self, session, Link, Name):
+               self.Link = Link
+               self.Name = Name
+               MPScreen.__init__(self, session, skin='MP_Plugin', default_cover=default_cover)
+               ThumbsHelper.__init__(self)
+
+               self["actions"] = ActionMap(["MP_Actions"], {
+                       "ok" : self.keyOK,
+                       "0" : self.closeAll,
+                       "cancel" : self.keyCancel,
+                       "5" : self.keyShowThumb,
+                       "up" : self.keyUp,
+                       "down" : self.keyDown,
+                       "right" : self.keyRight,
+                       "left" : self.keyLeft,
+                       "nextBouquet" : self.keyPageUp,
+                       "prevBouquet" : self.keyPageDown,
+                       "green" : self.keyPageNumber
+               }, -1)
+
+               self['title'] = Label("ShesFreaky.com")
+               self['ContentTitle'] = Label("Genre: %s" % self.Name)
+               self['F2'] = Label(_("Page"))
+
+               self['Page'] = Label(_("Page:"))
+               self.keyLocked = True
+               self.page = 1
+               self.lastpage = 1
+
+               self.filmliste = []
+               self.ml = MenuList([], enableWrapAround=True, content=eListboxPythonMultiContent)
+               self['liste'] = self.ml
+
+               self.onLayoutFinish.append(self.loadPage)
+
+       def loadPage(self):
+               self.keyLocked = True
+               self['name'].setText(_('Please wait...'))
+               self.filmliste = []
+               if re.match(".*?Search", self.Name):
+                       url = "https://www.shesfreaky.com/search/videos/%s/page%s.html" % (self.Link, str(self.page))
+               else:
+                       url = "%spage%s.html" % (self.Link, str(self.page))
+               twAgentGetPage(url).addCallback(self.loadData).addErrback(self.dataError)
+
+       def loadData(self, data):
+               self.getLastPage(data, 'id="pagination-videos">(.*?)</div>')
+               parse = re.search('<small>Filter:(.*?)div class="pagination"', data, re.S)
+               if parse:
+                       Movies = re.findall('class="blockItem.*?href="(.*?)".*?<img src="(.*?)".*?"itemLength">(.*?)</strong.*?<em title="(.*?)">.*?Views:\s(.*?)</small', parse.group(1), re.S)
+                       if Movies:
+                               for (Url, Image, Runtime, Title, Views) in Movies:
+                                       Views = Views.replace(',','')
+                                       if Image.startswith('//'):
+                                               Image = "https:" + Image
+                                       if not ("Photos" in Runtime or "lock.png" in Image):
+                                               self.filmliste.append((decodeHtml(Title), Url, Image, Runtime, Views))
+               if len(self.filmliste) == 0:
+                       self.filmliste.append((_('No movies found!'), None, None, None, None))
+               self.ml.setList(map(self._defaultlistleft, self.filmliste))
+               self.ml.moveToIndex(0)
+               self.keyLocked = False
+               self.th_ThumbsQuery(self.filmliste, 0, 1, 2, None, None, self.page, self.lastpage, mode=1)
+               self.showInfos()
+
+       def showInfos(self):
+               Url = self['liste'].getCurrent()[0][1]
+               if Url == None:
+                       return
+               title = self['liste'].getCurrent()[0][0]
+               pic = self['liste'].getCurrent()[0][2]
+               runtime = self['liste'].getCurrent()[0][3]
+               views = self['liste'].getCurrent()[0][4]
+               self['name'].setText(title)
+               self['handlung'].setText("Runtime: %s\nViews: %s" % (runtime, views))
+               CoverHelper(self['coverArt']).getCover(pic, agent=agent)
+
+       def keyOK(self):
+               if self.keyLocked:
+                       return
+               Link = self['liste'].getCurrent()[0][1]
+               if not Link:
+                       return
+               self.keyLocked = True
+               twAgentGetPage(Link, agent=agent).addCallback(self.getVideoPage).addErrback(self.dataError)
+
+       def getVideoPage(self, data):
+               videoPage = re.findall('<source src="(.*?)" type="video/mp4"', data, re.S)
+               if videoPage:
+                       self.keyLocked = False
+                       Title = self['liste'].getCurrent()[0][0]
+                       url = videoPage[-1]
+                       self.session.open(SimplePlayer, [(Title, url)], showPlaylist=False, ltype='shesfreaky')
\ No newline at end of file
index a3cd76c..f89271e 100644 (file)
@@ -283,4 +283,4 @@ class spankwireFilmScreen(MPScreen, ThumbsHelper):
                self.keyLocked = False
                Title = self['liste'].getCurrent()[0][0]
                if url:
-                       self.session.open(SimplePlayer, [(Title, url.replace('%2F','%252F').replace('%3D','%253D').replace('%2B','%252B'))], showPlaylist=False, ltype='spankwire')
\ No newline at end of file
+                       self.session.open(SimplePlayer, [(Title, url)], showPlaylist=False, ltype='spankwire')
\ No newline at end of file
index 6ccbff1..7f68117 100644 (file)
@@ -80,7 +80,7 @@ class teamskeetGenreScreen(MPScreen):
                        for Tag in Tags:
                                if Tag != "":
                                        url = "http://www.teamskeet.com/t1/updates/load?view=newest&changedOrder=0&fltrs[tags]=%s&fltrs[time]=ALL&fltrs[site]=ALL&order=DESC&tags_select=&fltrs[title]=&nats=null" % Tag.replace(' ','+')
-                                       self.genreliste.append((Tag.title(), url, default_cover))
+                                       self.genreliste.append((upperString(Tag), url, default_cover))
                        self.genreliste.sort()
                self.genreliste.insert(0, ("Most Favorited", 'http://www.teamskeet.com/t1/updates/load?view=favorited&fltrs[tags]=&fltrs[site]=ALL&changedOrder=0&fltrs[tags]=&fltrs[time]=ALL&fltrs[site]=ALL&order=DESC&tags_select=&fltrs[title]=', default_cover))
                self.genreliste.insert(0, ("Most Viewed", 'http://www.teamskeet.com/t1/updates/load?view=views&fltrs[tags]=&fltrs[site]=ALL&changedOrder=0&fltrs[tags]=&fltrs[time]=ALL&fltrs[site]=ALL&order=DESC&tags_select=&fltrs[title]=', default_cover))
@@ -202,4 +202,4 @@ class teamskeetFilmScreen(MPScreen, ThumbsHelper):
 
        def play(self, url):
                title = self['liste'].getCurrent()[0][0]
-               self.session.open(SimplePlayer, [(title, url.replace('%2F','%252F').replace('%3D','%253D').replace('%2B','%252B'))], showPlaylist=False, ltype='teamkeet')
\ No newline at end of file
+               self.session.open(SimplePlayer, [(title, url)], showPlaylist=False, ltype='teamkeet')
\ No newline at end of file
index dcc0e3e..1898bac 100644 (file)
@@ -322,7 +322,7 @@ class tube8FilmScreen(MPScreen, ThumbsHelper):
                Title = self['liste'].getCurrent()[0][0]
                match = re.findall('"quality_\d+p":"(http.*?)"', data)
                if match:
-                       url = match[-1].replace('\/','/').replace('%2F','%252F').replace('%3D','%253D').replace('%2B','%252B')
+                       url = match[-1].replace('\/','/')#.replace('%2F','%252F').replace('%3D','%253D').replace('%2B','%252B')
                        self.session.open(SimplePlayer, [(Title, url)], showPlaylist=False, ltype='tube8')
                else:
                        message = self.session.open(MessageBoxExt, _("Stream not found"), MessageBoxExt.TYPE_INFO, timeout=5)
\ No newline at end of file
index 525a699..a3b6efe 100644 (file)
@@ -77,7 +77,7 @@ class wetplaceGenreScreen(MPScreen):
                if Cats:
                        for (Url, Image, Title) in Cats:
                                Title = Title.replace(' ','').replace('\n','')
-                               self.genreliste.append((Title.title(), Url, Image))
+                               self.genreliste.append((upperString(Title), Url, Image))
                        self.genreliste.sort()
                        self.genreliste.insert(0, ("Most Popular", "http://www.wetplace.com/most-popular", default_cover))
                        self.genreliste.insert(0, ("Top Rated", "http://www.wetplace.com/top-rated", default_cover))
index e595001..b54fbdd 100644 (file)
@@ -272,4 +272,4 @@ class wickedFilmScreen(MPScreen, ThumbsHelper):
 
        def play(self, url):
                title = self['liste'].getCurrent()[0][0]
-               self.session.open(SimplePlayer, [(title, url.replace('%2F','%252F').replace('%3D','%253D').replace('%2B','%252B'))], showPlaylist=False, ltype='wicked')
\ No newline at end of file
+               self.session.open(SimplePlayer, [(title, url)], showPlaylist=False, ltype='wicked')
\ No newline at end of file
index 06595ce..212e872 100644 (file)
@@ -130,7 +130,7 @@ class fourtubeGenreScreen(MPScreen):
                        if Cats:
                                for (Url, Title) in Cats:
                                        Url = "https://" + self.baseurl + Url
-                                       Title = Title.title()
+                                       Title = upperString(Title)
                                        self.genreliste.append((Title, Url, default_cover))
                self.genreliste.sort()
                self.genreliste.insert(0, ("Channels", "https://%s/%schannel%s" % (self.baseurl, self.scopeval[self.scope], self.s), default_cover))
index e43e3b1..3ea9867 100644 (file)
@@ -43,7 +43,7 @@ ck = {}
 favourites = []
 subscriptions = []
 pornstars = []
-xhAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36"
+xhAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36"
 base_url = "https://xhamster.com"
 
 default_cover = "file://%s/xhamster.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
@@ -193,7 +193,7 @@ class xhamsterGenreScreen(MPScreen):
                        self.session.open(xhamsterFilmScreen, Link, Name, self.scope)
 
        def getSuggestions(self, text, max_res):
-               url = "http://m.xhamster.com/ajax.php?act=search&q=%s" % urllib.quote_plus(text)
+               url = "https://xhamster.com/x-api?r=%5B%7B%22name%22%3A%22suggestCollectionFetch%22%2C%22requestData%22%3A%7B%22searchValue%22%3A%22" + urllib.quote_plus(text) + "%22%2C%22searchScope%22%3A%22video%22%7D%7D%5D"
                d = twAgentGetPage(url, agent=xhAgent, headers={'Content-Type': 'application/x-www-form-urlencoded', 'X-Requested-With': 'XMLHttpRequest'}, timeout=5)
                d.addCallback(self.gotSuggestions, max_res)
                d.addErrback(self.gotSuggestions, max_res, err=True)
@@ -203,7 +203,7 @@ class xhamsterGenreScreen(MPScreen):
                list = []
                if not err and type(suggestions) in (str, buffer):
                        suggestions = json.loads(suggestions)
-                       for item in suggestions:
+                       for item in suggestions[0]["responseData"]:
                                li = item["plainText"]
                                list.append(str(li))
                                max_res -= 1
@@ -557,7 +557,7 @@ class xhamsterFilmScreen(MPScreen, ThumbsHelper):
                        if parse:
                                Liste = re.findall('class="thumb-container"\sdata-href="(.*?)"\sdata-thumb="(.*?)".*?class="duration">(.*?)</div>.*?class="name">(.*?)</div>.*?class="views">(.*?)</div>.*?class="rating">(.*?)</div>', parse.group(1), re.S)
                                if not Liste:
-                                       Liste = re.findall('class="video-thumb__image-container.*?href="(.*?)".*?image-container__image"\ssrc="(.*?)".*?container__duration">(.*?)</div>.*?video-thumb-info__name.*?>(.*?)</a>.*?thumb-info__views.*?>(.*?)(?:</i>|</div>).*?thumb-info__rating.*?>(.*?)</i>', parse.group(1), re.S)
+                                       Liste = re.findall('class="video-thumb__image-container.*?href="(.*?)".*?image-container__image"\ssrc="(.*?)".*?container__duration">(.*?)</div>.*?video-thumb-info__name.*?>(.*?)</a>.*?class="video-thumb-info__metric-container views.*?class="metric-text">(.*?)</span.*?class="video-thumb-info__metric-container rating.*?class="metric-text">(.*?)</span', parse.group(1), re.S)
                                if Liste:
                                        for (Link, Image, Runtime, Name, Views, Rating) in Liste:
                                                Name = stripAllTags(Name).strip()
@@ -756,7 +756,7 @@ class xhamsterFilmScreen(MPScreen, ThumbsHelper):
        def playerData(self, data):
                playerData = re.findall('"embedUrl":"(.*?)",', data, re.S)
                if playerData:
-                       getPage(playerData[0], agent=xhAgent, cookies=ck).addCallback(self.playUrl).addErrback(self.dataError)
+                       getPage(playerData[0].replace('\/','/'), agent=xhAgent, cookies=ck).addCallback(self.playUrl).addErrback(self.dataError)
 
        def playUrl(self, data):
                Title = self['liste'].getCurrent()[0][0]
index f9a6452..19f03fd 100644 (file)
@@ -110,7 +110,7 @@ class xnxxGenreScreen(MPScreen):
                                                Count = int(Count.replace(',',''))
                                                if Count > 250:
                                                        Url = "https://www.xnxx.com" + Url.replace('tags','search') + "/$$PAGE$$/"
-                                                       self.filmliste.append((Title.title(), Url, default_cover, False))
+                                                       self.filmliste.append((upperString(Title), Url, default_cover, False))
                        self.filmliste.sort()
                        self.filmliste.insert(0, ("Best Of", "https://www.xnxx.com/best", default_cover, False))
                        self.filmliste.insert(0, ("Most Popular", "https://www.xnxx.com/home/$$PAGE$$", default_cover, False))
@@ -333,7 +333,7 @@ class xnxxFilmScreen(MPScreen, ThumbsHelper):
        def parseData(self, data):
                match = re.findall("setVideo(?:UrlLow|UrlHigh|HLS)\('(.*?)'\);", data)
                if match:
-                       url = match[-1].replace('\/','/').replace('%2F','%252F').replace('%3D','%253D').replace('%2B','%252B')
+                       url = match[-1].replace('\/','/')#.replace('%2F','%252F').replace('%3D','%253D').replace('%2B','%252B')
                        if "/hls/" in url:
                                #if len(url.split('hls.m3u8')[1]) > 0:
                                baseurl = url.split('hls.m3u8')[0]
@@ -366,7 +366,7 @@ class xnxxFilmScreen(MPScreen, ThumbsHelper):
                for each in match_sec_m3u8:
                        bandwith,url = each
                        self.bandwith_list.append((int(bandwith),url))
-               _, best = min((abs(int(x[0]) - bw), x) for x in self.bandwith_list)
+               _x, best = min((abs(int(x[0]) - bw), x) for x in self.bandwith_list)
                url = baseurl.replace('https','http') + best[1]
                if "vid-egc.xnxx-cdn.com" in url:
                        playlist_path = config_mp.mediaportal.storagepath.value+"tmp.m3u8"
index 3b10c31..ab3f2e8 100644 (file)
@@ -680,7 +680,7 @@ class xvideosFilmScreen(MPScreen, ThumbsHelper):
        def parseData(self, data):
                match = re.findall("setVideo(?:UrlLow|UrlHigh|HLS)\('(.*?)'\);", data)
                if match:
-                       url = match[-1].replace('\/','/').replace('%2F','%252F').replace('%3D','%253D').replace('%2B','%252B')
+                       url = match[-1].replace('\/','/')#.replace('%2F','%252F').replace('%3D','%253D').replace('%2B','%252B')
                        if "/hls/" in url:
                                #if len(url.split('hls.m3u8')[1]) > 0:
                                baseurl = url.split('hls.m3u8')[0]
@@ -713,7 +713,7 @@ class xvideosFilmScreen(MPScreen, ThumbsHelper):
                for each in match_sec_m3u8:
                        bandwith,url = each
                        self.bandwith_list.append((int(bandwith),url))
-               _, best = min((abs(int(x[0]) - bw), x) for x in self.bandwith_list)
+               _x, best = min((abs(int(x[0]) - bw), x) for x in self.bandwith_list)
                url = baseurl.replace('https','http') + best[1]
                if "vid-egc.xvideos-cdn.com" in url:
                        playlist_path = config_mp.mediaportal.storagepath.value+"tmp.m3u8"
index 71f730f..33a32c9 100644 (file)
@@ -450,5 +450,5 @@ class youpornFilmScreen(MPScreen, ThumbsHelper):
                        videoPage = re.findall('\d+","videoUrl":[\"|\'](http[s]?.*?)[\"|\']', parse[-1], re.S)
                        if videoPage:
                                self.keyLocked = False
-                               url = decodeHtml(videoPage[0].replace('\/','/').replace('%2F','%252F').replace('%3D','%253D').replace('%2B','%252B'))
+                               url = decodeHtml(videoPage[0]).replace('\/','/')#.replace('%2F','%252F').replace('%3D','%253D').replace('%2B','%252B'))
                                self.session.open(SimplePlayer, [(Title, url)], showPlaylist=False, ltype='youporn')
\ No newline at end of file
index 2ebdc6e..bc165d6 100644 (file)
@@ -195,7 +195,7 @@ class sporttotalSubGenreScreen(MPScreen):
                for each in match_sec_m3u8:
                        bandwith,url = each
                        self.bandwith_list.append((int(bandwith),url))
-               _, best = min((abs(int(x[0]) - bw), x) for x in self.bandwith_list)
+               _x, best = min((abs(int(x[0]) - bw), x) for x in self.bandwith_list)
                if '/RECORD' in baseurl:
                        url = baseurl.split('/RECORD')[0] + best[1]
                else:
diff --git a/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/images/countries/CZ.png b/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/images/countries/CZ.png
new file mode 100644 (file)
index 0000000..35fff95
Binary files /dev/null and b/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/images/countries/CZ.png differ
diff --git a/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/images/countries/DE.png b/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/images/countries/DE.png
new file mode 100644 (file)
index 0000000..00aba9e
Binary files /dev/null and b/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/images/countries/DE.png differ
diff --git a/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/images/countries/EN.png b/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/images/countries/EN.png
new file mode 100644 (file)
index 0000000..b366956
Binary files /dev/null and b/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/images/countries/EN.png differ
diff --git a/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/images/countries/ENDE.png b/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/images/countries/ENDE.png
new file mode 100644 (file)
index 0000000..25933a2
Binary files /dev/null and b/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/images/countries/ENDE.png differ
diff --git a/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/images/countries/ES.png b/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/images/countries/ES.png
new file mode 100644 (file)
index 0000000..f59b3e0
Binary files /dev/null and b/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/images/countries/ES.png differ
diff --git a/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/images/countries/FI.png b/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/images/countries/FI.png
new file mode 100644 (file)
index 0000000..8b148b5
Binary files /dev/null and b/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/images/countries/FI.png differ
diff --git a/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/images/countries/FR.png b/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/images/countries/FR.png
new file mode 100644 (file)
index 0000000..dd4f881
Binary files /dev/null and b/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/images/countries/FR.png differ
diff --git a/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/images/countries/GR.png b/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/images/countries/GR.png
new file mode 100644 (file)
index 0000000..2971235
Binary files /dev/null and b/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/images/countries/GR.png differ
diff --git a/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/images/countries/IN.png b/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/images/countries/IN.png
new file mode 100644 (file)
index 0000000..a3cef45
Binary files /dev/null and b/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/images/countries/IN.png differ
diff --git a/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/images/countries/IT.png b/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/images/countries/IT.png
new file mode 100644 (file)
index 0000000..cc37505
Binary files /dev/null and b/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/images/countries/IT.png differ
diff --git a/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/images/countries/JP.png b/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/images/countries/JP.png
new file mode 100644 (file)
index 0000000..4359612
Binary files /dev/null and b/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/images/countries/JP.png differ
diff --git a/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/images/countries/KR.png b/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/images/countries/KR.png
new file mode 100644 (file)
index 0000000..9ae2fbb
Binary files /dev/null and b/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/images/countries/KR.png differ
diff --git a/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/images/countries/PL.png b/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/images/countries/PL.png
new file mode 100644 (file)
index 0000000..48bbf76
Binary files /dev/null and b/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/images/countries/PL.png differ
diff --git a/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/images/countries/RU.png b/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/images/countries/RU.png
new file mode 100644 (file)
index 0000000..881fd06
Binary files /dev/null and b/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/images/countries/RU.png differ
diff --git a/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/images/countries/SE.png b/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/images/countries/SE.png
new file mode 100644 (file)
index 0000000..741aebc
Binary files /dev/null and b/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/images/countries/SE.png differ
diff --git a/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/images/countries/SK.png b/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/images/countries/SK.png
new file mode 100644 (file)
index 0000000..df6f22c
Binary files /dev/null and b/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/images/countries/SK.png differ
diff --git a/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/images/countries/TR.png b/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/images/countries/TR.png
new file mode 100644 (file)
index 0000000..aea87a9
Binary files /dev/null and b/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/images/countries/TR.png differ
index ba095cc..19049f3 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 d4a529a..7c049a1 100644 (file)
@@ -1,8 +1,8 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: MediaPortal\n"
-"POT-Creation-Date: 2019-08-03 17:35+0200\n"
-"PO-Revision-Date: 2019-08-03 17:35+0200\n"
+"POT-Creation-Date: 2019-08-30 17:26+0200\n"
+"PO-Revision-Date: 2019-08-30 17:27+0200\n"
 "Last-Translator: dhwz <dhwz@gmx.net>\n"
 "Language-Team: MediaPortal Team\n"
 "Language: de_DE\n"
@@ -38,7 +38,7 @@ msgstr ""
 #: mpgz/src/additions/porn/mydirtyhobby.py:90
 #: mpgz/src/additions/porn/pandamovie.py:112
 #: mpgz/src/additions/porn/paradisehill.py:101
-#: mpgz/src/additions/porn/porn00.py:89
+#: mpgz/src/additions/porn/porn00.py:101
 #: mpgz/src/additions/porn/pornfreetv.py:155
 #: mpgz/src/additions/porn/pornfromczech.py:149
 #: mpgz/src/additions/porn/pornrewind.py:99
@@ -46,8 +46,7 @@ msgstr ""
 #: mpgz/src/additions/porn/porntrex.py:219
 #: mpgz/src/additions/porn/pornvortexx.py:100
 #: mpgz/src/additions/porn/streammdh.py:128
-#: mpgz/src/additions/porn/streamxxx.py:153 mpgz/src/additions/porn/vidz7.py:99
-#: mpgz/src/additions/porn/x123pandamovie.py:103
+#: mpgz/src/additions/porn/streamxxx.py:153
 #: mpgz/src/additions/porn/yourpornsexy.py:145
 #: mpgz/src/additions/porn/yourpornsexy.py:207
 #: mpgz/src/additions/porn/yourpornsexy.py:275
@@ -59,7 +58,7 @@ msgstr ""
 #: src/additions/mediatheken/srg.py:181 src/additions/music/radio.py:298
 #: src/additions/porn/ahme.py:186 src/additions/porn/badoinkvr.py:130
 #: src/additions/porn/badoinkvr.py:204 src/additions/porn/bangbros.py:142
-#: src/additions/porn/beeg.py:145 src/additions/porn/befuck.py:140
+#: src/additions/porn/beeg.py:141 src/additions/porn/befuck.py:140
 #: src/additions/porn/bongacams.py:132 src/additions/porn/brazzers.py:145
 #: src/additions/porn/cam4.py:171 src/additions/porn/chaturbate.py:181
 #: src/additions/porn/cliphunter.py:170 src/additions/porn/cliphunter.py:240
@@ -88,19 +87,20 @@ msgstr ""
 #: src/additions/porn/pornrabbit.py:137 src/additions/porn/porntv.py:290
 #: src/additions/porn/realgfporn.py:160 src/additions/porn/realitykings.py:156
 #: src/additions/porn/redtube.py:181 src/additions/porn/sexu.py:130
-#: src/additions/porn/spankbang.py:167 src/additions/porn/spankwire.py:204
-#: src/additions/porn/sunporno.py:192 src/additions/porn/teamskeet.py:145
-#: src/additions/porn/tnaflix.py:153 src/additions/porn/tube8.py:200
-#: src/additions/porn/tubewolf.py:158 src/additions/porn/updatetube.py:183
-#: src/additions/porn/vintagetube.py:243 src/additions/porn/vporn.py:288
-#: src/additions/porn/wetplace.py:137 src/additions/porn/wicked.py:129
-#: src/additions/porn/wicked.py:211 src/additions/porn/x4tube.py:245
-#: src/additions/porn/x4tube.py:373 src/additions/porn/xhamster.py:494
-#: src/additions/porn/xhamster.py:622 src/additions/porn/xnxx.py:199
-#: src/additions/porn/xpaja.py:148 src/additions/porn/xvideos.py:238
-#: src/additions/porn/xvideos.py:434 src/additions/porn/youporn.py:316
-#: src/additions/porn/youporn.py:383 src/plugin.py:2163 src/plugin.py:2415
-#: src/plugin.py:3213 src/plugin.py:3232 src/resources/showAsThumb.py:247
+#: src/additions/porn/shesfreaky.py:139 src/additions/porn/spankbang.py:167
+#: src/additions/porn/spankwire.py:204 src/additions/porn/sunporno.py:192
+#: src/additions/porn/teamskeet.py:145 src/additions/porn/tnaflix.py:153
+#: src/additions/porn/tube8.py:200 src/additions/porn/tubewolf.py:158
+#: src/additions/porn/updatetube.py:183 src/additions/porn/vintagetube.py:243
+#: src/additions/porn/vporn.py:288 src/additions/porn/wetplace.py:137
+#: src/additions/porn/wicked.py:129 src/additions/porn/wicked.py:211
+#: src/additions/porn/x4tube.py:245 src/additions/porn/x4tube.py:373
+#: src/additions/porn/xhamster.py:494 src/additions/porn/xhamster.py:622
+#: src/additions/porn/xnxx.py:199 src/additions/porn/xpaja.py:148
+#: src/additions/porn/xvideos.py:238 src/additions/porn/xvideos.py:434
+#: src/additions/porn/youporn.py:316 src/additions/porn/youporn.py:383
+#: src/plugin.py:2142 src/plugin.py:2394 src/plugin.py:3192 src/plugin.py:3211
+#: src/resources/showAsThumb.py:247
 msgid "Page"
 msgstr "Seite"
 
@@ -117,7 +117,7 @@ msgstr "Seite"
 #: mpgz/src/additions/porn/mydirtyhobby.py:94
 #: mpgz/src/additions/porn/pandamovie.py:114
 #: mpgz/src/additions/porn/paradisehill.py:107
-#: mpgz/src/additions/porn/porn00.py:91
+#: mpgz/src/additions/porn/porn00.py:103
 #: mpgz/src/additions/porn/pornfreetv.py:157
 #: mpgz/src/additions/porn/pornfromczech.py:151
 #: mpgz/src/additions/porn/pornrewind.py:101
@@ -126,8 +126,6 @@ msgstr "Seite"
 #: mpgz/src/additions/porn/pornvortexx.py:102
 #: mpgz/src/additions/porn/streammdh.py:131
 #: mpgz/src/additions/porn/streamxxx.py:155
-#: mpgz/src/additions/porn/vidz7.py:101
-#: mpgz/src/additions/porn/x123pandamovie.py:105
 #: mpgz/src/additions/porn/yourpornsexy.py:147
 #: mpgz/src/additions/porn/yourpornsexy.py:209
 #: mpgz/src/additions/porn/yourpornsexy.py:277
@@ -161,7 +159,7 @@ msgstr "Seite"
 #: src/additions/newsdoku/dokustream.py:140 src/additions/newsdoku/wissen.py:64
 #: src/additions/porn/ahme.py:188 src/additions/porn/badoinkvr.py:132
 #: src/additions/porn/badoinkvr.py:206 src/additions/porn/bangbros.py:144
-#: src/additions/porn/beeg.py:147 src/additions/porn/befuck.py:142
+#: src/additions/porn/beeg.py:143 src/additions/porn/befuck.py:142
 #: src/additions/porn/bongacams.py:134 src/additions/porn/brazzers.py:147
 #: src/additions/porn/cam4.py:173 src/additions/porn/chaturbate.py:183
 #: src/additions/porn/cliphunter.py:172 src/additions/porn/cliphunter.py:242
@@ -190,18 +188,18 @@ msgstr "Seite"
 #: src/additions/porn/pornrabbit.py:139 src/additions/porn/porntv.py:292
 #: src/additions/porn/realgfporn.py:162 src/additions/porn/realitykings.py:158
 #: src/additions/porn/redtube.py:185 src/additions/porn/sexu.py:132
-#: src/additions/porn/spankbang.py:173 src/additions/porn/spankwire.py:233
-#: src/additions/porn/sunporno.py:194 src/additions/porn/teamskeet.py:147
-#: src/additions/porn/tnaflix.py:155 src/additions/porn/tube8.py:204
-#: src/additions/porn/tubewolf.py:160 src/additions/porn/updatetube.py:185
-#: src/additions/porn/vintagetube.py:191 src/additions/porn/vintagetube.py:274
-#: src/additions/porn/vporn.py:292 src/additions/porn/wetplace.py:139
-#: src/additions/porn/wicked.py:131 src/additions/porn/wicked.py:213
-#: src/additions/porn/x4tube.py:248 src/additions/porn/x4tube.py:377
-#: src/additions/porn/xhamster.py:496 src/additions/porn/xnxx.py:204
-#: src/additions/porn/xpaja.py:150 src/additions/porn/xvideos.py:241
-#: src/additions/porn/xvideos.py:443 src/additions/porn/youporn.py:318
-#: src/additions/porn/youporn.py:385
+#: src/additions/porn/shesfreaky.py:141 src/additions/porn/spankbang.py:173
+#: src/additions/porn/spankwire.py:233 src/additions/porn/sunporno.py:194
+#: src/additions/porn/teamskeet.py:147 src/additions/porn/tnaflix.py:155
+#: src/additions/porn/tube8.py:204 src/additions/porn/tubewolf.py:160
+#: src/additions/porn/updatetube.py:185 src/additions/porn/vintagetube.py:191
+#: src/additions/porn/vintagetube.py:274 src/additions/porn/vporn.py:292
+#: src/additions/porn/wetplace.py:139 src/additions/porn/wicked.py:131
+#: src/additions/porn/wicked.py:213 src/additions/porn/x4tube.py:248
+#: src/additions/porn/x4tube.py:377 src/additions/porn/xhamster.py:496
+#: src/additions/porn/xnxx.py:204 src/additions/porn/xpaja.py:150
+#: src/additions/porn/xvideos.py:241 src/additions/porn/xvideos.py:443
+#: src/additions/porn/youporn.py:318 src/additions/porn/youporn.py:385
 msgid "Page:"
 msgstr "Seite:"
 
@@ -214,15 +212,13 @@ msgstr "Seite:"
 #: mpgz/src/additions/porn/javdos.py:210 mpgz/src/additions/porn/lfporn.py:122
 #: mpgz/src/additions/porn/pandamovie.py:159
 #: mpgz/src/additions/porn/paradisehill.py:149
-#: mpgz/src/additions/porn/porn00.py:121
+#: mpgz/src/additions/porn/porn00.py:133
 #: mpgz/src/additions/porn/pornfreetv.py:197
 #: mpgz/src/additions/porn/pornfromczech.py:179
 #: mpgz/src/additions/porn/pornrewind.py:130
 #: mpgz/src/additions/porn/pornstreams.py:141
 #: mpgz/src/additions/porn/pornvortexx.py:137
 #: mpgz/src/additions/porn/streamxxx.py:188
-#: mpgz/src/additions/porn/vidz7.py:138
-#: mpgz/src/additions/porn/x123pandamovie.py:143
 #: mpgz/src/additions/useradditions/filmpalast.py:260
 #: mpgz/src/additions/useradditions/filmpalast.py:334
 #: mpgz/src/additions/useradditions/movie4k.py:297
@@ -237,9 +233,9 @@ msgstr "Seite:"
 #: src/additions/porn/porncom.py:693 src/additions/porn/pornhub.py:1004
 #: src/additions/porn/pornhub.py:1029 src/additions/porn/pornoxo.py:215
 #: src/additions/porn/porntv.py:347 src/additions/porn/sexu.py:165
-#: src/additions/porn/spankbang.py:225 src/additions/porn/tube8.py:271
-#: src/additions/porn/xnxx.py:275 src/additions/porn/xpaja.py:182
-#: src/additions/porn/xvideos.py:584
+#: src/additions/porn/shesfreaky.py:175 src/additions/porn/spankbang.py:225
+#: src/additions/porn/tube8.py:271 src/additions/porn/xnxx.py:275
+#: src/additions/porn/xpaja.py:182 src/additions/porn/xvideos.py:584
 msgid "No movies found!"
 msgstr "Keine Filme gefunden!"
 
@@ -251,17 +247,16 @@ msgstr "Keine Filme gefunden!"
 #: mpgz/src/additions/porn/pandamovie.py:220
 #: mpgz/src/additions/porn/pornfreetv.py:263
 #: mpgz/src/additions/porn/pornfromczech.py:242
-#: mpgz/src/additions/porn/pornrewind.py:203
+#: 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/x123pandamovie.py:204
 #: mpgz/src/additions/useradditions/ddl_me.py:562
 #: mpgz/src/additions/useradditions/filmpalast.py:399
 #: mpgz/src/additions/useradditions/flimmerstube.py:173
 #: mpgz/src/additions/useradditions/flimmerstube.py:181
 #: mpgz/src/additions/useradditions/kinoxto.py:827
-#: mpgz/src/additions/useradditions/kinoxto.py:860
-#: mpgz/src/additions/useradditions/kinoxto.py:940
+#: mpgz/src/additions/useradditions/kinoxto.py:862
+#: mpgz/src/additions/useradditions/kinoxto.py:944
 #: mpgz/src/additions/useradditions/serienstream.py:822
 #: mpgz/src/additions/useradditions/watchseries.py:296
 #: src/additions/porn/pornrabbit.py:210
@@ -290,7 +285,7 @@ msgstr "Ähnliche anzeigen"
 #: mpgz/src/additions/porn/pandamovie.py:124
 #: mpgz/src/additions/porn/pandamovie.py:195
 #: mpgz/src/additions/porn/paradisehill.py:128
-#: mpgz/src/additions/porn/porn00.py:104
+#: mpgz/src/additions/porn/porn00.py:116
 #: mpgz/src/additions/porn/pornfreetv.py:34
 #: mpgz/src/additions/porn/pornfreetv.py:98
 #: mpgz/src/additions/porn/pornfreetv.py:154
@@ -308,10 +303,6 @@ msgstr "Ähnliche anzeigen"
 #: 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/vidz7.py:116
-#: mpgz/src/additions/porn/x123pandamovie.py:20
-#: mpgz/src/additions/porn/x123pandamovie.py:115
-#: mpgz/src/additions/porn/x123pandamovie.py:179
 #: mpgz/src/additions/porn/yourpornsexy.py:161
 #: mpgz/src/additions/porn/yourpornsexy.py:222
 #: mpgz/src/additions/porn/yourpornsexy.py:291
@@ -333,16 +324,17 @@ msgstr "Ähnliche anzeigen"
 #: mpgz/src/additions/useradditions/serienstream.py:94
 #: mpgz/src/additions/useradditions/watchseries.py:278
 #: src/additions/fun/chefkoch.py:60 src/additions/fun/chefkoch.py:113
-#: src/additions/fun/e2world.py:98 src/additions/fun/funnyvideoclips_de.py:119
+#: src/additions/fun/e2world.py:98 src/additions/fun/failto.py:79
+#: src/additions/fun/funnyvideoclips_de.py:119
 #: src/additions/fun/gaskrank_tv.py:126 src/additions/fun/gigatv.py:145
 #: src/additions/fun/heisevideo.py:68 src/additions/fun/heisevideo.py:149
 #: src/additions/fun/heisevideo.py:210 src/additions/fun/lachmeister_de.py:150
-#: src/additions/fun/lachschon_de.py:170 src/additions/fun/retrotv.py:80
-#: src/additions/mediatheken/ard.py:458 src/additions/mediatheken/ard.py:657
-#: src/additions/mediatheken/arte.py:183 src/additions/mediatheken/atv.py:60
-#: src/additions/mediatheken/atv.py:118 src/additions/mediatheken/atv.py:133
-#: src/additions/mediatheken/atv.py:170 src/additions/mediatheken/atv.py:211
-#: src/additions/mediatheken/brf.py:115
+#: src/additions/fun/lachschon_de.py:170 src/additions/fun/liveleak.py:108
+#: src/additions/fun/retrotv.py:80 src/additions/mediatheken/ard.py:458
+#: src/additions/mediatheken/ard.py:657 src/additions/mediatheken/arte.py:183
+#: src/additions/mediatheken/atv.py:60 src/additions/mediatheken/atv.py:118
+#: src/additions/mediatheken/atv.py:133 src/additions/mediatheken/atv.py:170
+#: src/additions/mediatheken/atv.py:211 src/additions/mediatheken/brf.py:115
 #: src/additions/mediatheken/dreisat.py:130
 #: src/additions/mediatheken/dreisat.py:254
 #: src/additions/mediatheken/dreisat.py:318
@@ -362,18 +354,18 @@ msgstr "Ähnliche anzeigen"
 #: src/additions/mediatheken/youtube.py:974
 #: 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:585 src/additions/music/mtvdecharts.py:195
-#: src/additions/music/radio.py:311 src/additions/music/shoutcast.py:79
-#: src/additions/music/shoutcast.py:166 src/additions/newsdoku/bild.py:131
+#: src/additions/mediatheken/zdf.py:587 src/additions/music/mtvdecharts.py:195
+#: src/additions/music/radio.py:311 src/additions/music/shoutcast.py:85
+#: src/additions/music/shoutcast.py:214 src/additions/newsdoku/bild.py:131
 #: src/additions/newsdoku/doku_to.py:138
 #: src/additions/newsdoku/dokus4_me.py:164
 #: src/additions/newsdoku/dokustream.py:175 src/additions/newsdoku/focus.py:119
 #: src/additions/newsdoku/urknall.py:73 src/additions/porn/ahme.py:202
 #: src/additions/porn/badoinkvr.py:71 src/additions/porn/badoinkvr.py:145
 #: src/additions/porn/badoinkvr.py:219 src/additions/porn/bangbros.py:157
-#: src/additions/porn/beeg.py:161 src/additions/porn/befuck.py:60
+#: src/additions/porn/beeg.py:157 src/additions/porn/befuck.py:60
 #: src/additions/porn/befuck.py:139 src/additions/porn/bongacams.py:147
-#: src/additions/porn/bongacams.py:204 src/additions/porn/brazzers.py:72
+#: src/additions/porn/bongacams.py:207 src/additions/porn/brazzers.py:72
 #: src/additions/porn/brazzers.py:160 src/additions/porn/cam4.py:79
 #: src/additions/porn/cam4.py:186 src/additions/porn/cam4.py:249
 #: src/additions/porn/camsoda.py:125 src/additions/porn/camsoda.py:205
@@ -407,6 +399,7 @@ msgstr "Ähnliche anzeigen"
 #: src/additions/porn/realgfporn.py:175 src/additions/porn/realitykings.py:73
 #: src/additions/porn/realitykings.py:171 src/additions/porn/redtube.py:206
 #: src/additions/porn/sexu.py:68 src/additions/porn/sexu.py:145
+#: src/additions/porn/shesfreaky.py:72 src/additions/porn/shesfreaky.py:154
 #: 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/teamskeet.py:73
@@ -447,21 +440,21 @@ msgstr "Keine Pornstars gefunden!"
 #: mpgz/src/additions/porn/mydirtyhobby.py:136
 #: mpgz/src/additions/porn/porntrex.py:274
 #: mpgz/src/additions/porn/streammdh.py:160
-#: mpgz/src/additions/porn/yourpornsexy.py:357
+#: mpgz/src/additions/porn/yourpornsexy.py:357 src/additions/fun/failto.py:95
 #: src/additions/fun/funnyvideoclips_de.py:127
 #: src/additions/fun/funnyvideoclips_de.py:171
 #: src/additions/fun/gaskrank_tv.py:134 src/additions/fun/gaskrank_tv.py:158
 #: src/additions/fun/germanytv.py:181 src/additions/fun/heisevideo.py:191
-#: src/additions/fun/lachschon_de.py:223 src/additions/fun/liveleak.py:151
-#: src/additions/fun/twitch.py:286 src/additions/fun/twitch.py:304
-#: src/additions/mediatheken/arte.py:368 src/additions/mediatheken/atv.py:150
-#: src/additions/mediatheken/brf.py:145
+#: src/additions/fun/lachschon_de.py:223 src/additions/fun/liveleak.py:122
+#: src/additions/fun/liveleak.py:154 src/additions/fun/twitch.py:286
+#: src/additions/fun/twitch.py:304 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/spiegeltv.py:194
 #: src/additions/mediatheken/youtube.py:1614 src/additions/newsdoku/bild.py:162
 #: src/additions/porn/ahme.py:217 src/additions/porn/badoinkvr.py:239
-#: src/additions/porn/bangbros.py:183 src/additions/porn/beeg.py:179
+#: src/additions/porn/bangbros.py:183 src/additions/porn/beeg.py:188
 #: src/additions/porn/brazzers.py:180 src/additions/porn/cliphunter.py:271
 #: src/additions/porn/cumlouder.py:493 src/additions/porn/ddfnetwork.py:275
 #: src/additions/porn/digitalplayground.py:190
@@ -520,7 +513,7 @@ 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/paradisehill.py:103
-#: src/additions/mediatheken/ard.py:460 src/additions/music/shoutcast.py:155
+#: src/additions/mediatheken/ard.py:460 src/additions/music/shoutcast.py:203
 #: src/additions/porn/homemoviestube.py:168 src/additions/porn/pinflix.py:166
 #: src/additions/porn/pinflix.py:281 src/additions/porn/porncom.py:193
 #: src/additions/porn/porncom.py:332 src/additions/porn/porncom.py:470
@@ -530,7 +523,7 @@ msgstr "Fehler beim Ausführen von Javascript, bitte an die Entwickler melden."
 #: src/additions/porn/redtube.py:183 src/additions/porn/spankbang.py:169
 #: src/additions/porn/tube8.py:201 src/additions/porn/vporn.py:290
 #: src/additions/porn/x4tube.py:246 src/additions/porn/x4tube.py:374
-#: src/additions/porn/xvideos.py:436 src/plugin.py:1792 src/plugin.py:2817
+#: src/additions/porn/xvideos.py:436 src/plugin.py:1771 src/plugin.py:2796
 msgid "Sort"
 msgstr "Sortieren"
 
@@ -554,7 +547,7 @@ msgstr "Filter"
 
 #: mpgz/src/additions/porn/paradisehill.py:169
 #: mpgz/src/additions/porn/paradisehill.py:183
-#: src/additions/mediatheken/ard.py:631 src/additions/music/shoutcast.py:221
+#: src/additions/mediatheken/ard.py:631 src/additions/music/shoutcast.py:269
 #: src/additions/porn/cumlouder.py:530 src/additions/porn/homemoviestube.py:243
 #: src/additions/porn/naughtyamerica.py:121 src/additions/porn/pinflix.py:222
 #: src/additions/porn/pinflix.py:353 src/additions/porn/porncom.py:257
@@ -577,11 +570,10 @@ msgstr "Filter"
 msgid "Select Action"
 msgstr "Wähle Aktion"
 
-#: mpgz/src/additions/porn/porn00.py:242 mpgz/src/additions/porn/porn00.py:250
-#: mpgz/src/additions/porn/porn00.py:268
+#: mpgz/src/additions/porn/porn00.py:256 mpgz/src/additions/porn/porn00.py:264
+#: mpgz/src/additions/porn/porn00.py:282
 #: mpgz/src/additions/useradditions/filmpalast.py:412
 #: mpgz/src/additions/useradditions/serienstream.py:863
-#: src/additions/porn/beeg.py:101
 msgid "Broken URL parsing, please report to the developers."
 msgstr "Defektes URL Parsing, bitte an die Entwickler melden."
 
@@ -597,12 +589,13 @@ msgstr "Nichts gefunden!"
 #: mpgz/src/additions/useradditions/serienstream.py:156
 #: mpgz/src/additions/useradditions/serienstream.py:158
 #: src/additions/music/radio.py:92 src/additions/music/radio.py:151
-#: src/additions/music/radio.py:153 src/additions/porn/pornhub.py:137
-#: src/additions/porn/pornhub.py:259 src/additions/porn/pornhub.py:261
-#: src/additions/porn/vporn.py:223 src/additions/porn/vporn.py:225
-#: src/additions/porn/youporn.py:77 src/additions/porn/youporn.py:221
-#: src/additions/porn/youporn.py:223 src/plugin.py:525
-#: src/resources/simpleplayer.py:2303
+#: src/additions/music/radio.py:153 src/additions/music/shoutcast.py:73
+#: src/additions/music/shoutcast.py:155 src/additions/music/shoutcast.py:157
+#: src/additions/porn/pornhub.py:137 src/additions/porn/pornhub.py:259
+#: src/additions/porn/pornhub.py:261 src/additions/porn/vporn.py:223
+#: src/additions/porn/vporn.py:225 src/additions/porn/youporn.py:77
+#: src/additions/porn/youporn.py:221 src/additions/porn/youporn.py:223
+#: src/plugin.py:525 src/resources/simpleplayer.py:2294
 msgid "Setup"
 msgstr "Einstellungen"
 
@@ -684,14 +677,14 @@ msgstr "Stream Auswahl"
 
 #: mpgz/src/additions/useradditions/kinoxto.py:423
 #: mpgz/src/additions/useradditions/kinoxto.py:521
-#: mpgz/src/additions/useradditions/kinoxto.py:967
+#: mpgz/src/additions/useradditions/kinoxto.py:971
 #: mpgz/src/additions/useradditions/serienstream.py:210
 msgid "Add to Watchlist"
 msgstr "Zur Watchlist hinzufügen"
 
 #: mpgz/src/additions/useradditions/kinoxto.py:497
 #: mpgz/src/additions/useradditions/kinoxto.py:568
-#: mpgz/src/additions/useradditions/kinoxto.py:1034
+#: mpgz/src/additions/useradditions/kinoxto.py:1038
 #: mpgz/src/additions/useradditions/serienstream.py:295
 msgid "Selection was added to the watchlist."
 msgstr "Auswahl wurde zur Watchlist hinzugefügt."
@@ -749,8 +742,8 @@ msgstr "Keine Episoden gefunden!"
 #: mpgz/src/additions/useradditions/kinoxto.py:699
 #: mpgz/src/additions/useradditions/serienstream.py:442
 #: src/additions/fun/twitch.py:133 src/additions/mediatheken/youtube.py:863
-#: src/additions/music/radio.py:430 src/additions/porn/x2search4porn.py:80
-#: src/resources/simpleplayer.py:695
+#: src/additions/music/radio.py:430 src/additions/music/shoutcast.py:327
+#: src/additions/porn/x2search4porn.py:80 src/resources/simpleplayer.py:707
 msgid "Delete"
 msgstr "Löschen"
 
@@ -759,14 +752,14 @@ msgstr "Löschen"
 msgid "Watchlist is currently empty"
 msgstr "Watchlist ist derzeit leer"
 
-#: mpgz/src/additions/useradditions/kinoxto.py:907
+#: mpgz/src/additions/useradditions/kinoxto.py:909
 #: mpgz/src/additions/useradditions/movie4k.py:740
 msgid "Parts Selection"
 msgstr "Part Auswahl"
 
-#: mpgz/src/additions/useradditions/movie4k.py:191 src/plugin.py:1205
-#: src/plugin.py:1219 src/plugin.py:1349 src/plugin.py:2274 src/plugin.py:2452
-#: src/plugin.py:2520 src/plugin.py:3166 src/plugin.py:3312 src/plugin.py:3380
+#: mpgz/src/additions/useradditions/movie4k.py:191 src/plugin.py:1184
+#: src/plugin.py:1198 src/plugin.py:1328 src/plugin.py:2253 src/plugin.py:2431
+#: src/plugin.py:2499 src/plugin.py:3145 src/plugin.py:3291 src/plugin.py:3359
 msgid "Please enter the correct PIN"
 msgstr "Bitte die korrekte PIN eingeben"
 
@@ -778,7 +771,7 @@ msgstr "PIN eingeben"
 #: mpgz/src/additions/useradditions/movie4k.py:722
 #: mpgz/src/additions/useradditions/movie4k.py:810
 #: mpgz/src/additions/useradditions/movie4k.py:814
-#: src/additions/mediatheken/kindertube.py:215 src/resources/streams.py:747
+#: src/additions/mediatheken/kindertube.py:215 src/resources/streams.py:749
 msgid "Stream not found, try another Stream Hoster."
 msgstr "Stream nicht gefunden, versuche einen anderen Stream Hoster."
 
@@ -867,14 +860,14 @@ msgid "No events found!"
 msgstr "Keine Ereignisse gefunden!"
 
 #: src/additions/fun/germanytv.py:56 src/additions/fun/germanytv.py:98
-#: src/plugin.py:894 src/plugin.py:1798 src/plugin.py:2823
+#: src/plugin.py:873 src/plugin.py:1777 src/plugin.py:2802
 msgid "Menu"
 msgstr "Menü"
 
 #: src/additions/fun/germanytv.py:100 src/additions/fun/germanytv.py:160
-#: src/plugin.py:892 src/plugin.py:1796 src/plugin.py:2821
+#: src/plugin.py:871 src/plugin.py:1775 src/plugin.py:2800
 #: src/resources/showAsThumb.py:246 src/resources/simplelist.py:118
-#: src/resources/simplelist.py:637 src/resources/simpleplayer.py:703
+#: src/resources/simplelist.py:637 src/resources/simpleplayer.py:715
 msgid "Exit"
 msgstr "Beenden"
 
@@ -898,6 +891,7 @@ msgid "any"
 msgstr "alle"
 
 #: src/additions/fun/twitch.py:131 src/additions/music/radio.py:297
+#: src/additions/music/shoutcast.py:202
 msgid "Add to Favorites"
 msgstr "Zu Favoriten hinzufügen"
 
@@ -916,8 +910,8 @@ msgid "Language"
 msgstr "Sprache"
 
 #: src/additions/fun/twitch.py:213 src/additions/music/radio.py:456
-#: src/resources/simplelist.py:186 src/resources/simplelist.py:339
-#: src/resources/simplelist.py:611
+#: src/additions/music/shoutcast.py:353 src/resources/simplelist.py:186
+#: src/resources/simplelist.py:339 src/resources/simplelist.py:611
 msgid "No entries found!"
 msgstr "Keine Einträge gefunden!"
 
@@ -943,6 +937,7 @@ msgid "Select language"
 msgstr "Wähle Sprache"
 
 #: src/additions/fun/twitch.py:395 src/additions/music/radio.py:407
+#: src/additions/music/shoutcast.py:304
 msgid "Selection was added to the favorites."
 msgstr "Auswahl wurde zu den Favoriten hinzugefügt."
 
@@ -955,8 +950,8 @@ msgstr "Derzeit ist kein Live-Stream auf diesem Kanal verfügbar."
 #: src/additions/mediatheken/orf.py:170
 #: src/additions/mediatheken/spiegeltv.py:60 src/additions/music/radio.py:91
 #: src/additions/music/radio.py:190 src/additions/music/radio.py:384
-#: src/additions/music/radio.py:494 src/additions/music/shoutcast.py:68
-#: src/additions/music/shoutcast.py:215 src/resources/tmdb.py:141
+#: src/additions/music/radio.py:494 src/additions/music/shoutcast.py:72
+#: src/additions/music/shoutcast.py:263 src/resources/tmdb.py:141
 msgid "Genre:"
 msgstr "Genre:"
 
@@ -992,7 +987,7 @@ msgstr "Dieses Event ist noch nicht verfügbar."
 
 #: src/additions/mediatheken/seventv.py:64
 #: src/additions/mediatheken/tvnow.py:63 src/additions/music/radio.py:296
-#: src/additions/music/shoutcast.py:154
+#: src/additions/music/shoutcast.py:201
 msgid "Stations:"
 msgstr "Sender:"
 
@@ -1328,7 +1323,7 @@ msgstr "Mein Kanal"
 #: src/additions/mediatheken/youtube.py:192
 #: src/additions/mediatheken/youtube.py:738
 #: src/additions/mediatheken/youtube.py:821 src/additions/music/radio.py:103
-#: src/additions/music/radio.py:124
+#: src/additions/music/radio.py:124 src/additions/music/shoutcast.py:105
 msgid "Favorites"
 msgstr "Favoriten"
 
@@ -1370,10 +1365,10 @@ msgid "News"
 msgstr "Nachrichten"
 
 #: src/additions/mediatheken/youtube.py:206
-#: src/additions/mediatheken/youtube.py:476 src/plugin.py:869
-#: src/plugin.py:1058 src/plugin.py:1396 src/plugin.py:1770 src/plugin.py:1903
-#: src/plugin.py:1934 src/plugin.py:2554 src/plugin.py:2795 src/plugin.py:2910
-#: src/plugin.py:2941 src/plugin.py:3414
+#: src/additions/mediatheken/youtube.py:476 src/plugin.py:848
+#: src/plugin.py:1037 src/plugin.py:1375 src/plugin.py:1749 src/plugin.py:1882
+#: src/plugin.py:1913 src/plugin.py:2533 src/plugin.py:2774 src/plugin.py:2889
+#: src/plugin.py:2920 src/plugin.py:3393
 msgid "Music"
 msgstr "Musik"
 
@@ -1383,10 +1378,10 @@ msgid "Gaming"
 msgstr "Gaming"
 
 #: src/additions/mediatheken/youtube.py:208
-#: src/additions/mediatheken/youtube.py:476 src/plugin.py:870
-#: src/plugin.py:1060 src/plugin.py:1396 src/plugin.py:1771 src/plugin.py:1905
-#: src/plugin.py:1936 src/plugin.py:2554 src/plugin.py:2796 src/plugin.py:2912
-#: src/plugin.py:2943 src/plugin.py:3414
+#: src/additions/mediatheken/youtube.py:476 src/plugin.py:849
+#: src/plugin.py:1039 src/plugin.py:1375 src/plugin.py:1750 src/plugin.py:1884
+#: src/plugin.py:1915 src/plugin.py:2533 src/plugin.py:2775 src/plugin.py:2891
+#: src/plugin.py:2922 src/plugin.py:3393
 msgid "Sports"
 msgstr "Sport"
 
@@ -1595,7 +1590,7 @@ msgstr "Mit der 'Grünen' Taste wird die Benutzerdatei:"
 msgid "'%s' is loaded."
 msgstr "'%s' geladen."
 
-#: src/additions/music/radio.py:158
+#: src/additions/music/radio.py:158 src/additions/music/shoutcast.py:162
 msgid "Sort Favorites:"
 msgstr "Sortiere Favoriten:"
 
@@ -1604,16 +1599,16 @@ msgid "Local Stations"
 msgstr "Lokale Sender"
 
 #: src/additions/music/radio.py:201 src/additions/music/radio.py:219
-#: src/additions/music/shoutcast.py:97
+#: src/additions/music/shoutcast.py:103
 msgid "Top Stations"
 msgstr "Top Sender"
 
 #: src/additions/music/radio.py:202 src/additions/music/radio.py:219
-#: src/additions/music/shoutcast.py:91
+#: src/additions/music/shoutcast.py:97
 msgid "All Stations"
 msgstr "Alle Sender"
 
-#: src/additions/music/radio.py:203 src/additions/music/shoutcast.py:220
+#: src/additions/music/radio.py:203 src/additions/music/shoutcast.py:268
 msgid "Genre"
 msgstr "Genre"
 
@@ -1635,35 +1630,35 @@ msgstr "Stadt"
 msgid "Recommended Stations"
 msgstr "Empfohlene Sender"
 
-#: src/additions/music/radio.py:344 src/additions/music/shoutcast.py:204
+#: src/additions/music/radio.py:344 src/additions/music/shoutcast.py:252
 msgid "No stations found!"
 msgstr "Keine Sender gefunden!"
 
-#: src/additions/music/radio.py:429
+#: src/additions/music/radio.py:429 src/additions/music/shoutcast.py:326
 msgid "Favorites:"
 msgstr "Favoriten:"
 
-#: src/additions/music/shoutcast.py:98 src/additions/music/shoutcast.py:127
+#: src/additions/music/shoutcast.py:104 src/additions/music/shoutcast.py:136
 msgid "Search"
 msgstr "Suche"
 
-#: src/additions/music/shoutcast.py:101
+#: src/additions/music/shoutcast.py:108
 msgid "No genres found!"
 msgstr "Keine Genres gefunden!"
 
-#: src/additions/music/shoutcast.py:215 src/additions/music/shoutcast.py:220
+#: src/additions/music/shoutcast.py:263 src/additions/music/shoutcast.py:268
 msgid "Listeners"
 msgstr "Zuhörer"
 
-#: src/additions/music/shoutcast.py:215 src/additions/music/shoutcast.py:220
+#: src/additions/music/shoutcast.py:263 src/additions/music/shoutcast.py:268
 msgid "Bitrate"
 msgstr "Bitrate"
 
-#: src/additions/music/shoutcast.py:215 src/additions/music/shoutcast.py:220
+#: src/additions/music/shoutcast.py:263 src/additions/music/shoutcast.py:268
 msgid "Format"
 msgstr "Format"
 
-#: src/additions/music/shoutcast.py:220
+#: src/additions/music/shoutcast.py:268
 msgid "Station"
 msgstr "Sender"
 
@@ -1691,19 +1686,20 @@ msgid "%s only works with enabled MP premiumize.me option (MP Setup)!"
 msgstr ""
 "%s funktioniert nur mit aktivierter premiumize.me Einstellung (MP Setup)!"
 
-#: src/additions/porn/beeg.py:209 src/additions/porn/porncom.py:768
+#: src/additions/porn/beeg.py:235 src/additions/porn/porncom.py:768
 #: src/additions/porn/tube8.py:328 src/additions/porn/xnxx.py:350
 #: src/additions/porn/xvideos.py:697
 msgid "Stream not found"
 msgstr "Stream nicht gefunden"
 
-#: src/additions/porn/bongacams.py:183 src/additions/porn/cam4.py:223
+#: src/additions/porn/bongacams.py:186 src/additions/porn/cam4.py:223
 #: src/additions/porn/camsoda.py:183 src/additions/porn/chaturbate.py:227
 msgid "No livestreams found!"
 msgstr "Keine Livestreams gefunden!"
 
-#: src/additions/porn/bongacams.py:223 src/additions/porn/cam4.py:259
-#: src/additions/porn/camsoda.py:225 src/additions/porn/chaturbate.py:269
+#: src/additions/porn/bongacams.py:226 src/additions/porn/bongacams.py:253
+#: src/additions/porn/cam4.py:259 src/additions/porn/camsoda.py:225
+#: src/additions/porn/chaturbate.py:269
 msgid "Cam is currently offline."
 msgstr "Cam ist zur Zeit offline."
 
@@ -1914,7 +1910,7 @@ msgstr "Film am Ende pausieren"
 
 #: src/plugin.py:261 src/plugin.py:280 src/resources/simplelist.py:508
 #: src/resources/simplelist.py:683 src/resources/simplelist.py:707
-#: src/resources/simpleplayer.py:1784 src/resources/simpleplayer.py:1790
+#: src/resources/simpleplayer.py:1785 src/resources/simpleplayer.py:1791
 msgid "No"
 msgstr "Nein"
 
@@ -2002,236 +1998,236 @@ msgstr "Hellgrün"
 msgid "premiumize.me is not activated."
 msgstr "premiumize.me ist nicht aktiviert."
 
-#: src/plugin.py:565 src/resources/simpleplayer.py:2229
+#: src/plugin.py:559 src/resources/simpleplayer.py:2222
 msgid "GENERAL"
 msgstr "ALLGEMEIN"
 
-#: src/plugin.py:567
+#: src/plugin.py:560
 msgid "Automatic Update Check:"
 msgstr "Automatische Updateüberprüfung:"
 
-#: src/plugin.py:568
+#: src/plugin.py:561
 msgid "Mainview Style:"
 msgstr "Hauptansicht Stil:"
 
-#: src/plugin.py:570
+#: src/plugin.py:563
 msgid "Wall Mode:"
 msgstr "Wall Modus:"
 
-#: src/plugin.py:572
+#: src/plugin.py:565
 msgid "Wall 2.0 Mode:"
 msgstr "Wall 2.0 Modus:"
 
-#: src/plugin.py:574
+#: src/plugin.py:567
 msgid "Page Display Style:"
 msgstr "Seitenanzeigestil:"
 
-#: src/plugin.py:575
+#: src/plugin.py:568
 msgid "Skin:"
 msgstr "Skin:"
 
-#: src/plugin.py:577
+#: src/plugin.py:570
 msgid "Disable Background-TV:"
 msgstr "Background-TV deaktivieren:"
 
-#: src/plugin.py:579
+#: src/plugin.py:572
 msgid "Restore last service:"
 msgstr "Letzten Kanal wiederherstellen:"
 
-#: src/plugin.py:580
+#: src/plugin.py:573
 msgid "Disable Mini-TV:"
 msgstr "Mini-TV deaktivieren:"
 
-#: src/plugin.py:581
+#: src/plugin.py:574
 msgid "Enable search suggestions:"
 msgstr "Suchvorschläge aktivieren:"
 
-#: src/plugin.py:583
+#: src/plugin.py:576
 msgid "Label animation"
 msgstr "Label Animation"
 
-#: src/plugin.py:585
+#: src/plugin.py:578
 msgid "YOUTH PROTECTION"
 msgstr "JUGENDSCHUTZ"
 
-#: src/plugin.py:587
+#: src/plugin.py:579
 msgid "Setup PIN:"
 msgstr "Setup-PIN:"
 
-#: src/plugin.py:588
+#: src/plugin.py:580
 msgid "Setup PIN Query:"
 msgstr "Setup-PIN Abfrage:"
 
-#: src/plugin.py:589
+#: src/plugin.py:581
 msgid "Kids PIN Query:"
 msgstr "Kinder-PIN Abfrage:"
 
-#: src/plugin.py:590
+#: src/plugin.py:582
 msgid "Adult PIN:"
 msgstr "Erwachsenen-PIN:"
 
-#: src/plugin.py:591
+#: src/plugin.py:583
 msgid "Adult PIN Query:"
 msgstr "Erwachsenen-PIN Abfrage:"
 
-#: src/plugin.py:592
+#: src/plugin.py:584
 msgid "Remember Adult PIN:"
 msgstr "Erwachsenen-PIN merken:"
 
-#: src/plugin.py:593
+#: src/plugin.py:585
 msgid "Auto hide adult section on startup:"
 msgstr "Erwachsenenbereich beim Start automatisch ausblenden:"
 
-#: src/plugin.py:595
+#: src/plugin.py:587
 msgid "OTHER"
 msgstr "SONSTIGES"
 
-#: src/plugin.py:601
+#: src/plugin.py:592
 msgid "Use HLS-Player Proxy:"
 msgstr "HLS-Player Proxy verwenden:"
 
-#: src/plugin.py:602
+#: src/plugin.py:593
 msgid "HLSP-HTTP-Proxy Host or IP:"
 msgstr "HLSP-HTTP-Proxy Host oder IP:"
 
-#: src/plugin.py:603
+#: src/plugin.py:594
 msgid "HLSP-Proxy Port:"
 msgstr "HLSP-Proxy Port:"
 
-#: src/plugin.py:604
+#: src/plugin.py:595
 msgid "HLSP-Proxy username:"
 msgstr "HLSP-Proxy Username:"
 
-#: src/plugin.py:605
+#: src/plugin.py:596
 msgid "HLSP-Proxy password:"
 msgstr "HLSP-Proxy Passwort:"
 
-#: src/plugin.py:606
+#: src/plugin.py:597
 msgid "Temporary Cachepath:"
 msgstr "Temporäres Cacheverzeichnis:"
 
-#: src/plugin.py:607
+#: src/plugin.py:598
 msgid "Icon Cachepath:"
 msgstr "Icon Cacheverzeichnis:"
 
-#: src/plugin.py:608 src/resources/simpleplayer.py:2233
+#: src/plugin.py:599 src/resources/simpleplayer.py:2225
 msgid "Videoquality:"
 msgstr "Videoqualität:"
 
-#: src/plugin.py:609
+#: src/plugin.py:600
 msgid "Watchlist/Playlist/Userchan path:"
 msgstr "Watchlist/Playlist/Userchan Verzeichnis:"
 
-#: src/plugin.py:611 src/resources/simpleplayer.py:2244
+#: src/plugin.py:602 src/resources/simpleplayer.py:2236
 msgid "YOUTUBE"
 msgstr "YOUTUBE"
 
-#: src/plugin.py:613 src/resources/simpleplayer.py:2245
+#: src/plugin.py:603 src/resources/simpleplayer.py:2237
 msgid "Highest resolution for playback:"
 msgstr "Höchste Auflösung für die Wiedergabe:"
 
-#: src/plugin.py:614 src/resources/simpleplayer.py:2246
+#: src/plugin.py:604 src/resources/simpleplayer.py:2238
 msgid "Enable DASH format (no seeking possible):"
 msgstr "DASH Format aktivieren (kein Spulen möglich):"
 
-#: src/plugin.py:616 src/resources/simpleplayer.py:2248
+#: src/plugin.py:606 src/resources/simpleplayer.py:2240
 msgid "Use DASH format for 480p:"
 msgstr "DASH Format verwenden für 480p:"
 
-#: src/plugin.py:617 src/resources/simpleplayer.py:2249
+#: src/plugin.py:607 src/resources/simpleplayer.py:2241
 msgid "Use DASH format for 720p:"
 msgstr "DASH Format verwenden für 720p:"
 
-#: src/plugin.py:618 src/resources/simpleplayer.py:2250
+#: src/plugin.py:608 src/resources/simpleplayer.py:2242
 msgid "Enable VP9 codec (required for resolutions >1080p):"
 msgstr "VP9 Codec aktivieren (erforderlich für Auflösungen >1080p):"
 
-#: src/plugin.py:620 src/resources/simpleplayer.py:2252
+#: src/plugin.py:610 src/resources/simpleplayer.py:2244
 msgid "Enable VP9 HDR (only for resolutions 720p and higher):"
 msgstr "VP9 HDR aktivieren (nur für Auflösungen ab 720p):"
 
-#: src/plugin.py:622 src/resources/simpleplayer.py:2254
+#: src/plugin.py:612 src/resources/simpleplayer.py:2246
 msgid "Enable Opus codec:"
 msgstr "Opus Codec aktivieren:"
 
-#: src/plugin.py:623
+#: src/plugin.py:613
 msgid "Show USER-Channels Help:"
 msgstr "Zeige Hilfe für Benutzer-Kanäle:"
 
-#: src/plugin.py:624
+#: src/plugin.py:614
 msgid "Use Proxy:"
 msgstr "Verwende Proxy:"
 
-#: src/plugin.py:626
+#: src/plugin.py:616
 msgid "HTTP-Proxy Host or IP:"
 msgstr "HTTP-Proxy Host oder IP:"
 
-#: src/plugin.py:627
+#: src/plugin.py:617
 msgid "HTTP-Proxy Port:"
 msgstr "HTTP-Proxy Port:"
 
-#: src/plugin.py:628
+#: src/plugin.py:618
 msgid "HTTP-Proxy username:"
 msgstr "HTTP-Proxy Username:"
 
-#: src/plugin.py:629
+#: src/plugin.py:619
 msgid "HTTP-Proxy password:"
 msgstr "HTTP-Proxy Passwort:"
 
-#: src/plugin.py:633
+#: src/plugin.py:622
 msgid "Activate premiumize.me:"
 msgstr "premiumize.me aktivieren:"
 
-#: src/plugin.py:635
+#: src/plugin.py:624
 msgid "API-Key:"
 msgstr ""
 
-#: src/plugin.py:639
+#: src/plugin.py:627
 msgid "Activate Real-Debrid.com:"
 msgstr "Real-Debrid.com aktivieren:"
 
-#: src/plugin.py:644
+#: src/plugin.py:631
 msgid "Streammarkercolor:"
 msgstr "Streammarkerfarbe:"
 
-#: src/plugin.py:682
+#: src/plugin.py:669
 msgid "LIBRARIES"
 msgstr "MEDIATHEKEN"
 
-#: src/plugin.py:686 src/plugin.py:693 src/plugin.py:700 src/plugin.py:707
-#: src/plugin.py:714 src/plugin.py:722 src/plugin.py:733
+#: src/plugin.py:672 src/plugin.py:678 src/plugin.py:684 src/plugin.py:690
+#: src/plugin.py:696 src/plugin.py:703 src/plugin.py:713
 msgid "Show "
 msgstr "Zeige "
 
-#: src/plugin.py:689
+#: src/plugin.py:675
 msgid "NEWS & DOCUMENTARY"
 msgstr "NACHRICHTEN & DOKUS"
 
-#: src/plugin.py:696
+#: src/plugin.py:681
 msgid "TECH & FUN"
 msgstr "TECHNIK & SPASS"
 
-#: src/plugin.py:703
+#: src/plugin.py:687
 msgid "SPORTS"
 msgstr "SPORT"
 
-#: src/plugin.py:710
+#: src/plugin.py:693
 msgid "MUSIC"
 msgstr "MUSIK"
 
-#: src/plugin.py:718
+#: src/plugin.py:700
 msgid "PORN"
 msgstr "PORNO"
 
-#: src/plugin.py:729
+#: src/plugin.py:710
 msgid "USER-ADDITIONS"
 msgstr "USER-ERWEITERUNGEN"
 
-#: src/plugin.py:740
+#: src/plugin.py:719
 msgid "Activate User-additions:"
 msgstr "User-Erweiterungen aktivieren:"
 
-#: src/plugin.py:783
+#: src/plugin.py:762
 #, python-format
 msgid ""
 "Some of the plugins may not be legally used in your country!\n"
@@ -2247,93 +2243,93 @@ msgstr ""
 "\n"
 "%s"
 
-#: src/plugin.py:798
+#: src/plugin.py:777
 msgid "Real-Debrid.com is not activated."
 msgstr "Real-Debrid.com is not activated."
 
-#: src/plugin.py:806
+#: src/plugin.py:785
 msgid "Please enter the correct code"
 msgstr "Bitte den korrekten Code eingeben"
 
-#: src/plugin.py:806
+#: src/plugin.py:785
 msgid "Enter code"
 msgstr "Code eingeben"
 
-#: src/plugin.py:866 src/plugin.py:1048 src/plugin.py:1396 src/plugin.py:1767
-#: src/plugin.py:1893 src/plugin.py:1924 src/plugin.py:2554 src/plugin.py:2792
-#: src/plugin.py:2900 src/plugin.py:2931 src/plugin.py:3414
+#: src/plugin.py:845 src/plugin.py:1027 src/plugin.py:1375 src/plugin.py:1746
+#: src/plugin.py:1872 src/plugin.py:1903 src/plugin.py:2533 src/plugin.py:2771
+#: src/plugin.py:2879 src/plugin.py:2910 src/plugin.py:3393
 msgid "ALL"
 msgstr "ALLE"
 
-#: src/plugin.py:867 src/plugin.py:1050 src/plugin.py:1396 src/plugin.py:1768
-#: src/plugin.py:1895 src/plugin.py:1926 src/plugin.py:2554 src/plugin.py:2793
-#: src/plugin.py:2902 src/plugin.py:2933 src/plugin.py:3414
+#: src/plugin.py:846 src/plugin.py:1029 src/plugin.py:1375 src/plugin.py:1747
+#: src/plugin.py:1874 src/plugin.py:1905 src/plugin.py:2533 src/plugin.py:2772
+#: src/plugin.py:2881 src/plugin.py:2912 src/plugin.py:3393
 msgid "Libraries"
 msgstr "Mediatheken"
 
-#: src/plugin.py:868 src/plugin.py:1054 src/plugin.py:1396 src/plugin.py:1769
-#: src/plugin.py:1899 src/plugin.py:1930 src/plugin.py:2554 src/plugin.py:2794
-#: src/plugin.py:2906 src/plugin.py:2937 src/plugin.py:3414
+#: src/plugin.py:847 src/plugin.py:1033 src/plugin.py:1375 src/plugin.py:1748
+#: src/plugin.py:1878 src/plugin.py:1909 src/plugin.py:2533 src/plugin.py:2773
+#: src/plugin.py:2885 src/plugin.py:2916 src/plugin.py:3393
 msgid "Tech & Fun"
 msgstr "Technik & Spaß"
 
-#: src/plugin.py:871 src/plugin.py:1056 src/plugin.py:1396 src/plugin.py:1772
-#: src/plugin.py:1901 src/plugin.py:1932 src/plugin.py:2554 src/plugin.py:2797
-#: src/plugin.py:2908 src/plugin.py:2939 src/plugin.py:3414
+#: src/plugin.py:850 src/plugin.py:1035 src/plugin.py:1375 src/plugin.py:1751
+#: src/plugin.py:1880 src/plugin.py:1911 src/plugin.py:2533 src/plugin.py:2776
+#: src/plugin.py:2887 src/plugin.py:2918 src/plugin.py:3393
 msgid "News & Documentary"
 msgstr "Nachrichten & Dokus"
 
-#: src/plugin.py:872 src/plugin.py:1062 src/plugin.py:1391 src/plugin.py:1773
-#: src/plugin.py:1907 src/plugin.py:1938 src/plugin.py:2549 src/plugin.py:2798
-#: src/plugin.py:2914 src/plugin.py:2945 src/plugin.py:3409
+#: src/plugin.py:851 src/plugin.py:1041 src/plugin.py:1370 src/plugin.py:1752
+#: src/plugin.py:1886 src/plugin.py:1917 src/plugin.py:2528 src/plugin.py:2777
+#: src/plugin.py:2893 src/plugin.py:2924 src/plugin.py:3388
 msgid "Porn"
 msgstr "Porno"
 
-#: src/plugin.py:873 src/plugin.py:1052 src/plugin.py:1395 src/plugin.py:1774
-#: src/plugin.py:1897 src/plugin.py:1928 src/plugin.py:2553 src/plugin.py:2799
-#: src/plugin.py:2904 src/plugin.py:2935 src/plugin.py:3413
+#: src/plugin.py:852 src/plugin.py:1031 src/plugin.py:1374 src/plugin.py:1753
+#: src/plugin.py:1876 src/plugin.py:1907 src/plugin.py:2532 src/plugin.py:2778
+#: src/plugin.py:2883 src/plugin.py:2914 src/plugin.py:3392
 msgid "User-additions"
 msgstr "User-Erweiterungen"
 
-#: src/plugin.py:876 src/plugin.py:1777 src/plugin.py:2802
+#: src/plugin.py:855 src/plugin.py:1756 src/plugin.py:2781
 msgid "Change filter"
 msgstr "Filter wechseln"
 
-#: src/plugin.py:877 src/plugin.py:1780 src/plugin.py:2805
+#: src/plugin.py:856 src/plugin.py:1759 src/plugin.py:2784
 msgid "Open SimpleList"
 msgstr "SimpleList öffnen"
 
-#: src/plugin.py:878 src/plugin.py:1781 src/plugin.py:2806
+#: src/plugin.py:857 src/plugin.py:1760 src/plugin.py:2785
 msgid "Open selected Plugin"
 msgstr "Ausgewähltes Plugin öffnen"
 
-#: src/plugin.py:879 src/plugin.py:1782 src/plugin.py:2807
+#: src/plugin.py:858 src/plugin.py:1761 src/plugin.py:2786
 msgid "Exit MediaPortal"
 msgstr "MediaPortal beenden"
 
-#: src/plugin.py:880 src/plugin.py:1785 src/plugin.py:2810
+#: src/plugin.py:859 src/plugin.py:1764 src/plugin.py:2789
 msgid "MediaPortal Setup"
 msgstr "MediaPortal Setup"
 
-#: src/plugin.py:893 src/plugin.py:1797 src/plugin.py:2822
+#: src/plugin.py:872 src/plugin.py:1776 src/plugin.py:2801
 msgid "Help"
 msgstr "Hilfe"
 
-#: src/plugin.py:1205 src/plugin.py:1349 src/plugin.py:2274 src/plugin.py:2520
-#: src/plugin.py:3166 src/plugin.py:3380
+#: src/plugin.py:1184 src/plugin.py:1328 src/plugin.py:2253 src/plugin.py:2499
+#: src/plugin.py:3145 src/plugin.py:3359
 msgid "Enter adult PIN"
 msgstr "Erwachsenen-PIN eingeben"
 
-#: src/plugin.py:1219 src/plugin.py:2452 src/plugin.py:3312
+#: src/plugin.py:1198 src/plugin.py:2431 src/plugin.py:3291
 msgid "Enter setup PIN"
 msgstr "Setup-PIN eingeben"
 
-#: src/plugin.py:1259 src/plugin.py:2182 src/plugin.py:3071
+#: src/plugin.py:1238 src/plugin.py:2161 src/plugin.py:3050
 msgid "No connection to the Internet available."
 msgstr "Keine Verbindung zum Internet vorhanden."
 
-#: src/plugin.py:1286 src/plugin.py:1325 src/plugin.py:2211 src/plugin.py:2250
-#: src/plugin.py:3103 src/plugin.py:3142
+#: src/plugin.py:1265 src/plugin.py:1304 src/plugin.py:2190 src/plugin.py:2229
+#: src/plugin.py:3082 src/plugin.py:3121
 #, python-format
 msgid ""
 "This Plugin has been marked as \"not working\" by the developers.\n"
@@ -2352,8 +2348,8 @@ msgstr ""
 "Falls jemand anderes bereit ist einen Fix für dieses Plugin zur Verfügung zu "
 "stellen dann nehmt bitte Kontakt mit uns auf."
 
-#: src/plugin.py:1288 src/plugin.py:1327 src/plugin.py:2213 src/plugin.py:2252
-#: src/plugin.py:3105 src/plugin.py:3144
+#: src/plugin.py:1267 src/plugin.py:1306 src/plugin.py:2192 src/plugin.py:2231
+#: src/plugin.py:3084 src/plugin.py:3123
 #, python-format
 msgid ""
 "This Plugin has been marked as \"not working\" by the developers.\n"
@@ -2366,39 +2362,39 @@ msgstr ""
 "Aktueller Entwickler-Status dieses Plugins ist:\n"
 "\"%s\""
 
-#: src/plugin.py:1397 src/plugin.py:2555 src/plugin.py:3415
+#: src/plugin.py:1376 src/plugin.py:2534 src/plugin.py:3394
 msgid "Select Filter"
 msgstr "Wähle Filter"
 
-#: src/plugin.py:1449
+#: src/plugin.py:1428
 msgid "Userdefined Plugin sorting"
 msgstr "Benutzerdefinierte Plugin-Sortierung"
 
-#: src/plugin.py:1778 src/plugin.py:2803
+#: src/plugin.py:1757 src/plugin.py:2782
 msgid "Change sort order"
 msgstr "Sortierreihenfolge ändern"
 
-#: src/plugin.py:1779 src/plugin.py:2804
+#: src/plugin.py:1758 src/plugin.py:2783
 msgid "Manual sorting"
 msgstr "Manuelle Sortierung"
 
-#: src/plugin.py:1783 src/plugin.py:2808
+#: src/plugin.py:1762 src/plugin.py:2787
 msgid "Next page"
 msgstr "Nächste Seite"
 
-#: src/plugin.py:1784 src/plugin.py:2809
+#: src/plugin.py:1763 src/plugin.py:2788
 msgid "Previous page"
 msgstr "Vorherige Seite"
 
-#: src/plugin.py:1794 src/plugin.py:2819
+#: src/plugin.py:1773 src/plugin.py:2798
 msgid "CH+"
 msgstr "CH+"
 
-#: src/plugin.py:1795 src/plugin.py:2820
+#: src/plugin.py:1774 src/plugin.py:2799
 msgid "CH-"
 msgstr "CH-"
 
-#: src/plugin.py:1866 src/plugin.py:2872
+#: src/plugin.py:1845 src/plugin.py:2851
 msgid "Ordering is only possible with filter \"ALL\"."
 msgstr "Sortieren ist nur mit dem Filter \"ALLE\" möglich."
 
@@ -2457,80 +2453,88 @@ msgid "IP address not authorized. Visit %s/pair to pair your IP."
 msgstr ""
 "IP-Adresse nicht autorisiert. Besuchen Sie %s/pair um Ihre IP zu koppeln."
 
-#: src/resources/imports.py:88 src/resources/messageboxext.py:66
+#: src/resources/imports.py:165 src/resources/messageboxext.py:66
 #: src/resources/messageboxext.py:68
 msgid "no"
 msgstr "Nein"
 
-#: src/resources/imports.py:88 src/resources/messageboxext.py:66
+#: src/resources/imports.py:165 src/resources/messageboxext.py:66
 #: src/resources/messageboxext.py:68
 msgid "yes"
 msgstr "Ja"
 
-#: src/resources/keyboardext.py:84
+#: src/resources/keyboardext.py:85
 msgid "Move cursor left"
 msgstr "Cursor nach links bewegen"
 
-#: src/resources/keyboardext.py:85
+#: src/resources/keyboardext.py:86
 msgid "Move cursor right"
 msgstr "Curosr nach rechts bewegen"
 
-#: src/resources/keyboardext.py:89
+#: src/resources/keyboardext.py:90
 msgid "Select key"
 msgstr "Taste auswählen"
 
-#: src/resources/keyboardext.py:90
+#: src/resources/keyboardext.py:91
 msgid "Cancel"
 msgstr "Abbrechen"
 
-#: src/resources/keyboardext.py:94
+#: src/resources/keyboardext.py:95
 msgid "Delete (left of the cursor)"
 msgstr "Löschen (links vom Cursor)"
 
-#: src/resources/keyboardext.py:95
+#: src/resources/keyboardext.py:96
 msgid "Delete (right of the cursor)"
 msgstr "Löschen (rechts vom Cursor)"
 
-#: src/resources/keyboardext.py:96
+#: src/resources/keyboardext.py:97
 msgid "Save"
 msgstr "Speichern"
 
-#: src/resources/keyboardext.py:97
+#: src/resources/keyboardext.py:98
 msgid "Switch keyboard layout"
 msgstr "Keyboard Layout umschalten"
 
-#: src/resources/keyboardext.py:101
+#: src/resources/keyboardext.py:102
 msgid "Left"
 msgstr "Links"
 
-#: src/resources/keyboardext.py:102
+#: src/resources/keyboardext.py:103
 msgid "Right"
 msgstr "Rechts"
 
-#: src/resources/keyboardext.py:103
+#: src/resources/keyboardext.py:104
 msgid "Up"
 msgstr "Auf"
 
-#: src/resources/keyboardext.py:104
+#: src/resources/keyboardext.py:105
 msgid "Down"
 msgstr "Ab"
 
-#: src/resources/keyboardext.py:108
+#: src/resources/keyboardext.py:109
 msgid "Move to begin"
 msgstr "Zum Anfang bewegen"
 
-#: src/resources/keyboardext.py:109
+#: src/resources/keyboardext.py:110
 msgid "Move to end"
 msgstr "Zum Ende bewegen"
 
-#: src/resources/keyboardext.py:127
+#: src/resources/keyboardext.py:115
+msgid "Show stored 2Search4Porn keywords"
+msgstr "Gespeicherte 2Search4Porn Suchbegriffe anzeigen"
+
+#: src/resources/keyboardext.py:133
 msgid "Select virtual keyboard"
 msgstr "Wähle virtuelle Tastatur"
 
-#: src/resources/keyboardext.py:128
+#: src/resources/keyboardext.py:134
 msgid "Select suggestions list"
 msgstr "Wähle Vorschlagsliste"
 
+#: src/resources/keyboardext.py:186
+msgid "Select keyword"
+msgstr "Wähle Suchbegriff"
+
 #: src/resources/menuhelper.py:137
 msgid "No menudata found!"
 msgstr "Keine Menüdaten gefunden!"
@@ -2572,7 +2576,7 @@ msgstr "Seitennummer eingeben"
 msgid "Sorry, this video is not available in your region."
 msgstr "Dieses Video ist in ihrer Region nicht verfügbar."
 
-#: src/resources/mtvdelink.py:82 src/resources/simpleplayer.py:1507
+#: src/resources/mtvdelink.py:82 src/resources/simpleplayer.py:1521
 msgid "No URL found!"
 msgstr "Keine URL gefunden!"
 
@@ -2725,8 +2729,8 @@ msgstr ""
 "aktiviert werden"
 
 #: src/resources/simplelist.py:507 src/resources/simplelist.py:682
-#: src/resources/simplelist.py:706 src/resources/simpleplayer.py:1782
-#: src/resources/simpleplayer.py:1789
+#: src/resources/simplelist.py:706 src/resources/simpleplayer.py:1783
+#: src/resources/simpleplayer.py:1790
 msgid "Yes"
 msgstr "Ja"
 
@@ -2800,189 +2804,189 @@ msgid "You've to check Your HLS-PLayer Cachepath-Setting in MP-Setup:\n"
 msgstr ""
 "Bitte die HLS-Player Cacheverzeichnis Einstellung im MP-Setup prüfen:\n"
 
-#: src/resources/simpleplayer.py:618
+#: src/resources/simpleplayer.py:630
 msgid "Resuming playback"
 msgstr "Fortsetzen der Wiedergabe"
 
-#: src/resources/simpleplayer.py:620
+#: src/resources/simpleplayer.py:632
 msgid "Do you want to resume this playback?"
 msgstr "Soll diese Wiedergabe fortgesetzt werden?"
 
-#: src/resources/simpleplayer.py:620
+#: src/resources/simpleplayer.py:632
 #, python-format
 msgid "Resume position at %s"
 msgstr "Wiederaufnahmeposition bei %s"
 
-#: src/resources/simpleplayer.py:699
+#: src/resources/simpleplayer.py:711
 msgid "to Player"
 msgstr "zum Player"
 
-#: src/resources/simpleplayer.py:702
+#: src/resources/simpleplayer.py:714
 msgid "Playmode"
 msgstr "Abspielmodus"
 
-#: src/resources/simpleplayer.py:1217
+#: src/resources/simpleplayer.py:1229
 msgid "Tuning..."
 msgstr "Tune..."
 
-#: src/resources/simpleplayer.py:1220
+#: src/resources/simpleplayer.py:1232
 msgid "Connecting..."
 msgstr "Verbinde..."
 
-#: src/resources/simpleplayer.py:1223
+#: src/resources/simpleplayer.py:1235
 msgid "Please wait!"
 msgstr "Bitte warten!"
 
-#: src/resources/simpleplayer.py:1226
+#: src/resources/simpleplayer.py:1238
 msgid "Reconnecting..."
 msgstr "Verbinde neu..."
 
-#: src/resources/simpleplayer.py:1394 src/resources/simpleplayer.py:1403
+#: src/resources/simpleplayer.py:1407 src/resources/simpleplayer.py:1416
 #, python-format
 msgid "This STB can't decode %s streams!"
 msgstr "Diese STB kann %s Streams nicht wiedergeben!"
 
-#: src/resources/simpleplayer.py:1423
+#: src/resources/simpleplayer.py:1436
 #, python-format
 msgid "Streaming error: %s"
 msgstr "Streaming Fehler: %s"
 
-#: src/resources/simpleplayer.py:1454
+#: src/resources/simpleplayer.py:1468
 msgid "Buffering..."
 msgstr "Puffern..."
 
-#: src/resources/simpleplayer.py:1783
+#: src/resources/simpleplayer.py:1784
 #, python-format
 msgid "Yes & Add Service to global Playlist-%02d"
 msgstr "Ja & Service zur globalen Playlist-%02d hinzufügen"
 
-#: src/resources/simpleplayer.py:1785 src/resources/simpleplayer.py:1791
+#: src/resources/simpleplayer.py:1786 src/resources/simpleplayer.py:1792
 msgid "No, but start over from the beginning"
 msgstr "Nein, aber von Anfang an neu beginnen"
 
-#: src/resources/simpleplayer.py:1794
+#: src/resources/simpleplayer.py:1795
 msgid "Stop playing this movie?"
 msgstr "Wiedergabe dieses Films stoppen?"
 
-#: src/resources/simpleplayer.py:1931
+#: src/resources/simpleplayer.py:1930
 msgid "No entries in the playlist available!"
 msgstr "Keine Einträge in der Playlist vorhanden!"
 
-#: src/resources/simpleplayer.py:2013
+#: src/resources/simpleplayer.py:2012
 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:2027
+#: src/resources/simpleplayer.py:2026
 msgid "Error: URL is not persistent!"
 msgstr "Fehler: URL ist nicht persistent!"
 
-#: src/resources/simpleplayer.py:2033
+#: src/resources/simpleplayer.py:2032
 msgid "Added entry"
 msgstr "Eintrag hinzugefügt"
 
-#: src/resources/simpleplayer.py:2035
+#: src/resources/simpleplayer.py:2034
 msgid "Entry already exists"
 msgstr "Eintrag schon vorhanden"
 
-#: src/resources/simpleplayer.py:2037
+#: src/resources/simpleplayer.py:2036
 msgid "Error!"
 msgstr "Fehler!"
 
-#: src/resources/simpleplayer.py:2205 src/resources/simpleplayer.py:2206
+#: src/resources/simpleplayer.py:2204 src/resources/simpleplayer.py:2205
 msgid "SimplePlayer Setup"
 msgstr "SimplePlayer Einstellungen"
 
-#: src/resources/simpleplayer.py:2231
+#: src/resources/simpleplayer.py:2223
 msgid "Global playlist number:"
 msgstr "Globale Playlist-Nummer:"
 
-#: src/resources/simpleplayer.py:2232
+#: src/resources/simpleplayer.py:2224
 msgid "Playmode:"
 msgstr "Abspielmodus:"
 
-#: src/resources/simpleplayer.py:2235
+#: src/resources/simpleplayer.py:2227
 msgid "Buffersize (in seconds):"
 msgstr "Puffergröße (in Sekunden):"
 
-#: src/resources/simpleplayer.py:2236
+#: src/resources/simpleplayer.py:2228
 msgid "Save resume cache in flash memory:"
 msgstr "Speichere Wiederaufnahme-Cache im Flashspeicher:"
 
-#: src/resources/simpleplayer.py:2237
+#: src/resources/simpleplayer.py:2229
 msgid "Behavior on movie start:"
 msgstr "Verhalten bei Filmstart:"
 
-#: src/resources/simpleplayer.py:2238
+#: src/resources/simpleplayer.py:2230
 msgid "Behavior on movie stop:"
 msgstr "Verhalten bei Filmstopp:"
 
-#: src/resources/simpleplayer.py:2239
+#: src/resources/simpleplayer.py:2231
 msgid "Behavior on movie end:"
 msgstr "Verhalten bei Filmende:"
 
-#: src/resources/simpleplayer.py:2240
+#: src/resources/simpleplayer.py:2232
 msgid "Seekbar sensibility:"
 msgstr "Suchleistenempfindlichkeit:"
 
-#: src/resources/simpleplayer.py:2241
+#: src/resources/simpleplayer.py:2233
 msgid "Infobar cover always off:"
 msgstr "Infobar-Coveranzeige immer aus:"
 
-#: src/resources/simpleplayer.py:2242
+#: src/resources/simpleplayer.py:2234
 msgid "Use SP number seek:"
 msgstr "Verwende SP Nummernsuche:"
 
-#: src/resources/simpleplayer.py:2256
+#: src/resources/simpleplayer.py:2248
 msgid "RADIO"
 msgstr "RADIO"
 
-#: src/resources/simpleplayer.py:2258
+#: src/resources/simpleplayer.py:2249
 msgid "Radio cover:"
 msgstr "Radio-Cover:"
 
-#: src/resources/simpleplayer.py:2259
+#: src/resources/simpleplayer.py:2250
 msgid "Radio visualization:"
 msgstr "Radio-Visualisierung:"
 
-#: src/resources/simpleplayer.py:2260
+#: src/resources/simpleplayer.py:2251
 msgid "Radio screensaver:"
 msgstr "Radio-Bildschirmschoner:"
 
-#: src/resources/simpleplayer.py:2261
+#: src/resources/simpleplayer.py:2252
 msgid "Radio screensaver keywords:"
 msgstr "Schlüsselwörter für den Radio-Bildschirmschoner:"
 
-#: src/resources/simpleplayer.py:2291 src/resources/simpleplayer.py:2292
+#: src/resources/simpleplayer.py:2282 src/resources/simpleplayer.py:2283
 msgid "SimplePlayer Menu"
 msgstr "SimplePlayer Menü"
 
-#: src/resources/simpleplayer.py:2306
+#: src/resources/simpleplayer.py:2297
 #, python-format
 msgid "Add service to global playlist-%02d"
 msgstr "Füge Service zu globaler Playlist-%02d hinzu"
 
-#: src/resources/simpleplayer.py:2308
+#: src/resources/simpleplayer.py:2299
 #, python-format
 msgid "Open global playlist-%02d"
 msgstr "Öffne globale Playlist-%02d"
 
-#: src/resources/simpleplayer.py:2310
+#: src/resources/simpleplayer.py:2301
 msgid "Open local playlist"
 msgstr "Öffne lokale Playlist"
 
-#: src/resources/simpleplayer.py:2312
+#: src/resources/simpleplayer.py:2303
 msgid "A/V Settings"
 msgstr "A/V Einstellungen"
 
-#: src/resources/simpleplayer.py:2314
+#: src/resources/simpleplayer.py:2305
 msgid "Advanced Audio Settings"
 msgstr "Erweiterte Audioeinstellungen"
 
-#: src/resources/simpleplayer.py:2315
+#: src/resources/simpleplayer.py:2306
 msgid "Mainmenu"
 msgstr "Hauptmenü"
 
-#: src/resources/simpleplayer.py:2383
+#: src/resources/simpleplayer.py:2374
 #, python-format
 msgid ""
 "The directory path does not end with '/':\n"
@@ -2991,7 +2995,7 @@ msgstr ""
 "Der Verzeichnispfad endet nicht mit '/':\n"
 "%s"
 
-#: src/resources/simpleplayer.py:2384
+#: src/resources/simpleplayer.py:2375
 #, python-format
 msgid ""
 "File with the same name exists in the directory path:\n"
@@ -3000,7 +3004,7 @@ msgstr ""
 "Datei mit gleichen Namen im Verzeichnispfad vorhanden:\n"
 "%s"
 
-#: src/resources/simpleplayer.py:2385
+#: src/resources/simpleplayer.py:2376
 #, python-format
 msgid ""
 "The missing directory:\n"
@@ -3009,7 +3013,7 @@ msgstr ""
 "Das fehlende Verzeichnis:\n"
 "%s konnte nicht angelegt werden!"
 
-#: src/resources/simpleplayer.py:2386
+#: src/resources/simpleplayer.py:2377
 #, python-format
 msgid ""
 "The directory path:\n"
@@ -3018,7 +3022,7 @@ msgstr ""
 "Der Verzeichnispfad:\n"
 "%s ist nicht vorhanden!"
 
-#: src/resources/simpleplayer.py:2387
+#: src/resources/simpleplayer.py:2378
 #, python-format
 msgid ""
 "There exists already a directory with this name:\n"
@@ -3027,7 +3031,7 @@ msgstr ""
 "Es existiert schon ein Verzeichnis mit diesem Namen:\n"
 "%s"
 
-#: src/resources/simpleplayer.py:2388
+#: src/resources/simpleplayer.py:2379
 #, python-format
 msgid ""
 "The path is OK, the file name was not specified:\n"
@@ -3036,7 +3040,7 @@ msgstr ""
 "Der Pfad ist i.O., der Dateiname wurde nicht angegeben:\n"
 "%s"
 
-#: src/resources/simpleplayer.py:2389
+#: src/resources/simpleplayer.py:2380
 #, python-format
 msgid ""
 "The directory path and file name is OK:\n"
@@ -3045,11 +3049,11 @@ msgstr ""
 "Der Verzeichnispfad & Dateiname ist i.O.:\n"
 "%s"
 
-#: src/resources/simpleplayer.py:2390
+#: src/resources/simpleplayer.py:2381
 msgid "The directory path is not specified!"
 msgstr "Der Verzeichnispfad wurde nicht angegeben!"
 
-#: src/resources/simpleplayer.py:2391
+#: src/resources/simpleplayer.py:2382
 #, python-format
 msgid ""
 "Symbolic link with the same name in the directory path:\n"
@@ -3058,7 +3062,7 @@ msgstr ""
 "Symbolischer Link mit gleichen Namen im Verzeichnispfad:\n"
 "%s vorhanden!"
 
-#: src/resources/simpleplayer.py:2392
+#: src/resources/simpleplayer.py:2383
 #, python-format
 msgid ""
 "The directory path does not begin with '/':\n"
@@ -3067,19 +3071,19 @@ msgstr ""
 "Der Verzeichnispfad beginnt nicht mit '/':\n"
 "%s"
 
-#: src/resources/streams.py:741
+#: src/resources/streams.py:742
 msgid "No supported Stream Hoster, try another one!"
 msgstr "Kein unterstützter Stream Hoster, versuche einen anderen!"
 
-#: src/resources/streams.py:743
+#: src/resources/streams.py:744
 msgid "Invalid Stream link, try another Stream Hoster!"
 msgstr "Ungültiger Stream Link, versuche eine anderen Stream Hoster!"
 
-#: src/resources/streams.py:751
+#: src/resources/streams.py:753
 msgid "This hoster is only working with enabled Premium support."
 msgstr "Dieser Hoster funktioniert nur mit aktivierter Premium-Unterstützung."
 
-#: src/resources/streams.py:753
+#: src/resources/streams.py:755
 msgid ""
 "This Stream link is currently not available via Premium, try another Stream "
 "Hoster."
@@ -3087,7 +3091,7 @@ msgstr ""
 "Dieser Stream ist aktuell nicht über Premium verfügbar, versuche einen "
 "anderen Stream Hoster."
 
-#: src/resources/streams.py:757
+#: src/resources/streams.py:759
 msgid "Unknown error, check MP logfile."
 msgstr "Unbekannter Fehler, MP Logfile überprüfen."
 
index ff1fb0a..317a94e 100644 (file)
@@ -155,8 +155,8 @@ config.mediaportal = ConfigSubsection()
 config_mp.mediaportal.fake_entry = NoSave(ConfigNothing())
 
 # Allgemein
-config_mp.mediaportal.version = NoSave(ConfigText(default="2019080301"))
-config.mediaportal.version = NoSave(ConfigText(default="2019080301"))
+config_mp.mediaportal.version = NoSave(ConfigText(default="2019090101"))
+config.mediaportal.version = NoSave(ConfigText(default="2019090101"))
 config_mp.mediaportal.autoupdate = ConfigYesNo(default = True)
 config.mediaportal.autoupdate = NoSave(ConfigYesNo(default = True))
 
@@ -234,7 +234,7 @@ config_mp.mediaportal.youtubeenabledash = ConfigYesNo(default = False)
 config_mp.mediaportal.youtubeenabledash720p = ConfigYesNo(default = False)
 config_mp.mediaportal.youtubeenabledash480p = ConfigYesNo(default = False)
 config_mp.mediaportal.youtubeenablehdr = ConfigYesNo(default = False)
-config_mp.mediaportal.youtubeenableopus = ConfigYesNo(default = False)
+config_mp.mediaportal.youtubeenableopus = ConfigYesNo(default = True)
 config_mp.mediaportal.youtubeprio = ConfigSelectionExt(default = "2", choices = [("0", "360p"),("1", "480p"),("2", "720p"),("3", "1080p"),("4", "1440p"),("5", "2160p")])
 config_mp.mediaportal.videoquali_others = ConfigSelectionExt(default = "2", choices = [("0", _("Low")),("1", _("Medium")),("2", _("High"))])
 config_mp.mediaportal.pornpin = ConfigYesNo(default = True)
index 4cc8a53..2b9f683 100644 (file)
@@ -106,7 +106,7 @@ try:
                        for each in match_sec_m3u8:
                                bandwith,url = each
                                self.bandwith_list.append((int(bandwith),url))
-                       _, best = min((abs(int(x[0]) - bw), x) for x in self.bandwith_list)
+                       _x, best = min((abs(int(x[0]) - bw), x) for x in self.bandwith_list)
                        uri = best[1]
                        try:
                                if not service.ptrValid():
index 795f6d7..e37f92b 100644 (file)
@@ -74,7 +74,7 @@ try:
                                                        if "hls_variant" in uri:
                                                                getPage(uri).addCallback(self.parseData, service)
                                                        else:
-                                                               uri = uri.replace('%252F','%2F').replace('%253D','%3D').replace('%252B','%2B').replace('%253B','%3B')
+                                                               #uri = uri.replace('%252F','%2F').replace('%253D','%3D').replace('%252B','%2B').replace('%253B','%3B')
                                                                service.setResolvedUri(uri, eServiceReference.idDVB)
                                                else:
                                                        service.setResolvedUri(uri, eServiceReference.idGST)
@@ -107,7 +107,7 @@ try:
                                                if "hls_variant" in uri:
                                                        getPage(uri).addCallback(self.parseData, service)
                                                else:
-                                                       uri = uri.replace('%252F','%2F').replace('%253D','%3D').replace('%252B','%2B').replace('%253B','%3B')
+                                                       #uri = uri.replace('%252F','%2F').replace('%253D','%3D').replace('%252B','%2B').replace('%253B','%3B')
                                                        service.setResolvedUri(uri, eServiceReference.idDVB)
                                        else:
                                                service.failedToResolveUri()
@@ -125,7 +125,7 @@ try:
                                                Log.w("Service became invalid!")
                                                return
                                        if uri:
-                                               uri = uri.replace('%252F','%2F').replace('%253D','%3D').replace('%252B','%2B').replace('%253B','%3B')
+                                               #uri = uri.replace('%252F','%2F').replace('%253D','%3D').replace('%252B','%2B').replace('%253B','%3B')
                                                service.setResolvedUri(uri, eServiceReference.idDVB)
                                        else:
                                                service.failedToResolveUri()
index 612b59f..4afb818 100644 (file)
@@ -103,7 +103,12 @@ class ForPlayersApi(object):
             game_id,  # game_id
             0,  # newer than
         )
-        return self.__api_call('getSpielinfo', *params)['GameInfo']
+        call = self.__api_call('getSpielinfo', *params)
+        if type(call) == str:
+            x = []
+        else:
+            x = call['GameInfo']
+        return x
 
     def __format_videos(self, raw_videos):
         videos = [{
index 94848aa..915dde2 100644 (file)
@@ -44,16 +44,16 @@ class Config(ConfigSubsection):
                ConfigSubsection.__init__(self)
 
        def pickle_this(self, prefix, topickle, result):
-               for (key, val) in topickle.items():
+               for (key, val) in sorted(topickle.items(), key=lambda x: int(x[0]) if x[0].isdigit() else x[0].lower()):
                        name = '.'.join((prefix, key))
                        try:
                                x = eval(name)
                                if isinstance(val, dict):
                                        self.pickle_this(name, val, result)
                                elif isinstance(val, tuple):
-                                       result += [name, '=', val[0], '\n']
+                                       result += [name, '=', str(val[0]), '\n']
                                else:
-                                       result += [name, '=', val, '\n']
+                                       result += [name, '=', str(val), '\n']
                        except:
                                pass
 
index 5edfe47..ae9dcb3 100644 (file)
@@ -3,7 +3,7 @@ from Plugins.Extensions.MediaPortal.plugin import _
 from Plugins.Extensions.MediaPortal.resources.imports import *
 
 def verystream(self, data, id, link):
-       videolink = re.search('(%s~[~.:a-zA-Z0-9]+)' % id, data)
+       videolink = re.search('(%s~[~._:a-zA-Z0-9]+)' % id, data)
        if videolink:
                url = "https://verystream.com/gettoken/%s?mime=true" % videolink.group(1)
                tw_agent_hlp = TwAgentHelper()
@@ -19,4 +19,5 @@ def verystreamUrl(self, url, id, link):
                else:
                        self.stream_not_found()
        else:
+               mp_globals.veryref = ""
                self._callback(url)
\ No newline at end of file
index 253b4c4..185aabc 100644 (file)
@@ -77,19 +77,6 @@ class ConfigSelectionExt(ConfigSelection):
                self._descr = None
                self.default = self._value = self.last_value = default
 
-boolean_descriptions = {False: "false", True: "true"}
-class ConfigBooleanExt(ConfigBoolean):
-       def __init__(self, default = False, descriptions = boolean_descriptions):
-               ConfigElement.__init__(self)
-               self.descriptions = descriptions
-               self.value = self.last_value = self.default = default
-               self.graphic = False
-
-yes_no_descriptions = {False: _("no"), True: _("yes")}
-class ConfigYesNo(ConfigBooleanExt):
-       def __init__(self, default = False):
-               ConfigBooleanExt.__init__(self, default = default, descriptions = yes_no_descriptions)
-
 try:
        from Components.config import ConfigPassword
 except ImportError:
@@ -160,6 +147,26 @@ try:
 except:
        mp_globals.isDreamOS = False
 
+boolean_descriptions = {False: "false", True: "true"}
+class ConfigBooleanExt(ConfigBoolean):
+       def __init__(self, default = False, descriptions = boolean_descriptions):
+               ConfigElement.__init__(self)
+               self.descriptions = descriptions
+               self.value = self.last_value = self.default = default
+               self.graphic = False
+
+       if mp_globals.isDreamOS:
+               def getMulti(self, selected):
+                       descr = self.descriptions[self.value]
+                       if descr:
+                               return ("text", _(descr))
+                       return ("text", descr)
+
+yes_no_descriptions = {False: _("no"), True: _("yes")}
+class ConfigYesNo(ConfigBooleanExt):
+       def __init__(self, default = False):
+               ConfigBooleanExt.__init__(self, default = default, descriptions = yes_no_descriptions)
+
 if mp_globals.isDreamOS:
        from pixmapext import PixmapExt
 
@@ -413,4 +420,7 @@ def decodeHtml(text):
 def stripAllTags(html):
        cleanr = re.compile('<.*?>')
        cleantext = re.sub(cleanr,'', html.replace('\n',''))
-       return cleantext
\ No newline at end of file
+       return cleantext
+
+def upperString(txt):
+       return " ".join((x[0].upper() + x[1:]) for x in txt.split())
\ No newline at end of file
index 47c1eea..8be5185 100644 (file)
@@ -2,6 +2,7 @@
 from Plugins.Extensions.MediaPortal.plugin import _
 from imports import *
 import mp_globals
+from choiceboxext import ChoiceBoxExt
 from Components.ActionMap import HelpableActionMap
 from Components.Sources.StaticText import StaticText
 from Screens.HelpMenu import HelpableScreen
@@ -22,7 +23,7 @@ class VirtualKeyBoardExtInputHelpDialog(NumericalTextInputHelpDialog):
 
 class VirtualKeyBoardExt(Screen, NumericalTextInput, HelpableScreen):
 
-       def __init__(self, session, title="", text="", captcha=None, is_dialog=False, auto_text_init=False, suggest_func=None):
+       def __init__(self, session, title="", text="", captcha=None, is_dialog=False, auto_text_init=False, suggest_func=None, keywords2s4p=True):
                global last_text
                self.skin_path = mp_globals.pluginPath + mp_globals.skinsPath
                path = "%s/%s/MP_VirtualKeyBoard.xml" % (self.skin_path, mp_globals.currentskin)
@@ -108,6 +109,11 @@ class VirtualKeyBoardExt(Screen, NumericalTextInput, HelpableScreen):
                                "seekBack": (self.move_to_begin, _("Move to begin")),
                                "seekFwd": (self.move_to_end, _("Move to end"))
                        },-2)
+               if keywords2s4p:
+                       self["keywordaction"] = HelpableActionMap(self, "MP_Actions",
+                               {
+                                       "menu": (self.__2s4p, _("Show stored 2Search4Porn keywords"))
+                               },-2)
                self["NumberActions"] = NumberActionMap(["NumberActions"],
                {
                        "1": self.keyNumberGlobal,
@@ -168,6 +174,25 @@ class VirtualKeyBoardExt(Screen, NumericalTextInput, HelpableScreen):
                self.session.deleteDialog(self.help_window)
                self.help_window = None
 
+       def __2s4p(self):
+               rangelist = []
+               self.wl_path = config_mp.mediaportal.watchlistpath.value+"mp_2s4p"
+               try:
+                       rawData = open(self.wl_path,"r")
+                       for m in rawData:
+                               rangelist.append([m.strip(),''])
+                       rawData.close()
+                       if len(rangelist) > 0:
+                               self.session.openWithCallback(self.__2s4pAction, ChoiceBoxExt, title=_('Select keyword'), list=rangelist, keys=[])
+               except:
+                       pass
+
+       def __2s4pAction(self, result):
+               if result:
+                       suggest = result[0]
+                       self.text = suggest + self.cursor
+                       self.set_GUI_Text()
+
        def switchLang(self):
                self.lang = self.nextLang
                self.setLang()
@@ -507,7 +532,9 @@ class VirtualKeyBoardExt(Screen, NumericalTextInput, HelpableScreen):
        def okClicked(self):
                if self.suggestionsListEnabled:
                        self.disableSuggestionList()
-                       self.text = self.getSuggestion() + self.cursor
+                       suggest = self.getSuggestion()
+                       if suggest:
+                               self.text = suggest + self.cursor
                        return self.set_GUI_Text()
                else:
                        if self.shiftMode:
index df56b34..2d04561 100644 (file)
@@ -33,6 +33,7 @@ ThumbViewTextBackground = '#20000000'
 bsp = None
 bdmt = None
 nav_suburi = ""
+veryref = ""
 
 std_headers = {
        'User-Agent': 'Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.6) Gecko/20100627 Firefox/3.6.6',
index 1c886c1..e191bf0 100644 (file)
@@ -62,7 +62,7 @@ class M3U8(object):
                        printl("PL has not programs!",self,'E')
                        raise Exception('PL has not programs!')
 
-               _, best = min((abs(int(x['BANDWIDTH']) - bitrate), x)
+               _x, best = min((abs(int(x['BANDWIDTH']) - bitrate), x)
                                for x in self._programs)
                return best['uri'], best
 
index dc31dd6..879def7 100644 (file)
@@ -614,7 +614,9 @@ class MPScreen(Screen, HelpableScreen):
                                elif entry[3] == '11':
                                        iconlng = 'IT'
                                elif entry[3] == '15':
-                                       iconlng = 'DEUS'
+                                       iconlng = 'ENDE'
+                               elif entry[3] == '17':
+                                       iconlng = 'KR'
                                elif entry[3] == '24':
                                        iconlng = 'GR'
                                elif entry[3] == '25':
@@ -624,15 +626,19 @@ class MPScreen(Screen, HelpableScreen):
                                else:
                                        iconlng = entry[3]
 
-                               path = "%s/%s/images/%s.png" % (skin_path, mp_globals.currentskin, iconlng)
+                               path = "%s/%s/images/countries/%s.png" % (skin_path, mp_globals.currentskin, iconlng)
                                if not fileExists(path):
-                                       path = "%s/%s/images/%s.png" % (skin_path, mp_globals.skinFallback, iconlng)
+                                       path = "%s/%s/images/countries/%s.png" % (skin_path, mp_globals.skinFallback, iconlng)
                                        if not fileExists(path):
-                                               path = "/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/images/%s.png" % iconlng
+                                               path = "/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/images/countries/%s.png" % iconlng
 
                                lang = LoadPixmap(path)
                                lwidth = lang.size().width()
                                lheight = lang.size().height()
+                               if lwidth > (height - 2 * mp_globals.sizefactor):
+                                       lratio = float(lwidth/lheight)
+                                       lheight = height - 2 * mp_globals.sizefactor
+                                       lwidth = int(lheight * lratio)
                                vpos = round(float((height-lheight)/2))
                                res.append((eListboxPythonMultiContent.TYPE_PIXMAP_ALPHATEST, pwidth+50, vpos, lwidth, lheight, lang))
                                self.langoffset = lwidth+25
index 0b00024..de2bc1f 100644 (file)
@@ -416,7 +416,7 @@ class SimpleSeekHelper:
                else:
                        self.isNumberSeek = False
 
-       def seekOK(self):
+       def seekOK(self, buffered=False):
                if self.length:
                        seekpos = float(self.length[1]) / 100.0 * self.percent
                        if self.isMySpass:
@@ -424,7 +424,7 @@ class SimpleSeekHelper:
                                self.doMySpassSeekTo(seekpos)
                        else:
                                self.seek.seekTo(int(seekpos))
-                               self.buffered = False
+                               self.buffered = buffered
                                self.seekExit()
                else:
                        self.seekExit()
@@ -439,7 +439,7 @@ class SimpleSeekHelper:
                if self.percent > 100.0:
                        self.percent = 100.0
 
-       def numberKeySeek(self, val):
+       def numberKeySeek(self, val, buffered=False):
                if self.dash:
                        return
                if self.length:
@@ -452,7 +452,7 @@ class SimpleSeekHelper:
                                elif self.percent > 100.0:
                                        self.percent = 100.0
 
-                               self.seekOK()
+                               self.seekOK(True)
                                if config.usage.show_infobar_on_skip.value:
                                        self.doShow()
                        else:
@@ -493,36 +493,48 @@ class SimpleSeekHelper:
                        self.seekExit()
 
        def Key1(self):
+               if self.dash:
+                       return
                self.isNumberSeek = True
                self.initSeek()
                self.numberKeySeek(-int(config.seek.selfdefined_13.value))
                self.buffered = False
 
        def Key3(self):
+               if self.dash:
+                       return
                self.isNumberSeek = True
                self.initSeek()
                self.numberKeySeek(int(config.seek.selfdefined_13.value))
                self.buffered = False
 
        def Key4(self):
+               if self.dash:
+                       return
                self.isNumberSeek = True
                self.initSeek()
                self.numberKeySeek(-int(config.seek.selfdefined_46.value))
                self.buffered = False
 
        def Key6(self):
+               if self.dash:
+                       return
                self.isNumberSeek = True
                self.initSeek()
                self.numberKeySeek(int(config.seek.selfdefined_46.value))
                self.buffered = False
 
        def Key7(self):
+               if self.dash:
+                       return
                self.isNumberSeek = True
                self.initSeek()
                self.numberKeySeek(-int(config.seek.selfdefined_79.value))
                self.buffered = False
 
        def Key9(self):
+               if self.dash:
+                       return
                self.isNumberSeek = True
                self.initSeek()
                self.numberKeySeek(int(config.seek.selfdefined_79.value))
@@ -817,9 +829,6 @@ class RadioBackground(Screen):
                                self["visu"].hide()
                                self["rms0"].hide()
                                self["rms1"].hide()
-               if config_mp.mediaportal.sp_radio_visualization.value == "0":
-                       self["cover"].hide()
-                       self['BgTitle'].hide()
 
                # internalSize 0 = original, 1 = 1440, 2 = 2160, 3 = 2880, 4 = 800
                if mp_globals.videomode == 2:
@@ -847,6 +856,8 @@ class RadioBackground(Screen):
                                                self.skin += '''<widget name="visu" position="0,930" size="1920,150" transparent="1" zPosition="11" pixmapBackground2="/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/images/colorgradient.png" pixmap2="/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/images/led_30x20_h8.png" distance1="18" distance2="8" mode="visImagesUp" maxValue="20" fadeOutTime="0" internalSize="2" pixmapBackgroundColor1="#080808" drawBackground="0" smoothing="0.6" />'''
                                        else:
                                                self.skin += '''<widget name="visu" position="0,930" size="1920,150" transparent="1" zPosition="11" pixmapBackground2="/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/images/colorgradient.png" pixmap2="/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/images/led_30x20_h8.png" distance1="18" distance2="8" mode="visImagesUp" maxValue="15" fadeOutTime="0" internalSize="1" pixmapBackgroundColor1="#080808" drawBackground="0" smoothing="0.6" />'''
+                       else:
+                               self.skin += '''<widget name="cover" position="735,270" size="450,450" transparent="1" pixmap="/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/images/none.png" zPosition="13" />'''
 
                        self.skin += '''</screen>'''
                else:
@@ -874,6 +885,8 @@ class RadioBackground(Screen):
                                                self.skin += '''<widget name="visu" position="0,620" size="1280,100" transparent="1" zPosition="11" pixmapBackground2="/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/images/colorgradient.png" pixmap2="/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/images/led_20x13_h5.png" distance1="12" distance2="5" mode="visImagesUp" maxValue="20" fadeOutTime="0" internalSize="2" pixmapBackgroundColor1="#080808" drawBackground="0" smoothing="0.6" />'''
                                        else:
                                                self.skin += '''<widget name="visu" position="0,570" size="1280,150" transparent="1" zPosition="11" pixmapBackground2="/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/images/colorgradient.png" pixmap2="/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/images/led_20x13_h5.png" distance1="12" distance2="5" mode="visImagesUp" maxValue="15" fadeOutTime="0" internalSize="1" pixmapBackgroundColor1="#080808" drawBackground="0" smoothing="0.6" />'''
+                       else:
+                               self.skin += '''<widget name="cover" position="490,180" size="300,300" transparent="1" pixmap="/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/images/none.png" zPosition="13" />'''
 
                        self.skin += '''</screen>'''
 
@@ -1129,7 +1142,7 @@ class SimplePlayer(Screen, M3U8Player, CoverSearchHelper, SimpleSeekHelper, Simp
        ALLOW_SUSPEND = True
        ctr = 0
 
-       def __init__(self, session, playList, playIdx=0, playAll=False, listTitle=None, plType='local', title_inr=0, cover=False, ltype='', showPlaylist=True, listEntryPar=None, playList2=[], playerMode='VIDEO', useResume=True, bufferingOpt='None', googleCoverSupp=False, embeddedCoverArt=False, forceGST=True):
+       def __init__(self, session, playList, playIdx=0, playAll=False, listTitle=None, plType='local', title_inr=0, cover=False, ltype='', showPlaylist=True, listEntryPar=None, playList2=[], playerMode='VIDEO', useResume=True, bufferingOpt='None', googleCoverSupp=False, embeddedCoverArt=False, forceGST=True, eServiceStream=False):
 
                if playerMode == 'RADIO':
                        googleCoverSupp = True
@@ -1299,6 +1312,7 @@ class SimplePlayer(Screen, M3U8Player, CoverSearchHelper, SimpleSeekHelper, Simp
                self.cover2 = False
                self.searchTitle = None
                self.forceGST = forceGST
+               self.eServiceStream = eServiceStream
                self.embeddedCoverArt = embeddedCoverArt
                self.hasEmbeddedCoverArt = False
                self.lru_key = None
@@ -1306,7 +1320,6 @@ class SimplePlayer(Screen, M3U8Player, CoverSearchHelper, SimpleSeekHelper, Simp
                self.downloader = None
                self.last_progress = 0
                self.last_path = None
-               self.youtubelive = False
                self.dash = False
                self.buffered = False
 
@@ -1344,7 +1357,8 @@ class SimplePlayer(Screen, M3U8Player, CoverSearchHelper, SimpleSeekHelper, Simp
                                                iPlayableService.evStart: self.__serviceStarted,
                                                iPlayableService.evUpdatedInfo: self.__evUpdatedInfo,
                                                iPlayableService.evServiceChanged: self.__serviceChanged,
-                                               iPlayableService.evBuffering: self.__serviceBuffering
+                                               iPlayableService.evBuffering: self.__serviceBuffering,
+                                               iPlayableService.evPlay: self.__servicePlay
                                        })
                        else:
                                self.embeddedCoverArt = False
@@ -1448,17 +1462,20 @@ class SimplePlayer(Screen, M3U8Player, CoverSearchHelper, SimpleSeekHelper, Simp
                        pass
 
        def __serviceBuffering(self):
-               if mp_globals.isDreamOS and mp_globals.stateinfo and mp_globals.model in ["one"]:
-                       service = self.session.nav.getCurrentService()
-                       bufferval = str(service.streamed().getBufferCharge()[0])
-                       InfoBarServiceErrorPopupSupport._stateInfo["state"].setText(_("Buffering..."))
-                       InfoBarServiceErrorPopupSupport._stateInfo["message"].setText(bufferval + "%")
-                       if int(bufferval) == 100:
-                               self.buffered = True
-                               from imports import TimerCall
-                               TimerCall(1, self._hideBuffering)
-                       elif not self.buffered:
-                               InfoBarServiceErrorPopupSupport._stateInfo.show()
+               if mp_globals.isDreamOS and mp_globals.stateinfo:
+                       try:
+                               service = self.session.nav.getCurrentService()
+                               bufferval = str(service.streamed().getBufferCharge()[0])
+                               InfoBarServiceErrorPopupSupport._stateInfo["state"].setText(_("Buffering..."))
+                               InfoBarServiceErrorPopupSupport._stateInfo["message"].setText(bufferval + "%")
+                               if int(bufferval) == 100:
+                                       self.buffered = True
+                                       from imports import TimerCall
+                                       TimerCall(0.5, self._hideBuffering)
+                               elif not self.buffered:
+                                       InfoBarServiceErrorPopupSupport._stateInfo.show()
+                       except:
+                               pass
 
        def _hideBuffering(self):
                InfoBarServiceErrorPopupSupport._stateInfo.hide()
@@ -1468,6 +1485,12 @@ class SimplePlayer(Screen, M3U8Player, CoverSearchHelper, SimpleSeekHelper, Simp
                        self.EmbeddedCoverTimer.start(1000*5, True)
                self.initPlayPositionTracker(self.lru_key)
 
+       def __servicePlay(self):
+               if not self.buffered:
+                       self.buffered = True
+                       from imports import TimerCall
+                       TimerCall(0.5, self._hideBuffering)
+
        def playVideo(self):
                if self.seekBarLocked:
                        self.cancelSeek()
@@ -1495,20 +1518,10 @@ class SimplePlayer(Screen, M3U8Player, CoverSearchHelper, SimpleSeekHelper, Simp
                reactor.callLater(1, self.playNextStream, config_mp.mediaportal.sp_on_movie_eof.value)
 
        def playStream(self, title, url, **kwargs):
-               #if self.ltype == 'youtube' and ".m3u8" in url and mp_globals.isDreamOS:
-               #       self.youtubelive = False
-               #elif self.ltype == 'chaturbate' and ".m3u8" in url and mp_globals.isDreamOS:
-               #       self.youtubelive = False
-               #elif self.ltype == 'cam4' and ".m3u8" in url and mp_globals.isDreamOS:
-               #       self.youtubelive = False
-               #elif self.ltype == 'zdf' and ".m3u8" in url and mp_globals.isDreamOS:
-               #       self.youtubelive = False
                if not url:
                        printl(_('No URL found!'),self,"E")
                elif url.startswith('#SERVICE'):
                        self._initStream(title, url, **kwargs)
-               elif self.youtubelive:
-                       self._initStream(title, url, **kwargs)
                elif not self.forceGST and ('.m3u8' in url or 'm3u8-aapl' in url):
                        self._getM3U8Video(title, url, **kwargs)
                else:
@@ -1614,32 +1627,31 @@ class SimplePlayer(Screen, M3U8Player, CoverSearchHelper, SimpleSeekHelper, Simp
                                                sref = eServiceReference(0x0001, 0, unquote(url))
                                                self.isTSVideo = True
                                        else:
-                                               if not '/?url=' in url:
-                                                       url = unquote(url)
-                                               if self.youtubelive:
-                                                       sref = eServiceReference(0x0001, 0, url)
-                                               else:
-                                                       if mp_globals.isDreamOS:
-                                                               if self.playerMode == 'RADIO' and config_mp.mediaportal.sp_radio_visualization.value != "0" and MerlinMusicPlayerPresent:
-                                                                       sref = eServiceReference(0x1019, 0, url)
-                                                               else:
-                                                                       sref = eServiceReference(0x1001, 0, url)
-                                                               if suburi:
-                                                                       try:
-                                                                               if suburi not in ["yt_dash_audio"]:
-                                                                                       sref.setSuburi(suburi)
-                                                                                       mp_globals.nav_suburi = suburi
-                                                                               self.dash = True
-                                                                       except:
-                                                                               pass
-                                                               else:
-                                                                       mp_globals.nav_suburi = ""
+                                               #if not '/?url=' in url:
+                                               #       url = unquote(url)
+                                               if mp_globals.isDreamOS:
+                                                       if self.playerMode == 'RADIO' and config_mp.mediaportal.sp_radio_visualization.value != "0" and MerlinMusicPlayerPresent:
+                                                               sref = eServiceReference(0x1019, 0, url)
+                                                       elif self.eServiceStream and ('.m3u8' in url) or ('m3u8-aapl' in url) or ('.mpd' in url) and mp_globals.model in ["one"]:
+                                                               sref = eServiceReference(0x2223, 0, url)
                                                        else:
-                                                               if suburi:
+                                                               sref = eServiceReference(0x1001, 0, url)
+                                                       if suburi:
+                                                               try:
                                                                        if suburi not in ["yt_dash_audio"]:
-                                                                               url = url + "&suburi=" + suburi
+                                                                               sref.setSuburi(suburi)
+                                                                               mp_globals.nav_suburi = suburi
                                                                        self.dash = True
-                                                               sref = eServiceReference(0x1001, 0, url)
+                                                               except:
+                                                                       pass
+                                                       else:
+                                                               mp_globals.nav_suburi = ""
+                                               else:
+                                                       if suburi:
+                                                               if suburi not in ["yt_dash_audio"]:
+                                                                       url = url + "&suburi=" + suburi
+                                                               self.dash = True
+                                                       sref = eServiceReference(0x1001, 0, url)
                                        sref.setName(video_title)
                                        self.searchTitle = video_title
 
@@ -1678,7 +1690,7 @@ class SimplePlayer(Screen, M3U8Player, CoverSearchHelper, SimpleSeekHelper, Simp
                                if int(float(self.length[1])) < 15000000:
                                        self.isNumberSeek = True
                                        self.initSeek()
-                                       self.numberKeySeek(-60)
+                                       self.numberKeySeek(-60, True)
                                        self.doSeek(0)
                                        self.setSeekState(self.SEEK_STATE_PLAY)
 
@@ -1733,16 +1745,6 @@ class SimplePlayer(Screen, M3U8Player, CoverSearchHelper, SimpleSeekHelper, Simp
                else:
                        self.handleLeave(value)
 
-       def playEndlessStream(self):
-               if self.keyPlayNextLocked:
-                       return
-               self.keyPlayNextLocked = True
-
-               if mp_globals.yt_dwnld_agent:
-                       mp_globals.yt_dwnld_agent.cancelDownload()
-
-               self.playVideo()
-
        def randomNow(self):
                if self.playAll:
                        self.playRandom(config_mp.mediaportal.sp_on_movie_stop.value)
@@ -1838,19 +1840,17 @@ class SimplePlayer(Screen, M3U8Player, CoverSearchHelper, SimpleSeekHelper, Simp
                        self.handleLeave(config_mp.mediaportal.sp_on_movie_stop.value)
 
        def doEofInternal(self, playing):
-               if not self.youtubelive:
-                       if playing:
-                               if not self.resumeEOF():
-                                       if self.playMode[0] == 'random':
-                                               self.playRandom(config_mp.mediaportal.sp_on_movie_eof.value)
-                                       elif self.playMode[0] == 'forward':
-                                               self.playNextStream(config_mp.mediaportal.sp_on_movie_eof.value)
-                                       elif self.playMode[0] == 'backward':
-                                               self.playPrevStream(config_mp.mediaportal.sp_on_movie_eof.value)
-                                       elif self.playMode[0] == 'endless':
-                                               #self.playEndlessStream()
-                                               self.doSeek(0)
-                                               self.setSeekState(self.SEEK_STATE_PLAY)
+               if playing:
+                       if not self.resumeEOF():
+                               if self.playMode[0] == 'random':
+                                       self.playRandom(config_mp.mediaportal.sp_on_movie_eof.value)
+                               elif self.playMode[0] == 'forward':
+                                       self.playNextStream(config_mp.mediaportal.sp_on_movie_eof.value)
+                               elif self.playMode[0] == 'backward':
+                                       self.playPrevStream(config_mp.mediaportal.sp_on_movie_eof.value)
+                               elif self.playMode[0] == 'endless':
+                                       self.doSeek(0)
+                                       self.setSeekState(self.SEEK_STATE_PLAY)
 
        def playExit(self):
                self.session.deleteDialog(self.RadioBg)
@@ -2057,8 +2057,11 @@ class SimplePlayer(Screen, M3U8Player, CoverSearchHelper, SimpleSeekHelper, Simp
                                if "static.rad.io" in cover or "static.radio" in cover:
                                        cover = "file:///usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/images/none.png"
                                if cover.startswith('file://'):
-                                       shutil.copyfile(cover[7:], '/tmp/.RadioCover.jpg')
-                                       self.showCover2('', cover)
+                                       try:
+                                               shutil.copyfile(cover[7:], '/tmp/.RadioCover.jpg')
+                                               self.showCover2('', cover)
+                                       except:
+                                               pass
                                else:
                                        downloadPage(cover, '/tmp/.RadioCover.jpg').addCallback(self.showCover2, cover)
                elif CoverSize == "small" and self.playerMode == 'RADIO':
@@ -2069,8 +2072,11 @@ class SimplePlayer(Screen, M3U8Player, CoverSearchHelper, SimpleSeekHelper, Simp
                                if "static.rad.io" in cover or "static.radio" in cover:
                                        cover = "file:///usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/images/none.png"
                                if cover.startswith('file://'):
-                                       shutil.copyfile(cover[7:], '/tmp/.RadioCover.jpg')
-                                       self.showCover2('', cover)
+                                       try:
+                                               shutil.copyfile(cover[7:], '/tmp/.RadioCover.jpg')
+                                               self.showCover2('', cover)
+                                       except:
+                                               pass
                                else:
                                        downloadPage(cover, '/tmp/.RadioCover.jpg').addCallback(self.showCover2, cover)
                elif self.playerMode != 'RADIO':
@@ -2235,16 +2241,16 @@ class SimpleConfig(Screen, ConfigListScreenExt):
                self.configlist.append(getConfigListEntry(_('Use SP number seek:'), config_mp.mediaportal.sp_use_number_seek))
                self._spacer()
                self.configlist.append(getConfigListEntry(_("YOUTUBE"), ))
-               self.configlist.append(getConfigListEntry(_("Highest resolution for playback:"), config_mp.mediaportal.youtubeprio, False))
+               self.configlist.append(getConfigListEntry(_("Highest resolution for playback:"), config_mp.mediaportal.youtubeprio))
                self.configlist.append(getConfigListEntry(_("Enable DASH format (no seeking possible):"), config_mp.mediaportal.youtubeenabledash, True))
                if config_mp.mediaportal.youtubeenabledash.value:
-                       self.configlist.append(getConfigListEntry(_("Use DASH format for 480p:"), config_mp.mediaportal.youtubeenabledash480p, False))
-                       self.configlist.append(getConfigListEntry(_("Use DASH format for 720p:"), config_mp.mediaportal.youtubeenabledash720p, False))
+                       self.configlist.append(getConfigListEntry(_("Use DASH format for 480p:"), config_mp.mediaportal.youtubeenabledash480p))
+                       self.configlist.append(getConfigListEntry(_("Use DASH format for 720p:"), config_mp.mediaportal.youtubeenabledash720p))
                        self.configlist.append(getConfigListEntry(_("Enable VP9 codec (required for resolutions >1080p):"), config_mp.mediaportal.youtubeenablevp9, True))
                        if config_mp.mediaportal.youtubeenablevp9.value and mp_globals.model in ["one"]:
-                               self.configlist.append(getConfigListEntry(_("Enable VP9 HDR (only for resolutions 720p and higher):"), config_mp.mediaportal.youtubeenablehdr, False))
+                               self.configlist.append(getConfigListEntry(_("Enable VP9 HDR (only for resolutions 720p and higher):"), config_mp.mediaportal.youtubeenablehdr))
                        if mp_globals.model in ["one", "dm7080", "dm900", "dm920"]:
-                               self.configlist.append(getConfigListEntry(_("Enable Opus codec:"), config_mp.mediaportal.youtubeenableopus, False))
+                               self.configlist.append(getConfigListEntry(_("Enable Opus codec:"), config_mp.mediaportal.youtubeenableopus))
                self._spacer()
                self.configlist.append(getConfigListEntry(_("RADIO"), ))
                self.configlist.append(getConfigListEntry(_('Radio cover:'), config_mp.mediaportal.sp_radio_cover))
index 7a45e4a..72b7d0f 100644 (file)
@@ -143,6 +143,7 @@ class get_stream_link:
                if stream_url:
                                mp_globals.realdebrid = True
                                mp_globals.premiumize = False
+                               stream_url = stream_url.replace(' ','%2520')
                                self._callback(stream_url)
                elif self.prz == 1 and config_mp.mediaportal.premiumize_use.value:
                        self.rdb = 0
@@ -163,10 +164,10 @@ class get_stream_link:
                                        filename = ''
                                        if "&f=" in stream_url:
                                                file = url[1].split('&f=')
-                                               sig = "&sig=" + file[0].replace('%2F','%252F').replace('%3D','%253D').replace('%2B','%252B')
+                                               sig = "&sig=" + file[0]#.replace('%2F','%252F').replace('%3D','%253D').replace('%2B','%252B')
                                                filename = "&f=" + file[1]
                                        else:
-                                               sig = "&sig=" + url[1].replace('%2F','%252F').replace('%3D','%253D').replace('%2B','%252B')
+                                               sig = "&sig=" + url[1]#.replace('%2F','%252F').replace('%3D','%253D').replace('%2B','%252B')
                                        url = url[0] + sig + filename
                                else:
                                        url = stream_url
@@ -692,19 +693,19 @@ class get_stream_link:
                                twAgentGetPage(link, agent=agent).addCallback(self.vidfast).addErrback(self.errorload)
 
                        elif re.search('verystream\.com', data, re.S):
-                               if "/e/" in data:
-                                       link = data
+                               vid = re.search('.*?/(?:stream|e)/(.*?)(?:/|$)', data, re.S)
+                               if vid:
+                                       link = "https://verystream.com/e/" + vid.group(1)
                                else:
-                                       vid = re.search('.*?/stream/(.*?)(?:/|$)', data, re.S)
-                                       if vid:
-                                               link = "https://verystream.com/e/" + vid.group(1)
-                                       else:
-                                               self.stream_not_found()
-                                               return
+                                       self.stream_not_found()
+                                       return
                                id = link.strip('/').rsplit('/')[-1]
                                self.agent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36'
                                mp_globals.player_agent = self.agent
-                               self.referer = 'https://filmpalast.to'
+                               if not mp_globals.veryref:
+                                       self.referer = 'https://filmpalast.to'
+                               else:
+                                       self.referer = mp_globals.veryref
                                self.retry = 0
                                twAgentGetPage(link, agent=self.agent, headers={'referer':self.referer}).addCallback(self.verystream, id, link).addErrback(self.errorload)
 
@@ -744,6 +745,7 @@ class get_stream_link:
                self.fallback = False
 
        def stream_not_found(self):
+               mp_globals.veryref = ""
                message = self.session.open(MessageBoxExt, _("Stream not found, try another Stream Hoster."), MessageBoxExt.TYPE_INFO, timeout=5)
 
        def only_premium(self):
index f66419c..d2bf0d8 100644 (file)
@@ -209,7 +209,7 @@ class youtubeUrl(object):
                '172' : 9, #VORBIS 256
                '171' : 10, #VORBIS 128
        }
-       if config_mp.mediaportal.youtubeenableopus.value:
+       if config_mp.mediaportal.youtubeenableopus.value and mp_globals.model in ["one", "dm7080", "dm900", "dm920"]:
                self.AUDIO_FMT_PRIORITY_MAP.update({
                '251' : 3, #Opus 160
                '250' : 5, #Opus 70
@@ -486,9 +486,9 @@ class youtubeUrl(object):
        for each in match_sec_m3u8:
                bandwith,url = each
                bandwith_list.append((int(bandwith),url))
-       _, best = min((abs(int(x[0]) - bw), x) for x in bandwith_list)
+       _x, best = min((abs(int(x[0]) - bw), x) for x in bandwith_list)
        url = best[1]
-       url = url.replace('%2F','%252F').replace('%3D','%253D').replace('%2B','%252B').replace('%3B','%253B')
+       #url = url.replace('%2F','%252F').replace('%3D','%253D').replace('%2B','%252B').replace('%3B','%253B')
        self.__callBack(url)
 
   def getRedirect(self, redir_url, url):
index 52f6d11..13dcf8b 100644 (file)
@@ -1,4 +1,4 @@
-<screen backgroundColor="#80ffffff" name="ChoiceBoxExt" position="center,center" size="1264,467" title="Input" flags="wfNoBorder">
+<screen backgroundColor="#80ffffff" name="ChoiceBoxExt" position="center,center" size="1264,467" zPosition="9999" title="Input" flags="wfNoBorder">
     <widget name="title" position="2,2" size="1260,60" font="mediaportal_clean;40" backgroundColor="#20000000" foregroundColor="#00ffffff" zPosition="1" halign="center" valign="center" transparent="1" />
     <widget name="bgup" position="2,2" size="1260,60" backgroundColor="#20000000" />
     <widget name="bgdown" position="2,64" size="1260,400" backgroundColor="#20000000" />
index 696c27a..99602f5 100644 (file)
@@ -1,4 +1,4 @@
-<screen name="VirtualKeyBoardExtInputHelpDialog" position="664,794" zPosition="9999" size="605,200" backgroundColor="#80ffffff" flags="wfNoBorder">
+<screen name="VirtualKeyBoardExtInputHelpDialog" position="664,794" zPosition="9998" size="605,200" backgroundColor="#80ffffff" flags="wfNoBorder">
     <eLabel position="2,2" size="601,196" backgroundColor="#20000000" zPosition="-1" />
     <widget name="key1" position="10,10" size="195,45" font="mediaportal;27" halign="center" valign="center" foregroundColor="#00ffffff" backgroundColor="#20000000" />
     <widget name="key2" position="205,10" size="195,45" font="mediaportal;27" halign="center" valign="center" foregroundColor="#00ffffff" backgroundColor="#20000000" />
index b197974..37b4685 100644 (file)
@@ -1,8 +1,6 @@
-<screen position="center,center" size="910,245" title="" backgroundColor="#80ffffff" flags="wfNoBorder" name="PluginUserDefault">
-    <widget name="config" position="15,80" size="880,150" scrollbarMode="showOnDemand" itemHeight="40" zPosition="1" transparent="1" />
-    <eLabel name="bg conf" position="2,64" size="906,179" backgroundColor="#20000000" />
-    <eLabel name="bg title" position="2,2" size="906,60" backgroundColor="#20000000" />
-    <widget name="title" position="2,2" size="906,60" font="mediaportal_clean;40" backgroundColor="#20000000" foregroundColor="#00ffffff" zPosition="1" halign="center" valign="center" />
-       <eLabel name="button blue" position="690,225" size="200,2" backgroundColor="#000064c7" zPosition="1" />
-       <widget name="F4" position="690,185" size="200,40" transparent="1" font="mediaportal; 25" backgroundColor="#26181d20" foregroundColor="#00ffffff" valign="center" halign="center" zPosition="1" />      
+<screen position="center,center" size="1300,250" title="" backgroundColor="#80ffffff" flags="wfNoBorder" name="PluginUserDefault">
+    <widget name="config" position="10,75" size="1280,165" scrollbarMode="showOnDemand" itemHeight="40" zPosition="1" />
+    <eLabel name="bg conf" position="2,64" size="1296,184" backgroundColor="#20000000" />
+    <eLabel name="bg title" position="2,2" size="1296,60" backgroundColor="#20000000" />
+    <widget name="title" position="2,2" size="1296,60" font="mediaportal_clean;40" backgroundColor="#20000000" foregroundColor="#00ffffff" zPosition="1" halign="center" valign="center" />
 </screen>
\ No newline at end of file
index c446ef5..169a161 100644 (file)
@@ -1,17 +1,17 @@
-<screen name="VirtualKeyBoardExt" backgroundColor="#80ffffff" position="285,73" size="1350,933" zPosition="9998" title="" flags="wfNoBorder">
+<screen name="VirtualKeyBoardExt" backgroundColor="#80ffffff" position="285,73" size="1350,933" zPosition="9997" title="" flags="wfNoBorder">
     <widget name="title" position="2,2" size="1346,60" font="mediaportal_clean;40" backgroundColor="#20000000" foregroundColor="#00ffffff" zPosition="1" halign="center" valign="center" />
-    <widget source="country" render="Pixmap" position="1250,210" size="75,50" alphatest="on" zPosition="2">
-        <convert type="ValueToPixmap">LanguageCode</convert>
+    <widget source="country" render="Pixmap" position="1250,210" size="50,50" alphatest="on" zPosition="2">
+        <convert type="MPValueToPixmap">LanguageCode</convert>
     </widget>
     <widget name="header" position="2,65" size="1346,60" font="mediaportal;35" transparent="1" noWrap="1" foregroundColor="#00ffffff" zPosition="1" valign="center" halign="center" />
     <widget name="text" position="175,128" size="1000,60" font="mediaportal;45" transparent="1" noWrap="1" halign="left" zPosition="1" />
     <widget name="list" position="193,225" size="960,270" selectionDisabled="1" transparent="1" itemHeight="45" zPosition="2" />
-    <widget name="suggestionlist" position="175,533" size="1000,174" selectionDisabled="1" transparent="1" scrollbarMode="showOnDemand" itemHeight="35" zPosition="1" />
+    <widget name="suggestionlist" position="175,533" size="1000,175" selectionDisabled="1" transparent="1" scrollbarMode="showOnDemand" itemHeight="35" zPosition="1" />
     <widget name="captcha" position="1040,721" size="300,200" transparent="1" alphatest="on" zPosition="1" />
     <eLabel name="title" position="2,2" size="1346,60" backgroundColor="#20000000" />
     <eLabel name="header" position="2,65" size="1346,60" backgroundColor="#20000000" />
     <eLabel name="text" position="2,128" size="1346,60" backgroundColor="#20000000" />
     <eLabel name="list" position="2,191" size="1346,337" backgroundColor="#20000000" />
-    <eLabel name="suggestionlist" position="2,531" size="1346,177" backgroundColor="#20000000" />
-    <eLabel name="bg down" position="2,711" size="1346,220" backgroundColor="#20000000" />
+    <eLabel name="suggestionlist" position="2,531" size="1346,181" backgroundColor="#20000000" />
+    <eLabel name="bg down" position="2,715" size="1346,216" backgroundColor="#20000000" />
 </screen>
\ No newline at end of file
diff --git a/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins_1080/clean_fhd/images/DE.png b/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins_1080/clean_fhd/images/DE.png
deleted file mode 100644 (file)
index 0d3621b..0000000
Binary files a/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins_1080/clean_fhd/images/DE.png and /dev/null differ
diff --git a/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins_1080/clean_fhd/images/DEUS.png b/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins_1080/clean_fhd/images/DEUS.png
deleted file mode 100644 (file)
index 803ed3e..0000000
Binary files a/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins_1080/clean_fhd/images/DEUS.png and /dev/null differ
diff --git a/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins_1080/clean_fhd/images/EN.png b/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins_1080/clean_fhd/images/EN.png
deleted file mode 100644 (file)
index 3afc218..0000000
Binary files a/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins_1080/clean_fhd/images/EN.png and /dev/null differ
diff --git a/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins_1080/clean_fhd/images/ES.png b/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins_1080/clean_fhd/images/ES.png
deleted file mode 100644 (file)
index 2cfc38c..0000000
Binary files a/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins_1080/clean_fhd/images/ES.png and /dev/null differ
diff --git a/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins_1080/clean_fhd/images/FR.png b/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins_1080/clean_fhd/images/FR.png
deleted file mode 100644 (file)
index 3a3fa15..0000000
Binary files a/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins_1080/clean_fhd/images/FR.png and /dev/null differ
diff --git a/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins_1080/clean_fhd/images/GR.png b/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins_1080/clean_fhd/images/GR.png
deleted file mode 100644 (file)
index 7573309..0000000
Binary files a/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins_1080/clean_fhd/images/GR.png and /dev/null differ
diff --git a/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins_1080/clean_fhd/images/IN.png b/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins_1080/clean_fhd/images/IN.png
deleted file mode 100644 (file)
index ab8c3ac..0000000
Binary files a/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins_1080/clean_fhd/images/IN.png and /dev/null differ
diff --git a/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins_1080/clean_fhd/images/IT.png b/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins_1080/clean_fhd/images/IT.png
deleted file mode 100644 (file)
index a4edb8a..0000000
Binary files a/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins_1080/clean_fhd/images/IT.png and /dev/null differ
diff --git a/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins_1080/clean_fhd/images/JP.png b/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins_1080/clean_fhd/images/JP.png
deleted file mode 100644 (file)
index 88b9ad6..0000000
Binary files a/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins_1080/clean_fhd/images/JP.png and /dev/null differ
diff --git a/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins_1080/clean_fhd/images/RU.png b/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins_1080/clean_fhd/images/RU.png
deleted file mode 100644 (file)
index 2d6d8d0..0000000
Binary files a/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins_1080/clean_fhd/images/RU.png and /dev/null differ
diff --git a/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins_1080/clean_fhd/images/TR.png b/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins_1080/clean_fhd/images/TR.png
deleted file mode 100644 (file)
index e71d0df..0000000
Binary files a/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins_1080/clean_fhd/images/TR.png and /dev/null differ
index 4ee1a1c..50affc6 100644 (file)
@@ -1,4 +1,4 @@
-<screen backgroundColor="#80ffffff" name="ChoiceBoxExt" position="center,center" size="842,311" title="Input" flags="wfNoBorder">
+<screen backgroundColor="#80ffffff" name="ChoiceBoxExt" position="center,center" size="842,311" zPosition="9999" title="Input" flags="wfNoBorder">
     <widget name="title" position="1,1" size="840,40" font="mediaportal_clean;26" backgroundColor="#20000000" foregroundColor="#00ffffff" zPosition="1" halign="center" valign="center" transparent="1" />
     <widget name="bgup" position="1,1" size="840,40" backgroundColor="#20000000" />
     <widget name="bgdown" position="1,42" size="840,266" backgroundColor="#20000000" />
index 75c6ada..cbe9c38 100644 (file)
@@ -1,4 +1,4 @@
-<screen name="VirtualKeyBoardExtInputHelpDialog" position="442,529" zPosition="9999" size="403,133" backgroundColor="#80ffffff" flags="wfNoBorder">
+<screen name="VirtualKeyBoardExtInputHelpDialog" position="442,529" zPosition="9998" size="403,133" backgroundColor="#80ffffff" flags="wfNoBorder">
     <eLabel position="1,1" size="400,131" backgroundColor="#20000000" zPosition="-1" />
     <widget name="key1" position="6,6" size="130,30" font="mediaportal;18" halign="center" valign="center" foregroundColor="#00ffffff" backgroundColor="#20000000" />
     <widget name="key2" position="136,6" size="130,30" font="mediaportal;18" halign="center" valign="center" foregroundColor="#00ffffff" backgroundColor="#20000000" />
index e99f3c2..12ae340 100644 (file)
@@ -1,8 +1,6 @@
-<screen position="center,center" size="606,163" title="" backgroundColor="#80ffffff" flags="wfNoBorder" name="PluginUserDefault">
-    <widget name="config" position="10,53" size="586,100" scrollbarMode="showOnDemand" itemHeight="26" zPosition="1" transparent="1" />
-    <eLabel name="bg conf" position="1,42" size="604,120" backgroundColor="#20000000" />
-    <eLabel name="bg title" position="1,1" size="604,40" backgroundColor="#20000000" />
-    <widget name="title" position="1,1" size="604,40" font="mediaportal_clean;26" backgroundColor="#20000000" foregroundColor="#00ffffff" zPosition="1" halign="center" valign="center" />
-       <eLabel name="button blue" position="460,150" size="133,1" backgroundColor="#000064c7" zPosition="1" />
-       <widget name="F4" position="460,123" size="133,26" transparent="1" font="mediaportal; 16" backgroundColor="#26181d20" foregroundColor="#00ffffff" valign="center" halign="center" zPosition="1" />      
+<screen position="center,center" size="866,166" title="" backgroundColor="#80ffffff" flags="wfNoBorder" name="PluginUserDefault">
+    <widget name="config" position="6,50" size="853,110" scrollbarMode="showOnDemand" itemHeight="26" zPosition="1" />
+    <eLabel name="bg conf" position="1,42" size="864,122" backgroundColor="#20000000" />
+    <eLabel name="bg title" position="1,1" size="864,40" backgroundColor="#20000000" />
+    <widget name="title" position="1,1" size="864,40" font="mediaportal_clean;26" backgroundColor="#20000000" foregroundColor="#00ffffff" zPosition="1" halign="center" valign="center" />
 </screen>
\ No newline at end of file
index 8cd2a3f..73f9459 100644 (file)
@@ -1,6 +1,6 @@
-<screen name="VirtualKeyBoardExt" backgroundColor="#80ffffff" position="190,48" size="900,622" zPosition="9998" title="" flags="wfNoBorder">
+<screen name="VirtualKeyBoardExt" backgroundColor="#80ffffff" position="190,48" size="900,622" zPosition="9997" title="" flags="wfNoBorder">
     <widget name="title" position="1,1" size="897,40" font="mediaportal_clean;26" backgroundColor="#20000000" foregroundColor="#00ffffff" zPosition="1" halign="center" valign="center" />
-    <widget source="country" render="Pixmap" position="833,140" size="50,33" alphatest="on" zPosition="2">
+    <widget source="country" render="Pixmap" position="833,140" size="33,33" alphatest="on" zPosition="2">
         <convert type="ValueToPixmap">LanguageCode</convert>
     </widget>
     <widget name="header" position="1,43" size="897,40" font="mediaportal;23" transparent="1" noWrap="1" foregroundColor="#00ffffff" zPosition="1" valign="center" halign="center" />
@@ -11,7 +11,7 @@
     <eLabel name="title" position="1,1" size="897,40" backgroundColor="#20000000" />
     <eLabel name="header" position="1,43" size="897,40" backgroundColor="#20000000" />
     <eLabel name="text" position="1,85" size="897,40" backgroundColor="#20000000" />
-    <eLabel name="list" position="1,127" size="897,225" backgroundColor="#20000000" />
-    <eLabel name="suggestionlist" position="1,354" size="897,118" backgroundColor="#20000000" />
-    <eLabel name="bg down" position="1,474" size="897,146" backgroundColor="#20000000" />
+    <eLabel name="list" position="1,127" size="897,224" backgroundColor="#20000000" />
+    <eLabel name="suggestionlist" position="1,354" size="897,120" backgroundColor="#20000000" />
+    <eLabel name="bg down" position="1,476" size="897,144" backgroundColor="#20000000" />
 </screen>
\ No newline at end of file
diff --git a/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins_720/clean_hd/images/DE.png b/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins_720/clean_hd/images/DE.png
deleted file mode 100644 (file)
index ce851df..0000000
Binary files a/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins_720/clean_hd/images/DE.png and /dev/null differ
diff --git a/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins_720/clean_hd/images/DEUS.png b/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins_720/clean_hd/images/DEUS.png
deleted file mode 100644 (file)
index 13018a0..0000000
Binary files a/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins_720/clean_hd/images/DEUS.png and /dev/null differ
diff --git a/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins_720/clean_hd/images/EN.png b/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins_720/clean_hd/images/EN.png
deleted file mode 100644 (file)
index 924d0b2..0000000
Binary files a/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins_720/clean_hd/images/EN.png and /dev/null differ
diff --git a/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins_720/clean_hd/images/ES.png b/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins_720/clean_hd/images/ES.png
deleted file mode 100644 (file)
index 6e9ff29..0000000
Binary files a/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins_720/clean_hd/images/ES.png and /dev/null differ
diff --git a/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins_720/clean_hd/images/FR.png b/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins_720/clean_hd/images/FR.png
deleted file mode 100644 (file)
index f6d466b..0000000
Binary files a/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins_720/clean_hd/images/FR.png and /dev/null differ
diff --git a/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins_720/clean_hd/images/GR.png b/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins_720/clean_hd/images/GR.png
deleted file mode 100644 (file)
index 04ffb5f..0000000
Binary files a/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins_720/clean_hd/images/GR.png and /dev/null differ
diff --git a/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins_720/clean_hd/images/IN.png b/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins_720/clean_hd/images/IN.png
deleted file mode 100644 (file)
index 869f448..0000000
Binary files a/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins_720/clean_hd/images/IN.png and /dev/null differ
diff --git a/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins_720/clean_hd/images/IT.png b/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins_720/clean_hd/images/IT.png
deleted file mode 100644 (file)
index 8082f52..0000000
Binary files a/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins_720/clean_hd/images/IT.png and /dev/null differ
diff --git a/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins_720/clean_hd/images/JP.png b/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins_720/clean_hd/images/JP.png
deleted file mode 100644 (file)
index ea7a269..0000000
Binary files a/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins_720/clean_hd/images/JP.png and /dev/null differ
diff --git a/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins_720/clean_hd/images/RU.png b/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins_720/clean_hd/images/RU.png
deleted file mode 100644 (file)
index 70b5625..0000000
Binary files a/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins_720/clean_hd/images/RU.png and /dev/null differ
diff --git a/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins_720/clean_hd/images/TR.png b/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins_720/clean_hd/images/TR.png
deleted file mode 100644 (file)
index c4c61ef..0000000
Binary files a/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins_720/clean_hd/images/TR.png and /dev/null differ