import enigma2-plugin-extensions-mediaportal 2020022301 v2020022301
authorChristian Weiske <cweiske@cweiske.de>
Mon, 24 Feb 2020 00:15:24 +0000 (01:15 +0100)
committerChristian Weiske <cweiske@cweiske.de>
Mon, 24 Feb 2020 00:15:24 +0000 (01:15 +0100)
34 files changed:
usr/lib/enigma2/python/Components/Converter/mp_audioinfo.py
usr/lib/enigma2/python/Components/Renderer/mp_AudioIcon.py
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/additions.xml
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/mediatheken/orf.py
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/mediatheken/popcorntimes.py [new file with mode: 0644]
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/mediatheken/primevideo.py
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/porn/befuck.py [deleted file]
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/porn/ddfnetwork.py [deleted file]
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/porn/elladies.py [deleted file]
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/porn/eporner.py
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/porn/extremetube.py
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/porn/hclips.py [deleted file]
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/porn/kink.py [deleted file]
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/porn/nubilefilms.py
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/porn/porn7.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/txxx.py
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/porn/updatetube.py [deleted file]
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/porn/vintagetube.py
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/porn/wetplace.py [deleted file]
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/porn/xhamster.py
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/porn/youporn.py
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/sport/dazn.py [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/hosters/datoporn.py
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/resources/hosters/hosters.xml
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/resources/hosters/jetload.py [new file with mode: 0644]
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/resources/hosters/mixdrop.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

index 5497afe..8739baa 100644 (file)
@@ -26,6 +26,11 @@ try:
 except:
        pass
 
+try:
+       AUDIO_FORMATS.update({iAt.atTRUEHD:("TRUEHD",_("TRUEHD"), -1),})
+except:
+       pass
+
 class mp_audioinfo(Poll, Converter, object):
        GET_AUDIO_ICON = 0
        GET_AUDIO_CODEC = 1
@@ -50,6 +55,7 @@ class mp_audioinfo(Poll, Converter, object):
                        "10_dts": ("dts",),
                        "11_pcm": ("pcm",),
                        "12_mpeg": ("mpeg",),
+                       "13_dolbytruehd": ("truehd",),
                        }
                self.codec_info = { "dolbydigitalplus" : ("51", "20", "71"),
                        "dolbydigital" : ("51", "20", "10", "71"),
index c45ce99..f2133c1 100644 (file)
@@ -56,7 +56,7 @@ class mp_AudioIcon(Renderer):
                        if fileExists(pngname):
                                return pngname
                for path in self.searchPaths:
-                       pngname = path + self.path + audioName + ".png"
+                       pngname = path + audioName + ".png"
                        if fileExists(pngname):
                                return pngname
                return ""
\ No newline at end of file
index 48cf452..55644f7 100644 (file)
@@ -2,6 +2,7 @@
 <plugins>
        <set name="additions">
                <!--sport section-->
+               <plugin type="mod" modfile="sport.dazn" confopt="showdazn" default="True" confcat="sport" gz="0" name="DAZN" icon="dazn" filter="Sport" screen="daznScreen" param1="" param2=""/>
                <plugin type="mod" modfile="sport.pokerstars" confopt="showpokerstars" default="True" confcat="sport" gz="0" name="Pokerstars.tv" icon="pokerstars" filter="Sport" screen="pokerGenreScreen" param1="" param2=""/>
                <!--music section-->
                <plugin type="mod" modfile="music.mtvdecharts" confopt="showMTVdeCharts" default="True" confcat="music" gz="0" name="MTV Charts" icon="mtvdecharts" filter="Music" screen="MTVdeChartsGenreScreen" param1="" param2=""/>
@@ -42,6 +43,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.popcorntimes" confopt="showpopcorntimes" default="True" confcat="mediatheken" gz="0" name="Popcorntimes" icon="popcorntimes" filter="Mediathek" screen="popcorntimesGenreScreen" 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=""/>
@@ -57,8 +59,6 @@
                <plugin type="mod" modfile="porn.camsoda" confopt="showcamsoda" default="False" confcat="porn" gz="0" name="CamSoda" icon="camsoda" filter="Porn" screen="camsodaGenreScreen" param1="" param2="" />
                <plugin type="mod" modfile="porn.x2search4porn" confopt="show2search4porn" default="True" confcat="porn" gz="0" name="2Search4Porn" icon="2search4porn" filter="Porn" screen="toSearchForPorn" param1="" param2=""/>
                <plugin type="mod" modfile="porn.brazzers" confopt="showbrazzerscom" default="False" confcat="porn" gz="0" name="Brazzers.com" icon="brazzers" filter="Porn" screen="brazzersGenreScreen" param1="" param2="" search="1" delim="+" searchurl="%s" searchscreen="brazzersFilmScreen" searchparam=""/>
-               <plugin type="mod" modfile="porn.ddfnetwork" confopt="showddfnetworkcom" default="False" confcat="porn" gz="0" name="DDFNetwork.com" icon="ddfnetwork" filter="Porn" screen="ddfnetworkGenreScreen" param1="" param2="" search="1" delim="+" searchurl="%s" searchscreen="ddfnetworkFilmScreen" searchparam=""/>
-               <plugin type="mod" modfile="porn.kink" confopt="showkinkcom" default="False" confcat="porn" gz="0" name="Kink.com" icon="kink" filter="Porn" screen="kinkGenreScreen" param1="" param2="" search="1" delim="+" searchurl="%s" searchscreen="kinkFilmScreen" searchparam=""/>
                <plugin type="mod" modfile="porn.mofos" confopt="showmofoscom" default="False" confcat="porn" gz="0" name="Mofos.com" icon="mofos" filter="Porn" screen="mofosGenreScreen" param1="" param2="" search="0" delim="" searchurl="" searchscreen="" searchparam=""/>
                <plugin type="mod" modfile="porn.nubilefilms" confopt="shownubilefilms" default="False" confcat="porn" gz="0" name="Nubilefilms.com" icon="nubilefilms" filter="Porn" screen="nubilefilmsGenreScreen" param1="" param2="" search="0" delim="" searchurl="" searchscreen="" searchparam=""/>
                <plugin type="mod" modfile="porn.teamskeet" confopt="showteamskeetcom" default="False" confcat="porn" gz="0" name="TeamSkeet.com" icon="teamskeet" filter="Porn" screen="teamskeetGenreScreen" param1="" param2="" search="1" delim="%20" searchurl="%s" searchscreen="teamskeetFilmScreen" searchparam=""/>
                <plugin type="mod" modfile="porn.porn7" confopt="showbabestube" default="False" confcat="porn" gz="0" name="Babestube" icon="babestube" filter="Porn" screen="porn7GenreScreen" param1="babestube" param2="" search="1" delim="-" searchurl="%s" searchscreen="porn7FilmScreen" searchparam=", &quot;Babestube.com&quot;, &quot;https://www.babestube.com&quot;"/>
                <plugin type="mod" modfile="porn.porn7" confopt="showinterracial" default="False" confcat="porn" gz="0" name="Interracial" icon="interracial" filter="Porn" screen="porn7GenreScreen" param1="interracial" param2="" search="1" delim="-" searchurl="%s" searchscreen="porn7FilmScreen" searchparam=", &quot;Interracial.com&quot;, &quot;https://www.interracial.com&quot;"/>
                <plugin type="mod" modfile="porn.porn7" confopt="showdeviants" default="False" confcat="porn" gz="0" name="Deviants" icon="deviants" filter="Porn" screen="porn7GenreScreen" param1="deviants" param2="" search="1" delim="-" searchurl="%s" searchscreen="porn7FilmScreen" searchparam=", &quot;Deviants.com&quot;, &quot;https://www.deviants.com&quot;"/>
-               <!--<plugin type="mod" modfile="porn.porn7" confopt="showvoyeurporno" default="False" confcat="porn" gz="0" name="VoyeurPorno" icon="voyeurporno" filter="Porn" screen="porn7GenreScreen" param1="voyeurporno" param2="" search="1" delim="-" searchurl="%s" searchscreen="porn7FilmScreen" searchparam=", &quot;VoyeurPorno.com&quot;, &quot;https://www.voyeurporno.com&quot;"/>-->
                <plugin type="mod" modfile="porn.pornhat" confopt="showpornhat" default="False" confcat="porn" gz="0" name="PornHat" icon="pornhat" filter="Porn" screen="pornhatGenreScreen" param1="pornhat" param2="" search="1" delim="-" searchurl="%s" searchscreen="pornhatFilmScreen" searchparam=", &quot;PornHat.com&quot;, &quot;https://www.pornhat.com&quot;"/>
                <plugin type="mod" modfile="porn.pornhat" confopt="showokxxx" default="False" confcat="porn" gz="0" name="OK.XXX" icon="okxxx" filter="Porn" screen="pornhatGenreScreen" param1="okxxx" param2="" search="1" delim="-" searchurl="%s" searchscreen="pornhatFilmScreen" searchparam=", &quot;OK.XXX&quot;, &quot;https://www.ok.xxx&quot;"/>
                <plugin type="mod" modfile="porn.tnaflix" confopt="showtnaflix" default="False" confcat="porn" gz="0" name="TnAflix" icon="tnaflix" filter="Porn" screen="TnAflixGenreScreen" param1="tnaflix" param2="" search="1" delim="%20" searchurl="%s" searchscreen="TnAflixFilmScreen" searchparam=", &quot;TnAflix.com&quot;, &quot;https://www.tnaflix.com&quot;"/>
                <plugin type="mod" modfile="porn.tnaflix" confopt="showempflix" default="False" confcat="porn" gz="0" name="Empflix" icon="empflix" filter="Porn" screen="TnAflixGenreScreen" param1="empflix" param2="" search="1" delim="%20" searchurl="%s" searchscreen="TnAflixFilmScreen" searchparam=", &quot;Empflix.com&quot;, &quot;https://www.empflix.com&quot;"/>
-               <plugin type="mod" modfile="porn.txxx" confopt="showtxxx" default="False" confcat="porn" gz="0" name="TXXX" icon="txxx" filter="Porn" screen="txxxGenreScreen" param1="" param2="" search="1" delim="+" searchurl="%s" searchscreen="txxxFilmScreen" searchparam=""/>
-               <plugin type="mod" modfile="porn.hclips" confopt="showhclips" default="False" confcat="porn" gz="0" name="HClips" icon="hclips" filter="Porn" screen="hclipsGenreScreen" param1="" param2="" search="1" delim="+" searchurl="%s" searchscreen="hclipsFilmScreen" searchparam=""/>
+               <plugin type="mod" modfile="porn.txxx" confopt="showtxxx" default="False" confcat="porn" gz="0" name="TXXX" icon="txxx" filter="Porn" screen="txxxGenreScreen" param1="txxx" param2="" search="1" delim="+" searchurl="%s" searchscreen="txxxFilmScreen" searchparam=", &quot;TXXX.com&quot;, &quot;https://txxx.com&quot;"/>
+               <plugin type="mod" modfile="porn.txxx" confopt="showhclips" default="False" confcat="porn" gz="0" name="HClips" icon="hclips" filter="Porn" screen="txxxGenreScreen" param1="hclips" param2="" search="1" delim="+" searchurl="%s" searchscreen="txxxFilmScreen" searchparam=", &quot;HClips.com&quot;, &quot;https://hclips.com&quot;"/>
                <plugin type="mod" modfile="porn.upornia" confopt="showupornia" default="False" confcat="porn" gz="0" name="Upornia" icon="upornia" filter="Porn" screen="uporniaGenreScreen" param1="" param2="" search="1" delim="+" searchurl="%s" searchscreen="uporniaFilmScreen" searchparam=""/>
                <plugin type="mod" modfile="porn.hdzog" confopt="showhdzog" default="False" confcat="porn" gz="0" name="HDZog" icon="hdzog" filter="Porn" screen="hdzogGenreScreen" param1="" param2="" search="1" delim="+" searchurl="%s" searchscreen="hdzogFilmScreen" searchparam=""/>
                <plugin type="mod" modfile="porn.hotmovs" confopt="showhotmovs" default="False" confcat="porn" gz="0" name="HotMovs" icon="hotmovs" filter="Porn" screen="hotmovsGenreScreen" param1="" param2="" search="1" delim="+" searchurl="%s" searchscreen="hotmovsFilmScreen" searchparam=""/>
                <plugin type="mod" modfile="porn.cliphunter" confopt="showcliphunter" default="False" confcat="porn" gz="0" name="cliphunter" icon="cliphunter" filter="Porn" screen="cliphunterGenreScreen" param1="" param2="" search="1" delim="%20" searchurl="%s" searchscreen="cliphunterFilmScreen" searchparam=""/>
                <plugin type="mod" modfile="porn.realgfporn" confopt="showrealgfporn" default="False" confcat="porn" gz="0" name="RealGFPorn" icon="realgfporn" filter="Porn" screen="realgfpornGenreScreen" param1="" param2="" search="1" delim="-" searchurl="https://www.realgfporn.com/search/%s/page" searchscreen="realgfpornFilmScreen" searchparam=""/>
                <plugin type="mod" modfile="porn.hotscope" confopt="showhotscope" default="False" confcat="porn" gz="0" name="Hotscope" icon="hotscope" filter="Porn" screen="hotscopeGenreScreen" param1="" param2="" search="1" delim="%20" searchurl="%s" searchscreen="hotscopeFilmScreen" searchparam=""/>
-               <plugin type="mod" modfile="porn.elladies" confopt="showelladies" default="False" confcat="porn" gz="0" name="EL-Ladies" icon="elladies" filter="Porn" screen="elladiesGenreScreen" param1="" param2="" search="1" delim="+" searchurl="%s" searchscreen="elladiesFilmScreen" searchparam=", &quot;&quot;"/>
                <plugin type="mod" modfile="porn.eroprofile" confopt="showeroprofile" default="False" confcat="porn" gz="0" name="EroProfile" icon="eroprofile" filter="Porn" screen="eroprofileGenreScreen" param1="" param2="" search="1" delim="+" searchurl="%s" searchscreen="eroprofileFilmScreen" searchparam=", &quot;&quot;"/>
                <plugin type="mod" modfile="porn.homemoviestube" confopt="showhomemoviestube" default="False" confcat="porn" gz="0" name="HomeMoviesTube" icon="homemoviestube" filter="Porn" screen="homemoviestubeGenreScreen" param1="" param2="" search="1" delim="-" searchurl="%s" searchscreen="homemoviestubeFilmScreen" searchparam=""/>
                <plugin type="mod" modfile="porn.lovehomeporn" confopt="showlovehomeporn" default="False" confcat="porn" gz="0" name="LoveHomePorn" icon="lovehomeporn" filter="Porn" screen="lovehomepornGenreScreen" param1="" param2="" search="1" delim="+" searchurl="%s" searchscreen="lovehomepornFilmScreen" searchparam=""/>
                <plugin type="mod" modfile="porn.sunporno" confopt="showsunporno" default="False" confcat="porn" gz="0" name="SunPorno" icon="sunporno" filter="Porn" screen="sunpornoGenreScreen" param1="" param2="" search="1" delim="+" searchurl="%s" searchscreen="sunpornoFilmScreen" searchparam=""/>
                <plugin type="mod" modfile="porn.ahme" confopt="showahme" default="False" confcat="porn" gz="0" name="Ah-Me" icon="ahme" filter="Porn" screen="ahmeGenreScreen" param1="" param2="" search="1" delim="+" searchurl="%s" searchscreen="ahmeFilmScreen" searchparam=""/>
                <plugin type="mod" modfile="porn.moviefap" confopt="showmoviefap" default="False" confcat="porn" gz="0" name="MovieFap" icon="moviefap" filter="Porn" screen="moviefapGenreScreen" param1="" param2="" search="1" delim="+" searchurl="%s" searchscreen="moviefapFilmScreen" searchparam=""/>
-               <plugin type="mod" modfile="porn.befuck" confopt="showbefuck" default="False" confcat="porn" gz="0" name="BeFuck" icon="befuck" filter="Porn" screen="befuckGenreScreen" param1="" param2="" search="1" delim="+" searchurl="%s" searchscreen="befuckListScreen" searchparam=""/>
-               <plugin type="mod" modfile="porn.updatetube" confopt="showupdatetube" default="False" confcat="porn" gz="0" name="UpdateTube" icon="updatetube" filter="Porn" screen="updatetubeGenreScreen" param1="updatetube" param2="" search="1" delim="+" searchurl="%s" searchscreen="updatetubeFilmScreen" searchparam=", &quot;UpdateTube.com&quot;, &quot;www.updatetube.com&quot;"/>
-               <plugin type="mod" modfile="porn.updatetube" confopt="showthenewporn" default="False" confcat="porn" gz="0" name="TheNewPorn" icon="thenewporn" filter="Porn" screen="updatetubeGenreScreen" param1="thenewporn" param2="" search="1" delim="+" searchurl="%s" searchscreen="updatetubeFilmScreen" searchparam=", &quot;TheNewPorn.com&quot;, &quot;www.thenewporn.com&quot;"/>
-               <plugin type="mod" modfile="porn.updatetube" confopt="showpinkrod" default="False" confcat="porn" gz="0" name="Pinkrod" icon="pinkrod" filter="Porn" screen="updatetubeGenreScreen" param1="pinkrod" param2="" search="1" delim="+" searchurl="%s" searchscreen="updatetubeFilmScreen" searchparam=", &quot;Pinkrod.com&quot;, &quot;www.pinkrod.com&quot;"/>
-               <plugin type="mod" modfile="porn.updatetube" confopt="showhotshame" default="False" confcat="porn" gz="0" name="hotshame" icon="hotshame" filter="Porn" screen="updatetubeGenreScreen" param1="hotshame" param2="" search="1" delim="+" searchurl="%s" searchscreen="updatetubeFilmScreen" searchparam=", &quot;hotshame.com&quot;, &quot;www.hotshame.com&quot;"/>
-               <plugin type="mod" modfile="porn.updatetube" confopt="showpornsharing" default="False" confcat="porn" gz="0" name="PornSharing" icon="pornsharing" filter="Porn" screen="updatetubeGenreScreen" param1="pornsharing" param2="" search="1" delim="+" searchurl="%s" searchscreen="updatetubeFilmScreen" searchparam=", &quot;pornsharing.com&quot;, &quot;www.pornsharing.com&quot;"/>
-               <plugin type="mod" modfile="porn.wetplace" confopt="showwetplace" default="False" confcat="porn" gz="0" name="WetPlace" icon="wetplace" filter="Porn" screen="wetplaceGenreScreen" param1="" param2="" search="1" delim="+" searchurl="%s" searchscreen="wetplaceFilmScreen" searchparam=""/>
        </set>
 </plugins>
\ No newline at end of file
index 0caa46d..e40e607 100644 (file)
@@ -245,7 +245,7 @@ class ORFStreamListeScreen(MPScreen):
                if folgen:
                        self.streamliste = []
                        for (title, desc, image, urls) in folgen[:-1]:
-                               url = re.search('"quality":"Q8C","quality_string":"Sehr hoch","src":"(http[s]?://apasfiis.sf.apa.at/ipad/.*?)"', urls, re.S)
+                               url = re.search('"quality":"Q8C","quality_string":"Sehr hoch(?: \(HD\)|)","src":"(http[s]?://apasfiis.sf.apa.at/ipad/.*?)"', urls, re.S)
                                if not url:
                                        url = re.search('"quality":"Q6A","quality_string":"Hoch","src":"(http[s]?://apasfiis.sf.apa.at/ipad/.*?)"', urls, re.S)
                                title = title.replace('\\"','"')
diff --git a/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/mediatheken/popcorntimes.py b/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/mediatheken/popcorntimes.py
new file mode 100644 (file)
index 0000000..0a96751
--- /dev/null
@@ -0,0 +1,237 @@
+# -*- coding: utf-8 -*-
+#######################################################################################################
+#
+#    MediaPortal for Dreambox OS
+#
+#    Coded by MediaPortal Team (c) 2013-2020
+#
+#  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 *
+import base64
+default_cover = "file://%s/popcorntimes.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
+agent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.116 Safari/537.36"
+base_url = "https://popcorntimes.tv"
+
+class popcorntimesGenreScreen(MPScreen):
+
+       def __init__(self, session):
+               MPScreen.__init__(self, session, skin='MP_Plugin', default_cover=default_cover)
+
+               self["actions"] = ActionMap(["MP_Actions"], {
+                       "0"             : self.closeAll,
+                       "ok"    : self.keyOK,
+                       "cancel": self.keyCancel
+               }, -1)
+
+               self['title'] = Label("Popcorntimes")
+               self['ContentTitle'] = Label("Genre:")
+
+               self.genreliste = []
+               self.suchString = ''
+               self.ml = MenuList([], enableWrapAround=True, content=eListboxPythonMultiContent)
+               self['liste'] = self.ml
+
+               self.onLayoutFinish.append(self.layoutFinished)
+
+       def layoutFinished(self):
+               self.genreliste.append(('Neu im Programm', '/de/neu'))
+               self.genreliste.append(('Weitere Neuerscheinungen', '/de/neu'))
+               self.genreliste.append(('Top-Filme', '/de/top-filme'))
+               self.genreliste.append(('Weitere Top-Filme', '/de/top-filme'))
+               self.genreliste.append(('Blast from the Past : Mehr als hundert Jahre alt', '/de/neu'))
+               self.genreliste.append(('Blast from the Past : 1910 - 1940', '/de/neu'))
+               self.genreliste.append(('Blast from the Past : 1940 - 1960', '/de/neu'))
+               self.genreliste.append(('Abenteuer', '/genre/abenteuer'))
+               self.genreliste.append(('Action', '/genre/action'))
+               self.genreliste.append(('Animation', '/genre/animation'))
+               self.genreliste.append(('Bollywood', '/genre/bollywood'))
+               self.genreliste.append(('Comedy', '/genre/comedy'))
+               self.genreliste.append(('Drama', '/genre/drama'))
+               self.genreliste.append(('Familie', '/genre/familie'))
+               self.genreliste.append(('Fantasy', '/genre/fantasy'))
+               self.genreliste.append(('Geschichte', '/genre/geschichte'))
+               self.genreliste.append(('Horror', '/genre/horror'))
+               self.genreliste.append(('Klassiker', '/genre/klassiker'))
+               self.genreliste.append(('Krieg', '/genre/krieg'))
+               self.genreliste.append(('Krimi', '/genre/krimi'))
+               self.genreliste.append(('Kurzfilm', '/genre/kurzfilm'))
+               self.genreliste.append(('Musik & Musicals', '/genre/musik'))
+               self.genreliste.append(('Mystery', '/genre/mystery'))
+               self.genreliste.append(('Romantik', '/genre/romantik'))
+               self.genreliste.append(('Science Fiction', '/genre/sci-fi'))
+               self.genreliste.append(('Sport', '/genre/sport'))
+               self.genreliste.append(('Stummfilm', '/genre/stummfilm'))
+               self.genreliste.append(('Thriller', '/genre/thriller'))
+               self.genreliste.append(('TV-Film', '/genre/tv-film'))
+               self.genreliste.append(('Western', '/genre/western'))
+               self.genreliste.append(('Gesundheit', '/genre/gesundheit'))
+               self.genreliste.append(('Küche und Essen', '/genre/essen'))
+               self.genreliste.append(('Reisen', '/genre/reisen'))
+               self.genreliste.append(('Technik und Wissenschaft', '/genre/technik-wissenschaft'))
+               self.genreliste.append(('Dokumentation', '/genre/doku'))
+               self.genreliste.append(('Geschichts-Dokumentationen', '/genre/geschichts-dokus'))
+               self.genreliste.append(('Kriegs-Dokumentationen', '/genre/kriegs-dokus'))
+               self.genreliste.append(('Musik-Dokumenationen', '/genre/musik-dokus'))
+               self.genreliste.append(('Natur-Dokumentation', '/genre/natur-doku'))
+               self.genreliste.append(('Sport-Dokumentationen', '/genre/sport-dokus'))
+               self.genreliste.append(('Tier-Dokumentationen', '/genre/tier-doku'))
+               self.ml.setList(map(self._defaultlistcenter, self.genreliste))
+
+       def keyOK(self):
+               Name = self['liste'].getCurrent()[0][0]
+               Url = self['liste'].getCurrent()[0][1]
+               self.session.open(popcorntimesFilmeScreen, Url, Name)
+
+class popcorntimesFilmeScreen(MPScreen, ThumbsHelper):
+
+       def __init__(self, session, Url, Name):
+               self.Link = Url
+               self.Name = Name
+               MPScreen.__init__(self, session, skin='MP_Plugin', default_cover=default_cover)
+               ThumbsHelper.__init__(self)
+
+               self["actions"] = ActionMap(["MP_Actions"], {
+                       "0"             : self.closeAll,
+                       "ok" : self.keyOK,
+                       "cancel" : self.keyCancel,
+                       "5" : self.keyShowThumb,
+                       "up" : self.keyUp,
+                       "down" : self.keyDown,
+                       "right" : self.keyRight,
+                       "left" : self.keyLeft
+               }, -1)
+
+               self['title'] = Label("Popcorntimes")
+               self['ContentTitle'] = Label("Genre: %s" % self.Name)
+
+               self.keyLocked = True
+
+               self.filmliste = []
+               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 = base_url + self.Link
+               twAgentGetPage(url, agent=agent).addCallback(self.genreData).addErrback(self.dataError)
+
+       def genreData(self, data):
+               check = re.search('class="pt-section-title">(?:Filme im Genre `|)%s(?:`|)</(.*?)(?:class="pt-section-title">|$)' % self.Name, data, re.S)
+               if check:
+                       data = check.group(1)
+                       vids = re.findall('<div class="col-xs.*?<img src="(.*?)".*?href="(.*?)".*?<h\d>(.*?)</h\d>.*?pt-video-time">(.*?)</p>.*?<p>(.*?)</p>', data, re.S)
+                       if vids:
+                               for (image, url, title, meta, desc) in vids:
+                                       url = base_url + url
+                                       if image.startswith('//'):
+                                               image = 'https:' + image
+                                       meta = stripAllTags(meta)
+                                       self.filmliste.append((title, image, url, desc, meta))
+                       else:
+                               vids = re.findall('class="pt-movie-tile.*?href="(.*?)".*?<img.*?data-src="(.*?)"\salt="(.*?)".*?.*?pt-video-time">(.*?)</p>', data, re.S)
+                               if vids:
+                                       for (url, image, title, meta) in vids:
+                                               url = base_url + url
+                                               if image.startswith('//'):
+                                                       image = 'https:' + image
+                                               meta = stripAllTags(meta)
+                                               self.filmliste.append((title, image, url, '', meta))
+               else:
+                       check = re.search('class="pt-hero(.*?)class="pt-section', data, re.S)
+                       if check:
+                               data = check.group(1)
+                               vids = re.findall('class="pt-movie-tile.*?href="(.*?)".*?<img.*?data-src="(.*?)"\salt="(.*?)".*?.*?class="pt-tile-desc">(.*?)</p>.*?pt-video-time">(.*?)</p>', data, re.S)
+                               if vids:
+                                       for (url, image, title, desc, meta) in vids:
+                                               url = base_url + url
+                                               if image.startswith('//'):
+                                                       image = 'https:' + image
+                                               meta = stripAllTags(meta)
+                                               self.filmliste.append((title, image, url, desc, meta))
+               if len(self.filmliste) == 0:
+                       self.filmliste.append((_("No videos found!"), default_cover, None, '', ''))
+               self.ml.setList(map(self._defaultlistleft, self.filmliste))
+               self.keyLocked = False
+               self.th_ThumbsQuery(self.filmliste, 0, 2, 1, None, None, 1, 1)
+               self.showInfos()
+
+       def showInfos(self):
+               Title = self['liste'].getCurrent()[0][0]
+               Image = self['liste'].getCurrent()[0][1]
+               Descr = self['liste'].getCurrent()[0][3]
+               Meta = self['liste'].getCurrent()[0][4]
+               self['name'].setText(Title)
+               self['handlung'].setText(Meta + "\n\n" + Descr)
+               CoverHelper(self['coverArt']).getCover(Image)
+
+       def keyOK(self):
+               if self.keyLocked:
+                       return
+               Link = self['liste'].getCurrent()[0][2]
+               if Link:
+                       twAgentGetPage(Link, agent=agent).addCallback(self.getStream).addErrback(self.dataError)
+
+       def getStream(self, data):
+               Title = self['liste'].getCurrent()[0][0]
+               Image = self['liste'].getCurrent()[0][1]
+               Link = self['liste'].getCurrent()[0][2]
+               stream = re.findall('var PCTMLOC = "(.*?)";', data, re.S)
+               if stream:
+                       o = stream[0]
+                       def rep(o):
+                               if o <= "Z":
+                                       x = 90
+                               else:
+                                       x = 122
+                               o = ord(o[0]) + 13
+                               if x >= o:
+                                       res = o
+                               else:
+                                       res = o - 26
+                               return chr(res)
+                       url = ''
+                       for i in range(0, len(o)):
+                               if re.search('[a-zA-Z]', o[i]):
+                                       url += rep(o[i])
+                               else:
+                                       url += o[i]
+                       if url:
+                               url = base64.b64decode(url)
+                               if url.startswith('//'):
+                                       url = 'https:' + url
+                               mp_globals.player_agent = agent
+                               headers = '&Referer=%s' % Link
+                               url = url + '#User-Agent='+mp_globals.player_agent+headers
+                               self.session.open(SimplePlayer, [(Title, url, Image)], showPlaylist=False, ltype='popcorntimes', cover=True)
\ No newline at end of file
index 18f611b..a053c1f 100644 (file)
@@ -70,23 +70,13 @@ class AmazonScreen(MPScreen):
                self.filmliste.append(("",))
                if mp_globals.model in ["one","two"]:
                        try:
-                               self.player_org = config.vod.amazon.player.value
+                               self.player_org = config.vod.dazn.player.value
                        except:
                                pass
-                       try:
-                               username = config.vod.amazon.username.value
-                               password = config.vod.amazon.password.value
-                       except:
-                               username = ''
-                               password = ''
-                       if (username != '' and password != '') or fileExists("/var/lib/widevine/amazon.cookie"):
-                               self.StartTimer_conn = self.StartTimer.timeout.connect(self.keyOK)
-                               self.StartTimer.start(1000, False)
-                               self.filmliste.append((_("Please wait while Prime Video is started..."),))
-                               self.keyLocked = False
-                       else:
-                               self.filmliste.append((_("Please configure your login data first!"),))
-                               self['handlung'].setText(_("Please configure your login data first via VideoOnDemand plugin in extensions menu."))
+                       self.StartTimer_conn = self.StartTimer.timeout.connect(self.keyOK)
+                       self.StartTimer.start(1000, False)
+                       self.filmliste.append((_("Please wait while Prime Video is started..."),))
+                       self.keyLocked = False
                else:
                        self.filmliste.append((_("This plugin is only available for Dreambox One and Two!"),))
                        self['handlung'].setText('')
diff --git a/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/porn/befuck.py b/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/porn/befuck.py
deleted file mode 100644 (file)
index 41bf7b4..0000000
+++ /dev/null
@@ -1,195 +0,0 @@
-# -*- coding: utf-8 -*-
-#######################################################################################################
-#
-#    MediaPortal for Dreambox OS
-#
-#    Coded by MediaPortal Team (c) 2013-2020
-#
-#  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 *
-
-baseurl = "www.befuck.com"
-default_cover = "file://%s/befuck.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
-
-class befuckGenreScreen(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("BeFuck.com")
-               self['ContentTitle'] = Label("Genre:")
-               self['name'] = Label(_("Please wait..."))
-
-               self.keyLocked = True
-               self.suchString = ''
-
-               self.filmliste = []
-               self.ml = MenuList([], enableWrapAround=True, content=eListboxPythonMultiContent)
-               self['liste'] = self.ml
-
-               self.onLayoutFinish.append(self.loadPage)
-
-       def loadPage(self):
-               self.filmliste = []
-               url = "http://%s/categories/" % baseurl
-               getPage(url).addCallback(self.parseData).addErrback(self.dataError)
-
-       def parseData(self, data):
-               raw = re.findall('class="ic">.*?<a\shref="(.*?)".*?src="(.*?)">.*?<figcaption>(.*?)</figcaption>.*?</span><b>', data, re.S)
-               if raw:
-                       for (Url, Image, Title) in raw:
-                               Title = upperString(Title.strip()).replace('. ','')
-                               if not Url.endswith('/'):
-                                       Url = Url + '/'
-                               self.filmliste.append((decodeHtml(Title), Url, Image))
-                       self.filmliste.sort()
-                       self.filmliste.insert(0, ("Most Popular", "http://%s/most-popular/" % baseurl, default_cover))
-                       self.filmliste.insert(0, ("Top Rated", "http://%s/" % baseurl, default_cover))
-                       self.filmliste.insert(0, ("Newest", "http://%s/" % baseurl, default_cover))
-                       self.filmliste.insert(0, ("--- Search ---", "callSuchen", default_cover))
-                       self.ml.setList(map(self._defaultlistcenter, self.filmliste))
-                       self.keyLocked = False
-                       self.showInfos()
-               self['name'].setText('')
-
-       def showInfos(self):
-               ImageUrl = self['liste'].getCurrent()[0][2]
-               CoverHelper(self['coverArt']).getCover(ImageUrl)
-
-       def SuchenCallback(self, callback = None):
-               if callback is not None and len(callback):
-                       self.suchString = urllib.quote(callback).replace(' ', '+')
-                       Link = '?q=%s' % self.suchString
-                       Name = self['liste'].getCurrent()[0][0]
-                       self.session.open(befuckListScreen, Link, Name)
-
-       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(befuckListScreen, Link, Name)
-
-class befuckListScreen(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,
-                       "5" : self.keyShowThumb,
-                       "cancel": self.keyCancel,
-                       "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("BeFuck.com")
-               self['ContentTitle'] = Label("Genre: %s" % self.Name)
-               self['name'] = Label(_("Please wait..."))
-               self['F2'] = Label(_("Page"))
-
-               self['Page'] = Label(_("Page:"))
-
-               self.keyLocked = True
-               self.ml = MenuList([], enableWrapAround=True, content=eListboxPythonMultiContent)
-               self['liste'] = self.ml
-               self.page = 1
-               self.lastpage = 1
-
-               self.onLayoutFinish.append(self.loadPage)
-
-       def loadPage(self):
-               self.keyLocked = True
-               self.filmliste = []
-               if re.match('.*?Search', self.Name):
-                       url = 'http://%s/search/%s/%s' % (baseurl, self.Link, str(self.page))
-               else:
-                       url = self.Link + str(self.page) + "/"
-               getPage(url).addCallback(self.parseData).addErrback(self.dataError)
-
-       def parseData(self, data):
-               self.getLastPage(data, '<nav\sid="pgn">(.*?)</nav>')
-               raw = re.findall('<div\sclass="ic">.*?href="(http[s]?://\D+/videos/.*?)"\s(?:class=".*?title=|title=)"(.*?)">.*?data-src="(.*?)".*?<span>(.*?)</span>', data, re.S)
-               if raw:
-                       for (Link, Title, Image, Length) in raw:
-                               if not re.match(".*?pornsharia.com", Link, re.S):
-                                       Title = Title.strip()
-                                       self.filmliste.append((decodeHtml(Title), Link, Image, Length))
-                       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):
-               title = self['liste'].getCurrent()[0][0]
-               runtime = self['liste'].getCurrent()[0][3]
-               self['handlung'].setText("Runtime: %s" % runtime)
-               self['name'].setText(title)
-               coverUrl = self['liste'].getCurrent()[0][2]
-               CoverHelper(self['coverArt']).getCover(coverUrl)
-
-       def keyOK(self):
-               if self.keyLocked:
-                       return
-               Link = self['liste'].getCurrent()[0][1]
-               getPage(Link).addCallback(self.getStreamData).addErrback(self.dataError)
-
-       def getStreamData(self, data):
-               title = self['liste'].getCurrent()[0][0]
-               videoLink = re.search("video_url:\s'(.*?)'", data, re.S)
-               if not videoLink:
-                       videoLink = re.search('<source\ssrc="(.*?)"', data, re.S)
-               if videoLink:
-                       self.session.open(SimplePlayer, [(title, videoLink.group(1).replace('&amp;','&'))], showPlaylist=False, ltype='befuck')
\ No newline at end of file
diff --git a/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/porn/ddfnetwork.py b/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/porn/ddfnetwork.py
deleted file mode 100644 (file)
index 00a046c..0000000
+++ /dev/null
@@ -1,300 +0,0 @@
-# -*- coding: utf-8 -*-
-#######################################################################################################
-#
-#    MediaPortal for Dreambox OS
-#
-#    Coded by MediaPortal Team (c) 2013-2020
-#
-#  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 *
-
-myagent = 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:40.0) Gecko/20100101 Firefox/40.0'
-BASE_NAME = "DDFNetwork.com"
-default_cover = "file://%s/ddfnetwork.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
-
-class ddfnetworkGenreScreen(MPScreen):
-
-       def __init__(self, session, mode='Genres'):
-               self.mode = mode
-
-               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(BASE_NAME)
-               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://ddfnetwork.com/videos/search/latest/ever/allsite/-/1"
-               getPage(url, agent=myagent).addCallback(self.genreData).addErrback(self.dataError)
-
-       def genreData(self, data):
-               if self.mode == "Genres":
-                       parse = re.search('filterSelect" multiple name="tags">(.*?)</select>', data, re.S)
-               else:
-                       parse = re.search('filterWebsiteSelect" multiple name="websites">(.*?)</select>', data, re.S)
-               Cats = re.findall('data-mode="(.*?)">(.*?)</option>', parse.group(1), re.S)
-               if Cats:
-                       for (Url, Title) in Cats:
-                               if self.mode == "Genres":
-                                       Url = "https://ddfnetwork.com/videos/search/latest/ever/allsite/%s/" % Url
-                                       Title = upperString(Title)
-                               else:
-                                       Url = "https://ddfnetwork.com/videos/search/latest/ever/%s/-/" % Url
-                               self.genreliste.append((decodeHtml(Title), Url, default_cover))
-                       self.genreliste.sort(key=lambda t : t[0].lower())
-               if self.mode == "Genres":
-                       self.genreliste.insert(0, ("Sites", 'https://ddfnetwork.com/sites/oursites', default_cover))
-                       self.genreliste.insert(0, ("Pornstars", 'https://ddfnetwork.com/pornstars/search/popular/females/-/-/', default_cover))
-                       self.genreliste.insert(0, ("Most Viewed", 'https://ddfnetwork.com/videos/search/viewed/ever/allsite/-/', default_cover))
-                       self.genreliste.insert(0, ("Most Popular", 'https://ddfnetwork.com/videos/search/rated/ever/allsite/-/', default_cover))
-                       self.genreliste.insert(0, ("Trending", 'https://ddfnetwork.com/videos/trending/', default_cover))
-                       self.genreliste.insert(0, ("Featured", 'https://ddfnetwork.com/videos/featured/', default_cover))
-                       self.genreliste.insert(0, ("Latest", 'https://ddfnetwork.com/videos/search/latest/ever/allsite/-/', default_cover))
-                       self.genreliste.insert(0, ("--- Search ---", "callSuchen", default_cover))
-               self.ml.setList(map(self._defaultlistcenter, self.genreliste))
-               self.ml.moveToIndex(0)
-               self.keyLocked = False
-               self.showInfos()
-
-       def showInfos(self):
-               title = self['liste'].getCurrent()[0][0]
-               self['name'].setText(title)
-               Image = self['liste'].getCurrent()[0][2]
-               CoverHelper(self['coverArt']).getCover(Image)
-
-       def keyOK(self):
-               if self.keyLocked:
-                       return
-               if not config_mp.mediaportal.premiumize_use.value:
-                       message = self.session.open(MessageBoxExt, _("%s only works with enabled MP premiumize.me option (MP Setup)!" % BASE_NAME), MessageBoxExt.TYPE_INFO, timeout=10)
-                       return
-               Name = self['liste'].getCurrent()[0][0]
-               if Name == "--- Search ---":
-                       self.suchen()
-               elif Name == "Sites":
-                       Link = self['liste'].getCurrent()[0][1]
-                       self.session.open(ddfnetworkGenreScreen, Name)
-               elif Name == "Pornstars":
-                       Link = self['liste'].getCurrent()[0][1]
-                       self.session.open(ddfnetworkPornstarsScreen, Link, Name)
-               else:
-                       Link = self['liste'].getCurrent()[0][1]
-                       self.session.open(ddfnetworkFilmScreen, Link, Name)
-
-       def SuchenCallback(self, callback = None):
-               if callback is not None and len(callback):
-                       self.suchString = callback
-                       Name = "--- Search ---"
-                       Link = urllib.quote(self.suchString).replace(' ', '+')
-                       self.session.open(ddfnetworkFilmScreen, Link, Name)
-
-class ddfnetworkPornstarsScreen(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(BASE_NAME)
-               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 = []
-               url = "%s%s" % (self.Link, str(self.page))
-               getPage(url, agent=myagent).addCallback(self.loadData).addErrback(self.dataError)
-
-       def loadData(self, data):
-               self.getLastPage(data, 'class="pagination(.*?)</ul>', '.*(?:\/|\">)(\d+)(?:\"|</a)')
-               Pornstars = re.findall('class="card.*?itemprop="name"\scontent="(.*?)".*?href="(.*?)".*?data-src="(.*?)"', data, re.S)
-               if Pornstars:
-                       for (Title, Url, Image) in Pornstars:
-                               Url = "https://ddfnetwork.com" + Url
-                               if not Url.endswith('/'):
-                                       Url = Url + '/'
-                               if Image.startswith('//'):
-                                       Image = 'https:' + Image
-                               self.filmliste.append((decodeHtml(Title), Url, Image))
-               if len(self.filmliste) == 0:
-                       self.filmliste.append((_('No pornstars 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, int(self.lastpage), mode=1)
-               self.showInfos()
-
-       def showInfos(self):
-               title = self['liste'].getCurrent()[0][0]
-               pic = self['liste'].getCurrent()[0][2]
-               self['name'].setText(title)
-               CoverHelper(self['coverArt']).getCover(pic)
-
-       def keyOK(self):
-               if self.keyLocked:
-                       return
-               Name = self['liste'].getCurrent()[0][0]
-               Link = self['liste'].getCurrent()[0][1]
-               self.session.open(ddfnetworkFilmScreen, Link, Name)
-
-class ddfnetworkFilmScreen(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(BASE_NAME)
-               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://ddfnetwork.com/videos/freeword/%s/%s" % (self.Link, str(self.page))
-               else:
-                       url = "%s%s/" % (self.Link, str(self.page))
-               getPage(url, agent=myagent).addCallback(self.loadData).addErrback(self.dataError)
-
-       def loadData(self, data):
-               self.getLastPage(data, 'class="pagination(.*?)</ul>', '.*(?:\/|\">)(\d+)(?:\"|</a)')
-               Movies = re.findall('class="card\stext.*?href="(.*?)"\stitle="(.*?)".*?data-src="(.*?)".*?"card-subtitle.*?">(.*?)</h6>.*?icon-eye">.*?card-text">(.*?)</.*?icon-video">.*?card-text">(.*?)</small.*?datetime="(.*?)"', data, re.S)
-               if Movies:
-                       for (Url, Title, Image, Pornstars, Views, Runtime, Date) in Movies:
-                               if Image.startswith('//'):
-                                       Image = "https:" + Image
-                               Url = "https://ddfnetwork.com" + Url
-                               Pornstars = stripAllTags(Pornstars).strip()
-                               Pornstars = re.sub('\s+', ' ', Pornstars).strip()
-                               Title = Pornstars + " - " + Title.strip()
-                               self.filmliste.append((decodeHtml(Title), Url, Image, Date, Runtime, Views))
-               if len(self.filmliste) == 0:
-                       self.filmliste.append((_('No videos found!'), '', 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, int(self.lastpage), mode=0)
-               self.showInfos()
-
-       def showInfos(self):
-               title = self['liste'].getCurrent()[0][0]
-               pic = self['liste'].getCurrent()[0][2]
-               date = self['liste'].getCurrent()[0][3]
-               runtime = self['liste'].getCurrent()[0][4]
-               views = self['liste'].getCurrent()[0][5]
-               self['handlung'].setText("Runtime: "+runtime+"\nDate: "+date+'\nViews: '+views)
-               self['name'].setText(title)
-               CoverHelper(self['coverArt']).getCover(pic)
-
-       def keyOK(self):
-               if self.keyLocked:
-                       return
-               Link = self['liste'].getCurrent()[0][1]
-               get_stream_link(self.session).check_link(Link, self.play)
-
-       def play(self, url):
-               title = self['liste'].getCurrent()[0][0]
-               self.session.open(SimplePlayer, [(title, url)], showPlaylist=False, ltype='ddfnetwork')
\ No newline at end of file
diff --git a/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/porn/elladies.py b/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/porn/elladies.py
deleted file mode 100644 (file)
index 4f8d8c8..0000000
+++ /dev/null
@@ -1,209 +0,0 @@
-# -*- coding: utf-8 -*-
-#######################################################################################################
-#
-#    MediaPortal for Dreambox OS
-#
-#    Coded by MediaPortal Team (c) 2013-2020
-#
-#  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 *
-
-BASE_URL = 'http://search.el-ladies.com'
-
-default_cover = "file://%s/elladies.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
-
-class elladiesGenreScreen(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("EL-Ladies.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
-               getPage(BASE_URL).addCallback(self.genreData).addErrback(self.dataError)
-
-       def genreData(self, data):
-               parse = re.search('<select id="selSearchNiche"(.*?)</select>', data, re.S)
-               if parse:
-                       genre = re.findall('<option value="(\d{0,2})">(.*?)<', parse.group(1), re.S)
-                       if genre:
-                               for genrenr, genrename in genre:
-                                       if not re.match('(Bizarre|Gay|Men|Piss|Scat)', genrename):
-                                               self.genreliste.append((genrename.replace('&amp;', '&'), genrenr))
-               self.genreliste.insert(0, ("--- Search ---", None))
-               self.ml.setList(map(self._defaultlistcenter, self.genreliste))
-               self.ml.moveToIndex(0)
-               self.keyLocked = False
-
-       def keyOK(self):
-               if self.keyLocked:
-                       return
-               streamGenreName = self['liste'].getCurrent()[0][0]
-               if streamGenreName == "--- Search ---":
-                       self.suchen()
-               else:
-                       streamSearchString = ""
-                       streamGenreID = self['liste'].getCurrent()[0][1]
-                       self.session.open(elladiesFilmScreen, streamSearchString, streamGenreName, streamGenreID)
-
-       def SuchenCallback(self, callback = None):
-               if callback is not None and len(callback):
-                       streamGenreName = self['liste'].getCurrent()[0][0]
-                       self.suchString = urllib.quote(callback).replace(' ', '+')
-                       streamSearchString = self.suchString
-                       streamGenreID = ""
-                       self.session.open(elladiesFilmScreen, streamSearchString, streamGenreName, streamGenreID)
-
-class elladiesFilmScreen(MPScreen, ThumbsHelper):
-
-       def __init__(self, session, SearchString, streamGenreName, CatID):
-               self.SearchString = SearchString
-               self.CatID = CatID
-               self.Name = streamGenreName
-               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,
-                       "yellow" : self.keyHD,
-                       "green" : self.keyPageNumber
-               }, -1)
-
-               self['title'] = Label("EL-Ladies.com")
-               self['ContentTitle'] = Label("Genre: %s" % self.Name)
-               self['F2'] = Label(_("Page"))
-               self['F3'] = Label("Filter")
-
-               self['Page'] = Label(_("Page:"))
-               self.keyLocked = True
-               self.page = 1
-               self.lastpage = 1
-               self.suchString = ''
-               self.HD = 0
-
-               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 = []
-               url = '%s/?search=%s&fun=0&niche=%s&pnum=%s&hd=%s' % (BASE_URL, self.SearchString, self.CatID, str(self.page), self.HD)
-               getPage(url).addCallback(self.loadData).addErrback(self.dataError)
-
-       def loadData(self, data):
-               self.getLastPage(data, 'class="pageNav">(.*?)</div>')
-               Movies = re.findall('<a\shref="http://just.eroprofile.com/play/(.*?)".*?<img\ssrc="(.*?)".*?<div>(.*?)</div>', data, re.S)
-               if Movies:
-                       for (ID, Image, Cat) in Movies:
-                               if not re.match('(Bizarre|Gay|Men|Piss|Scat)', Cat):
-                                       Title = decodeHtml(Cat) + ' - ' + ID
-                                       Image = Image.replace('&amp;','&')
-                                       self.filmliste.append((Title, ID, Image))
-                       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):
-               self.playtitle = None
-               Image = self['liste'].getCurrent()[0][2]
-               CoverHelper(self['coverArt']).getCover(Image)
-               url = self['liste'].getCurrent()[0][1]
-               url = 'http://just.eroprofile.com/play/' + url
-               getPage(url).addCallback(self.showInfos2).addErrback(self.dataError)
-
-       def showInfos2(self, data):
-               title = re.search('<title>(.*?)</title>', data, re.S)
-               self['name'].setText(decodeHtml(title.group(1)))
-               handlung = re.search('name="description"\scontent="(.*?)"\s/>', data, re.S)
-               if self.HD == 0:
-                       filter = "All"
-               else:
-                       filter = "HD"
-               self.playtitle = handlung.group(1)
-               self['handlung'].setText(decodeHtml(handlung.group(1))+"\n\nFilter: "+filter)
-
-       def keyHD(self):
-               if self.HD == 1:
-                       self.HD = 0
-               else:
-                       self.HD = 1
-               self.loadPage()
-
-       def keyOK(self):
-               if self.keyLocked:
-                       return
-               Title = self['liste'].getCurrent()[0][0]
-               url = self['liste'].getCurrent()[0][1]
-               self.keyLocked = True
-               url = 'http://just.eroprofile.com/play/' + url
-               getPage(url).addCallback(self.getVideoPage).addErrback(self.dataError)
-
-       def getVideoPage(self, data):
-               videoPage = re.findall(',file:\'(.*?)\'', data, re.S)
-               if videoPage:
-                       self.keyLocked = False
-                       self.session.open(SimplePlayer, [(self.playtitle, videoPage[0])], showPlaylist=False, ltype='elladies')
\ No newline at end of file
index 061fbfb..9351e27 100644 (file)
@@ -74,7 +74,7 @@ class epornerGenreScreen(MPScreen):
 
        def layoutFinished(self):
                self.keyLocked = True
-               url = "http://www.eporner.com/categories/"
+               url = "http://www.eporner.com/cats/"
                getPage(url).addCallback(self.genreData).addErrback(self.dataError)
 
        def genreData(self, data):
@@ -189,9 +189,9 @@ class epornerFilmScreen(MPScreen, ThumbsHelper):
                self.getLastPage(data, 'class="numlist2">(.*?)title=\'Next page\'')
                if "<h2>Recent HD Porn Videos</h2>" in data:
                        data = re.search('<h2>Recent HD Porn Videos</h2>(.*?)</html>', data, re.S).group(1)
-               Movies = re.findall('class="mb(?: hdy|)".*?>\s+<a\shref="(.*?)"\stitle="(.*?)".*?(?:src|data-src)="(?!data:image/)(.*?)".*?"mbtim">(.*?)</div>.*?"mbvie">(.*?)</div>', data, re.S)
+               Movies = re.findall('class="mb(?: hdy|)".*?<a\shref="(.*?)".*?(?:src|data-src)="(?!data:image/)(.*?)".*?alt="(.*?)".*?"mbtim".*?>(.*?)(?:</div>|</span>).*?"mbvie".*?>(.*?)(?:</div>|</span>)', data, re.S)
                if Movies:
-                       for (Url, Title, Image, Runtime, Views) in Movies:
+                       for (Url, Image, Title, Runtime, Views) in Movies:
                                Views = Views.replace(',','')
                                Image = Image.replace('.webp','.jpg')
                                self.filmliste.append((decodeHtml(Title), Url, Image, Runtime, Views))
index e81143f..79b7fe6 100644 (file)
@@ -74,8 +74,8 @@ class extremetubeGenreScreen(MPScreen):
 
        def layoutFinished(self):
                self.keyLocked = True
-               url = "http://www.extremetube.com/video-categories"
-               getPage(url).addCallback(self.genreData).addErrback(self.dataError)
+               url = "https://www.extremetube.com/video-categories"
+               twAgentGetPage(url).addCallback(self.genreData).addErrback(self.dataError)
 
        def genreData(self, data):
                parse = re.search('class="title-general">\s{0,1}Categories</h1>(.*?)footer', data, re.S)
@@ -83,16 +83,16 @@ class extremetubeGenreScreen(MPScreen):
                if Cats:
                        for (Url, Image, Title) in Cats:
                                if Title != "High Definition Videos":
-                                       Url = "http://www.extremetube.com" + Url.replace('?fromPage=categories', '') + '?page='
+                                       Url = "https://www.extremetube.com" + Url.replace('?fromPage=categories', '') + '?page='
                                        if Image.startswith('//'):
-                                               Image = 'http:' + Image
+                                               Image = 'https:' + Image
                                        self.genreliste.append((Title, Url, Image))
                        self.genreliste.sort()
-                       self.genreliste.insert(0, ("Longest", "http://www.extremetube.com/videos?o=lg", default_cover))
-                       self.genreliste.insert(0, ("Highest Rated", "http://www.extremetube.com/videos?o=tr", default_cover))
-                       self.genreliste.insert(0, ("Most Popular", "http://www.extremetube.com/videos?o=mv", default_cover))
-                       self.genreliste.insert(0, ("Being Watched", "http://www.extremetube.com/videos?o=bw", default_cover))
-                       self.genreliste.insert(0, ("Recently Added", "http://www.extremetube.com/videos?o=mr", default_cover))
+                       self.genreliste.insert(0, ("Longest", "https://www.extremetube.com/videos?o=lg", default_cover))
+                       self.genreliste.insert(0, ("Highest Rated", "https://www.extremetube.com/videos?o=tr", default_cover))
+                       self.genreliste.insert(0, ("Most Popular", "https://www.extremetube.com/videos?o=mv", default_cover))
+                       self.genreliste.insert(0, ("Being Watched", "https://www.extremetube.com/videos?o=bw", default_cover))
+                       self.genreliste.insert(0, ("Recently Added", "https://www.extremetube.com/videos?o=mr", default_cover))
                        self.genreliste.insert(0, ("--- Search ---", "callSuchen", default_cover))
                        self.ml.setList(map(self._defaultlistcenter, self.genreliste))
                        self.ml.moveToIndex(0)
@@ -117,7 +117,7 @@ class extremetubeGenreScreen(MPScreen):
                if callback is not None and len(callback):
                        Name = self['liste'].getCurrent()[0][0]
                        self.suchString = callback
-                       Link = 'http://www.extremetube.com/videos?search=%s' % urllib.quote(self.suchString).replace(' ', '+')
+                       Link = 'https://www.extremetube.com/videos?search=%s' % urllib.quote(self.suchString).replace(' ', '+')
                        self.session.open(extremetubeFilmScreen, Link, Name)
 
        def getSuggestions(self, text, max_res):
@@ -166,6 +166,7 @@ class extremetubeFilmScreen(MPScreen, ThumbsHelper):
                self['ContentTitle'] = Label("Genre: %s" % self.Name)
                self['F2'] = Label(_("Page"))
 
+               self['Page'] = Label(_("Page:"))
                self.keyLocked = True
                self.page = 1
                self.lastpage = 1
@@ -180,31 +181,28 @@ class extremetubeFilmScreen(MPScreen, ThumbsHelper):
                self.keyLocked = True
                self['name'].setText(_('Please wait...'))
                self.filmliste = []
-               if re.match('.*?\?', self.Link):
+               if "?search=" in self.Link:
+                       tw_agent_hlp = TwAgentHelper()
+                       tw_agent_hlp.getRedirectedUrl(self.Link).addCallback(self.loadPage2).addErrback(self.dataError)
+               else:
+                       self.loadPage2(self.Link)
+
+       def loadPage2(self, link):
+               if re.match('.*?\?', link):
                        delimiter = '&'
                else:
                        delimiter = '?'
-               url = "%s%sformat=json&page=%s" % (self.Link, delimiter, str(self.page))
-               getPage(url).addCallback(self.loadData).addErrback(self.dataError)
+               url = "%s%spage=%s" % (link, delimiter, str(self.page))
+               twAgentGetPage(url).addCallback(self.loadData).addErrback(self.dataError)
 
        def loadData(self, data):
-               json_data = json.loads(data)
-               if json_data["1"]["navigation"].has_key('lastPage'):
-                       self.lastpage = json_data["1"]["navigation"]["lastPage"]
-               if self.lastpage > 1:
-                       self['Page'].setText(_("Page:"))
-                       self['page'].setText(str(self.page) + ' / ' + str(self.lastpage))
-               for node in json_data["1"]["items"]:
-                       Views = str(node["real_times_viewed"]).replace(',','')
-                       Title = str(node["specialchars_title"])
-                       Runtime = str(node["duration"])
-                       Url = str(node["video_link"])
-                       Image = str(node["thumb_url"])
-                       if Url.startswith('//'):
-                               Url = 'http:' + Url
-                       if Image.startswith('//'):
-                               Image = 'http:' + Image
-                       self.filmliste.append((decodeHtml(Title), Url, Image, Runtime, Views))
+               self.getLastPage(data, 'class="pagination(.*?)</ul>', '.*(?:paginator_|page=)(\d+)')
+               if 'class="section04' in data:
+                       data = re.search('^(.*?)class="section04', data, re.S).group(1)
+               videos = re.findall('id="obj.*?href="(.*?)".*?data-duration="(.*?)".*?data-srcmedium="(.*?)".*?title="(.*?)".*?views-block" title="(.*?)"', data, re.S)
+               if videos:
+                       for (url, runtime, image, title, views) in videos:
+                               self.filmliste.append((decodeHtml(title), url, image, runtime, views.replace(',','')))
                if len(self.filmliste) == 0:
                        self.filmliste.append((_('No videos found!'), None, None, '', ''))
                self.ml.setList(map(self._defaultlistleft, self.filmliste))
@@ -231,7 +229,7 @@ class extremetubeFilmScreen(MPScreen, ThumbsHelper):
                        getPage(Link).addCallback(self.getVideoPage).addErrback(self.dataError)
 
        def getVideoPage(self, data):
-               videoPage = re.findall('"quality_\d+p":"(.*?)","', data, re.S)
+               videoPage = re.findall('quality_\d+p":"(.*?)","', data, re.S)
                if videoPage:
                        url = videoPage[-1]
                        url = url.replace('\/','/')
diff --git a/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/porn/hclips.py b/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/porn/hclips.py
deleted file mode 100644 (file)
index ea8f8ad..0000000
+++ /dev/null
@@ -1,253 +0,0 @@
-# -*- coding: utf-8 -*-
-#######################################################################################################
-#
-#    MediaPortal for Dreambox OS
-#
-#    Coded by MediaPortal Team (c) 2013-2020
-#
-#  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 *
-import base64
-
-agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36'
-headers = {
-       'Accept-Language':'de,en-US;q=0.7,en;q=0.3',
-       'X-Requested-With':'XMLHttpRequest',
-       }
-default_cover = "file://%s/hclips.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
-cookies = CookieJar()
-ctarget = None
-
-class hclipsGenreScreen(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("HClips.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
-               url = "https://hclips.com/categories/"
-               twAgentGetPage(url, agent=agent).addCallback(self.genreData).addErrback(self.dataError)
-
-       def genreData(self, data):
-               parse = re.search('class="thumb_holder(.*?)class="cat-text">', data, re.S)
-               Cats = re.findall('<a\shref="(https://(?:www.|)hclips.com/categories/.*?)".*?class="img"\ssrc="(.*?)".*?class="title">(.*?)</strong', parse.group(1), re.S)
-               if Cats:
-                       for (Url, Image, Title) in Cats:
-                               self.genreliste.append((Title, Url, Image))
-                       self.genreliste.sort()
-                       self.genreliste.insert(0, ("Longest", "https://hclips.com/longest/", default_cover))
-                       self.genreliste.insert(0, ("Most Popular", "https://hclips.com/most-popular/", default_cover))
-                       self.genreliste.insert(0, ("Top Rated", "https://hclips.com/top-rated/", default_cover))
-                       self.genreliste.insert(0, ("Most Recent", "https://hclips.com/latest-updates/", default_cover))
-                       self.genreliste.insert(0, ("--- Search ---", "", default_cover))
-                       self.ml.setList(map(self._defaultlistcenter, self.genreliste))
-                       self.keyLocked = False
-               self.showInfos()
-
-       def showInfos(self):
-               Image = self['liste'].getCurrent()[0][2]
-               CoverHelper(self['coverArt']).getCover(Image)
-
-       def keyOK(self):
-               if self.keyLocked:
-                       return
-               Name = self['liste'].getCurrent()[0][0]
-               Link = self['liste'].getCurrent()[0][1]
-               if re.search('--- Search', Name):
-                       self.suchen(suggest_func=self.getSuggestions)
-               else:
-                       self.session.open(hclipsFilmScreen, Link, Name)
-
-       def SuchenCallback(self, callback = None):
-               if callback is not None and len(callback):
-                       Name = "--- Search ---"
-                       self.suchString = callback
-                       Link = urllib.quote(self.suchString).replace(' ', '+')
-                       self.session.open(hclipsFilmScreen, Link, Name)
-
-       def getSuggestions(self, text, max_res):
-               url = "https://hclips.com/cloudsearch/suggesters.php?char=%s" % urllib.quote_plus(text)
-               d = twAgentGetPage(url, agent=agent, headers=headers, timeout=5)
-               d.addCallback(self.gotSuggestions, max_res)
-               d.addErrback(self.gotSuggestions, max_res, err=True)
-               return d
-
-       def gotSuggestions(self, suggestions, max_res, err=False):
-               list = []
-               if not err and type(suggestions) in (str, buffer):
-                       suggestions = json.loads(suggestions)
-                       for item in suggestions:
-                               li = item
-                               list.append(str(li))
-                               max_res -= 1
-                               if not max_res: break
-               elif err:
-                       printl(str(suggestions),self,'E')
-               return list
-
-class hclipsFilmScreen(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("HClips.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.search('Search', self.Name):
-                       url = "https://hclips.com/search/%s/?q=%s&p=0" % (str(self.page), self.Link)
-               else:
-                       url = "%s%s/" % (self.Link, str(self.page))
-               twAgentGetPage(url, agent=agent, gzip_decoding=True).addCallback(self.loadData).addErrback(self.dataError)
-
-       def loadData(self, data):
-               self.getLastPage(data, 'class="paginator"\s{0,3}>(.*?)</div>', '.*from:\d+">((?:\d+.|)\d+)<')
-               parse = re.search('class="thumb_holder">(.*?)class="footer', data, re.S)
-               Movies = re.findall('<a\shref="(https://(?:www.|)hclips.com/videos/.*?)"\sclass="thumb">.*?<img\ssrc="(.*?)".*?class="dur">(.*?)</span>.*?class="title">(.*?)</strong>.*?small_views">Views:\s(\d+)</span>.*?small_added-date">Added:\s(.*?)</span>', parse.group(1), re.S)
-               if Movies:
-                       for (Url, Image, Runtime, Title, Views, Added) in Movies:
-                               self.filmliste.append((decodeHtml(Title), Url, Image, Runtime, Views, Added))
-               if len(self.filmliste) == 0:
-                       self.filmliste.append((_('No videos found!'), None, 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]
-               added = self['liste'].getCurrent()[0][5]
-               self['name'].setText(title)
-               self['handlung'].setText("Runtime: %s\nViews: %s\nAdded: %s" % (runtime, views, added))
-               CoverHelper(self['coverArt']).getCover(pic)
-
-       def keyOK(self):
-               if self.keyLocked:
-                       return
-               Link = self['liste'].getCurrent()[0][1]
-               if Link == None:
-                       return
-               self.keyLocked = True
-               twAgentGetPage(Link, agent=agent, cookieJar=cookies).addCallback(self.getVideoPage, Link).addErrback(self.dataError)
-
-       def getVideoPage(self, data, Link):
-               global ctarget
-               if not ctarget:
-                       playerlib = re.findall('<script src="(/assets/playerlib.*?\.js)"', data, re.S)
-                       url = "https://hclips.com" + playerlib[0]
-                       twAgentGetPage(url, agent=agent, cookieJar=cookies).addCallback(self.fetchctarget, Link).addErrback(self.dataError)
-               else:
-                       pC3 = re.findall("pC3:'(.*?)',", data, re.S)
-                       video_id = re.findall('(?:\"|\'|)video_id(?:\"|\'|): (\d+),', data, re.S)
-                       if pC3 and video_id:
-                               postdata = {'param': video_id[0]+','+pC3[0]}
-                               twAgentGetPage(ctarget, method='POST', postdata=urlencode(postdata), agent=agent, cookieJar=cookies, headers={'Content-Type':'application/x-www-form-urlencoded','Referer':Link}).addCallback(self.playVideo).addErrback(self.dataError)
-
-       def fetchctarget(self, data, Link):
-               curl = re.findall(';c.action="(.*?)";', data, re.S)
-               global ctarget
-               ctarget = "https://hclips.com" + curl[0]
-               twAgentGetPage(Link, agent=agent, cookieJar=cookies).addCallback(self.getVideoPage, Link).addErrback(self.dataError)
-
-       def playVideo(self, data):
-               video = re.findall('\[\{"video_url":"(.*?)",', data, re.S)
-               self.keyLocked = False
-               if video:
-                       url = video[0]
-                       chr = {'A':'\u0410', 'B':'\u0412', 'C':'\u0421', 'E':'\u0415', 'M':'\u041c', '/':',', '+':'.', '=':'~'}
-                       for i in chr:
-                               url = url.replace(chr[i], i)
-                       url = base64.b64decode(url)
-                       Title = self['liste'].getCurrent()[0][0]
-                       mp_globals.player_agent = agent
-                       self.session.open(SimplePlayer, [(Title, url)], showPlaylist=False, ltype='hclips')
\ No newline at end of file
diff --git a/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/porn/kink.py b/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/porn/kink.py
deleted file mode 100644 (file)
index ae7820b..0000000
+++ /dev/null
@@ -1,204 +0,0 @@
-# -*- coding: utf-8 -*-
-#######################################################################################################
-#
-#    MediaPortal for Dreambox OS
-#
-#    Coded by MediaPortal Team (c) 2013-2020
-#
-#  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 *
-
-myagent = 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:40.0) Gecko/20100101 Firefox/40.0'
-BASE_NAME = "Kink.com"
-default_cover = "file://%s/kink.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
-ck = {}
-
-class kinkGenreScreen(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(BASE_NAME)
-               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
-               ck.update({'viewing-preferences':'straight'})
-               url = "https://www.kink.com/categories/?view=straight&popSort=all"
-               getPage(url, agent=myagent, cookies=ck).addCallback(self.genreData).addErrback(self.dataError)
-
-       def genreData(self, data):
-               parse = re.search('.*?class="categories-list">(.*?)</html>', data, re.S)
-               if parse:
-                       Cats = re.findall('href="(.*?)"\sclass="category-link">.*?<img\ssrc="(.*?)">.*?class="category-name">(.*?)</span>', parse.group(1), re.S)
-                       if Cats:
-                               for (Url, Image, Title) in Cats:
-                                       Url = Url.split('?')
-                                       Url = "https://www.kink.com" + Url[0] + "/shoots/page/"
-                                       Title = Title.strip()
-                                       self.genreliste.append((decodeHtml(Title), Url, Image))
-               self.genreliste.sort()
-               self.genreliste.insert(0, ("Recent", 'https://www.kink.com/shoots/partner/page/', default_cover))
-               self.genreliste.insert(0, ("Featured", 'https://www.kink.com/shoots/featured/page/', default_cover))
-               self.genreliste.insert(0, ("Exclusives", 'https://www.kink.com/shoots/latest/page/', default_cover))
-               self.genreliste.insert(0, ("--- Search ---", "callSuchen", default_cover))
-               self.ml.setList(map(self._defaultlistcenter, self.genreliste))
-               self.ml.moveToIndex(0)
-               self.keyLocked = False
-               self.showInfos()
-
-       def showInfos(self):
-               title = self['liste'].getCurrent()[0][0]
-               self['name'].setText(title)
-               Image = self['liste'].getCurrent()[0][2]
-               CoverHelper(self['coverArt']).getCover(Image)
-
-       def keyOK(self):
-               if self.keyLocked:
-                       return
-               if not config_mp.mediaportal.premiumize_use.value:
-                       message = self.session.open(MessageBoxExt, _("%s only works with enabled MP premiumize.me option (MP Setup)!" % BASE_NAME), MessageBoxExt.TYPE_INFO, timeout=10)
-                       return
-               Name = self['liste'].getCurrent()[0][0]
-               if Name == "--- Search ---":
-                       self.suchen()
-               else:
-                       Link = self['liste'].getCurrent()[0][1]
-                       self.session.open(kinkFilmScreen, Link, Name)
-
-       def SuchenCallback(self, callback = None):
-               if callback is not None and len(callback):
-                       self.suchString = callback
-                       Name = "--- Search ---"
-                       Link = urllib.quote(self.suchString).replace(' ', '+')
-                       self.session.open(kinkFilmScreen, Link, Name)
-
-class kinkFilmScreen(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(BASE_NAME)
-               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.kink.com/search?type=shoots&q=%s&page=%s" % (self.Link, str(self.page))
-               else:
-                       url = "%s%s" % (self.Link, str(self.page))
-               getPage(url, agent=myagent, cookies=ck).addCallback(self.loadData).addErrback(self.dataError)
-
-       def loadData(self, data):
-               self.getLastPage(data, 'class="(?:pagination|paginated-nav)"(.*?)</(?:table|nav)>', '.*>\s{0,1}(\d+)\s{0,1}<')
-               Movies = re.findall('class="shoot(?:\ssearch|)">.*?img\ssrc="(.*?)".*?class="date">(.*?)</div.*?class="video">.*?span>(.*?)</span.*?href="(.*?)">(.*?)</a', data, re.S)
-               if Movies:
-                       for (Image, Date, Runtime, Url, Title) in Movies:
-                               Runtime = Runtime.strip()
-                               Title = stripAllTags(decodeHtml(Title.strip()))
-                               Url = "https://www.kink.com" + Url
-                               self.filmliste.append((Title, Url, Image, Date, Runtime))
-               if len(self.filmliste) == 0:
-                       self.filmliste.append((_('No videos found!'), '', 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, int(self.lastpage), mode=1)
-               self.showInfos()
-
-       def showInfos(self):
-               title = self['liste'].getCurrent()[0][0]
-               pic = self['liste'].getCurrent()[0][2]
-               date = self['liste'].getCurrent()[0][3]
-               runtime = self['liste'].getCurrent()[0][4]
-               self['handlung'].setText("Date: "+date+'\nRuntime: '+runtime)
-               self['name'].setText(title)
-               CoverHelper(self['coverArt']).getCover(pic)
-
-       def keyOK(self):
-               if self.keyLocked:
-                       return
-               Link = self['liste'].getCurrent()[0][1]
-               get_stream_link(self.session).check_link(Link, self.play)
-
-       def play(self, url):
-               title = self['liste'].getCurrent()[0][0]
-               self.session.open(SimplePlayer, [(title, url)], showPlaylist=False, ltype='kink')
\ No newline at end of file
index 1619d54..8394432 100644 (file)
@@ -225,7 +225,7 @@ class nubilefilmsFilmScreen(MPScreen, ThumbsHelper):
 
        def loadData(self, data):
                self.getLastPage(data, 'class="pagination(.*?)</ul>')
-               Movies = re.findall('<figure.*?<img.*?data-original="(.*?)".*?<a\sclass="title"\shref="(.*?)">(.*?)</a>.*?class="models.*?">(.*?)</div>.*?class="date">(.*?)</span.*?class="rating">.*?</i>\s{0,1}(.*?)</span', data, re.S)
+               Movies = re.findall('<figure.*?<img.*?data-original="(.*?)".*?<a\shref="(.*?)">(.*?)</a>.*?class="models.*?">(.*?)</div>.*?class="date">(.*?)</span.*?class="rating">.*?</i>\s{0,1}(.*?)</span', data, re.S)
                if Movies:
                        for (Image, Url, Title, Models, Date, Rating) in Movies:
                                if Image.startswith('//'):
@@ -236,7 +236,7 @@ class nubilefilmsFilmScreen(MPScreen, ThumbsHelper):
                                        Url = "https://nubilefilms.com" + Url
                                models = stripAllTags(Models).replace('&nbsp;',',')
                                models = re.sub('\s+', ' ', models).strip().rstrip(',')
-                               Title =  models + " - " + Title
+                               Title =  models + " - " + Title.strip()
                                self.filmliste.append((decodeHtml(Title), Url, Image, Date, Rating))
                if len(self.filmliste) == 0:
                        self.filmliste.append((_('No videos found!'), '', None, ''))
index a72ab7e..eba5aa5 100644 (file)
@@ -70,10 +70,6 @@ class porn7GenreScreen(MPScreen):
                        self.portal = "Deviants.com"
                        self.baseurl = "https://www.deviants.com"
                        default_cover = "file://%s/deviants.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
-               elif self.mode == "voyeurporno":
-                       self.portal = "VoyeurPorno.com"
-                       self.baseurl = "https://www.voyeurporno.com"
-                       default_cover = "file://%s/voyeurporno.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
 
                MPScreen.__init__(self, session, skin='MP_Plugin', default_cover=default_cover)
 
@@ -191,8 +187,6 @@ class porn7FilmScreen(MPScreen, ThumbsHelper):
                        default_cover = "file://%s/interracial.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
                elif self.portal == "Deviants.com":
                        default_cover = "file://%s/deviants.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
-               elif self.portal == "VoyeurPorno.com":
-                       default_cover = "file://%s/voyeurporno.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
 
                MPScreen.__init__(self, session, skin='MP_Plugin', default_cover=default_cover)
                ThumbsHelper.__init__(self)
index dcc6916..22acd1b 100644 (file)
@@ -188,7 +188,7 @@ class porndoeFilmScreen(MPScreen, ThumbsHelper):
                                        Image = 'http:' + Image
                                Runtime = Runtime.strip()
                                Views = Views.strip()
-                               self.filmliste.append((decodeHtml(Title), Url, Image, Runtime, Views))
+                               self.filmliste.append((decodeHtml(Title.strip()), Url, Image, Runtime, Views))
                if len(self.filmliste) == 0:
                        self.filmliste.append((_('No videos found!'), '', None, '', ''))
                self.ml.setList(map(self._defaultlistleft, self.filmliste))
@@ -228,10 +228,10 @@ class porndoeFilmScreen(MPScreen, ThumbsHelper):
                getPage(Link, agent=agent, cookies=ck).addCallback(self.getVideoPage).addErrback(self.dataError)
 
        def getVideoPage(self, data):
-               videoPage = re.findall('<source.*?src="(.*?)".*?type="video/mp4".*?(?:label|quality)="(\d+)', data, re.S)
+               videoPage = re.findall('"(\d+)": {\s+"type": "video".*?"url":\s"(.*?)"', data, re.S)
                if videoPage:
                        maxres = 0
-                       for (vidurl, res) in videoPage:
+                       for (res, vidurl) in videoPage:
                                if int(res) > maxres:
                                        maxres = int(res)
                                        url = vidurl
index 9501b1f..d881736 100644 (file)
@@ -1176,11 +1176,11 @@ class pornhubFilmScreen(MPScreen, ThumbsHelper, LoginFunc):
                                else:
                                        self.filmliste.append((_('No movies found!'), None, False, None, "", "", "", "", ""))
                else:
-                       Movies = re.findall('(class="(?:\s{0,1}notLoaded |)(?:\s{0,1}js-pop |)videoblock.*?<var\sclass="added">.*?</var>)', viddata, re.S)
+                       Movies = re.findall('(class="(?:pcVideoListItem |)(?:\s{0,1}notLoaded |)(?:\s{0,1}js-pop |)videoblock.*?<var\sclass="added">.*?</var>)', viddata, re.S)
                        if Movies:
                                for each in Movies:
                                        if not ('class="price"' in each or 'class="premiumIcon' in each or 'class="privateOverlay"' in each):
-                                               Movie = re.findall('class="(?:\s{0,1}notLoaded |)(?:\s{0,1}js-pop |)videoblock.*?<a\shref="(.*?)".*?title="(.*?)".*?data-(?:mediumthumb|image)="(.*?)".*?class="duration">(.*?)</var>.*?<span\sclass="views"><var>(.*?)<.*?<var\sclass="added">(.*?)</var>', each, re.S)
+                                               Movie = re.findall('class="(?:pcVideoListItem |)(?:\s{0,1}notLoaded |)(?:\s{0,1}js-pop |)videoblock.*?<a\shref="(.*?)".*?title="(.*?)".*?data-(?:mediumthumb|image)="(.*?)".*?class="duration">(.*?)</var>.*?<span\sclass="views"><var>(.*?)<.*?<var\sclass="added">(.*?)</var>', each, re.S)
                                                for (Url, Title, Image, Runtime, Views, Added) in Movie:
                                                        Url = base_url + Url
                                                        Title = Title.replace('&amp;amp;','&')
@@ -1426,21 +1426,22 @@ class pornhubFilmScreen(MPScreen, ThumbsHelper, LoginFunc):
                                self.session.open(MessageBoxExt, _("Unknown error."), MessageBoxExt.TYPE_INFO)
 
        def parseData(self, data):
-               try:
-                       pos = self['liste'].getSelectedIndex()
-                       self.filmliste.pop(pos)
-                       title = self['liste'].getCurrent()[0][0]
-                       url = self['liste'].getCurrent()[0][1]
-                       image = self['liste'].getCurrent()[0][3]
-                       runtime = self['liste'].getCurrent()[0][4]
-                       views = self['liste'].getCurrent()[0][5]
-                       added = self['liste'].getCurrent()[0][6]
-                       usertype = self['liste'].getCurrent()[0][7]
-                       username = self['liste'].getCurrent()[0][8]
-                       self.filmliste.insert(pos, (title, url, True, image, runtime, views, added, usertype, username))
-                       self.ml.setList(map(self._defaultlistleftmarked, self.filmliste))
-               except:
-                       pass
+               if phLoggedIn:
+                       try:
+                               pos = self['liste'].getSelectedIndex()
+                               self.filmliste.pop(pos)
+                               title = self['liste'].getCurrent()[0][0]
+                               url = self['liste'].getCurrent()[0][1]
+                               image = self['liste'].getCurrent()[0][3]
+                               runtime = self['liste'].getCurrent()[0][4]
+                               views = self['liste'].getCurrent()[0][5]
+                               added = self['liste'].getCurrent()[0][6]
+                               usertype = self['liste'].getCurrent()[0][7]
+                               username = self['liste'].getCurrent()[0][8]
+                               self.filmliste.insert(pos, (title, url, True, image, runtime, views, added, usertype, username))
+                               self.ml.setList(map(self._defaultlistleftmarked, self.filmliste))
+                       except:
+                               pass
                if 'id="iconLocked"' in data:
                        msg = re.findall('(<div class="userMessageSection.*?<div class="avatarPosition"></div>)', data, re.S)
                        if msg:
@@ -1492,7 +1493,7 @@ class pornhubFilmScreen(MPScreen, ThumbsHelper, LoginFunc):
                                        if not vr and '1080P' in fetchurl and not mp_globals.model in ["one","two"]:
                                                self.streamliste = []
                                                self.streamliste.append((Title, fetchurl))
-                                               t = re.search('\/(\d+)P_', url[i+2]).group(1) + 'p'
+                                               t = re.search('(?:\/|_)(\d+)P_', url[i+2]).group(1) + 'p'
                                                self.streamliste.append((Title + ' (' + t + ')', url[i+2]))
                                                self.session.open(SimplePlayer, self.streamliste, playIdx=0, playAll=False, showPlaylist=True, listTitle='Quality:', ltype='pornhub')
                                        else:
index dae43b2..999b607 100644 (file)
@@ -45,12 +45,23 @@ json_headers = {
        'X-Requested-With':'XMLHttpRequest',
        'Content-Type':'application/x-www-form-urlencoded',
        }
-default_cover = "file://%s/txxx.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
 cookies = CookieJar()
 
 class txxxGenreScreen(MPScreen):
 
-       def __init__(self, session, cat="categories", scope=0):
+       def __init__(self, session, mode, cat="categories", scope=0):
+               self.mode = mode
+
+               global default_cover
+               if self.mode == "txxx":
+                       self.portal = "TXXX.com"
+                       self.baseurl = "https://txxx.com"
+                       default_cover = "file://%s/txxx.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
+               elif self.mode == "hclips":
+                       self.portal = "HClips.com"
+                       self.baseurl = "https://hclips.com"
+                       default_cover = "file://%s/hclips.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
+
                self.cat = cat
                MPScreen.__init__(self, session, skin='MP_Plugin', default_cover=default_cover)
 
@@ -72,7 +83,7 @@ class txxxGenreScreen(MPScreen):
                self.scopeText = ['Straight', 'Shemale', 'Gay']
                self.scopeval = ['str', 'she', 'gay']
 
-               self['title'] = Label("TXXX.com")
+               self['title'] = Label(self.portal)
                self['ContentTitle'] = Label("Genre:")
                if self.cat in ["pornstars", "channels", "playlists"]:
                        self['F2'] = Label(_("Page"))
@@ -96,17 +107,17 @@ class txxxGenreScreen(MPScreen):
                self.genreliste = []
                if self.cat == "categories":
                        self['F3'].setText(self.scopeText[self.scope])
-                       url = "https://txxx.com/api/json/categories/14400/%s.all.json" % self.scopeval[self.scope]
+                       url = "%s/api/json/categories/14400/%s.all.json" % (self.baseurl, self.scopeval[self.scope])
                elif self.cat == "pornstars":
-                       url = "https://txxx.com/api/json/models/86400/%s/filt........../most-popular/19/%s.json" % (self.scopeval[self.scope], str(self.page))
+                       url = "%s/api/json/models/86400/%s/filt........../most-popular/19/%s.json" % (self.baseurl, self.scopeval[self.scope], str(self.page))
                elif self.cat == "channels":
-                       url = "https://txxx.com/api/json/channels/86400/%s/latest-updates/19/..%s.json" % (self.scopeval[self.scope], str(self.page))
+                       url = "%s/api/json/channels/86400/%s/latest-updates/19/..%s.json" % (self.baseurl, self.scopeval[self.scope], str(self.page))
                elif self.cat == "playlists":
-                       url = "https://txxx.com/api/json/playlists/86400/latest-updates/19/all.%s.%s..json" % (str(self.page), self.scopeval[self.scope])
+                       url = "%s/api/json/playlists/86400/latest-updates/19/all.%s.%s..json" % (self.baseurl, str(self.page), self.scopeval[self.scope])
                elif self.cat == "popular_in":
                        self.genreData('')
                        return
-               twAgentGetPage(url, agent=agent, cookieJar=cookies).addCallback(self.genreData).addErrback(self.dataError)
+               twAgentGetPage(url, agent=agent, cookieJar=cookies, headers={'Referer':self.baseurl}).addCallback(self.genreData).addErrback(self.dataError)
 
        def genreData(self, data):
                if self.cat != "popular_in":
@@ -118,10 +129,12 @@ class txxxGenreScreen(MPScreen):
                                self.genreliste.append((Title, Url, default_cover))
                                self.genreliste.sort()
                        self.genreliste.insert(0, (400 * "—", None, default_cover))
-                       self.genreliste.insert(0, ("Playlists", "playlists", default_cover))
+                       if self.mode == "txxx":
+                               self.genreliste.insert(0, ("Playlists", "playlists", default_cover))
                        self.genreliste.insert(0, ("Channels", "channels", default_cover))
-                       self.genreliste.insert(0, ("Pornstars", "pornstars", default_cover))
-                       self.genreliste.insert(0, (400 * "—", None, default_cover))
+                       if self.mode == "txxx":
+                               self.genreliste.insert(0, ("Pornstars", "pornstars", default_cover))
+                               self.genreliste.insert(0, (400 * "—", None, default_cover))
                        self.genreliste.insert(0, ("Popular in...", "popular_in", default_cover))
                        self.genreliste.insert(0, ("Longest", "main#longest", default_cover))
                        self.genreliste.insert(0, ("Most Commented", "main#most-commented", default_cover))
@@ -171,7 +184,7 @@ class txxxGenreScreen(MPScreen):
                        for item in cc:
                                Title = names[item]
                                Url = "country#%s" % item
-                               Image = "https://txxx.com/static/images/flags/%s.svg" % item
+                               Image = "%s/static/images/flags/%s.svg" % (self.baseurl, item)
                                self.genreliste.append((Title, Url, Image))
                self.ml.setList(map(self._defaultlistcenter, self.genreliste))
                self.ml.moveToIndex(0)
@@ -189,17 +202,17 @@ class txxxGenreScreen(MPScreen):
                if Name == "--- Search ---":
                        self.suchen(suggest_func=self.getSuggestions)
                elif Name == "Pornstars":
-                       self.session.open(txxxGenreScreen, cat="pornstars", scope=self.scope)
+                       self.session.open(txxxGenreScreen, self.mode, cat="pornstars", scope=self.scope)
                elif Name == "Channels":
-                       self.session.open(txxxGenreScreen, cat="channels", scope=self.scope)
+                       self.session.open(txxxGenreScreen, self.mode, cat="channels", scope=self.scope)
                elif Name == "Playlists":
-                       self.session.open(txxxGenreScreen, cat="playlists", scope=self.scope)
+                       self.session.open(txxxGenreScreen, self.mode, cat="playlists", scope=self.scope)
                elif Name == "Popular in...":
-                       self.session.open(txxxGenreScreen, cat="popular_in", scope=self.scope)
+                       self.session.open(txxxGenreScreen, self.mode, cat="popular_in", scope=self.scope)
                else:
                        Link = self['liste'].getCurrent()[0][1]
                        if Link:
-                               self.session.open(txxxFilmScreen, Link, Name, self.scopeval[self.scope])
+                               self.session.open(txxxFilmScreen, Link, Name, self.portal, self.baseurl, self.scopeval[self.scope])
 
        def keyScope(self):
                if self.cat != "categories":
@@ -224,10 +237,11 @@ class txxxGenreScreen(MPScreen):
                        Name = "--- Search ---"
                        self.suchString = callback
                        Link = urllib.quote(self.suchString).replace(' ', '+')
-                       self.session.open(txxxFilmScreen, Link, Name, self.scopeval[self.scope])
+                       self.session.open(txxxFilmScreen, Link, Name, self.portal, self.baseurl, self.scopeval[self.scope])
 
        def getSuggestions(self, text, max_res):
-               url = "https://txxx.com/api/suggester.php?c=%s" % urllib.quote_plus(text)
+               url = "%s/api/suggester.php?c=%s" % (self.baseurl, urllib.quote_plus(text))
+               json_headers.update({'Referer':self.baseurl})
                d = twAgentGetPage(url, agent=agent, headers=json_headers, timeout=5)
                d.addCallback(self.gotSuggestions, max_res)
                d.addErrback(self.gotSuggestions, max_res, err=True)
@@ -248,10 +262,19 @@ class txxxGenreScreen(MPScreen):
 
 class txxxFilmScreen(MPScreen, ThumbsHelper):
 
-       def __init__(self, session, Link, Name, scope='str'):
+       def __init__(self, session, Link, Name, portal, baseurl, scope='str'):
                self.Link = Link
                self.Name = Name
+               self.portal = portal
+               self.baseurl = baseurl
                self.scope = scope
+
+               global default_cover
+               if self.portal == "TXXX.com":
+                       default_cover = "file://%s/txxx.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
+               elif self.portal == "HClips.com":
+                       default_cover = "file://%s/hclips.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
+
                MPScreen.__init__(self, session, skin='MP_Plugin', default_cover=default_cover)
                ThumbsHelper.__init__(self)
 
@@ -269,7 +292,7 @@ class txxxFilmScreen(MPScreen, ThumbsHelper):
                        "green" : self.keyPageNumber
                }, -1)
 
-               self['title'] = Label("TXXX.com")
+               self['title'] = Label(self.portal)
                self['ContentTitle'] = Label("Genre: %s" % self.Name)
                self['F2'] = Label(_("Page"))
 
@@ -289,21 +312,21 @@ class txxxFilmScreen(MPScreen, ThumbsHelper):
                self['name'].setText(_('Please wait...'))
                self.filmliste = []
                if re.match(".*Search", self.Name):
-                       url = "https://txxx.com/api/videos.php?params=86400/%s/relevance/60/search..%s.all..day&s=%s" % (self.scope, str(self.page), self.Link)
+                       url = "%s/api/videos.php?params=86400/%s/relevance/60/search..%s.all..day&s=%s" % (self.baseurl, self.scope, str(self.page), self.Link)
                else:
                        if self.Link.split('#')[0] == "main":
-                               url = "https://txxx.com/api/json/videos/86400/%s/%s/60/..%s.all..all.json" % (self.scope, self.Link.split('#')[-1], str(self.page))
+                               url = "%s/api/json/videos/86400/%s/%s/60/..%s.all..all.json" % (self.baseurl, self.scope, self.Link.split('#')[-1], str(self.page))
                        elif self.Link.split('#')[0] == "cat":
-                               url = "https://txxx.com/api/json/videos/86400/%s/latest-updates/60/categories.%s.%s.all..day.json" % (self.scope, self.Link.split('#')[-1], str(self.page))
+                               url = "%s/api/json/videos/86400/%s/latest-updates/60/categories.%s.%s.all..day.json" % (self.baseurl, self.scope, self.Link.split('#')[-1], str(self.page))
                        elif self.Link.split('#')[0] == "country":
-                               url = "https://txxx.com/api/json/videos/86400/%s/latest-updates/60/top-country.%s.%s.all..day.json" % (self.scope, self.Link.split('#')[-1], str(self.page))
+                               url = "%s/api/json/videos/86400/%s/latest-updates/60/top-country.%s.%s.all..day.json" % (self.baseurl, self.scope, self.Link.split('#')[-1], str(self.page))
                        elif self.Link.split('#')[0] == "pornstar":
-                               url = "https://txxx.com/api/json/videos/86400/%s/latest-updates/60/model.%s.%s.all...json" % (self.scope, self.Link.split('#')[-1], str(self.page))
+                               url = "%s/api/json/videos/86400/%s/latest-updates/60/model.%s.%s.all...json" % (self.baseurl, self.scope, self.Link.split('#')[-1], str(self.page))
                        elif self.Link.split('#')[0] == "channel":
-                               url = "https://txxx.com/api/json/videos/86400/%s/latest-updates/60/channel.%s.%s.all...json" % (self.scope, self.Link.split('#')[-1], str(self.page))
+                               url = "%s/api/json/videos/86400/%s/latest-updates/60/channel.%s.%s.all...json" % (self.baseurl, self.scope, self.Link.split('#')[-1], str(self.page))
                        elif self.Link.split('#')[0] == "playlist":
-                               url = "https://txxx.com/api/json/videos/86400/%s/latest-updates/60/playlist.%s.%s.all...json" % (self.scope, self.Link.split('#')[-1], str(self.page))
-               twAgentGetPage(url, agent=agent, cookieJar=cookies).addCallback(self.loadData).addErrback(self.dataError)
+                               url = "%s/api/json/videos/86400/%s/latest-updates/60/playlist.%s.%s.all...json" % (self.baseurl, self.scope, self.Link.split('#')[-1], str(self.page))
+               twAgentGetPage(url, agent=agent, cookieJar=cookies, headers={'Referer':self.baseurl}).addCallback(self.loadData).addErrback(self.dataError)
 
        def loadData(self, data):
                json_data = json.loads(data)
@@ -315,7 +338,7 @@ class txxxFilmScreen(MPScreen, ThumbsHelper):
                if json_data.has_key("videos"):
                        for item in json_data["videos"]:
                                title = str(item["title"])
-                               url = "https://txxx.com/api/videofile.php?video_id=%s&lifetime=8640000" % str(item["video_id"])
+                               url = "%s/api/videofile.php?video_id=%s&lifetime=8640000" % (self.baseurl, str(item["video_id"]))
                                image = str(item["scr"])
                                duration = str(item["duration"])
                                added = str(item["post_date"])
@@ -345,7 +368,7 @@ class txxxFilmScreen(MPScreen, ThumbsHelper):
                Link = self['liste'].getCurrent()[0][1]
                if Link:
                        self.keyLocked = True
-                       twAgentGetPage(Link, agent=agent, cookieJar=cookies, headers={'Referer':'https://txxx.com'}).addCallback(self.playVideo).addErrback(self.dataError)
+                       twAgentGetPage(Link, agent=agent, cookieJar=cookies, headers={'Referer':self.baseurl}).addCallback(self.playVideo).addErrback(self.dataError)
 
        def playVideo(self, data):
                video = re.findall('"video_url":"(.*?)",', data, re.S)
@@ -359,7 +382,7 @@ class txxxFilmScreen(MPScreen, ThumbsHelper):
                        if url.startswith('//'):
                                url = 'https:' + url
                        if url.startswith('/'):
-                               url = 'https://txxx.com' + url
+                               url = self.baseurl + url
                        Title = self['liste'].getCurrent()[0][0]
                        mp_globals.player_agent = agent
                        self.session.open(SimplePlayer, [(Title, url)], showPlaylist=False, ltype='txxx')
\ No newline at end of file
diff --git a/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/porn/updatetube.py b/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/porn/updatetube.py
deleted file mode 100644 (file)
index 698232f..0000000
+++ /dev/null
@@ -1,242 +0,0 @@
-# -*- coding: utf-8 -*-
-#######################################################################################################
-#
-#    MediaPortal for Dreambox OS
-#
-#    Coded by MediaPortal Team (c) 2013-2020
-#
-#  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 *
-
-class updatetubeGenreScreen(MPScreen):
-
-       def __init__(self, session, mode):
-               self.mode = mode
-
-               global default_cover
-               if self.mode == "updatetube":
-                       self.portal = "UpdateTube.com"
-                       self.baseurl = "www.updatetube.com"
-                       default_cover = "file://%s/updatetube.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
-               if self.mode == "pinkrod":
-                       self.portal = "Pinkrod.com"
-                       self.baseurl = "pinkrod.com"
-                       default_cover = "file://%s/pinkrod.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
-               if self.mode == "hotshame":
-                       self.portal = "hotshame.com"
-                       self.baseurl = "www.hotshame.com"
-                       default_cover = "file://%s/hotshame.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
-               if self.mode == "thenewporn":
-                       self.portal = "TheNewPorn.com"
-                       self.baseurl = "thenewporn.com"
-                       default_cover = "file://%s/thenewporn.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
-               if self.mode == "pornsharing":
-                       self.portal = "PornSharing.com"
-                       self.baseurl = "www.pornsharing.com"
-                       default_cover = "file://%s/pornsharing.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
-
-               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(self.portal)
-               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['name'].setText(_('Please wait...'))
-               self.keyLocked = True
-               url = "https://%s/categories/" % self.baseurl
-               getPage(url).addCallback(self.genreData).addErrback(self.dataError)
-
-       def genreData(self, data):
-               parse = re.search('class="cat(?:egories|)">(.*?)class="(?:clr|clearfix)"', data, re.S)
-               Cats = re.findall('class="(?:ic|item)">.*?<a\shref="(.*?)"(?:\sclass="img3"|)\stitle="(.*?)".*?<img.*?src="(.*?)">', parse.group(1), re.S)
-               if Cats:
-                       for (Url, Title, Image) in Cats:
-                               Title = Title.replace('HD ','').replace(' Sex','')
-                               self.genreliste.append((Title, Url, Image))
-                       self.genreliste.sort()
-               if self.mode == "pornsharing":
-                       most = "videos/viewed"
-                       rated = "videos/rated"
-               else:
-                       most = "most-popular"
-                       rated = "top-rated"
-               self.genreliste.insert(0, ("Most Popular", "https://%s/%s" % (self.baseurl, most), default_cover))
-               self.genreliste.insert(0, ("Top Rated", "https://%s/%s" % (self.baseurl, rated), default_cover))
-               self.genreliste.insert(0, ("Newest", "https://%s" % self.baseurl, default_cover))
-               self.genreliste.insert(0, ("--- Search ---", "callSuchen", default_cover))
-               self.ml.setList(map(self._defaultlistcenter, self.genreliste))
-               self.ml.moveToIndex(0)
-               self.keyLocked = False
-               self.showInfos()
-
-       def showInfos(self):
-               title = self['liste'].getCurrent()[0][0]
-               self['name'].setText(title)
-               Image = self['liste'].getCurrent()[0][2]
-               CoverHelper(self['coverArt']).getCover(Image)
-
-       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(updatetubeFilmScreen, Link, Name, self.portal, self.baseurl)
-
-       def SuchenCallback(self, callback = None):
-               if callback is not None and len(callback):
-                       Name = "--- Search ---"
-                       self.suchString = callback
-                       Link = '%s' % urllib.quote(self.suchString).replace(' ', '+')
-                       self.session.open(updatetubeFilmScreen, Link, Name, self.portal, self.baseurl)
-
-class updatetubeFilmScreen(MPScreen, ThumbsHelper):
-
-       def __init__(self, session, Link, Name, portal, baseurl):
-               self.Link = Link
-               self.portal = portal
-               self.baseurl = baseurl
-               self.Name = Name
-
-               global default_cover
-               if self.portal == "UpdateTube.com":
-                       default_cover = "file://%s/updatetube.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
-               if self.portal == "Pinkrod.com":
-                       default_cover = "file://%s/pinkrod.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
-               if self.portal == "hotshame.com":
-                       default_cover = "file://%s/hotshame.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
-               if self.portal == "TheNewPorn.com":
-                       default_cover = "file://%s/thenewporn.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
-               if self.portal == "PornSharing.com":
-                       default_cover = "file://%s/pornsharing.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
-
-               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(self.portal)
-               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 = []
-               cat = self.Link
-               if re.match(".*?Search", self.Name):
-                       url = 'https://%s/search/%s/%s' % (self.baseurl, self.Link, str(self.page))
-               elif self.page == 1:
-                       url = "%s" % (self.Link)
-               else:
-                       if self.Name == "Newest" and self.portal == "PornSharing.com":
-                               url = "%s/videos/%s" % (self.Link, str(self.page))
-                       else:
-                               url = "%s/%s" % (self.Link, str(self.page))
-               getPage(url).addCallback(self.loadData).addErrback(self.dataError)
-
-       def loadData(self, data):
-               self.getLastPage(data, '(?:id="pgn">|class="pagination">)(.*?)</nav>', '.*\/(\d+)')
-               Movies = re.findall('class="(?:ic|item)".*?href="(.*?)"(?:\sclass="img"|).*?title="(.*?)"(?:\starget="_blank"|)(?:\sclass="lnk"|)>.*?data-src="(.*?)"', data, re.S)
-               if Movies:
-                       for (Url, Title, Image) in Movies:
-                               self.filmliste.append((decodeHtml(Title), Url, Image))
-                       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):
-               Title = self['liste'].getCurrent()[0][0]
-               Image = self['liste'].getCurrent()[0][2]
-               self['name'].setText(Title)
-               CoverHelper(self['coverArt']).getCover(Image)
-
-       def keyOK(self):
-               if self.keyLocked:
-                       return
-               Link = self['liste'].getCurrent()[0][1]
-               self.keyLocked = True
-               getPage(Link).addCallback(self.getVideoPage).addErrback(self.dataError)
-
-       def getVideoPage(self, data):
-               videoPage = re.findall('<source src="(.*?)"', data, re.S)
-               if videoPage:
-                       self.keyLocked = False
-                       Title = self['liste'].getCurrent()[0][0]
-                       self.session.open(SimplePlayer, [(Title, videoPage[-1].replace('&amp;','&'))], showPlaylist=False, ltype='updatetube')
\ No newline at end of file
index d961c37..10f75c8 100644 (file)
@@ -223,6 +223,15 @@ class vintagetubeFilmScreen(MPScreen):
                self.Name = Name
                self.portal = portal
                self.baseurl = baseurl
+
+               global default_cover
+               if self.portal == "VintageTube.xxx":
+                       default_cover = "file://%s/vintagetube.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
+               elif self.portal == "Analdin.com":
+                       default_cover = "file://%s/analdin.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
+               elif self.portal == "Xozilla.com":
+                       default_cover = "file://%s/xozilla.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
+
                MPScreen.__init__(self, session, skin='MP_Plugin', default_cover=default_cover)
 
                self["actions"] = ActionMap(["MP_Actions"], {
@@ -257,7 +266,7 @@ class vintagetubeFilmScreen(MPScreen):
                self['name'].setText(_('Please wait...'))
                self.filmliste = []
                if re.match(".*?Search", self.Name):
-                       self.url = "https://api.%s/api/v1/search?q=%s&c=100&offset=%s" % (self.baseurl, self.Link, str((self.page-1)*100))
+                       self.url = "https://api.%s/api/v1/search?query=%s&sort=latest&size=100&from=%s&min=0&max=40" % (self.baseurl, self.Link, str((self.page-1)*100))
                else:
                        if self.Link.startswith('https://api'):
                                self.url = self.Link + str((self.page-1)*100)
diff --git a/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/porn/wetplace.py b/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/porn/wetplace.py
deleted file mode 100644 (file)
index bbcbd0c..0000000
+++ /dev/null
@@ -1,191 +0,0 @@
-# -*- coding: utf-8 -*-
-#######################################################################################################
-#
-#    MediaPortal for Dreambox OS
-#
-#    Coded by MediaPortal Team (c) 2013-2020
-#
-#  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 *
-
-default_cover = "file://%s/wetplace.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
-
-class wetplaceGenreScreen(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("WetPlace.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
-               url = "http://www.wetplace.com/categories/"
-               getPage(url).addCallback(self.genreData).addErrback(self.dataError)
-
-       def genreData(self, data):
-               parse = re.search('class="cats">(.*?)</section>', data, re.S)
-               Cats = re.findall('class="icnt">.*?href="(.*?)".*?class="imgcnt".*?url\((.*?)\).*?class="info">.*?(\w.*?)</div>', parse.group(1), re.S)
-               if Cats:
-                       for (Url, Image, Title) in Cats:
-                               Title = Title.replace(' ','').replace('\n','')
-                               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))
-                       self.genreliste.insert(0, ("Newest", "http://www.wetplace.com", default_cover))
-                       self.genreliste.insert(0, ("--- Search ---", "callSuchen", default_cover))
-                       self.ml.setList(map(self._defaultlistcenter, self.genreliste))
-                       self.ml.moveToIndex(0)
-                       self.keyLocked = False
-                       self.showInfos()
-
-       def showInfos(self):
-               Image = self['liste'].getCurrent()[0][2]
-               CoverHelper(self['coverArt']).getCover(Image)
-
-       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(wetplaceFilmScreen, Link, Name)
-
-       def SuchenCallback(self, callback = None):
-               if callback is not None and len(callback):
-                       Name = "--- Search ---"
-                       self.suchString = callback
-                       Link = '%s' % urllib.quote(self.suchString).replace(' ', '+')
-                       self.session.open(wetplaceFilmScreen, Link, Name)
-
-class wetplaceFilmScreen(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("WetPlace.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 = []
-               cat = self.Link
-               if re.match(".*?Search", self.Name):
-                       url = 'http://www.wetplace.com/search/%s/%s' % (self.Link, str(self.page))
-               else:
-                       url = "%s/%s" % (self.Link, str(self.page))
-               getPage(url).addCallback(self.loadData).addErrback(self.dataError)
-
-       def loadData(self, data):
-               self.getLastPage(data, 'id="pgn">(.*?)</nav>', '.*\/(\d+)')
-               Movies = re.findall('<article>.*?href="(.*?)"\stitle="(.*?)".*?data-src="(.*?)"', data, re.S)
-               if Movies:
-                       for (Url, Title, Image) in Movies:
-                               self.filmliste.append((decodeHtml(Title), Url, Image))
-                       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):
-               Title = self['liste'].getCurrent()[0][0]
-               Image = self['liste'].getCurrent()[0][2]
-               self['name'].setText(Title)
-               CoverHelper(self['coverArt']).getCover(Image)
-
-       def keyOK(self):
-               if self.keyLocked:
-                       return
-               Link = self['liste'].getCurrent()[0][1]
-               self.keyLocked = True
-               getPage(Link).addCallback(self.getVideoPage).addErrback(self.dataError)
-
-       def getVideoPage(self, data):
-               videoPage = re.findall('<source src="(.*?)"', data, re.S)
-               if videoPage:
-                       self.keyLocked = False
-                       Title = self['liste'].getCurrent()[0][0]
-                       self.session.open(SimplePlayer, [(Title, videoPage[-1].replace('&amp;','&'))], showPlaylist=False, ltype='wetplace')
\ No newline at end of file
index 0694c51..212236f 100644 (file)
@@ -778,7 +778,10 @@ class xhamsterFilmScreen(MPScreen, ThumbsHelper):
                                                res = int(str(node["quality"]).replace('p',''))
                                                if res > max:
                                                        max = res
-                                                       url = str(node["url"])
+                                                       if node.has_key("fallback") and "xhcdn.com" in str(node["fallback"]):
+                                                               url = str(node["fallback"])
+                                                       else:
+                                                               url = str(node["url"])
                        if jsondata["sources"]["standard"].has_key("h265") and mp_globals.model in ["one","two","dm900","dm920"]:
                                for node in jsondata["sources"]["standard"]["h265"]:
                                        if str(node["quality"]) == "auto":
@@ -787,7 +790,10 @@ class xhamsterFilmScreen(MPScreen, ThumbsHelper):
                                                res = int(str(node["quality"]).replace('p',''))
                                                if res > max:
                                                        max = res
-                                                       url = str(node["url"])
+                                                       if node.has_key("fallback") and "xhcdn.com" in str(node["fallback"]):
+                                                               url = str(node["fallback"])
+                                                       else:
+                                                               url = str(node["url"])
                        for node in jsondata["sources"]["standard"]["mp4"]:
                                if str(node["quality"]) == "auto":
                                        continue
@@ -796,11 +802,17 @@ class xhamsterFilmScreen(MPScreen, ThumbsHelper):
                                        if mp_globals.model in ["one","two"]:
                                                if res > max:
                                                        max = res
-                                                       url = str(node["url"])
+                                                       if node.has_key("fallback") and "xhcdn.com" in str(node["fallback"]):
+                                                               url = str(node["fallback"])
+                                                       else:
+                                                               url = str(node["url"])
                                        else:
                                                if res < 1440 and res > max:
                                                        max = res
-                                                       url = str(node["url"])
+                                                       if node.has_key("fallback") and "xhcdn.com" in str(node["fallback"]):
+                                                               url = str(node["fallback"])
+                                                       else:
+                                                               url = str(node["url"])
                if url:
                        self.keyLocked = False
                        self.session.open(SimplePlayer, [(Title, url)], showPlaylist=False, ltype='xhamster')
\ No newline at end of file
index ded4ba6..69916d6 100644 (file)
@@ -112,13 +112,13 @@ class youpornGenreScreen(MPScreen):
 
        def layoutFinished(self):
                self.keyLocked = True
-               url = "http://www.youporn.com/categories/alphabetical/"
+               url = "http://www.youporn.com/categories/"
                twAgentGetPage(url, agent=ypAgent, cookieJar=ck).addCallback(self.genreData).addErrback(self.dataError)
 
        def genreData(self, data):
                Cats = None
                self.genreliste = []
-               preparse = re.search('heading4\'>Porn Categories(.*?)id="countryFlags"', data, re.S)
+               preparse = re.search('heading4\'>All porn categories(.*?)id="countryFlags"', data, re.S)
                if preparse:
                        Cats = re.findall('<a\shref="((?:/category|https://www.youporn.com).*?)".*?img\ssrc.*?alt="(.*?)".*?data-original="(.*?)"', preparse.group(1), re.S)
                if Cats:
diff --git a/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/sport/dazn.py b/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/sport/dazn.py
new file mode 100644 (file)
index 0000000..d4ebce0
--- /dev/null
@@ -0,0 +1,116 @@
+# -*- coding: utf-8 -*-
+#######################################################################################################
+#
+#    MediaPortal for Dreambox OS
+#
+#    Coded by MediaPortal Team (c) 2013-2020
+#
+#  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 *
+
+try:
+    from Plugins.GP4.geminibrowser.gbrowserWidget import gMoviePlayer
+    GeminiPlayerFound = True
+except:
+    GeminiPlayerFound = False
+
+default_cover = "file://%s/dazn.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
+
+class daznScreen(MPScreen):
+
+       def __init__(self, session):
+               MPScreen.__init__(self, session, skin='MP_Plugin', default_cover=default_cover)
+
+               self["actions"] = ActionMap(["MP_Actions"], {
+                       "0"             : self.closeAll,
+                       "ok"    : self.keyOK,
+                       "cancel": self.keyCancel
+               }, -1)
+
+               self['title'] = Label("DAZN")
+
+               self.filmliste = []
+               self.ml = MenuList([], enableWrapAround=True, content=eListboxPythonMultiContent)
+               self['liste'] = self.ml
+               self.StartTimer = eTimer()
+               self.keyLocked = True
+
+               self.onLayoutFinish.append(self.start)
+
+       def start(self):
+               self.filmliste.append(("",))
+               if mp_globals.model in ["one","two"]:
+                       try:
+                               self.player_org = config.vod.dazn.player.value
+                       except:
+                               pass
+                       self.StartTimer_conn = self.StartTimer.timeout.connect(self.keyOK)
+                       self.StartTimer.start(1000, False)
+                       self.filmliste.append((_("Please wait while DAZN is started..."),))
+                       self.keyLocked = False
+               else:
+                       self.filmliste.append((_("This plugin is only available for Dreambox One and Two!"),))
+                       self['handlung'].setText('')
+               self.ml.setList(map(self._defaultlistcenter, self.filmliste))
+               self.ml.moveToIndex(0)
+               self.ml.selectionEnabled(False)
+
+       def keyOK(self):
+               if self.keyLocked:
+                       return
+               self.StartTimer.stop()
+               try:
+                       from Plugins.Extensions.VOD.plugin import Plugins
+                       config.vod.dazn.player = ConfigSelection(default='SIMPLE_PL', choices=[('SIMPLE_PL', 'MediaPortal')])
+                       config.vod.dazn.player.save()
+                       configfile.save()
+                       from Plugins.Extensions.DaznVod.daznmain import DaznMain
+                       from Plugins.Extensions.MediaPortal.plugin import _stylemanager
+                       _stylemanager(0)
+                       self.session.openWithCallback(self.daznClose, DaznMain)
+               except:
+                       self.session.openWithCallback(self.daznClose, MessageBoxExt, _("Launching DAZN failed!"), MessageBoxExt.TYPE_ERROR, timeout=5)
+
+       def daznClose(self, answer=''):
+               from Plugins.Extensions.MediaPortal.plugin import _stylemanager
+               _stylemanager(1)
+               menu = [('DREAMOS_PL', 'Dreamos'), ('SIMPLE_PL', 'Mediaportal')]
+               if GeminiPlayerFound:
+                       menu.append(('GEMINI_PL', 'Gemini'))
+               config.vod.dazn.player = ConfigSelection(default='DREAMOS_PL', choices=menu)
+               try:
+                       config.vod.dazn.player.value = self.player_org
+                       config.vod.dazn.player.save()
+                       configfile.save()
+               except:
+                       pass
+               self.keyCancel()
\ No newline at end of file
index 9602843..cc01bf3 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 d150f15..b1a0937 100644 (file)
@@ -1,8 +1,8 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: MediaPortal\n"
-"POT-Creation-Date: 2020-01-03 22:19+0100\n"
-"PO-Revision-Date: 2020-01-03 22:19+0100\n"
+"POT-Creation-Date: 2020-02-20 17:03+0100\n"
+"PO-Revision-Date: 2020-02-20 17:03+0100\n"
 "Last-Translator: dhwz <dhwz@gmx.net>\n"
 "Language-Team: MediaPortal Team\n"
 "Language: de_DE\n"
@@ -20,18 +20,18 @@ msgstr ""
 #: mpgz/src/additions/porn/adultbay.py:131
 #: mpgz/src/additions/porn/amateuremdh.py:89
 #: mpgz/src/additions/porn/bitporno.py:97
-#: mpgz/src/additions/porn/datoporn.py:92
+#: mpgz/src/additions/porn/datoporn.py:89
 #: mpgz/src/additions/porn/dirtymoviez.py:92
 #: mpgz/src/additions/porn/fapbraze.py:107
 #: mpgz/src/additions/porn/freeomovie.py:99
 #: mpgz/src/additions/porn/hqporner.py:144
-#: mpgz/src/additions/porn/incestflix.py:91
+#: mpgz/src/additions/porn/incestflix.py:92
 #: mpgz/src/additions/porn/javbraze.py:175
 #: mpgz/src/additions/porn/javdos.py:109 mpgz/src/additions/porn/lfporn.py:89
 #: mpgz/src/additions/porn/mydirtyhobby.py:90
 #: mpgz/src/additions/porn/pandamovie.py:129
 #: mpgz/src/additions/porn/paradisehill.py:101
-#: mpgz/src/additions/porn/porn00.py:101
+#: mpgz/src/additions/porn/porn00.py:98 mpgz/src/additions/porn/pornaq.py:112
 #: mpgz/src/additions/porn/pornfromczech.py:95
 #: mpgz/src/additions/porn/pornrewind.py:99
 #: mpgz/src/additions/porn/pornstreams.py:110
@@ -51,16 +51,15 @@ msgstr ""
 #: src/additions/porn/anyporn.py:286 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/camhub.py:127 src/additions/porn/chaturbate.py:181
+#: src/additions/porn/camhub.py:128 src/additions/porn/chaturbate.py:181
 #: src/additions/porn/cliphunter.py:170 src/additions/porn/cliphunter.py:240
-#: src/additions/porn/crocotube.py:144 src/additions/porn/cumlouder.py:285
-#: src/additions/porn/cumlouder.py:359 src/additions/porn/cumlouder.py:434
+#: src/additions/porn/crocotube.py:144 src/additions/porn/cumlouder.py:287
+#: src/additions/porn/cumlouder.py:361 src/additions/porn/cumlouder.py:436
 #: src/additions/porn/dachix.py:159 src/additions/porn/ddfnetwork.py:163
 #: src/additions/porn/ddfnetwork.py:239 src/additions/porn/drtuber.py:192
-#: src/additions/porn/elladies.py:132 src/additions/porn/eporner.py:165
-#: src/additions/porn/eroprofile.py:139 src/additions/porn/extremetube.py:167
-#: src/additions/porn/faapy.py:147 src/additions/porn/faapy.py:213
-#: src/additions/porn/fetishshrine.py:137 src/additions/porn/freeones.py:161
+#: src/additions/porn/eporner.py:165 src/additions/porn/eroprofile.py:139
+#: src/additions/porn/extremetube.py:167 src/additions/porn/faapy.py:147
+#: src/additions/porn/faapy.py:213 src/additions/porn/freeones.py:161
 #: src/additions/porn/hclips.py:163 src/additions/porn/hdzog.py:167
 #: src/additions/porn/homemoviestube.py:166 src/additions/porn/hotmovs.py:166
 #: src/additions/porn/hotscope.py:148 src/additions/porn/kink.py:147
@@ -68,36 +67,34 @@ msgstr ""
 #: src/additions/porn/mofos.py:212 src/additions/porn/moviefap.py:134
 #: src/additions/porn/nubilefilms.py:132 src/additions/porn/nubilefilms.py:206
 #: src/additions/porn/pinflix.py:232 src/additions/porn/pinflix.py:367
-#: src/additions/porn/porn7.py:216 src/additions/porn/porncom.py:191
-#: src/additions/porn/porncom.py:330 src/additions/porn/porncom.py:468
-#: src/additions/porn/porncom.py:606 src/additions/porn/porndoe.py:147
+#: src/additions/porn/porn7.py:216 src/additions/porn/porndoe.py:147
 #: src/additions/porn/porngo.py:72 src/additions/porn/porngo.py:202
-#: src/additions/porn/pornhat.py:176 src/additions/porn/pornhub.py:331
-#: src/additions/porn/pornhub.py:488 src/additions/porn/pornhub.py:649
-#: src/additions/porn/pornhub.py:783 src/additions/porn/pornhub.py:911
-#: src/additions/porn/pornicom.py:194 src/additions/porn/pornid.py:197
+#: src/additions/porn/pornhat.py:176 src/additions/porn/pornhub.py:345
+#: src/additions/porn/pornhub.py:516 src/additions/porn/pornhub.py:680
+#: src/additions/porn/pornhub.py:929 src/additions/porn/pornhub.py:1066
+#: src/additions/porn/pornicom.py:200 src/additions/porn/pornid.py:197
 #: src/additions/porn/pornoreino.py:128 src/additions/porn/pornoxo.py:182
 #: src/additions/porn/pornrabbit.py:176 src/additions/porn/porntv.py:292
 #: src/additions/porn/pornxio.py:264 src/additions/porn/realgfporn.py:160
 #: src/additions/porn/redtube.py:181 src/additions/porn/sexu.py:131
 #: src/additions/porn/shemalez.py:165 src/additions/porn/shesfreaky.py:139
-#: src/additions/porn/slutload.py:176 src/additions/porn/spankbang.py:167
+#: src/additions/porn/slutload.py:310 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:208 src/additions/porn/tubepornclassic.py:159
 #: src/additions/porn/tubewolf.py:162 src/additions/porn/txxx.py:78
 #: src/additions/porn/txxx.py:274 src/additions/porn/updatetube.py:183
-#: src/additions/porn/upornia.py:166 src/additions/porn/vintagetube.py:243
+#: src/additions/porn/upornia.py:166 src/additions/porn/vintagetube.py:252
 #: src/additions/porn/vjav.py:165 src/additions/porn/voyeurhit.py:167
-#: src/additions/porn/vporn.py:221 src/additions/porn/wetplace.py:137
+#: src/additions/porn/vporn.py:192 src/additions/porn/wetplace.py:137
 #: src/additions/porn/x4tube.py:245 src/additions/porn/x4tube.py:373
-#: src/additions/porn/xhamster.py:495 src/additions/porn/xhamster.py:620
+#: src/additions/porn/xhamster.py:497 src/additions/porn/xhamster.py:623
 #: src/additions/porn/xnxx.py:301 src/additions/porn/xpaja.py:148
-#: src/additions/porn/xvideos.py:291 src/additions/porn/xvideos.py:487
+#: src/additions/porn/xvideos.py:291 src/additions/porn/xvideos.py:489
 #: src/additions/porn/xxxdan.py:166 src/additions/porn/youjizz.py:171
 #: src/additions/porn/youporn.py:316 src/additions/porn/youporn.py:383
 #: src/plugin.py:2022 src/plugin.py:2272 src/plugin.py:3044 src/plugin.py:3063
-#: src/resources/showAsThumb.py:247
+#: src/resources/showAsThumb.py:245
 msgid "Page"
 msgstr "Seite"
 
@@ -105,18 +102,18 @@ msgstr "Seite"
 #: mpgz/src/additions/porn/adultbay.py:133
 #: mpgz/src/additions/porn/amateuremdh.py:93
 #: mpgz/src/additions/porn/bitporno.py:99
-#: mpgz/src/additions/porn/datoporn.py:94
+#: mpgz/src/additions/porn/datoporn.py:91
 #: mpgz/src/additions/porn/dirtymoviez.py:94
 #: mpgz/src/additions/porn/fapbraze.py:109
 #: mpgz/src/additions/porn/freeomovie.py:101
 #: mpgz/src/additions/porn/hqporner.py:146
-#: mpgz/src/additions/porn/incestflix.py:93
+#: mpgz/src/additions/porn/incestflix.py:94
 #: mpgz/src/additions/porn/javbraze.py:177
 #: mpgz/src/additions/porn/javdos.py:111 mpgz/src/additions/porn/lfporn.py:91
 #: mpgz/src/additions/porn/mydirtyhobby.py:94
 #: mpgz/src/additions/porn/pandamovie.py:131
 #: mpgz/src/additions/porn/paradisehill.py:107
-#: mpgz/src/additions/porn/porn00.py:103
+#: mpgz/src/additions/porn/porn00.py:100 mpgz/src/additions/porn/pornaq.py:114
 #: mpgz/src/additions/porn/pornfromczech.py:97
 #: mpgz/src/additions/porn/pornrewind.py:101
 #: mpgz/src/additions/porn/pornstreams.py:112
@@ -130,7 +127,7 @@ msgstr "Seite"
 #: mpgz/src/additions/useradditions/ddl_me.py:164
 #: mpgz/src/additions/useradditions/filmpalast.py:250
 #: mpgz/src/additions/useradditions/flimmerstube.py:82
-#: mpgz/src/additions/useradditions/kinoxto.py:368
+#: mpgz/src/additions/useradditions/kinoxto.py:374
 #: mpgz/src/additions/useradditions/movie4k.py:329
 #: mpgz/src/additions/useradditions/movie4k.py:775
 #: src/additions/fun/failto.py:67 src/additions/fun/forplayers.py:80
@@ -155,16 +152,15 @@ msgstr "Seite"
 #: src/additions/porn/anyporn.py:288 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/camhub.py:129 src/additions/porn/chaturbate.py:183
+#: src/additions/porn/camhub.py:130 src/additions/porn/chaturbate.py:183
 #: src/additions/porn/cliphunter.py:172 src/additions/porn/cliphunter.py:242
-#: src/additions/porn/crocotube.py:146 src/additions/porn/cumlouder.py:287
-#: src/additions/porn/cumlouder.py:361 src/additions/porn/cumlouder.py:438
+#: src/additions/porn/crocotube.py:146 src/additions/porn/cumlouder.py:289
+#: src/additions/porn/cumlouder.py:363 src/additions/porn/cumlouder.py:440
 #: src/additions/porn/dachix.py:161 src/additions/porn/ddfnetwork.py:165
 #: src/additions/porn/ddfnetwork.py:241 src/additions/porn/drtuber.py:193
-#: src/additions/porn/elladies.py:135 src/additions/porn/eporner.py:167
-#: src/additions/porn/eroprofile.py:141 src/additions/porn/extremetube.py:195
-#: src/additions/porn/faapy.py:148 src/additions/porn/faapy.py:215
-#: src/additions/porn/fetishshrine.py:139 src/additions/porn/freeones.py:163
+#: src/additions/porn/eporner.py:167 src/additions/porn/eroprofile.py:141
+#: src/additions/porn/extremetube.py:169 src/additions/porn/faapy.py:148
+#: src/additions/porn/faapy.py:215 src/additions/porn/freeones.py:163
 #: src/additions/porn/hclips.py:165 src/additions/porn/hdzog.py:169
 #: src/additions/porn/homemoviestube.py:170 src/additions/porn/hotmovs.py:168
 #: src/additions/porn/hotscope.py:150 src/additions/porn/kink.py:149
@@ -172,32 +168,30 @@ msgstr "Seite"
 #: src/additions/porn/mofos.py:214 src/additions/porn/moviefap.py:136
 #: src/additions/porn/nubilefilms.py:134 src/additions/porn/nubilefilms.py:208
 #: src/additions/porn/pinflix.py:235 src/additions/porn/pinflix.py:370
-#: src/additions/porn/porn7.py:218 src/additions/porn/porncom.py:193
-#: src/additions/porn/porncom.py:333 src/additions/porn/porncom.py:471
-#: src/additions/porn/porncom.py:612 src/additions/porn/porndoe.py:151
+#: src/additions/porn/porn7.py:218 src/additions/porn/porndoe.py:151
 #: src/additions/porn/porngo.py:73 src/additions/porn/porngo.py:204
-#: src/additions/porn/pornhat.py:178 src/additions/porn/pornhub.py:334
-#: src/additions/porn/pornhub.py:491 src/additions/porn/pornhub.py:652
-#: src/additions/porn/pornhub.py:786 src/additions/porn/pornhub.py:913
-#: src/additions/porn/pornicom.py:196 src/additions/porn/pornid.py:199
+#: src/additions/porn/pornhat.py:178 src/additions/porn/pornhub.py:348
+#: src/additions/porn/pornhub.py:519 src/additions/porn/pornhub.py:683
+#: src/additions/porn/pornhub.py:932 src/additions/porn/pornhub.py:1068
+#: src/additions/porn/pornicom.py:202 src/additions/porn/pornid.py:199
 #: src/additions/porn/pornoreino.py:130 src/additions/porn/pornoxo.py:184
 #: src/additions/porn/pornrabbit.py:178 src/additions/porn/porntv.py:294
 #: src/additions/porn/pornxio.py:266 src/additions/porn/realgfporn.py:162
 #: src/additions/porn/redtube.py:185 src/additions/porn/sexu.py:133
 #: src/additions/porn/shemalez.py:167 src/additions/porn/shesfreaky.py:141
-#: src/additions/porn/slutload.py:178 src/additions/porn/spankbang.py:173
+#: src/additions/porn/slutload.py:312 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:212 src/additions/porn/tubepornclassic.py:161
 #: src/additions/porn/tubewolf.py:164 src/additions/porn/txxx.py:79
 #: src/additions/porn/txxx.py:276 src/additions/porn/updatetube.py:185
 #: src/additions/porn/upornia.py:168 src/additions/porn/vintagetube.py:191
-#: src/additions/porn/vintagetube.py:274 src/additions/porn/vjav.py:167
-#: src/additions/porn/voyeurhit.py:169 src/additions/porn/vporn.py:225
+#: src/additions/porn/vintagetube.py:283 src/additions/porn/vjav.py:167
+#: src/additions/porn/voyeurhit.py:169 src/additions/porn/vporn.py:197
 #: src/additions/porn/wetplace.py:139 src/additions/porn/x4tube.py:248
-#: src/additions/porn/x4tube.py:377 src/additions/porn/xhamster.py:497
+#: src/additions/porn/x4tube.py:377 src/additions/porn/xhamster.py:499
 #: src/additions/porn/xnxx.py:306 src/additions/porn/xpaja.py:150
-#: src/additions/porn/xvideos.py:294 src/additions/porn/xvideos.py:496
+#: src/additions/porn/xvideos.py:294 src/additions/porn/xvideos.py:498
 #: src/additions/porn/xxxdan.py:170 src/additions/porn/youjizz.py:173
 #: src/additions/porn/youporn.py:318 src/additions/porn/youporn.py:385
 msgid "Page:"
@@ -206,11 +200,11 @@ msgstr "Seite:"
 #: mpgz/src/additions/porn/absoluporn.py:114
 #: mpgz/src/additions/porn/amateuremdh.py:106
 #: mpgz/src/additions/porn/bitporno.py:112
-#: mpgz/src/additions/porn/datoporn.py:107
+#: mpgz/src/additions/porn/datoporn.py:104
 #: mpgz/src/additions/porn/dirtymoviez.py:107
 #: mpgz/src/additions/porn/fapbraze.py:122
 #: mpgz/src/additions/porn/freeomovie.py:111
-#: mpgz/src/additions/porn/incestflix.py:106
+#: mpgz/src/additions/porn/incestflix.py:107
 #: mpgz/src/additions/porn/javbraze.py:190
 #: mpgz/src/additions/porn/javdos.py:124 mpgz/src/additions/porn/javdos.py:181
 #: mpgz/src/additions/porn/lfporn.py:104
@@ -218,8 +212,9 @@ msgstr "Seite:"
 #: mpgz/src/additions/porn/pandamovie.py:33
 #: mpgz/src/additions/porn/pandamovie.py:141
 #: mpgz/src/additions/porn/pandamovie.py:215
-#: mpgz/src/additions/porn/paradisehill.py:128
-#: mpgz/src/additions/porn/porn00.py:116
+#: mpgz/src/additions/porn/paradisehill.py:133
+#: mpgz/src/additions/porn/porn00.py:113 mpgz/src/additions/porn/pornaq.py:127
+#: mpgz/src/additions/porn/pornaq.py:165
 #: mpgz/src/additions/porn/pornfromczech.py:110
 #: mpgz/src/additions/porn/pornrewind.py:114
 #: mpgz/src/additions/porn/pornstreams.py:125
@@ -274,11 +269,11 @@ msgstr "Seite:"
 #: src/additions/mediatheken/youtube.py:982
 #: 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:587 src/additions/music/mtvdecharts.py:195
+#: src/additions/mediatheken/zdf.py:589 src/additions/music/mtvdecharts.py:191
 #: 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/focus.py:119
+#: src/additions/newsdoku/dokus4_me.py:164 src/additions/newsdoku/focus.py:121
 #: src/additions/newsdoku/urknall.py:75 src/additions/porn/ahme.py:202
 #: src/additions/porn/anyporn.py:113 src/additions/porn/anyporn.py:285
 #: src/additions/porn/beeg.py:157 src/additions/porn/befuck.py:60
@@ -286,21 +281,20 @@ msgstr "Seite:"
 #: 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/camhub.py:142 src/additions/porn/camhub.py:186
+#: src/additions/porn/camhub.py:143 src/additions/porn/camhub.py:187
 #: src/additions/porn/camsoda.py:125 src/additions/porn/camsoda.py:205
 #: src/additions/porn/chaturbate.py:196 src/additions/porn/chaturbate.py:261
 #: src/additions/porn/cliphunter.py:255 src/additions/porn/crocotube.py:75
 #: src/additions/porn/crocotube.py:143 src/additions/porn/crocotube.py:158
 #: src/additions/porn/crocotube.py:195 src/additions/porn/cumlouder.py:73
-#: src/additions/porn/cumlouder.py:162 src/additions/porn/cumlouder.py:229
-#: src/additions/porn/cumlouder.py:300 src/additions/porn/cumlouder.py:374
-#: src/additions/porn/cumlouder.py:460 src/additions/porn/dachix.py:71
+#: src/additions/porn/cumlouder.py:162 src/additions/porn/cumlouder.py:231
+#: src/additions/porn/cumlouder.py:302 src/additions/porn/cumlouder.py:376
+#: src/additions/porn/cumlouder.py:462 src/additions/porn/dachix.py:71
 #: src/additions/porn/dachix.py:158 src/additions/porn/ddfnetwork.py:74
 #: src/additions/porn/ddfnetwork.py:178 src/additions/porn/ddfnetwork.py:254
-#: src/additions/porn/drtuber.py:206 src/additions/porn/elladies.py:150
-#: src/additions/porn/eporner.py:180 src/additions/porn/eroprofile.py:155
-#: src/additions/porn/extremetube.py:181 src/additions/porn/faapy.py:154
-#: src/additions/porn/faapy.py:228 src/additions/porn/fetishshrine.py:152
+#: src/additions/porn/drtuber.py:206 src/additions/porn/eporner.py:180
+#: src/additions/porn/eroprofile.py:155 src/additions/porn/extremetube.py:182
+#: src/additions/porn/faapy.py:154 src/additions/porn/faapy.py:228
 #: src/additions/porn/freeones.py:176 src/additions/porn/hclips.py:178
 #: src/additions/porn/hdzog.py:182 src/additions/porn/homemoviestube.py:185
 #: src/additions/porn/hotmovs.py:181 src/additions/porn/hotscope.py:163
@@ -311,51 +305,50 @@ msgstr "Seite:"
 #: src/additions/porn/nubilefilms.py:147 src/additions/porn/nubilefilms.py:221
 #: src/additions/porn/pinflix.py:253 src/additions/porn/pinflix.py:392
 #: src/additions/porn/porn7.py:231 src/additions/porn/porn7.py:285
-#: src/additions/porn/porncom.py:210 src/additions/porn/porncom.py:350
-#: src/additions/porn/porncom.py:488 src/additions/porn/porncom.py:633
 #: src/additions/porn/porndoe.py:169 src/additions/porn/porngo.py:217
 #: src/additions/porn/pornhat.py:86 src/additions/porn/pornhat.py:191
-#: src/additions/porn/pornhat.py:227 src/additions/porn/pornhub.py:948
-#: src/additions/porn/pornhub.py:1155 src/additions/porn/pornicom.py:209
-#: src/additions/porn/pornicom.py:270 src/additions/porn/pornid.py:212
+#: src/additions/porn/pornhat.py:227 src/additions/porn/pornhub.py:1097
+#: src/additions/porn/pornhub.py:1355 src/additions/porn/pornicom.py:215
+#: src/additions/porn/pornicom.py:282 src/additions/porn/pornid.py:212
 #: src/additions/porn/pornid.py:288 src/additions/porn/pornoreino.py:143
 #: src/additions/porn/pornoreino.py:189 src/additions/porn/pornoxo.py:197
 #: src/additions/porn/pornrabbit.py:191 src/additions/porn/porntv.py:163
 #: src/additions/porn/porntv.py:307 src/additions/porn/pornxio.py:279
-#: src/additions/porn/pornxio.py:340 src/additions/porn/realgfporn.py:175
+#: src/additions/porn/pornxio.py:348 src/additions/porn/realgfporn.py:175
 #: src/additions/porn/redtube.py:206 src/additions/porn/sexu.py:69
 #: src/additions/porn/sexu.py:146 src/additions/porn/shemalez.py:180
 #: src/additions/porn/shesfreaky.py:72 src/additions/porn/shesfreaky.py:154
-#: src/additions/porn/slutload.py:191 src/additions/porn/slutload.py:240
-#: 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
-#: src/additions/porn/teamskeet.py:160 src/additions/porn/tnaflix.py:168
-#: src/additions/porn/tube8.py:236 src/additions/porn/tubepornclassic.py:174
-#: src/additions/porn/tubewolf.py:87 src/additions/porn/tubewolf.py:161
-#: src/additions/porn/txxx.py:289 src/additions/porn/updatetube.py:92
-#: src/additions/porn/updatetube.py:198 src/additions/porn/upornia.py:181
-#: src/additions/porn/vintagetube.py:87 src/additions/porn/vintagetube.py:181
-#: src/additions/porn/vintagetube.py:257 src/additions/porn/vintagetube.py:317
-#: src/additions/porn/vjav.py:180 src/additions/porn/voyeurhit.py:182
-#: src/additions/porn/vporn.py:240 src/additions/porn/wetplace.py:152
-#: src/additions/porn/x4tube.py:264 src/additions/porn/x4tube.py:392
-#: src/additions/porn/xhamster.py:521 src/additions/porn/xnxx.py:101
+#: src/additions/porn/slutload.py:148 src/additions/porn/slutload.py:326
+#: src/additions/porn/slutload.py:487 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 src/additions/porn/teamskeet.py:160
+#: src/additions/porn/tnaflix.py:168 src/additions/porn/tube8.py:236
+#: src/additions/porn/tubepornclassic.py:174 src/additions/porn/tubewolf.py:87
+#: src/additions/porn/tubewolf.py:161 src/additions/porn/txxx.py:289
+#: src/additions/porn/updatetube.py:92 src/additions/porn/updatetube.py:198
+#: src/additions/porn/upornia.py:181 src/additions/porn/vintagetube.py:87
+#: src/additions/porn/vintagetube.py:181 src/additions/porn/vintagetube.py:266
+#: src/additions/porn/vintagetube.py:326 src/additions/porn/vjav.py:180
+#: src/additions/porn/voyeurhit.py:182 src/additions/porn/vporn.py:221
+#: src/additions/porn/wetplace.py:152 src/additions/porn/x4tube.py:264
+#: src/additions/porn/x4tube.py:392 src/additions/porn/xhamster.py:121
+#: src/additions/porn/xhamster.py:523 src/additions/porn/xnxx.py:101
 #: src/additions/porn/xnxx.py:329 src/additions/porn/xpaja.py:164
 #: src/additions/porn/xvideos.py:101 src/additions/porn/xvideos.py:314
-#: src/additions/porn/xvideos.py:520 src/additions/porn/xxxdan.py:189
+#: src/additions/porn/xvideos.py:522 src/additions/porn/xxxdan.py:189
 #: src/additions/porn/youjizz.py:187 src/additions/porn/youporn.py:400
 #: src/additions/sport/pokerstars.py:59 src/additions/sport/pokerstars.py:118
 #: src/additions/sport/pokerstars.py:168 src/additions/sport/pokerstars.py:200
-#: src/resources/menuhelper.py:62 src/resources/mpscreen.py:324
-#: src/resources/simplelist.py:356 src/resources/simplelist.py:528
+#: src/resources/menuhelper.py:62 src/resources/mpscreen.py:325
+#: src/resources/simplelist.py:354 src/resources/simplelist.py:525
 msgid "Please wait..."
 msgstr "Bitte warten..."
 
 #: mpgz/src/additions/porn/absoluporn.py:139
 #: mpgz/src/additions/porn/amateuremdh.py:134
 #: mpgz/src/additions/porn/dirtymoviez.py:135
-#: mpgz/src/additions/porn/incestflix.py:118
+#: mpgz/src/additions/porn/incestflix.py:119
 #: mpgz/src/additions/porn/mydirtyhobby.py:136
 #: mpgz/src/additions/porn/porntrex.py:283
 #: mpgz/src/additions/porn/streammdh.py:160
@@ -373,10 +366,10 @@ msgstr "Bitte warten..."
 #: src/additions/mediatheken/youtube.py:1622 src/additions/newsdoku/bild.py:162
 #: src/additions/porn/ahme.py:217 src/additions/porn/anyporn.py:358
 #: src/additions/porn/beeg.py:191 src/additions/porn/brazzers.py:180
-#: src/additions/porn/camhub.py:164 src/additions/porn/cliphunter.py:271
-#: src/additions/porn/crocotube.py:175 src/additions/porn/cumlouder.py:494
+#: src/additions/porn/camhub.py:165 src/additions/porn/cliphunter.py:273
+#: src/additions/porn/crocotube.py:175 src/additions/porn/cumlouder.py:496
 #: src/additions/porn/ddfnetwork.py:275 src/additions/porn/drtuber.py:220
-#: src/additions/porn/eroprofile.py:177 src/additions/porn/extremetube.py:209
+#: src/additions/porn/eroprofile.py:177 src/additions/porn/extremetube.py:207
 #: src/additions/porn/faapy.py:245 src/additions/porn/hclips.py:194
 #: src/additions/porn/hdzog.py:203 src/additions/porn/homemoviestube.py:211
 #: src/additions/porn/hotmovs.py:209 src/additions/porn/hotscope.py:182
@@ -384,17 +377,17 @@ msgstr "Bitte warten..."
 #: src/additions/porn/mofos.py:244 src/additions/porn/moviefap.py:164
 #: src/additions/porn/nubilefilms.py:242 src/additions/porn/porn7.py:264
 #: src/additions/porn/porndoe.py:193 src/additions/porn/porngo.py:233
-#: src/additions/porn/pornhat.py:208 src/additions/porn/pornicom.py:244
+#: src/additions/porn/pornhat.py:208 src/additions/porn/pornicom.py:254
 #: src/additions/porn/pornid.py:260 src/additions/porn/pornoreino.py:167
-#: src/additions/porn/pornxio.py:313 src/additions/porn/redtube.py:252
-#: src/additions/porn/shemalez.py:202 src/additions/porn/slutload.py:217
+#: src/additions/porn/pornxio.py:321 src/additions/porn/redtube.py:252
+#: src/additions/porn/shemalez.py:202 src/additions/porn/slutload.py:462
 #: src/additions/porn/spankwire.py:247 src/additions/porn/sunporno.py:227
 #: src/additions/porn/teamskeet.py:184 src/additions/porn/tnaflix.py:183
-#: src/additions/porn/tubepornclassic.py:192 src/additions/porn/tubewolf.py:200
+#: src/additions/porn/tubepornclassic.py:193 src/additions/porn/tubewolf.py:200
 #: src/additions/porn/txxx.py:325 src/additions/porn/upornia.py:212
-#: src/additions/porn/vintagetube.py:300 src/additions/porn/vjav.py:205
-#: src/additions/porn/voyeurhit.py:198 src/additions/porn/vporn.py:266
-#: src/additions/porn/x4tube.py:433 src/additions/porn/xhamster.py:576
+#: src/additions/porn/vintagetube.py:309 src/additions/porn/vjav.py:205
+#: src/additions/porn/voyeurhit.py:201 src/additions/porn/vporn.py:243
+#: src/additions/porn/x4tube.py:433 src/additions/porn/xhamster.py:578
 #: src/additions/porn/xxxdan.py:213 src/additions/porn/youporn.py:416
 msgid "No videos found!"
 msgstr "Keine Videos gefunden!"
@@ -410,14 +403,14 @@ msgstr ""
 
 #: mpgz/src/additions/porn/adultbay.py:155
 #: mpgz/src/additions/porn/adultbay.py:158
-#: mpgz/src/additions/porn/datoporn.py:127
+#: mpgz/src/additions/porn/datoporn.py:119
 #: mpgz/src/additions/porn/fapbraze.py:146
 #: mpgz/src/additions/porn/hqporner.py:168
 #: mpgz/src/additions/porn/javbraze.py:236
 #: mpgz/src/additions/porn/javdos.py:153 mpgz/src/additions/porn/lfporn.py:122
 #: mpgz/src/additions/porn/pandamovie.py:178
-#: mpgz/src/additions/porn/paradisehill.py:149
-#: mpgz/src/additions/porn/porn00.py:133
+#: mpgz/src/additions/porn/paradisehill.py:154
+#: mpgz/src/additions/porn/porn00.py:130 mpgz/src/additions/porn/pornaq.py:144
 #: mpgz/src/additions/porn/pornfromczech.py:125
 #: mpgz/src/additions/porn/pornrewind.py:130
 #: mpgz/src/additions/porn/pornstreams.py:141
@@ -432,21 +425,20 @@ msgstr ""
 #: mpgz/src/additions/useradditions/movie4k.py:493
 #: mpgz/src/additions/useradditions/movie4k.py:689
 #: mpgz/src/additions/useradditions/movie4k.py:825
-#: src/additions/porn/dachix.py:193 src/additions/porn/fetishshrine.py:180
-#: src/additions/porn/freeones.py:192 src/additions/porn/porncom.py:699
-#: src/additions/porn/pornhub.py:1034 src/additions/porn/pornhub.py:1059
-#: src/additions/porn/pornoxo.py:230 src/additions/porn/pornrabbit.py:208
-#: src/additions/porn/porntv.py:349 src/additions/porn/sexu.py:166
-#: src/additions/porn/shesfreaky.py:175 src/additions/porn/spankbang.py:229
-#: src/additions/porn/tube8.py:291 src/additions/porn/xnxx.py:384
-#: src/additions/porn/xpaja.py:182 src/additions/porn/xvideos.py:637
-#: src/additions/porn/youjizz.py:208
+#: src/additions/porn/dachix.py:193 src/additions/porn/freeones.py:192
+#: src/additions/porn/pornhub.py:1177 src/additions/porn/pornhub.py:1215
+#: src/additions/porn/pornhub.py:1253 src/additions/porn/pornoxo.py:230
+#: src/additions/porn/pornrabbit.py:208 src/additions/porn/porntv.py:349
+#: src/additions/porn/sexu.py:166 src/additions/porn/shesfreaky.py:175
+#: src/additions/porn/spankbang.py:229 src/additions/porn/tube8.py:291
+#: src/additions/porn/xnxx.py:384 src/additions/porn/xpaja.py:182
+#: src/additions/porn/xvideos.py:639 src/additions/porn/youjizz.py:208
 msgid "No movies found!"
 msgstr "Keine Filme gefunden!"
 
 #: mpgz/src/additions/porn/adultbay.py:233
-#: mpgz/src/additions/porn/hqporner.py:217
-#: mpgz/src/additions/porn/hqporner.py:231
+#: mpgz/src/additions/porn/hqporner.py:223
+#: mpgz/src/additions/porn/hqporner.py:237
 #: mpgz/src/additions/porn/javbraze.py:290
 #: mpgz/src/additions/porn/javbraze.py:292
 #: mpgz/src/additions/porn/javbraze.py:300
@@ -461,18 +453,18 @@ msgstr "Keine Filme gefunden!"
 #: mpgz/src/additions/useradditions/filmpalast.py:342
 #: mpgz/src/additions/useradditions/flimmerstube.py:173
 #: mpgz/src/additions/useradditions/flimmerstube.py:181
-#: mpgz/src/additions/useradditions/kinoxto.py:770
-#: mpgz/src/additions/useradditions/kinoxto.py:804
-#: mpgz/src/additions/useradditions/kinoxto.py:885
+#: mpgz/src/additions/useradditions/kinoxto.py:776
+#: mpgz/src/additions/useradditions/kinoxto.py:810
+#: mpgz/src/additions/useradditions/kinoxto.py:891
 #: mpgz/src/additions/useradditions/serienstream.py:771
 msgid "No supported streams found!"
 msgstr "Keine unterstützten Streams gefunden!"
 
 #: mpgz/src/additions/porn/amateuremdh.py:91
 #: mpgz/src/additions/porn/mydirtyhobby.py:92
-#: mpgz/src/additions/porn/streammdh.py:129 src/additions/porn/pornhub.py:1088
-#: src/additions/porn/xhamster.py:496 src/additions/porn/xhamster.py:621
-#: src/additions/porn/xnxx.py:304 src/additions/porn/xvideos.py:494
+#: mpgz/src/additions/porn/streammdh.py:129 src/additions/porn/pornhub.py:1289
+#: src/additions/porn/xhamster.py:498 src/additions/porn/xhamster.py:624
+#: src/additions/porn/xnxx.py:304 src/additions/porn/xvideos.py:496
 msgid "Show Related"
 msgstr "Ähnliche anzeigen"
 
@@ -480,9 +472,9 @@ msgstr "Ähnliche anzeigen"
 #: mpgz/src/additions/porn/dirtymoviez.py:127
 #: mpgz/src/additions/porn/mydirtyhobby.py:125
 #: src/additions/porn/ddfnetwork.py:195 src/additions/porn/mofos.py:168
-#: src/additions/porn/nubilefilms.py:162 src/additions/porn/porncom.py:243
-#: src/additions/porn/pornhub.py:681 src/additions/porn/x4tube.py:295
-#: src/additions/porn/xhamster.py:391 src/additions/porn/xvideos.py:356
+#: src/additions/porn/nubilefilms.py:162 src/additions/porn/pornhub.py:714
+#: src/additions/porn/x4tube.py:295 src/additions/porn/xhamster.py:393
+#: src/additions/porn/xvideos.py:356
 msgid "No pornstars found!"
 msgstr "Keine Pornstars gefunden!"
 
@@ -500,7 +492,7 @@ msgstr "Keine abspielbaren Filme gefunden, nächste Seite probieren!"
 #: mpgz/src/additions/porn/pornfromczech.py:212
 #: mpgz/src/additions/porn/pornfromczech.py:223
 #: mpgz/src/additions/porn/streammdh.py:67 src/additions/porn/hotscope.py:240
-#: src/additions/porn/pornhub.py:1254
+#: src/additions/porn/pornhub.py:1474
 msgid "This plugin requires package nodejs."
 msgstr "Dieses Plugin benötigt das Paket nodejs."
 
@@ -508,72 +500,75 @@ msgstr "Dieses Plugin benötigt das Paket nodejs."
 #: mpgz/src/additions/porn/pornfromczech.py:214
 #: mpgz/src/additions/porn/pornfromczech.py:225
 #: mpgz/src/additions/porn/streammdh.py:69 src/additions/porn/hotscope.py:242
-#: src/additions/porn/pornhub.py:1256
+#: src/additions/porn/pornhub.py:1476
 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:203
 #: src/additions/porn/homemoviestube.py:168 src/additions/porn/pinflix.py:233
-#: src/additions/porn/pinflix.py:368 src/additions/porn/porncom.py:192
-#: src/additions/porn/porncom.py:331 src/additions/porn/porncom.py:469
-#: src/additions/porn/porncom.py:608 src/additions/porn/porndoe.py:149
-#: src/additions/porn/pornhub.py:332 src/additions/porn/pornhub.py:489
-#: src/additions/porn/pornhub.py:650 src/additions/porn/pornhub.py:784
+#: src/additions/porn/pinflix.py:368 src/additions/porn/porndoe.py:149
+#: src/additions/porn/pornhub.py:346 src/additions/porn/pornhub.py:517
+#: src/additions/porn/pornhub.py:681 src/additions/porn/pornhub.py:930
 #: src/additions/porn/redtube.py:183 src/additions/porn/spankbang.py:169
-#: src/additions/porn/tube8.py:209 src/additions/porn/vporn.py:223
+#: src/additions/porn/tube8.py:209 src/additions/porn/vporn.py:194
 #: src/additions/porn/x4tube.py:246 src/additions/porn/x4tube.py:374
-#: src/additions/porn/xvideos.py:489 src/plugin.py:1729 src/plugin.py:2670
+#: src/additions/porn/xvideos.py:491 src/plugin.py:1729 src/plugin.py:2670
 msgid "Sort"
 msgstr "Sortieren"
 
 #: mpgz/src/additions/porn/paradisehill.py:105
-#: src/additions/porn/cumlouder.py:436 src/additions/porn/cumlouder.py:508
-#: src/additions/porn/porncom.py:264 src/additions/porn/porncom.py:293
-#: src/additions/porn/porncom.py:332 src/additions/porn/porncom.py:402
-#: src/additions/porn/porncom.py:431 src/additions/porn/porncom.py:470
-#: src/additions/porn/porncom.py:540 src/additions/porn/porncom.py:569
-#: src/additions/porn/porncom.py:610 src/additions/porn/porncom.py:722
-#: src/additions/porn/porncom.py:757 src/additions/porn/spankbang.py:171
-#: src/additions/porn/spankbang.py:275 src/additions/porn/tube8.py:210
-#: src/additions/porn/tube8.py:332 src/additions/porn/x4tube.py:375
+#: mpgz/src/additions/porn/paradisehill.py:169
+#: src/additions/porn/cumlouder.py:438 src/additions/porn/cumlouder.py:510
+#: src/additions/porn/spankbang.py:171 src/additions/porn/spankbang.py:275
+#: src/additions/porn/tube8.py:210 src/additions/porn/tube8.py:332
+#: src/additions/porn/vporn.py:195 src/additions/porn/vporn.py:262
+#: src/additions/porn/vporn.py:264 src/additions/porn/x4tube.py:375
 #: src/additions/porn/x4tube.py:445 src/additions/porn/xnxx.py:303
 #: src/additions/porn/xnxx.py:431 src/additions/porn/xvideos.py:293
-#: src/additions/porn/xvideos.py:438 src/additions/porn/xvideos.py:443
-#: src/additions/porn/xvideos.py:490 src/additions/porn/xvideos.py:492
-#: src/additions/porn/xvideos.py:701 src/additions/porn/xxxdan.py:168
+#: src/additions/porn/xvideos.py:438 src/additions/porn/xvideos.py:444
+#: src/additions/porn/xvideos.py:492 src/additions/porn/xvideos.py:494
+#: src/additions/porn/xvideos.py:703 src/additions/porn/xxxdan.py:168
 #: src/additions/porn/xxxdan.py:227
 msgid "Filter"
 msgstr "Filter"
 
-#: mpgz/src/additions/porn/paradisehill.py:169
-#: mpgz/src/additions/porn/paradisehill.py:183
+#: mpgz/src/additions/porn/paradisehill.py:167
+#: src/additions/porn/pinflix.py:317 src/additions/porn/pinflix.py:460
+#: src/additions/porn/porndoe.py:206 src/additions/porn/pornhub.py:406
+#: src/additions/porn/pornhub.py:603 src/additions/porn/pornhub.py:730
+#: src/additions/porn/pornhub.py:983 src/additions/porn/redtube.py:268
+#: src/additions/porn/spankbang.py:279 src/additions/porn/tube8.py:332
+#: src/additions/porn/vporn.py:258 src/additions/porn/x4tube.py:322
+#: src/additions/porn/x4tube.py:445 src/additions/porn/xvideos.py:707
+msgid "Sort order"
+msgstr "Sortierreihenfolge"
+
+#: mpgz/src/additions/porn/paradisehill.py:178
+#: mpgz/src/additions/porn/paradisehill.py:192
 #: src/additions/mediatheken/ard.py:631 src/additions/music/shoutcast.py:269
-#: src/additions/porn/cumlouder.py:531 src/additions/porn/homemoviestube.py:243
+#: src/additions/porn/cumlouder.py:534 src/additions/porn/homemoviestube.py:243
 #: src/additions/porn/pinflix.py:306 src/additions/porn/pinflix.py:476
-#: src/additions/porn/porncom.py:256 src/additions/porn/porncom.py:276
-#: src/additions/porn/porncom.py:394 src/additions/porn/porncom.py:414
-#: src/additions/porn/porncom.py:532 src/additions/porn/porncom.py:552
-#: src/additions/porn/porncom.py:714 src/additions/porn/porncom.py:739
-#: src/additions/porn/porndoe.py:215 src/additions/porn/pornhub.py:421
-#: src/additions/porn/pornhub.py:592 src/additions/porn/pornhub.py:719
-#: src/additions/porn/pornhub.py:850 src/additions/porn/redtube.py:277
+#: src/additions/porn/porndoe.py:215 src/additions/porn/pornhub.py:449
+#: src/additions/porn/pornhub.py:622 src/additions/porn/pornhub.py:863
+#: src/additions/porn/pornhub.py:1005 src/additions/porn/redtube.py:280
 #: src/additions/porn/spankbang.py:241 src/additions/porn/spankbang.py:244
 #: src/additions/porn/spankbang.py:258 src/additions/porn/tube8.py:304
-#: src/additions/porn/tube8.py:317 src/additions/porn/vporn.py:293
-#: src/additions/porn/x4tube.py:312 src/additions/porn/x4tube.py:452
-#: src/additions/porn/x4tube.py:463 src/additions/porn/xhamster.py:684
-#: src/additions/porn/xnxx.py:415 src/additions/porn/xvideos.py:370
-#: src/additions/porn/xvideos.py:382 src/additions/porn/xvideos.py:649
-#: src/additions/porn/xvideos.py:664 src/additions/porn/xvideos.py:686
-#: src/additions/porn/xvideos.py:718 src/additions/porn/xxxdan.py:237
+#: src/additions/porn/tube8.py:317 src/additions/porn/vporn.py:277
+#: src/additions/porn/vporn.py:289 src/additions/porn/x4tube.py:312
+#: src/additions/porn/x4tube.py:452 src/additions/porn/x4tube.py:463
+#: src/additions/porn/xhamster.py:687 src/additions/porn/xnxx.py:415
+#: src/additions/porn/xvideos.py:370 src/additions/porn/xvideos.py:382
+#: src/additions/porn/xvideos.py:651 src/additions/porn/xvideos.py:666
+#: src/additions/porn/xvideos.py:688 src/additions/porn/xvideos.py:726
+#: src/additions/porn/xxxdan.py:237
 msgid "Select Action"
 msgstr "Wähle Aktion"
 
-#: mpgz/src/additions/porn/porn00.py:255 mpgz/src/additions/porn/porn00.py:263
-#: mpgz/src/additions/porn/porn00.py:281
+#: mpgz/src/additions/porn/porn00.py:252 mpgz/src/additions/porn/porn00.py:260
+#: mpgz/src/additions/porn/porn00.py:278
 #: mpgz/src/additions/useradditions/filmpalast.py:355
-#: mpgz/src/additions/useradditions/serienstream.py:817
+#: mpgz/src/additions/useradditions/serienstream.py:818
 msgid "Broken URL parsing, please report to the developers."
 msgstr "Defektes URL Parsing, bitte an die Entwickler melden."
 
@@ -586,16 +581,16 @@ msgstr "Defektes URL Parsing, bitte an die Entwickler melden."
 #: src/additions/music/radio.py:92 src/additions/music/radio.py:151
 #: 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:138 src/additions/porn/pornhub.py:280
-#: src/additions/porn/pornhub.py:282 src/additions/porn/youporn.py:77
+#: src/additions/porn/pornhub.py:137 src/additions/porn/pornhub.py:295
+#: src/additions/porn/pornhub.py:297 src/additions/porn/youporn.py:77
 #: src/additions/porn/youporn.py:221 src/additions/porn/youporn.py:223
-#: src/plugin.py:500 src/resources/simpleplayer.py:2271
+#: src/plugin.py:500 src/resources/simpleplayer.py:2268
 msgid "Setup"
 msgstr "Einstellungen"
 
 #: mpgz/src/additions/porn/porntrex.py:159
 #: mpgz/src/additions/porn/porntrex.py:162
-#: mpgz/src/additions/porn/porntrex.py:165 src/additions/porn/pornhub.py:287
+#: mpgz/src/additions/porn/porntrex.py:165 src/additions/porn/pornhub.py:302
 #: src/additions/porn/youporn.py:228
 msgid "Username:"
 msgstr "Username:"
@@ -604,7 +599,7 @@ msgstr "Username:"
 #: mpgz/src/additions/porn/porntrex.py:163
 #: mpgz/src/additions/porn/porntrex.py:166
 #: mpgz/src/additions/useradditions/serienstream.py:113
-#: src/additions/porn/pornhub.py:288 src/additions/porn/youporn.py:229
+#: src/additions/porn/pornhub.py:303 src/additions/porn/youporn.py:229
 msgid "Password:"
 msgstr "Passwort:"
 
@@ -630,7 +625,7 @@ msgstr "Nichts gefunden!"
 #: mpgz/src/additions/useradditions/movie4k.py:115
 #: src/additions/mediatheken/ard.py:90 src/additions/mediatheken/youtube.py:533
 #: src/additions/mediatheken/zdf.py:103 src/additions/newsdoku/dokus4_me.py:74
-#: src/resources/mpscreen.py:399
+#: src/resources/mpscreen.py:400
 msgid "Enter search criteria"
 msgstr "Suchkriterium eingeben"
 
@@ -655,34 +650,34 @@ msgid "No shows found!"
 msgstr "Keine Serien gefunden!"
 
 #: mpgz/src/additions/useradditions/filmpalast.py:180
-#: mpgz/src/additions/useradditions/kinoxto.py:531
+#: mpgz/src/additions/useradditions/kinoxto.py:537
 #: mpgz/src/additions/useradditions/serienstream.py:575
 msgid "Episode Selection"
 msgstr "Episoden Auswahl"
 
 #: mpgz/src/additions/useradditions/filmpalast.py:318
-#: mpgz/src/additions/useradditions/kinoxto.py:710
+#: mpgz/src/additions/useradditions/kinoxto.py:716
 #: mpgz/src/additions/useradditions/movie4k.py:535
 #: mpgz/src/additions/useradditions/serienstream.py:744
 #: mpgz/src/additions/useradditions/serienstream.py:745
 msgid "Stream Selection"
 msgstr "Stream Auswahl"
 
-#: mpgz/src/additions/useradditions/kinoxto.py:366
-#: mpgz/src/additions/useradditions/kinoxto.py:464
-#: mpgz/src/additions/useradditions/kinoxto.py:912
+#: mpgz/src/additions/useradditions/kinoxto.py:372
+#: mpgz/src/additions/useradditions/kinoxto.py:470
+#: mpgz/src/additions/useradditions/kinoxto.py:918
 #: mpgz/src/additions/useradditions/serienstream.py:159
 msgid "Add to Watchlist"
 msgstr "Zur Watchlist hinzufügen"
 
-#: mpgz/src/additions/useradditions/kinoxto.py:440
-#: mpgz/src/additions/useradditions/kinoxto.py:511
-#: mpgz/src/additions/useradditions/kinoxto.py:979
+#: mpgz/src/additions/useradditions/kinoxto.py:446
+#: mpgz/src/additions/useradditions/kinoxto.py:517
+#: mpgz/src/additions/useradditions/kinoxto.py:985
 #: mpgz/src/additions/useradditions/serienstream.py:244
 msgid "Selection was added to the watchlist."
 msgstr "Auswahl wurde zur Watchlist hinzugefügt."
 
-#: mpgz/src/additions/useradditions/kinoxto.py:462 src/additions/fun/ccc.py:26
+#: mpgz/src/additions/useradditions/kinoxto.py:468 src/additions/fun/ccc.py:26
 #: src/additions/fun/ccc.py:108 src/additions/fun/forplayers.py:25
 #: src/additions/fun/itunestrailers.py:63 src/additions/mediatheken/ard.py:125
 #: src/additions/mediatheken/ard.py:291 src/additions/mediatheken/ard.py:351
@@ -707,11 +702,11 @@ msgstr "Auswahl wurde zur Watchlist hinzugefügt."
 #: src/additions/mediatheken/zdf.py:61 src/additions/mediatheken/zdf.py:146
 #: src/additions/mediatheken/zdf.py:283 src/additions/mediatheken/zdf.py:378
 #: src/additions/porn/x2search4porn.py:196 src/resources/menuhelper.py:35
-#: src/resources/menuhelper.py:355 src/resources/simplelist.py:71
+#: src/resources/menuhelper.py:355 src/resources/simplelist.py:70
 msgid "Selection:"
 msgstr "Auswahl:"
 
-#: mpgz/src/additions/useradditions/kinoxto.py:603
+#: mpgz/src/additions/useradditions/kinoxto.py:609
 #: mpgz/src/additions/useradditions/serienstream.py:318
 #: mpgz/src/additions/useradditions/serienstream.py:634
 #: src/additions/mediatheken/funk.py:333
@@ -719,20 +714,21 @@ msgstr "Auswahl:"
 msgid "No episodes found!"
 msgstr "Keine Episoden gefunden!"
 
-#: mpgz/src/additions/useradditions/kinoxto.py:642
+#: mpgz/src/additions/useradditions/kinoxto.py:648
 #: mpgz/src/additions/useradditions/serienstream.py:391
 #: src/additions/fun/twitch.py:134 src/additions/mediatheken/youtube.py:871
 #: src/additions/music/radio.py:430 src/additions/music/shoutcast.py:327
-#: src/additions/porn/x2search4porn.py:80 src/resources/simpleplayer.py:634
+#: src/additions/porn/x2search4porn.py:80 src/resources/simplelist.py:528
+#: src/resources/simpleplayer.py:633
 msgid "Delete"
 msgstr "Löschen"
 
-#: mpgz/src/additions/useradditions/kinoxto.py:664
+#: mpgz/src/additions/useradditions/kinoxto.py:670
 #: mpgz/src/additions/useradditions/serienstream.py:423
 msgid "Watchlist is currently empty"
 msgstr "Watchlist ist derzeit leer"
 
-#: mpgz/src/additions/useradditions/kinoxto.py:851
+#: mpgz/src/additions/useradditions/kinoxto.py:857
 #: mpgz/src/additions/useradditions/movie4k.py:672
 msgid "Parts Selection"
 msgstr "Part Auswahl"
@@ -751,7 +747,7 @@ msgstr "PIN eingeben"
 #: mpgz/src/additions/useradditions/movie4k.py:654
 #: mpgz/src/additions/useradditions/movie4k.py:742
 #: mpgz/src/additions/useradditions/movie4k.py:746
-#: src/additions/mediatheken/kindertube.py:215 src/resources/streams.py:684
+#: src/additions/mediatheken/kindertube.py:215 src/resources/streams.py:691
 msgid "Stream not found, try another Stream Hoster."
 msgstr "Stream nicht gefunden, versuche einen anderen Stream Hoster."
 
@@ -784,7 +780,7 @@ msgstr "Keine Staffeln gefunden!"
 msgid "Toggle"
 msgstr "Umschalten"
 
-#: mpgz/src/additions/useradditions/serienstream.py:811
+#: mpgz/src/additions/useradditions/serienstream.py:812
 msgid ""
 "Sorry this video is currently captcha protected, please try again later."
 msgstr ""
@@ -869,8 +865,8 @@ msgid "Language"
 msgstr "Sprache"
 
 #: src/additions/fun/twitch.py:236 src/additions/music/radio.py:456
-#: src/additions/music/shoutcast.py:353 src/resources/simplelist.py:180
-#: src/resources/simplelist.py:333 src/resources/simplelist.py:599
+#: src/additions/music/shoutcast.py:353 src/resources/simplelist.py:178
+#: src/resources/simplelist.py:331 src/resources/simplelist.py:597
 msgid "No entries found!"
 msgstr "Keine Einträge gefunden!"
 
@@ -886,8 +882,8 @@ msgstr "Keine Streams gefunden!"
 #: src/additions/mediatheken/youtube.py:413
 #: src/additions/mediatheken/youtube.py:978
 #: src/additions/mediatheken/youtube_user.py:76
-#: src/additions/porn/cumlouder.py:315 src/additions/porn/porncom.py:381
-#: src/additions/porn/pornhub.py:817 src/additions/porn/xvideos.py:353
+#: src/additions/porn/cumlouder.py:317 src/additions/porn/pornhub.py:965
+#: src/additions/porn/xvideos.py:353
 msgid "No channels found!"
 msgstr "Keine Kanäle gefunden!"
 
@@ -948,7 +944,7 @@ msgid "Please wait while Netflix is started..."
 msgstr "Bitte warten Sie, während Netflix gestartet wird..."
 
 #: src/additions/mediatheken/netflix.py:81
-#: src/additions/mediatheken/primevideo.py:91
+#: src/additions/mediatheken/primevideo.py:91 src/additions/sport/dazn.py:81
 msgid "This plugin is only available for Dreambox One and Two!"
 msgstr "Dieses Plugin ist nur für Dreambox One und Two verfügbar!"
 
@@ -1658,10 +1654,10 @@ msgstr "Kein Streamlink gefunden."
 msgid "No dokus found!"
 msgstr "Keine Dokus gefunden!"
 
-#: src/additions/porn/beeg.py:238 src/additions/porn/camhub.py:191
-#: src/additions/porn/camhub.py:217 src/additions/porn/porncom.py:776
-#: src/additions/porn/tube8.py:348 src/additions/porn/xnxx.py:462
-#: src/additions/porn/xvideos.py:750
+#: src/additions/porn/beeg.py:238 src/additions/porn/camhub.py:192
+#: src/additions/porn/camhub.py:218 src/additions/porn/slutload.py:515
+#: src/additions/porn/tube8.py:349 src/additions/porn/xnxx.py:464
+#: src/additions/porn/xvideos.py:758
 msgid "Stream not found"
 msgstr "Stream nicht gefunden"
 
@@ -1684,79 +1680,62 @@ 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/cumlouder.py:177
+#: src/additions/porn/cumlouder.py:179
 msgid "No series found!"
 msgstr "Keine Serien gefunden!"
 
-#: src/additions/porn/cumlouder.py:243
+#: src/additions/porn/cumlouder.py:245
 msgid "No sites found!"
 msgstr "Keine Websites gefunden!"
 
-#: src/additions/porn/cumlouder.py:389
+#: src/additions/porn/cumlouder.py:391
 msgid "No girls found!"
 msgstr "Keine Girls gefunden!"
 
-#: src/additions/porn/pinflix.py:317 src/additions/porn/pinflix.py:460
-#: src/additions/porn/porncom.py:293 src/additions/porn/porncom.py:431
-#: src/additions/porn/porncom.py:569 src/additions/porn/porncom.py:757
-#: src/additions/porn/porndoe.py:206 src/additions/porn/pornhub.py:394
-#: src/additions/porn/pornhub.py:406 src/additions/porn/pornhub.py:573
-#: src/additions/porn/pornhub.py:692 src/additions/porn/pornhub.py:707
-#: src/additions/porn/pornhub.py:837 src/additions/porn/redtube.py:265
-#: src/additions/porn/spankbang.py:279 src/additions/porn/tube8.py:332
-#: src/additions/porn/x4tube.py:322 src/additions/porn/x4tube.py:445
-#: src/additions/porn/xvideos.py:705
-msgid "Sort order"
-msgstr "Sortierreihenfolge"
-
-#: src/additions/porn/porncom.py:519 src/additions/porn/pornhub.py:372
+#: src/additions/porn/pornhub.py:388
 msgid "No playlists found!"
 msgstr "Keine Playlist gefunden!"
 
-#: src/additions/porn/pornhub.py:289
-msgid "CDN fix (please don't use this option as default):"
-msgstr ""
-
-#: src/additions/porn/pornhub.py:388 src/additions/porn/pornhub.py:401
-#: src/additions/porn/pornhub.py:1140 src/additions/porn/xhamster.py:614
-#: src/additions/porn/xhamster.py:654
+#: src/additions/porn/pornhub.py:410 src/additions/porn/pornhub.py:429
+#: src/additions/porn/pornhub.py:1340 src/additions/porn/xhamster.py:617
+#: src/additions/porn/xhamster.py:657
 msgid "Remove Favourite"
 msgstr "Favorit entfernen"
 
-#: src/additions/porn/pornhub.py:404 src/additions/porn/pornhub.py:1143
-#: src/additions/porn/xhamster.py:658
+#: src/additions/porn/pornhub.py:432 src/additions/porn/pornhub.py:1343
+#: src/additions/porn/xhamster.py:661
 msgid "Add Favourite"
 msgstr "Favorit hinzufügen"
 
-#: src/additions/porn/pornhub.py:455
+#: src/additions/porn/pornhub.py:483
 msgid ""
 "You have reached the maximum allowed number of favorite playlists. Please "
 "delete some of your current favorite playlists before adding new ones."
 msgstr ""
 
-#: src/additions/porn/pornhub.py:487 src/additions/porn/pornhub.py:703
-#: src/additions/porn/pornhub.py:833 src/additions/porn/pornhub.py:1128
-#: src/additions/porn/xhamster.py:277 src/additions/porn/xhamster.py:302
-#: src/additions/porn/xhamster.py:419 src/additions/porn/xhamster.py:638
+#: src/additions/porn/pornhub.py:515 src/additions/porn/pornhub.py:847
+#: src/additions/porn/pornhub.py:988 src/additions/porn/pornhub.py:1331
+#: src/additions/porn/xhamster.py:279 src/additions/porn/xhamster.py:304
+#: src/additions/porn/xhamster.py:421 src/additions/porn/xhamster.py:641
 msgid "Unsubscribe"
 msgstr "Abmelden"
 
-#: src/additions/porn/pornhub.py:562 src/additions/porn/xhamster.py:253
+#: src/additions/porn/pornhub.py:590 src/additions/porn/xhamster.py:255
 msgid "No subscriptions found!"
 msgstr "Keine Abonnements gefunden!"
 
-#: src/additions/porn/pornhub.py:621 src/additions/porn/pornhub.py:755
-#: src/additions/porn/pornhub.py:880 src/additions/porn/pornhub.py:1225
+#: src/additions/porn/pornhub.py:651 src/additions/porn/pornhub.py:901
+#: src/additions/porn/pornhub.py:1035 src/additions/porn/pornhub.py:1426
 msgid "Unknown error."
 msgstr "Unbekannter Fehler."
 
-#: src/additions/porn/pornhub.py:706 src/additions/porn/pornhub.py:836
-#: src/additions/porn/pornhub.py:1131 src/additions/porn/xhamster.py:307
-#: src/additions/porn/xhamster.py:426 src/additions/porn/xhamster.py:644
+#: src/additions/porn/pornhub.py:850 src/additions/porn/pornhub.py:991
+#: src/additions/porn/pornhub.py:1334 src/additions/porn/xhamster.py:309
+#: src/additions/porn/xhamster.py:428 src/additions/porn/xhamster.py:647
 msgid "Subscribe"
 msgstr "Abonnieren"
 
-#: src/additions/porn/pornhub.py:1285
+#: src/additions/porn/pornhub.py:1506
 msgid ""
 "You have reached the maximum allowed number of favorite videos. Please "
 "delete some of your current favorite videos before adding new ones."
@@ -1787,10 +1766,18 @@ msgstr "Wähle Land"
 msgid "Region"
 msgstr "Region"
 
-#: src/additions/porn/xvideos.py:570
+#: src/additions/porn/xvideos.py:572
 msgid "Keywords"
 msgstr "Keywords"
 
+#: src/additions/sport/dazn.py:78
+msgid "Please wait while DAZN is started..."
+msgstr "Bitte warten Sie, während DAZN gestartet wird..."
+
+#: src/additions/sport/dazn.py:101
+msgid "Launching DAZN failed!"
+msgstr "Der Start von DAZN ist fehlgeschlagen!"
+
 #: src/plugin.py:183
 msgid "Crossfade (fast)"
 msgstr "Überblenden (schnell)"
@@ -1871,9 +1858,9 @@ msgstr "Zum letzten Kanal zurückkehren"
 msgid "Pause movie at end"
 msgstr "Film am Ende pausieren"
 
-#: src/plugin.py:247 src/resources/simplelist.py:496
-#: src/resources/simplelist.py:671 src/resources/simplelist.py:695
-#: src/resources/simpleplayer.py:1730 src/resources/simpleplayer.py:1736
+#: src/plugin.py:247 src/resources/simplelist.py:494
+#: src/resources/simplelist.py:669 src/resources/simplelist.py:693
+#: src/resources/simpleplayer.py:1727 src/resources/simpleplayer.py:1733
 msgid "No"
 msgstr "Nein"
 
@@ -1961,7 +1948,7 @@ msgstr "Hellgrün"
 msgid "premiumize.me is not activated."
 msgstr "premiumize.me ist nicht aktiviert."
 
-#: src/plugin.py:534 src/resources/simpleplayer.py:2196
+#: src/plugin.py:534 src/resources/simpleplayer.py:2193
 msgid "GENERAL"
 msgstr "ALLGEMEIN"
 
@@ -2045,7 +2032,7 @@ msgstr "Temporäres Cacheverzeichnis:"
 msgid "Icon Cachepath:"
 msgstr "Icon Cacheverzeichnis:"
 
-#: src/plugin.py:561 src/resources/simpleplayer.py:2199
+#: src/plugin.py:561 src/resources/simpleplayer.py:2196
 msgid "Videoquality:"
 msgstr "Videoqualität:"
 
@@ -2053,39 +2040,39 @@ msgstr "Videoqualität:"
 msgid "Watchlist/Playlist/Userchan path:"
 msgstr "Watchlist/Playlist/Userchan Verzeichnis:"
 
-#: src/plugin.py:564 src/resources/simpleplayer.py:2210
+#: src/plugin.py:564 src/resources/simpleplayer.py:2207
 msgid "YOUTUBE"
 msgstr "YOUTUBE"
 
-#: src/plugin.py:565 src/resources/simpleplayer.py:2211
+#: src/plugin.py:565 src/resources/simpleplayer.py:2208
 msgid "Highest resolution for playback:"
 msgstr "Höchste Auflösung für die Wiedergabe:"
 
-#: src/plugin.py:567 src/resources/simpleplayer.py:2213
+#: src/plugin.py:567 src/resources/simpleplayer.py:2210
 msgid "Enable DASH format:"
 msgstr "DASH Format aktivieren:"
 
-#: src/plugin.py:569 src/resources/simpleplayer.py:2215
+#: src/plugin.py:569 src/resources/simpleplayer.py:2212
 msgid "Enable DASH format (no seeking possible):"
 msgstr "DASH Format aktivieren (kein Spulen möglich):"
 
-#: src/plugin.py:571 src/resources/simpleplayer.py:2217
+#: src/plugin.py:571 src/resources/simpleplayer.py:2214
 msgid "Use DASH format for 480p:"
 msgstr "DASH Format verwenden für 480p:"
 
-#: src/plugin.py:572 src/resources/simpleplayer.py:2218
+#: src/plugin.py:572 src/resources/simpleplayer.py:2215
 msgid "Use DASH format for 720p:"
 msgstr "DASH Format verwenden für 720p:"
 
-#: src/plugin.py:573 src/resources/simpleplayer.py:2219
+#: src/plugin.py:573 src/resources/simpleplayer.py:2216
 msgid "Enable VP9 codec (required for resolutions >1080p):"
 msgstr "VP9 Codec aktivieren (erforderlich für Auflösungen >1080p):"
 
-#: src/plugin.py:575 src/resources/simpleplayer.py:2221
+#: src/plugin.py:575 src/resources/simpleplayer.py:2218
 msgid "Enable VP9 HDR (only for resolutions 720p and higher):"
 msgstr "VP9 HDR aktivieren (nur für Auflösungen ab 720p):"
 
-#: src/plugin.py:577 src/resources/simpleplayer.py:2223
+#: src/plugin.py:577 src/resources/simpleplayer.py:2220
 msgid "Enable Opus codec:"
 msgstr "Opus Codec aktivieren:"
 
@@ -2251,8 +2238,6 @@ msgid "MediaPortal Setup"
 msgstr "MediaPortal Setup"
 
 #: src/plugin.py:836 src/plugin.py:1733 src/plugin.py:2674
-#: src/resources/showAsThumb.py:246 src/resources/simplelist.py:112
-#: src/resources/simplelist.py:625 src/resources/simpleplayer.py:642
 msgid "Exit"
 msgstr "Beenden"
 
@@ -2355,6 +2340,22 @@ msgstr "Eingabe"
 msgid "Really close without saving settings?"
 msgstr "Wirklich schließen ohne die Einstellungen zu speichern?"
 
+#: src/resources/hosters/jetload.py:15
+msgid "Sorry, but this stream is not supported by your hardware."
+msgstr ""
+"Es tut uns leid, aber dieser Stream wird von Ihrer Hardware nicht "
+"unterstützt."
+
+#: src/resources/hosters/jetload.py:18 src/resources/hosters/jetload.py:20
+msgid "IP address not authorized. Visit https://jlpair.net to pair your IP."
+msgstr ""
+"IP-Adresse nicht autorisiert. Besuchen Sie https://jlpair.net um Ihre IP zu "
+"koppeln."
+
+#: src/resources/hosters/jetload.py:22
+msgid "Rate limit exceeded, retry in 1 minute."
+msgstr ""
+
 #: src/resources/hosters/vidup.py:28
 #, python-format
 msgid "IP address not authorized. Visit %s/pair to pair your IP."
@@ -2459,7 +2460,7 @@ msgstr "Suchzeichen"
 msgid "A-Z search"
 msgstr "A-Z Suche"
 
-#: src/resources/mpscreen.py:144 src/resources/mpscreen.py:248
+#: src/resources/mpscreen.py:144 src/resources/mpscreen.py:249
 #, python-format
 msgid "Mandatory skin file %s is missing!"
 msgstr "Obligatorische Skin-Datei %s fehlt!"
@@ -2476,7 +2477,7 @@ msgstr "Beschreibung zurückblättern"
 msgid "Scroll description forward"
 msgstr "Beschreibung vorwärtsblättern"
 
-#: src/resources/mpscreen.py:381 src/resources/showAsThumb.py:344
+#: src/resources/mpscreen.py:382 src/resources/showAsThumb.py:342
 msgid "Enter page number"
 msgstr "Seitennummer eingeben"
 
@@ -2484,7 +2485,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:1465
+#: src/resources/mtvdelink.py:82 src/resources/simpleplayer.py:1462
 msgid "No URL found!"
 msgstr "Keine URL gefunden!"
 
@@ -2568,138 +2569,134 @@ msgstr "Abschnitt zurückblättern"
 msgid "Section forward"
 msgstr "Abschnitt vorwärtsblättern"
 
-#: src/resources/showAsThumb.py:252
+#: src/resources/showAsThumb.py:250
 msgid "Loaded:"
 msgstr "Geladen:"
 
-#: src/resources/showAsThumb.py:514
+#: src/resources/showAsThumb.py:512
 #, python-format
 msgid "Please wait... new page %s is loading"
 msgstr "Bitte warten... neue Seite %s wird geladen"
 
-#: src/resources/showAsThumb.py:529 src/resources/showAsThumb.py:531
+#: src/resources/showAsThumb.py:527 src/resources/showAsThumb.py:529
 #, python-format
 msgid "Page: %(page)s of %(pages)s  |  Section: %(section)s of %(sections)s"
 msgstr ""
 "Seite: %(page)s von %(pages)s  |  Abschnitt: %(section)s von %(sections)s"
 
-#: src/resources/simplelist.py:72
+#: src/resources/simplelist.py:71 src/resources/simplelist.py:625
+msgid "Delete PL"
+msgstr "Lösche PL"
+
+#: src/resources/simplelist.py:73
 msgid "Update PL"
 msgstr "Update PL"
 
-#: src/resources/simplelist.py:74
+#: src/resources/simplelist.py:75
 msgid "IPTV Genre"
 msgstr "IPTV Genre"
 
-#: src/resources/simplelist.py:76
-msgid "Delete PL"
-msgstr "Lösche PL"
-
-#: src/resources/simplelist.py:113 src/resources/simplelist.py:631
+#: src/resources/simplelist.py:111 src/resources/simplelist.py:629
 msgid "List overview"
 msgstr "Listen Übersicht"
 
-#: src/resources/simplelist.py:115
+#: src/resources/simplelist.py:113
 msgid "Video List"
 msgstr "Video Liste"
 
-#: src/resources/simplelist.py:189
+#: src/resources/simplelist.py:187
 msgid "No playlist found"
 msgstr "Keine Playlist gefunden"
 
-#: src/resources/simplelist.py:210
+#: src/resources/simplelist.py:208
 msgid "Show all channels"
 msgstr "Zeige alle Kanäle"
 
-#: src/resources/simplelist.py:262 src/resources/simplelist.py:285
+#: src/resources/simplelist.py:260 src/resources/simplelist.py:283
 #, python-brace-format
 msgid "Show \"{0}\" channels"
 msgstr "Zeige \"{0}\" Kanäle"
 
-#: src/resources/simplelist.py:442
+#: src/resources/simplelist.py:440
 msgid "Error: No valid option in playlist"
 msgstr "Fehler: Keine gültige Option in der Playlist"
 
-#: src/resources/simplelist.py:456
+#: src/resources/simplelist.py:454
 msgid "Error: No valid playlist"
 msgstr "Fehler: Keine gültige Playlist"
 
-#: src/resources/simplelist.py:460
+#: src/resources/simplelist.py:458
 msgid "Can't download playlist"
 msgstr "Kann Playlist nicht downloaden"
 
-#: src/resources/simplelist.py:478
+#: src/resources/simplelist.py:476
 msgid "Stream not supported."
 msgstr "Stream wird nicht unterstützt."
 
-#: src/resources/simplelist.py:495 src/resources/simplelist.py:670
-#: src/resources/simplelist.py:694 src/resources/simpleplayer.py:1728
-#: src/resources/simpleplayer.py:1735
+#: src/resources/simplelist.py:493 src/resources/simplelist.py:668
+#: src/resources/simplelist.py:692 src/resources/simpleplayer.py:1725
+#: src/resources/simpleplayer.py:1732
 msgid "Yes"
 msgstr "Ja"
 
-#: src/resources/simplelist.py:498
+#: src/resources/simplelist.py:496
 #, python-brace-format
 msgid "OK to overwrite \"{0}\" playlist?"
 msgstr "OK um Playlist \"{0}\" zu überschreiben?"
 
-#: src/resources/simplelist.py:502
-msgid "Return"
-msgstr "Zurück"
-
-#: src/resources/simplelist.py:557
+#: src/resources/simplelist.py:555
 #, python-brace-format
 msgid "Playlist \"{0}\" copied."
 msgstr "Playlist \"{0}\" kopiert."
 
-#: src/resources/simplelist.py:559
+#: src/resources/simplelist.py:557
 #, python-brace-format
 msgid "Can't copy \"{0}\" playlist"
 msgstr "Kann Playlist \"{0}\" nicht kopieren"
 
-#: src/resources/simplelist.py:655
+#: src/resources/simplelist.py:653
 msgid "IPTV Genre Selection"
 msgstr "IPTV Genre Auswahl"
 
-#: src/resources/simplelist.py:674
+#: src/resources/simplelist.py:672
 #, python-brace-format
 msgid "Overwrite \"{0}\" with the MP playlist?"
 msgstr "\"{0}\" mit der MP Playlist überschreiben?"
 
-#: src/resources/simplelist.py:676
+#: src/resources/simplelist.py:674
 #, python-brace-format
 msgid "No MP playlist \"{0}\" found"
 msgstr "Keine MP Playlist \"{0}\" gefunden"
 
-#: src/resources/simplelist.py:684
+#: src/resources/simplelist.py:682
 #, python-brace-format
 msgid "Playlist \"{0}\" successfully updated"
 msgstr "Playlist \"{0}\" erfolgreich aktualisiert"
 
-#: src/resources/simplelist.py:686
+#: src/resources/simplelist.py:684
 #, python-brace-format
 msgid "Can't update \"{0}\" playlist"
 msgstr "Kann Playlist \"{0}\" nicht aktualisieren"
 
-#: src/resources/simplelist.py:698
+#: src/resources/simplelist.py:696
 #, python-brace-format
 msgid "OK to delete \"{0}\" playlist?"
 msgstr "OK um Playlist \"{0}\" zu löschen?"
 
-#: src/resources/simplelist.py:710
+#: src/resources/simplelist.py:708
 #, python-brace-format
 msgid "Can't delete \"{0}\" playlist"
 msgstr "Kann Playlist \"{0}\" nicht löschen"
 
-#: src/resources/simplelist.py:719
+#: src/resources/simplelist.py:717
 msgid "SimpleList Configuration"
 msgstr "SimpleList Konfiguration"
 
-#: src/resources/simplelist.py:722
+#: src/resources/simplelist.py:720
 msgid "Global playlist number"
 msgstr "Globale Playlist-Nummer"
 
-#: src/resources/simplelist.py:723
+#: src/resources/simplelist.py:721
 msgid "Google coversupport"
 msgstr "Google Cover aktivieren"
 
@@ -2716,176 +2713,176 @@ msgstr "Soll diese Wiedergabe fortgesetzt werden?"
 msgid "Resume position at %s"
 msgstr "Wiederaufnahmeposition bei %s"
 
-#: src/resources/simpleplayer.py:638
+#: src/resources/simpleplayer.py:637
 msgid "to Player"
 msgstr "zum Player"
 
-#: src/resources/simpleplayer.py:641
+#: src/resources/simpleplayer.py:640
 msgid "Playmode"
 msgstr "Abspielmodus"
 
-#: src/resources/simpleplayer.py:1167
+#: src/resources/simpleplayer.py:1165
 msgid "Tuning..."
 msgstr "Tune..."
 
-#: src/resources/simpleplayer.py:1170
+#: src/resources/simpleplayer.py:1168
 msgid "Connecting..."
 msgstr "Verbinde..."
 
-#: src/resources/simpleplayer.py:1173
+#: src/resources/simpleplayer.py:1171
 msgid "Please wait!"
 msgstr "Bitte warten!"
 
-#: src/resources/simpleplayer.py:1176
+#: src/resources/simpleplayer.py:1174
 msgid "Reconnecting..."
 msgstr "Verbinde neu..."
 
-#: src/resources/simpleplayer.py:1351 src/resources/simpleplayer.py:1360
+#: src/resources/simpleplayer.py:1348 src/resources/simpleplayer.py:1357
 #, python-format
 msgid "This STB can't decode %s streams!"
 msgstr "Diese STB kann %s Streams nicht wiedergeben!"
 
-#: src/resources/simpleplayer.py:1380
+#: src/resources/simpleplayer.py:1377
 #, python-format
 msgid "Streaming error: %s"
 msgstr "Streaming Fehler: %s"
 
-#: src/resources/simpleplayer.py:1412
+#: src/resources/simpleplayer.py:1409
 msgid "Buffering..."
 msgstr "Puffern..."
 
-#: src/resources/simpleplayer.py:1729
+#: src/resources/simpleplayer.py:1726
 #, python-format
 msgid "Yes & Add Service to global Playlist-%02d"
 msgstr "Ja & Service zur globalen Playlist-%02d hinzufügen"
 
-#: src/resources/simpleplayer.py:1731 src/resources/simpleplayer.py:1737
+#: src/resources/simpleplayer.py:1728 src/resources/simpleplayer.py:1734
 msgid "No, but start over from the beginning"
 msgstr "Nein, aber von Anfang an neu beginnen"
 
-#: src/resources/simpleplayer.py:1740
+#: src/resources/simpleplayer.py:1737
 msgid "Stop playing this movie?"
 msgstr "Wiedergabe dieses Films stoppen?"
 
-#: src/resources/simpleplayer.py:1898
+#: src/resources/simpleplayer.py:1895
 msgid "No entries in the playlist available!"
 msgstr "Keine Einträge in der Playlist vorhanden!"
 
-#: src/resources/simpleplayer.py:1980
+#: src/resources/simpleplayer.py:1977
 msgid "Error: Service may be added only from the local playlist"
 msgstr "Fehler: Service darf nur von der lokalen Playlist hinzugefügt werden"
 
-#: src/resources/simpleplayer.py:1994
+#: src/resources/simpleplayer.py:1991
 msgid "Error: URL is not persistent!"
 msgstr "Fehler: URL ist nicht persistent!"
 
-#: src/resources/simpleplayer.py:2000
+#: src/resources/simpleplayer.py:1997
 msgid "Added entry"
 msgstr "Eintrag hinzugefügt"
 
-#: src/resources/simpleplayer.py:2002
+#: src/resources/simpleplayer.py:1999
 msgid "Entry already exists"
 msgstr "Eintrag schon vorhanden"
 
-#: src/resources/simpleplayer.py:2004
+#: src/resources/simpleplayer.py:2001
 msgid "Error!"
 msgstr "Fehler!"
 
-#: src/resources/simpleplayer.py:2178 src/resources/simpleplayer.py:2179
+#: src/resources/simpleplayer.py:2175 src/resources/simpleplayer.py:2176
 msgid "SimplePlayer Setup"
 msgstr "SimplePlayer Einstellungen"
 
-#: src/resources/simpleplayer.py:2197
+#: src/resources/simpleplayer.py:2194
 msgid "Global playlist number:"
 msgstr "Globale Playlist-Nummer:"
 
-#: src/resources/simpleplayer.py:2198
+#: src/resources/simpleplayer.py:2195
 msgid "Playmode:"
 msgstr "Abspielmodus:"
 
-#: src/resources/simpleplayer.py:2201
+#: src/resources/simpleplayer.py:2198
 msgid "Buffersize (in seconds):"
 msgstr "Puffergröße (in Sekunden):"
 
-#: src/resources/simpleplayer.py:2202
+#: src/resources/simpleplayer.py:2199
 msgid "Save resume cache in flash memory:"
 msgstr "Speichere Wiederaufnahme-Cache im Flashspeicher:"
 
-#: src/resources/simpleplayer.py:2203
+#: src/resources/simpleplayer.py:2200
 msgid "Behavior on movie start:"
 msgstr "Verhalten bei Filmstart:"
 
-#: src/resources/simpleplayer.py:2204
+#: src/resources/simpleplayer.py:2201
 msgid "Behavior on movie stop:"
 msgstr "Verhalten bei Filmstopp:"
 
-#: src/resources/simpleplayer.py:2205
+#: src/resources/simpleplayer.py:2202
 msgid "Behavior on movie end:"
 msgstr "Verhalten bei Filmende:"
 
-#: src/resources/simpleplayer.py:2206
+#: src/resources/simpleplayer.py:2203
 msgid "Seekbar sensibility:"
 msgstr "Suchleistenempfindlichkeit:"
 
-#: src/resources/simpleplayer.py:2207
+#: src/resources/simpleplayer.py:2204
 msgid "Infobar cover always off:"
 msgstr "Infobar-Coveranzeige immer aus:"
 
-#: src/resources/simpleplayer.py:2208
+#: src/resources/simpleplayer.py:2205
 msgid "Use SP number seek:"
 msgstr "Verwende SP Nummernsuche:"
 
-#: src/resources/simpleplayer.py:2225
+#: src/resources/simpleplayer.py:2222
 msgid "RADIO"
 msgstr "RADIO"
 
-#: src/resources/simpleplayer.py:2226
+#: src/resources/simpleplayer.py:2223
 msgid "Radio cover:"
 msgstr "Radio-Cover:"
 
-#: src/resources/simpleplayer.py:2227
+#: src/resources/simpleplayer.py:2224
 msgid "Radio visualization:"
 msgstr "Radio-Visualisierung:"
 
-#: src/resources/simpleplayer.py:2228
+#: src/resources/simpleplayer.py:2225
 msgid "Radio screensaver:"
 msgstr "Radio-Bildschirmschoner:"
 
-#: src/resources/simpleplayer.py:2229
+#: src/resources/simpleplayer.py:2226
 msgid "Radio screensaver keywords:"
 msgstr "Schlüsselwörter für den Radio-Bildschirmschoner:"
 
-#: src/resources/simpleplayer.py:2259 src/resources/simpleplayer.py:2260
+#: src/resources/simpleplayer.py:2256 src/resources/simpleplayer.py:2257
 msgid "SimplePlayer Menu"
 msgstr "SimplePlayer Menü"
 
-#: src/resources/simpleplayer.py:2274
+#: src/resources/simpleplayer.py:2271
 #, python-format
 msgid "Add service to global playlist-%02d"
 msgstr "Füge Service zu globaler Playlist-%02d hinzu"
 
-#: src/resources/simpleplayer.py:2276
+#: src/resources/simpleplayer.py:2273
 #, python-format
 msgid "Open global playlist-%02d"
 msgstr "Öffne globale Playlist-%02d"
 
-#: src/resources/simpleplayer.py:2278
+#: src/resources/simpleplayer.py:2275
 msgid "Open local playlist"
 msgstr "Öffne lokale Playlist"
 
-#: src/resources/simpleplayer.py:2280
+#: src/resources/simpleplayer.py:2277
 msgid "A/V Settings"
 msgstr "A/V Einstellungen"
 
-#: src/resources/simpleplayer.py:2282
+#: src/resources/simpleplayer.py:2279
 msgid "Advanced Audio Settings"
 msgstr "Erweiterte Audioeinstellungen"
 
-#: src/resources/simpleplayer.py:2283
+#: src/resources/simpleplayer.py:2280
 msgid "Mainmenu"
 msgstr "Hauptmenü"
 
-#: src/resources/simpleplayer.py:2351
+#: src/resources/simpleplayer.py:2348
 #, python-format
 msgid ""
 "The directory path does not end with '/':\n"
@@ -2894,7 +2891,7 @@ msgstr ""
 "Der Verzeichnispfad endet nicht mit '/':\n"
 "%s"
 
-#: src/resources/simpleplayer.py:2352
+#: src/resources/simpleplayer.py:2349
 #, python-format
 msgid ""
 "File with the same name exists in the directory path:\n"
@@ -2903,7 +2900,7 @@ msgstr ""
 "Datei mit gleichen Namen im Verzeichnispfad vorhanden:\n"
 "%s"
 
-#: src/resources/simpleplayer.py:2353
+#: src/resources/simpleplayer.py:2350
 #, python-format
 msgid ""
 "The missing directory:\n"
@@ -2912,7 +2909,7 @@ msgstr ""
 "Das fehlende Verzeichnis:\n"
 "%s konnte nicht angelegt werden!"
 
-#: src/resources/simpleplayer.py:2354
+#: src/resources/simpleplayer.py:2351
 #, python-format
 msgid ""
 "The directory path:\n"
@@ -2921,7 +2918,7 @@ msgstr ""
 "Der Verzeichnispfad:\n"
 "%s ist nicht vorhanden!"
 
-#: src/resources/simpleplayer.py:2355
+#: src/resources/simpleplayer.py:2352
 #, python-format
 msgid ""
 "There exists already a directory with this name:\n"
@@ -2930,7 +2927,7 @@ msgstr ""
 "Es existiert schon ein Verzeichnis mit diesem Namen:\n"
 "%s"
 
-#: src/resources/simpleplayer.py:2356
+#: src/resources/simpleplayer.py:2353
 #, python-format
 msgid ""
 "The path is OK, the file name was not specified:\n"
@@ -2939,7 +2936,7 @@ msgstr ""
 "Der Pfad ist i.O., der Dateiname wurde nicht angegeben:\n"
 "%s"
 
-#: src/resources/simpleplayer.py:2357
+#: src/resources/simpleplayer.py:2354
 #, python-format
 msgid ""
 "The directory path and file name is OK:\n"
@@ -2948,11 +2945,11 @@ msgstr ""
 "Der Verzeichnispfad & Dateiname ist i.O.:\n"
 "%s"
 
-#: src/resources/simpleplayer.py:2358
+#: src/resources/simpleplayer.py:2355
 msgid "The directory path is not specified!"
 msgstr "Der Verzeichnispfad wurde nicht angegeben!"
 
-#: src/resources/simpleplayer.py:2359
+#: src/resources/simpleplayer.py:2356
 #, python-format
 msgid ""
 "Symbolic link with the same name in the directory path:\n"
@@ -2961,7 +2958,7 @@ msgstr ""
 "Symbolischer Link mit gleichen Namen im Verzeichnispfad:\n"
 "%s vorhanden!"
 
-#: src/resources/simpleplayer.py:2360
+#: src/resources/simpleplayer.py:2357
 #, python-format
 msgid ""
 "The directory path does not begin with '/':\n"
@@ -2970,19 +2967,19 @@ msgstr ""
 "Der Verzeichnispfad beginnt nicht mit '/':\n"
 "%s"
 
-#: src/resources/streams.py:677
+#: src/resources/streams.py:684
 msgid "No supported Stream Hoster, try another one!"
 msgstr "Kein unterstützter Stream Hoster, versuche einen anderen!"
 
-#: src/resources/streams.py:679
+#: src/resources/streams.py:686
 msgid "Invalid Stream link, try another Stream Hoster!"
 msgstr "Ungültiger Stream Link, versuche eine anderen Stream Hoster!"
 
-#: src/resources/streams.py:688
+#: src/resources/streams.py:695
 msgid "This hoster is only working with enabled Premium support."
 msgstr "Dieser Hoster funktioniert nur mit aktivierter Premium-Unterstützung."
 
-#: src/resources/streams.py:690
+#: src/resources/streams.py:697
 msgid ""
 "This Stream link is currently not available via Premium, try another Stream "
 "Hoster."
@@ -2990,7 +2987,7 @@ msgstr ""
 "Dieser Stream ist aktuell nicht über Premium verfügbar, versuche einen "
 "anderen Stream Hoster."
 
-#: src/resources/streams.py:694
+#: src/resources/streams.py:701
 msgid "Unknown error, check MP logfile."
 msgstr "Unbekannter Fehler, MP Logfile überprüfen."
 
@@ -3073,3 +3070,6 @@ msgstr ""
 #: src/resources/update.py:146
 msgid "MediaPortal update failed! Check the update log carefully!"
 msgstr "MediaPortal Update fehlgeschlagen! Überprüfe das Updatelog sorgfältig!"
+
+#~ msgid "Return"
+#~ msgstr "Zurück"
index 7bf316f..8bfb0ab 100644 (file)
@@ -154,7 +154,7 @@ config_mp.mediaportal = ConfigSubsection()
 config_mp.mediaportal.fake_entry = NoSave(ConfigNothing())
 
 # Allgemein
-config_mp.mediaportal.version = NoSave(ConfigText(default="2020012601"))
+config_mp.mediaportal.version = NoSave(ConfigText(default="2020022301"))
 config_mp.mediaportal.autoupdate = ConfigYesNo(default = True)
 
 config_mp.mediaportal.skinfail = ConfigYesNo(default = False)
index 1c8fb43..1057a61 100644 (file)
@@ -10,11 +10,11 @@ def datoporn(self, data):
                sJavascript = get_packedjava[0]
                sUnpacked = unpack(sJavascript)
                if sUnpacked:
-                       links = re.findall('file:"(.*?)"', sUnpacked, re.S)
+                       links = re.findall('src:\s{0,1}"(https://[a-z0-9\/\.,]+(?:m3u8|mp4))"', sUnpacked, re.S)
                        if links:
                                url = links[-1]
        else:
-               links = re.findall('file:"(https://[a-z0-9\/\.,]+(?:m3u8|mp4))"', data, re.S)
+               links = re.findall('src:\s{0,1}"(https://[a-z0-9\/\.,]+(?:m3u8|mp4))"', data, re.S)
                if links:
                        url = links[-1]
        if url:
index f1a8b26..92265a7 100644 (file)
@@ -43,4 +43,5 @@
 <name>Mangovideo</name><hoster>mangovideo</hoster><regex>mangovideo\.pw</regex>
 <name>Onlystream</name><hoster>onlystream</hoster><regex>onlystream\.tv</regex>
 <name>Videobin</name><hoster>videobin</hoster><regex>videobin\.co</regex>
-<name>Mixdrop</name><hoster>mixdrop</hoster><regex>mixdrop\.co</regex>
+<name>Mixdrop</name><hoster>mixdrop</hoster><regex>mixdrop\.(?:co|to)</regex>
+<name>Jetload</name><hoster>jetload</hoster><regex>jetload\.net</regex>
diff --git a/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/resources/hosters/jetload.py b/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/resources/hosters/jetload.py
new file mode 100644 (file)
index 0000000..a2f55b2
--- /dev/null
@@ -0,0 +1,26 @@
+# -*- coding: utf-8 -*-
+from Plugins.Extensions.MediaPortal.plugin import _
+from Plugins.Extensions.MediaPortal.resources.imports import *
+from Plugins.Extensions.MediaPortal.resources.messageboxext import MessageBoxExt
+
+def jetload(self, data):
+       stream_url = re.findall('{"src":"(.*?)"', data, re.S)
+       if stream_url:
+               url = stream_url[-1]
+               if '.m3u8' in url and mp_globals.isDreamOS and mp_globals.model in ["one", "two"]:
+                       self._callback(url)
+               elif not '.m3u8' in url and mp_globals.isDreamOS and mp_globals.model in ["one", "two", "dm7080", "dm900", "dm920"]:
+                       self._callback(url)
+               else:
+                       message = self.session.open(MessageBoxExt, _("Sorry, but this stream is not supported by your hardware."), MessageBoxExt.TYPE_INFO, timeout=5)
+       else:
+               if '"err":"client_not_paired"':
+                       message = self.session.open(MessageBoxExt, _("IP address not authorized. Visit https://jlpair.net to pair your IP."), MessageBoxExt.TYPE_INFO, timeout=5)
+               elif '"err":"too_many_requests","msg":"please Re-Pair' in data:
+                       message = self.session.open(MessageBoxExt, _("IP address not authorized. Visit https://jlpair.net to pair your IP."), MessageBoxExt.TYPE_INFO, timeout=5)
+               elif '"statusCode":429' in data:
+                       message = self.session.open(MessageBoxExt, _("Rate limit exceeded, retry in 1 minute."), MessageBoxExt.TYPE_ERROR)
+               elif '"statusCode":404' in data:
+                       self.stream_not_found()
+               else:
+                       self.stream_not_found()
\ No newline at end of file
index 913bedd..f9fd2f6 100644 (file)
@@ -10,7 +10,7 @@ def mixdrop(self, data):
                        sJavascript = get_packedjava[0]
                        sUnpacked = unpack(sJavascript)
                        if sUnpacked:
-                               stream_url = re.search('MDCore.(?:vsrc|furl)\d{0,1}="(.*?)";', sUnpacked, re.S)
+                               stream_url = re.search('MDCore.(?:vsrc|furl|wurl)\d{0,1}\s{0,1}=\s{0,1}"([http|\/\/].*?)";', sUnpacked, re.S)
                                if stream_url:
                                        url = stream_url.group(1)
                                        if url .startswith('//'):
index 8dd2205..3611e2f 100644 (file)
@@ -1575,6 +1575,8 @@ class SimplePlayer(Screen, CoverSearchHelper, SimpleSeekHelper, SimplePlayerResu
                                                                sref = eServiceReference(0x2223, 0, url)
                                                                if suburi:
                                                                        sref.setSuburi(suburi)
+                                                       elif 'hlssrv.com' in url and 'm3u8' in url and mp_globals.model in ["one","two"]:
+                                                               sref = eServiceReference(0x2223, 0, url)
                                                        else:
                                                                sref = eServiceReference(0x1001, 0, url)
                                                                if suburi:
index 0dd7872..e3be3fd 100644 (file)
@@ -88,6 +88,7 @@ class get_stream_link:
        from hosters.flyflv import flyflv, flyflvData
        from hosters.google import google
        from hosters.gounlimited import gounlimited
+       from hosters.jetload import jetload
        from hosters.mailru import mailru
        from hosters.mangovideo import mangovideo
        from hosters.mixdrop import mixdrop
@@ -450,6 +451,11 @@ class get_stream_link:
                                mp_globals.player_agent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36'
                                twAgentGetPage(link, method='POST', agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36', headers={'Content-Type':'application/x-www-form-urlencoded','referer':self.referer}).addCallback(self.vidup, host, id).addErrback(self.errorload)
 
+                       elif re.search('jetload.net', data, re.S):
+                               link = "https://jetload.net/api/fetch/" + data.split('/')[4]
+                               mp_globals.player_agent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36'
+                               twAgentGetPage(link, agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36', timeout=60).addCallback(self.jetload).addErrback(self.errorload)
+
                        elif re.search('bitporno.com', data, re.S):
                                if "/e/" in data:
                                        data = data.replace('/e/','/v/')
@@ -639,7 +645,7 @@ class get_stream_link:
                                mp_globals.player_agent = agent
                                twAgentGetPage(link, agent=agent).addCallback(self.vidfast).addErrback(self.errorload)
 
-                       elif re.search('mixdrop\.co/', data, re.S):
+                       elif re.search('mixdrop\.(?:co|to)', data, re.S):
                                link = data.replace('/f/','/e/')
                                if not mp_globals.special_referer:
                                        self.referer = 'https://filmpalast.to/'
index 32628fa..a5f084e 100644 (file)
@@ -80,19 +80,22 @@ class youtubeUrl(object):
        return
 
   def getVideoUrl(self, url):
-       dash = config_mp.mediaportal.youtubeenabledash.value
-       videoPrio = int(config_mp.mediaportal.youtubeprio.value)
+       self.video_url = None
+       self.audio_url = None
+       self.video_id = url
+       self.videoPrio = int(config_mp.mediaportal.youtubeprio.value)
+       self.dash = config_mp.mediaportal.youtubeenabledash.value
 
        if not self.__callBack:
                self.error = '[YoutubeURL] Error: no callBack set'
                self.errReturn()
 
-       if videoPrio == 0: #360p
+       if self.videoPrio == 0: #360p
                self.VIDEO_FMT_PRIORITY_MAP = {
                        '18'  : 1, #MP4 360p
                        '34'  : 2, #FLV 360p
                }
-       elif videoPrio == 1: #480p
+       elif self.videoPrio == 1: #480p
                self.VIDEO_FMT_PRIORITY_MAP = {
                        '35'  : 1, #FLV 480p
                        '18'  : 3, #MP4 360p
@@ -102,7 +105,7 @@ class youtubeUrl(object):
                        self.VIDEO_FMT_PRIORITY_MAP.update({
                        '135' : 2, #MP4 480p (DASH)
                        })
-       elif videoPrio == 2: #720p
+       elif self.videoPrio == 2: #720p
                self.VIDEO_FMT_PRIORITY_MAP = {
                        '22'  : 1, #MP4 720p
                        '35'  : 3, #FLV 480p
@@ -117,7 +120,7 @@ class youtubeUrl(object):
                        self.VIDEO_FMT_PRIORITY_MAP.update({
                        '136' : 2, #MP4 720p (DASH)
                        })
-       elif videoPrio == 3: #1080p
+       elif self.videoPrio == 3: #1080p
                self.VIDEO_FMT_PRIORITY_MAP = {
                        '299' : 3, #MP4 1080p60 (DASH)
                        '137' : 4, #MP4 1080p (DASH)
@@ -139,7 +142,7 @@ class youtubeUrl(object):
                        '303' : 1, #VP9 1080p60 (DASH)
                        '248' : 2, #VP9 1080p (DASH)
                        })
-       elif videoPrio == 4: #1440p
+       elif self.videoPrio == 4: #1440p
                self.VIDEO_FMT_PRIORITY_MAP = {
                        '299' : 5, #MP4 1080p60 (DASH)
                        '137' : 6, #MP4 1080p (DASH)
@@ -163,7 +166,7 @@ class youtubeUrl(object):
                        '303' : 3, #VP9 1080p60 (DASH)
                        '248' : 4, #VP9 1080p (DASH)
                        })
-       elif videoPrio == 5: #2160p
+       elif self.videoPrio == 5: #2160p
                self.VIDEO_FMT_PRIORITY_MAP = {
                        '299' : 10, #MP4 1080p60 (DASH)
                        '137' : 11, #MP4 1080p (DASH)
@@ -213,12 +216,6 @@ class youtubeUrl(object):
                '249' : 7, #Opus 50
                })
 
-       self.video_url = None
-       self.audio_url = None
-       self.video_id = url
-       self.videoPrio = videoPrio
-       self.dash = dash
-
        # Getting video webpage
        watch_url = 'https://www.youtube.com/watch?v=%s' % self.video_id
        self.error = "[YoutubeURL] Error: Unable to retrieve watchpage:\n%s\n" % watch_url