import enigma2-plugin-extensions-mediaportal 2019092801 v2019092801
authorChristian Weiske <cweiske@cweiske.de>
Sat, 28 Sep 2019 23:15:26 +0000 (01:15 +0200)
committerChristian Weiske <cweiske@cweiske.de>
Sat, 28 Sep 2019 23:15:26 +0000 (01:15 +0200)
22 files changed:
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/additions.xml
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/fun/e2world.py [deleted file]
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/fun/gigatv.py [deleted file]
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/fun/heisevideo.py [deleted file]
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/porn/anyporn.py [new file with mode: 0644]
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/porn/beeg.py
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/porn/faapy.py
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/porn/hotscope.py
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/porn/hypnotube.py [new file with mode: 0644]
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/porn/nubilefilms.py
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/porn/pinflix.py
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/porn/porngo.py [new file with mode: 0644]
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/porn/tubewolf.py
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/porn/xnxx.py
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/porn/xvideos.py
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/porn/xxxdan.py [new file with mode: 0644]
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/vivo.py
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/resources/mp_globals.py
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/resources/mpscreen.py
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/resources/simpleplayer.py

index e9acd86..bba2a47 100644 (file)
                <plugin type="mod" modfile="newsdoku.doku_to" confopt="showDUTO" default="True" confcat="newsdoku" gz="0" name="DOKU.to" icon="doku_to" filter="NewsDoku" screen="show_DUTO_Genre" param1="" param2=""/>
                <plugin type="mod" modfile="newsdoku.urknall" confopt="showurknall" default="True" confcat="newsdoku" gz="0" name="Urknall, Weltall und das Leben" icon="urknall" filter="NewsDoku" screen="UrknallFilmListeScreen" param1="" param2=""/>
                <!--fun section-->
-               <!--<plugin type="mod" modfile="fun.heisevideo" confopt="showHeiseVideo" default="True" confcat="fun" gz="0" name="heise Video" icon="heisevideo" filter="Fun" screen="HeiseTvGenreScreen" param1="" param2=""/>-->
                <plugin type="mod" modfile="fun.retrotv" confopt="showretrotv" default="True" confcat="fun" gz="0" name="retro-tv" icon="retrotv" filter="Fun" screen="retrotvFilmListeScreen" param1="" param2=""/>
                <plugin type="mod" modfile="fun.forplayers" confopt="show4Players" default="True" confcat="fun" gz="0" name="4Players" icon="4players" filter="Fun" screen="forPlayersGenreScreen" param1="" param2=""/>
                <plugin type="mod" modfile="fun.failto" confopt="showFail" default="True" confcat="fun" gz="0" name="Fail.to" icon="fail" filter="Fun" screen="failScreen" param1="" param2=""/>
                <plugin type="mod" modfile="fun.ccc" confopt="showCCC" default="True" confcat="fun" gz="0" name="CCC Media" icon="ccc" filter="Fun" screen="CccOverviewScreen" param1="" param2=""/>
                <plugin type="mod" modfile="fun.cczwei" confopt="showCC2" default="True" confcat="fun" gz="0" name="CC2.tv" icon="cczwei" filter="Fun" screen="cczwei" param1="" param2=""/>
-               <!--<plugin type="mod" modfile="fun.e2world" confopt="showe2world" default="True" confcat="fun" gz="0" name="E2WORLD" icon="e2world" filter="Fun" screen="e2world" param1="" param2=""/>-->
                <plugin type="mod" modfile="fun.itunestrailers" confopt="showitunestrailers" default="True" confcat="fun" gz="0" name="iTunes Movie Trailers" icon="itunesmovietrailers" filter="Fun" screen="itunestrailersGenreScreen" param1="" param2=""/>
                <plugin type="mod" modfile="fun.liveleak" confopt="showLiveLeak" default="False" confcat="fun" gz="0" name="LiveLeak" icon="liveleak" filter="Fun" screen="LiveLeakScreen" param1="" param2=""/>
-               <!--<plugin type="mod" modfile="fun.gigatv" confopt="showGIGA" default="True" confcat="fun" gz="0" name="GIGA.de" icon="gigatv" filter="Fun" screen="gigatvGenreScreen" param1="" param2=""/>-->
                <plugin type="mod" modfile="fun.gaskrank_tv" confopt="showGaskrank" default="False" confcat="fun" gz="0" name="Gaskrank.tv" icon="gaskrank_tv" filter="Fun" screen="show_GKTV_Genre" param1="" param2=""/>
                <plugin type="mod" modfile="fun.funnyvideoclips_de" confopt="showFunnyVideoclips" default="True" confcat="fun" gz="0" name="Funny Videoclips" icon="funnyvideoclips_de" filter="Fun" screen="show_FVCDE_Genre" param1="" param2=""/>
                <plugin type="mod" modfile="fun.lachmeister_de" confopt="showLachmeister" default="False" confcat="fun" gz="0" name="Lachmeister" icon="lachmeister_de" filter="Fun" screen="show_LMDE_Genre" param1="" param2=""/>
@@ -87,6 +84,7 @@
                <plugin type="mod" modfile="porn.tube8" confopt="showtube8" default="False" confcat="porn" gz="0" name="Tube8" icon="tube8" filter="Porn" screen="tube8GenreScreen" param1="" param2="" search="1" delim="%20" searchurl="%s" searchscreen="tube8FilmScreen" searchparam=""/>
                <plugin type="mod" modfile="porn.xhamster" confopt="showxhamster" default="False" confcat="porn" gz="0" name="xHamster" icon="xhamster" filter="Porn" screen="xhamsterGenreScreen" param1="" param2="" search="1" delim="+" searchurl="%s" searchscreen="xhamsterFilmScreen" searchparam=""/>
                <plugin type="mod" modfile="porn.porndoe" confopt="showporndoe" default="False" confcat="porn" gz="0" name="Porndoe" icon="porndoe" filter="Porn" screen="porndoeGenreScreen" param1="" param2="" search="1" delim="+" searchurl="%s" searchscreen="porndoeFilmScreen" searchparam=", False"/>
+               <plugin type="mod" modfile="porn.porngo" confopt="showporngo" default="False" confcat="porn" gz="0" name="PornGO" icon="porngo" filter="Porn" screen="porngoGenreScreen" param1="" param2="" search="1" delim="-" searchurl="%s" searchscreen="porngoFilmScreen" searchparam=""/>
                <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=""/>
@@ -98,7 +96,6 @@
                <plugin type="mod" modfile="porn.tubepornclassic" confopt="showtubepornclassic" default="False" confcat="porn" gz="0" name="TubePornClassic" icon="tubepornclassic" filter="Porn" screen="tubepornclassicGenreScreen" param1="" param2="" search="1" delim="+" searchurl="%s" searchscreen="tubepornclassicFilmScreen" searchparam=""/>
                <plugin type="mod" modfile="porn.vjav" confopt="showvjav" default="False" confcat="porn" gz="0" name="VJAV" icon="vjav" filter="Porn" screen="vjavGenreScreen" param1="" param2="" search="1" delim="+" searchurl="%s" searchscreen="vjavFilmScreen" searchparam=""/>
                <plugin type="mod" modfile="porn.shemalez" confopt="showshemalez" default="False" confcat="porn" gz="0" name="ShemaleZ" icon="shemalez" filter="Porn" screen="shemalezGenreScreen" param1="" param2="" search="1" delim="+" searchurl="%s" searchscreen="shemalezFilmScreen" searchparam=""/>
-               <plugin type="mod" modfile="porn.freeones" confopt="showfreeones" default="False" confcat="porn" gz="0" name="FreeOnes" icon="freeones" filter="Porn" screen="freeonesGenreScreen" param1="" param2="" search="1" delim="+" searchurl="%s" searchscreen="freeonesFilmScreen" searchparam=""/>
                <plugin type="mod" modfile="porn.vintagetube" confopt="showvintagetube" default="False" confcat="porn" gz="0" name="VintageTube" icon="vintagetube" filter="Porn" screen="vintagetubeGenreScreen" param1="vintagetube" param2="" search="1" delim="+" searchurl="%s" searchscreen="vintagetubeFilmScreen" searchparam=", &quot;VintageTube.xxx&quot;, &quot;vintagetube.xxx&quot;"/>
                <plugin type="mod" modfile="porn.vintagetube" confopt="showanaldin" default="False" confcat="porn" gz="0" name="Analdin" icon="analdin" filter="Porn" screen="vintagetubeGenreScreen" param1="analdin" param2="" search="1" delim="+" searchurl="%s" searchscreen="vintagetubeFilmScreen" searchparam=", &quot;Analdin.com&quot;, &quot;analdin.com&quot;"/>
                <plugin type="mod" modfile="porn.vintagetube" confopt="showxozilla" default="False" confcat="porn" gz="0" name="Xozilla" icon="xozilla" filter="Porn" screen="vintagetubeGenreScreen" param1="xozilla" param2="" search="1" delim="+" searchurl="%s" searchscreen="vintagetubeFilmScreen" searchparam=", &quot;Xozilla.com&quot;, &quot;xozilla.com&quot;"/>
                <plugin type="mod" modfile="porn.pinflix" confopt="showpinflix" default="False" confcat="porn" gz="0" name="Pinflix" icon="pinflix" filter="Porn" screen="pinflixGenreScreen" param1="pinflix" param2="" search="1" delim="+" searchurl="%s" searchscreen="pinflixFilmScreen" searchparam=", &quot;Pinflix.com&quot;, &quot;https://www.pinflix.com&quot;"/>
                <plugin type="mod" modfile="porn.pinflix" confopt="showpornhd" default="False" confcat="porn" gz="0" name="PornHD" icon="pornhd" filter="Porn" screen="pinflixGenreScreen" param1="pornhd" param2="" search="1" delim="+" searchurl="%s" searchscreen="pinflixFilmScreen" searchparam=", &quot;PornHD.com&quot;, &quot;https://www.pornhd.com&quot;"/>
                <plugin type="mod" modfile="porn.pinflix" confopt="showpornrox" default="False" confcat="porn" gz="0" name="Pornrox" icon="pornrox" filter="Porn" screen="pinflixGenreScreen" param1="pornrox" param2="" search="1" delim="+" searchurl="%s" searchscreen="pinflixFilmScreen" searchparam=", &quot;Pornrox.com&quot;, &quot;https://www.pornrox.com&quot;"/>
+               <plugin type="mod" modfile="porn.pinflix" confopt="showgotporn" default="False" confcat="porn" gz="0" name="GotPorn" icon="gotporn" filter="Porn" screen="pinflixGenreScreen" param1="gotporn" param2="" search="1" delim="+" searchurl="%s" searchscreen="pinflixFilmScreen" searchparam=", &quot;GotPorn.com&quot;, &quot;https://www.gotporn.com&quot;"/>
+               <plugin type="mod" modfile="porn.xxxdan" confopt="showxxxdan" default="False" confcat="porn" gz="0" name="XXXDan" icon="xxxdan" filter="Porn" screen="xxxdanGenreScreen" param1="xxxdan" param2="" search="1" delim="+" searchurl="%s" searchscreen="xxxdanFilmScreen" searchparam=", &quot;XXXDan.com&quot;, &quot;https://xxxdan.com&quot;"/>
+               <plugin type="mod" modfile="porn.xxxdan" confopt="showwankgalore" default="False" confcat="porn" gz="0" name="WankGalore" icon="wankgalore" filter="Porn" screen="xxxdanGenreScreen" param1="wankgalore" param2="" search="1" delim="+" searchurl="%s" searchscreen="xxxdanFilmScreen" searchparam=", &quot;WankGalore.com&quot;, &quot;https://wankgalore.com&quot;"/>
+               <plugin type="mod" modfile="porn.xxxdan" confopt="showjizzbunker" default="False" confcat="porn" gz="0" name="JizzBunker" icon="jizzbunker" filter="Porn" screen="xxxdanGenreScreen" param1="jizzbunker" param2="" search="1" delim="+" searchurl="%s" searchscreen="xxxdanFilmScreen" searchparam=", &quot;JizzBunker.com&quot;, &quot;https://jizzbunker.com&quot;"/>
                <plugin type="mod" modfile="porn.tubewolf" confopt="showtubewolf" default="False" confcat="porn" gz="0" name="TubeWolf" icon="tubewolf" filter="Porn" screen="tubewolfGenreScreen" param1="tubewolf" param2="" search="1" delim="+" searchurl="%s" searchscreen="tubewolfListScreen" searchparam=", &quot;TubeWolf.com&quot;, &quot;https://www.tubewolf.com&quot;"/>
                <plugin type="mod" modfile="porn.tubewolf" confopt="showalphaporno" default="False" confcat="porn" gz="0" name="AlphaPorno" icon="alphaporno" filter="Porn" screen="tubewolfGenreScreen" param1="alphaporno" param2="" search="1" delim="+" searchurl="%s" searchscreen="tubewolfListScreen" searchparam=", &quot;AlphaPorno.com&quot;, &quot;https://www.alphaporno.com&quot;"/>
                <plugin type="mod" modfile="porn.tubewolf" confopt="showzedporn" default="False" confcat="porn" gz="0" name="ZedPorn" icon="zedporn" filter="Porn" screen="tubewolfGenreScreen" param1="zedporn" param2="" search="1" delim="+" searchurl="%s" searchscreen="tubewolfListScreen" searchparam=", &quot;ZedPorn.com&quot;, &quot;https://zedporn.com&quot;"/>
                <plugin type="mod" modfile="porn.tubewolf" confopt="showcrocotube" default="False" confcat="porn" gz="0" name="CrocoTube" icon="crocotube" filter="Porn" screen="tubewolfGenreScreen" param1="crocotube" param2="" search="1" delim="+" searchurl="%s" searchscreen="tubewolfListScreen" searchparam=", &quot;CrocoTube.com&quot;, &quot;https://crocotube.com&quot;"/>
+               <plugin type="mod" modfile="porn.anyporn" confopt="showanyporn" default="False" confcat="porn" gz="0" name="AnyPorn" icon="anyporn" filter="Porn" screen="anypornGenreScreen" param1="anyporn" param2="" search="1" delim="-" searchurl="%s" searchscreen="anypornListScreen" searchparam=", &quot;AnyPorn.com&quot;, &quot;https://anyporn.com&quot;"/>
+               <plugin type="mod" modfile="porn.anyporn" confopt="showanysex" default="False" confcat="porn" gz="0" name="AnySex" icon="anysex" filter="Porn" screen="anypornGenreScreen" param1="anysex" param2="" search="1" delim="+" searchurl="%s" searchscreen="anypornListScreen" searchparam=", &quot;AnySex.com&quot;, &quot;https://anysex.com&quot;"/>
+               <plugin type="mod" modfile="porn.anyporn" confopt="showsex3" default="False" confcat="porn" gz="0" name="Sex3" icon="sex3" filter="Porn" screen="anypornGenreScreen" param1="sex3" param2="" search="1" delim="+" searchurl="%s" searchscreen="anypornListScreen" searchparam=", &quot;Sex3.com&quot;, &quot;https://sex3.com&quot;"/>
+               <plugin type="mod" modfile="porn.anyporn" confopt="showhellporno" default="False" confcat="porn" gz="0" name="HellPorno" icon="hellporno" filter="Porn" screen="anypornGenreScreen" param1="hellporno" param2="" search="1" delim="+" searchurl="%s" searchscreen="anypornListScreen" searchparam=", &quot;HellPorno.com&quot;, &quot;https://hellporno.com&quot;"/>
+               <plugin type="mod" modfile="porn.anyporn" confopt="showbravotube" default="False" confcat="porn" gz="0" name="BravoTube" icon="bravotube" filter="Porn" screen="anypornGenreScreen" param1="bravotube" param2="" search="1" delim="+" searchurl="%s" searchscreen="anypornListScreen" searchparam=", &quot;BravoTube.net&quot;, &quot;https://www.bravotube.net&quot;"/>
+               <plugin type="mod" modfile="porn.anyporn" confopt="showbravoporn" default="False" confcat="porn" gz="0" name="BravoPorn" icon="bravoporn" filter="Porn" screen="anypornGenreScreen" param1="bravoporn" param2="" search="1" delim="+" searchurl="%s" searchscreen="anypornListScreen" searchparam=", &quot;BravoPorn.com&quot;, &quot;https://www.bravoporn.com&quot;"/>
+               <plugin type="mod" modfile="porn.anyporn" confopt="showbravoteens" default="False" confcat="porn" gz="0" name="BravoTeens" icon="bravoteens" filter="Porn" screen="anypornGenreScreen" param1="bravoteens" param2="" search="1" delim="+" searchurl="%s" searchscreen="anypornListScreen" searchparam=", &quot;BravoTeens.com&quot;, &quot;https://www.bravoteens.com&quot;"/>
+               <plugin type="mod" modfile="porn.anyporn" confopt="showxbabe" default="False" confcat="porn" gz="0" name="XBabe" icon="xbabe" filter="Porn" screen="anypornGenreScreen" param1="xbabe" param2="" search="1" delim="-" searchurl="%s" searchscreen="anypornListScreen" searchparam=", &quot;XBabe.com&quot;, &quot;https://xbabe.com&quot;"/>
                <plugin type="mod" modfile="porn.pornoxo" confopt="showpornoxo" default="False" confcat="porn" gz="0" name="PornoXO" icon="pornoxo" filter="Porn" screen="pornoxoGenreScreen" param1="pornoxo" param2="" search="1" delim="_" searchurl="%s" searchscreen="pornoxoFilmScreen" searchparam=", &quot;PornoXO.com&quot;, &quot;https://www.pornoxo.com&quot;"/>
                <plugin type="mod" modfile="porn.pornoxo" confopt="showashemaletube" default="False" confcat="porn" gz="0" name="aShemaletube" icon="ashemaletube" filter="Porn" screen="pornoxoGenreScreen" param1="ashemaletube" param2="" search="1" delim="_" searchurl="%s" searchscreen="pornoxoFilmScreen" searchparam=", &quot;aShemaletube.com&quot;, &quot;https://www.ashemaletube.com&quot;"/>
                <plugin type="mod" modfile="porn.pornoxo" confopt="showfetishpapa" default="False" confcat="porn" gz="0" name="Fetishpapa" icon="fetishpapa" filter="Porn" screen="pornoxoGenreScreen" param1="fetishpapa" param2="" search="1" delim="_" searchurl="%s" searchscreen="pornoxoFilmScreen" searchparam=", &quot;Fetishpapa.com&quot;, &quot;https://www.fetishpapa.com&quot;"/>
+               <plugin type="mod" modfile="porn.hypnotube" confopt="showhypnotube" default="False" confcat="porn" gz="0" name="hypnotube" icon="hypnotube" filter="Porn" screen="hypnotubeGenreScreen" param1="" param2="" search="1" delim="-" searchurl="%s" searchscreen="hypnotubeFilmScreen" searchparam=""/>
                <plugin type="mod" modfile="porn.fetishshrine" confopt="showfetishshrine" default="False" confcat="porn" gz="0" name="FetishShrine" icon="fetishshrine" filter="Porn" screen="fetishshrineGenreScreen" param1="" param2="" search="1" delim="+" searchurl="%s" searchscreen="fetishshrineFilmScreen" searchparam=""/>
                <plugin type="mod" modfile="porn.shesfreaky" confopt="showshesfreaky" default="False" confcat="porn" gz="0" name="ShesFreaky" icon="shesfreaky" filter="Porn" screen="shesfreakyGenreScreen" param1="" param2="" search="1" delim="-" searchurl="%s" searchscreen="shesfreakyFilmScreen" searchparam=""/>
                <plugin type="mod" modfile="porn.spankwire" confopt="showspankwire" default="False" confcat="porn" gz="0" name="Spankwire" icon="spankwire" filter="Porn" screen="spankwireGenreScreen" param1="" param2="" search="1" delim="+" searchurl="%s" searchscreen="spankwireFilmScreen" searchparam=", ''"/>
                <plugin type="mod" modfile="porn.extremetube" confopt="showextremetube" default="False" confcat="porn" gz="0" name="ExtremeTube" icon="extremetube" filter="Porn" screen="extremetubeGenreScreen" param1="" param2="" search="1" delim="+" searchurl="http://www.extremetube.com/videos?search=%s" searchscreen="extremetubeFilmScreen" searchparam=""/>
+               <plugin type="mod" modfile="porn.freeones" confopt="showfreeones" default="False" confcat="porn" gz="0" name="FreeOnes" icon="freeones" filter="Porn" screen="freeonesGenreScreen" param1="" param2="" search="1" delim="+" searchurl="%s" searchscreen="freeonesFilmScreen" searchparam=""/>
                <plugin type="mod" modfile="porn.porntv" confopt="showporntv" default="False" confcat="porn" gz="0" name="PornTV" icon="porntv" filter="Porn" screen="porntvGenreScreen" param1="porntv" param2="" search="1" delim="+" searchurl="%s" searchscreen="porntvFilmScreen" searchparam=", &quot;PornTV.com&quot;, &quot;https://www.porntv.com&quot;"/>
                <plugin type="mod" modfile="porn.porntv" confopt="showyoungpornvideos" default="False" confcat="porn" gz="0" name="YoungPornVideos" icon="youngpornvideos" filter="Porn" screen="porntvGenreScreen" param1="youngpornvideos" param2="" search="1" delim="+" searchurl="%s" searchscreen="porntvFilmScreen" searchparam=", &quot;YoungPornVideos.com&quot;, &quot;https://www.youngpornvideos.com&quot;"/>
                <plugin type="mod" modfile="porn.porntv" confopt="showghettotube" default="False" confcat="porn" gz="0" name="GhettoTube" icon="ghettotube" filter="Porn" screen="porntvGenreScreen" param1="ghettotube" param2="" search="1" delim="+" searchurl="%s" searchscreen="porntvFilmScreen" searchparam=", &quot;GhettoTube.com&quot;, &quot;https://www.ghettotube.com&quot;"/>
                <plugin type="mod" modfile="porn.porntv" confopt="showcartoonsextube" default="False" confcat="porn" gz="0" name="CartoonSexTube" icon="cartoonsextube" filter="Porn" screen="porntvGenreScreen" param1="cartoonsextube" param2="" search="1" delim="+" searchurl="%s" searchscreen="porntvFilmScreen" searchparam=", &quot;CartoonSexTube.com&quot;, &quot;https://www.cartoonsextube.com&quot;"/>
                <plugin type="mod" modfile="porn.porntv" confopt="showmobilepornmovies" default="False" confcat="porn" gz="0" name="MobilePornMovies" icon="mobilepornmovies" filter="Porn" screen="porntvGenreScreen" param1="mobilepornmovies" param2="" search="1" delim="+" searchurl="%s" searchscreen="porntvFilmScreen" searchparam=", &quot;MobilePornMovies.com&quot;, &quot;https://www.mobilepornmovies.com&quot;"/>
                <plugin type="mod" modfile="porn.porntv" confopt="showxxxmilfs" default="False" confcat="porn" gz="0" name="XXXMilfs" icon="xxxmilfs" filter="Porn" screen="porntvGenreScreen" param1="xxxmilfs" param2="" search="1" delim="+" searchurl="%s" searchscreen="porntvFilmScreen" searchparam=", &quot;XXXMilfs.com&quot;, &quot;https://www.xxxmilfs.com&quot;"/>
-               <plugin type="mod" modfile="porn.beeg" confopt="showbeeg" default="False" confcat="porn" gz="0" name="beeg" icon="beeg" filter="Porn" screen="beegGenreScreen" param1="" param2="" search="0" delim="+" searchurl="%s" searchscreen="beegFilmScreen" searchparam=""/>
+               <plugin type="mod" modfile="porn.beeg" confopt="showbeeg" default="False" confcat="porn" gz="0" name="beeg" icon="beeg" filter="Porn" screen="beegGenreScreen" param1="" param2="" search="0" delim="" searchurl="" searchscreen="" searchparam=""/>
                <plugin type="mod" modfile="porn.vporn" confopt="showvporn" default="False" confcat="porn" gz="0" name="VPORN" icon="vporn" filter="Porn" screen="vpornGenreScreen" param1="" param2="" search="1" delim="+" searchurl="%s" searchscreen="vpornFilmScreen" searchparam=", &quot;&quot;, &quot;&quot;, False"/>
                <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.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.faapy" confopt="showfaapy" default="False" confcat="porn" gz="0" name="Faapy" icon="faapy" filter="Porn" screen="faapyGenreScreen" param1="" param2="" search="1" delim="+" searchurl="%s" searchscreen="faapyFilmScreen" searchparam=""/>-->
+               <plugin type="mod" modfile="porn.faapy" confopt="showfaapy" default="False" confcat="porn" gz="0" name="Faapy" icon="faapy" filter="Porn" screen="faapyGenreScreen" param1="" param2="" search="1" delim="+" searchurl="%s" searchscreen="faapyFilmScreen" searchparam=""/>
                <plugin type="mod" modfile="porn.eporner" confopt="showeporner" default="False" confcat="porn" gz="0" name="Eporner" icon="eporner" filter="Porn" screen="epornerGenreScreen" param1="" param2="" search="1" delim="-" searchurl="http://www.eporner.com/search/%s/" searchscreen="epornerFilmScreen" searchparam=""/>
                <plugin type="mod" modfile="porn.sexu" confopt="showsexu" default="False" confcat="porn" gz="0" name="Sexu" icon="sexu" filter="Porn" screen="sexuGenreScreen" param1="" param2="" search="1" delim="+" searchurl="%s" searchscreen="sexuFilmScreen" searchparam=""/>
                <plugin type="mod" modfile="porn.xpaja" confopt="showxpaja" default="False" confcat="porn" gz="0" name="xpaja" icon="xpaja" filter="Porn" screen="xpajaGenreScreen" param1="" param2="" search="1" delim="-" searchurl="%s" searchscreen="xpajaFilmScreen" searchparam=""/>
diff --git a/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/fun/e2world.py b/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/fun/e2world.py
deleted file mode 100644 (file)
index 815d59f..0000000
+++ /dev/null
@@ -1,136 +0,0 @@
-# -*- coding: utf-8 -*-
-#######################################################################################################
-#
-#    MediaPortal for Dreambox OS
-#
-#    Coded by MediaPortal Team (c) 2013-2019
-#
-#  This plugin is open source but it is NOT free software.
-#
-#  This plugin may only be distributed to and executed on hardware which
-#  is licensed by Dream Property GmbH. This includes commercial distribution.
-#  In other words:
-#  It's NOT allowed to distribute any parts of this plugin or its source code in ANY way
-#  to hardware which is NOT licensed by Dream Property GmbH.
-#  It's NOT allowed to execute this plugin and its source code or even parts of it in ANY way
-#  on hardware which is NOT licensed by Dream Property GmbH.
-#
-#  This applies to the source code as a whole as well as to parts of it, unless explicitely
-#  stated otherwise.
-#
-#  If you want to use or modify the code or parts of it, permission from the authors is necessary.
-#  You have to keep OUR license and inform us about any modification, but it may NOT be distributed
-#  other than under the conditions noted above.
-#
-#  As an exception regarding modifcations, you are NOT permitted to remove
-#  any copy protections implemented in this plugin or change them for means of disabling
-#  or working around the copy protections, unless the change has been explicitly permitted
-#  by the original authors. Also decompiling and modification of the closed source
-#  parts is NOT permitted.
-#
-#  Advertising with this plugin is NOT allowed.
-#
-#  For other uses, permission from the authors is necessary.
-#
-#######################################################################################################
-
-from Plugins.Extensions.MediaPortal.plugin import _
-from Plugins.Extensions.MediaPortal.resources.imports import *
-
-default_cover = "file://%s/e2world.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
-
-class e2world(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
-               }, -1)
-
-               self['title'] = Label("E2WORLD")
-               self['ContentTitle'] = Label(_("Selection:"))
-
-               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.genreliste = []
-               self.genreliste.append(("E2WORLD", "http://e2world.de/feed/episode/"))
-               self.genreliste.append(("ARCHIV", "http://e2world.de/feed/archiv/"))
-               self.ml.setList(map(self._defaultlistcenter, self.genreliste))
-               self.keyLocked = False
-
-       def keyOK(self):
-               if self.keyLocked:
-                       return
-               Name = self['liste'].getCurrent()[0][0]
-               Link = self['liste'].getCurrent()[0][1]
-               self.session.open(e2worldMain, Link, Name)
-
-class e2worldMain(MPScreen):
-
-       def __init__(self, session, Link, Name):
-               self.link = Link
-               self.name = Name
-               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.name)
-               self['ContentTitle'] = Label("Videos:")
-               self['name'] = Label(_("Please wait..."))
-
-               self.streamList = []
-               self.ml = MenuList([], enableWrapAround=True, content=eListboxPythonMultiContent)
-               self['liste'] = self.ml
-
-               self.keyLocked = True
-               self.onLayoutFinish.append(self.loadPage)
-
-       def loadPage(self):
-               self.streamList = []
-               url = self.link
-               getPage(url).addCallback(self.parseData).addErrback(self.dataError)
-
-       def parseData(self, data):
-               videos = re.findall('<item>.*?<title>(.*?)</title>.*?<link>(.*?)</link>.*?<enclosure\surl="(.*?)"\slength.*?<itunes:summary>(.*?)</itunes:summary>.*?<itunes:image\shref="(.*?)"\s/>', data, re.S)
-               if videos:
-                       for (title,url,stream,handlung,pic) in videos:
-                               self.streamList.append((decodeHtml(title),url,handlung,stream,pic))
-                       self.ml.setList(map(self._defaultlistleft, self.streamList))
-                       self.keyLocked = False
-                       self['name'].setText('')
-                       self.showInfos()
-
-       def showInfos(self):
-               self.name = self['liste'].getCurrent()[0][0]
-               handlung = self['liste'].getCurrent()[0][2]
-               pic = self['liste'].getCurrent()[0][4]
-               self['handlung'].setText(decodeHtml(handlung))
-               self['name'].setText(self.name)
-               CoverHelper(self['coverArt']).getCover(pic)
-
-       def keyOK(self):
-               exist = self['liste'].getCurrent()
-               if self.keyLocked or exist == None:
-                       return
-               stream = self['liste'].getCurrent()[0][3]
-               if stream:
-                       self.session.open(SimplePlayer, [(self.name, stream)], showPlaylist=False, ltype='e2world')
\ No newline at end of file
diff --git a/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/fun/gigatv.py b/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/fun/gigatv.py
deleted file mode 100644 (file)
index b08301f..0000000
+++ /dev/null
@@ -1,206 +0,0 @@
-# -*- coding: utf-8 -*-
-#######################################################################################################
-#
-#    MediaPortal for Dreambox OS
-#
-#    Coded by MediaPortal Team (c) 2013-2019
-#
-#  This plugin is open source but it is NOT free software.
-#
-#  This plugin may only be distributed to and executed on hardware which
-#  is licensed by Dream Property GmbH. This includes commercial distribution.
-#  In other words:
-#  It's NOT allowed to distribute any parts of this plugin or its source code in ANY way
-#  to hardware which is NOT licensed by Dream Property GmbH.
-#  It's NOT allowed to execute this plugin and its source code or even parts of it in ANY way
-#  on hardware which is NOT licensed by Dream Property GmbH.
-#
-#  This applies to the source code as a whole as well as to parts of it, unless explicitely
-#  stated otherwise.
-#
-#  If you want to use or modify the code or parts of it, permission from the authors is necessary.
-#  You have to keep OUR license and inform us about any modification, but it may NOT be distributed
-#  other than under the conditions noted above.
-#
-#  As an exception regarding modifcations, you are NOT permitted to remove
-#  any copy protections implemented in this plugin or change them for means of disabling
-#  or working around the copy protections, unless the change has been explicitly permitted
-#  by the original authors. Also decompiling and modification of the closed source
-#  parts is NOT permitted.
-#
-#  Advertising with this plugin is NOT allowed.
-#
-#  For other uses, permission from the authors is necessary.
-#
-#######################################################################################################
-
-from Plugins.Extensions.MediaPortal.plugin import _
-from Plugins.Extensions.MediaPortal.resources.imports import *
-from Plugins.Extensions.MediaPortal.resources.youtubeplayer import YoutubePlayer
-
-default_cover = "file://%s/gigatv.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
-
-class gigatvGenreScreen(MPScreen, ThumbsHelper):
-
-       def __init__(self, session):
-               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
-               }, -1)
-
-               self['title'] = Label("GIGA.de")
-               self['ContentTitle'] = Label("Genre:")
-
-               self.keyLocked = True
-
-               self.genreliste = []
-               self.ml = MenuList([], enableWrapAround=True, content=eListboxPythonMultiContent)
-               self['liste'] = self.ml
-
-               self.onLayoutFinish.append(self.layoutFinished)
-
-       def layoutFinished(self):
-               self.genreliste.append(("G-Log","http://www.giga.de/games/videos/g-log/", "http://static.giga.de/wp-content/uploads/2012/12/g-log2-rcm239x151.jpg"))
-               self.genreliste.append(("GIGA Games", "https://www.giga.de/games/videos/", default_cover))
-               self.genreliste.append(("GIGA Tech","http://www.giga.de/tech/videos/", default_cover))
-               self.genreliste.append(("GIGA Windows","http://www.giga.de/windows/videos/", default_cover))
-               self.genreliste.append(("GIGA Android/Apple","http://www.giga.de/android/videos-podcasts/", default_cover))
-               self.genreliste.append(("GIGA Failplays","http://www.giga.de/games/channel/giga-failplays/", "http://static.giga.de/wp-content/uploads/2013/04/failplay-teaser-rcm239x151.jpg"))
-               self.genreliste.append(("GIGA Gameplay","http://www.giga.de/games/videos/giga-gameplay/", "http://static.giga.de/wp-content/uploads/2012/12/gameplay2-rcm239x151.jpg"))
-               self.genreliste.append(("GIGA Live","http://www.giga.de/games/videos/giga-live/", "http://static.giga.de/wp-content/uploads/2012/12/gigatvlive-teaser-rcm239x151.jpg"))
-               self.genreliste.append(("GIGA Top Montag","http://www.giga.de/mac/channel/giga-top-montag/", "http://static.giga.de/wp-content/uploads/2013/04/topmontag-teaser-rcm239x151.jpg"))
-               self.genreliste.append(("Jonas liest","http://www.giga.de/games/videos/jonas-liest/", "http://static.giga.de/wp-content/uploads/2012/12/jonasliest-teaser-rcm239x151.jpg"))
-               self.genreliste.append(("NostalGIGA","http://www.giga.de/games/videos/nostalgiga/", "http://static.giga.de/wp-content/uploads/2012/12/nostalgiga-rcm239x151.jpg"))
-               self.genreliste.append(("Radio GIGA","http://www.giga.de/games/videos/radio-giga/", "http://static.giga.de/wp-content/uploads/2012/12/radiogiga-rcm239x151.jpg"))
-               self.genreliste.append(("Specials","http://www.giga.de/games/videos/specials/", default_cover))
-               self.genreliste.append(("Top 100 Filme","http://www.giga.de/games/channel/top-100-filme/", "http://static.giga.de/wp-content/uploads/2012/12/top100filme-teaser-rcm239x151.jpg"))
-               self.genreliste.append(("Top 100 Games","http://www.giga.de/games/channel/top-100-games/", "http://static.giga.de/wp-content/uploads/2012/12/top100spiele-teaser-rcm239x151.jpg"))
-               self.genreliste.append(("Top 100 Momente","http://www.giga.de/android/channel/top-100-spielemomente/", "http://static.giga.de/wp-content/uploads/2013/04/top100spielemomente-teaser-rcm239x151.jpg"))
-               self.ml.setList(map(self._defaultlistcenter, self.genreliste))
-               self.ml.moveToIndex(0)
-               self.keyLocked = False
-               self.th_ThumbsQuery(self.genreliste, 0, 1, 2, None, None, 1, 1, mode=1)
-               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]
-               streamGenreLink = self['liste'].getCurrent()[0][1]
-               self.session.open(gigatvFilmScreen, streamGenreLink, Name)
-
-class gigatvFilmScreen(MPScreen, ThumbsHelper):
-
-       def __init__(self, session, CatLink, Name):
-               self.CatLink = CatLink
-               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("GIGA.de")
-               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['title'].setText('GIGA.de')
-
-               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 self.page > 1:
-                       url = "%spage/%s/" % (self.CatLink, str(self.page))
-               else:
-                       url = "%s" % (self.CatLink)
-               getPage(url).addCallback(self.loadData).addErrback(self.dataError)
-
-       def loadData(self, data):
-               self.getLastPage(data, 'class="pagination">(.*?)</ul>', '.*(?:>|\s+)(\d+)(?:<|)')
-               Movies = re.findall('<article\sclass=.*?<img title="(.*?)".*?src="(https://static.giga.de/.*?)".*?<a\shref="(.*?)"', data, re.S|re.I)
-               if Movies:
-                       for (Title, Image, Url) in Movies:
-                               self.filmliste.append((decodeHtml(Title).strip(), 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
-               url = self['liste'].getCurrent()[0][1]
-               getPage(url).addCallback(self.getID).addErrback(self.dataError)
-
-       def getID(self, data):
-               ID = re.findall('\/embed\/(\d+)', data, re.S)
-               if ID:
-                       url = "http://videos.giga.de/embed/%s" % ID[0]
-                       self.keyLocked = True
-                       getPage(url).addCallback(self.getVideoPage).addErrback(self.dataError)
-               else:
-                       yt = re.findall('www.youtube.com/(v|embed)/(.*?)\?.*?"', data, re.S)
-                       if yt:
-                               title = self['liste'].getCurrent()[0][0]
-                               self.session.open(YoutubePlayer,[(title, yt[0][1], None)],playAll= False,showPlaylist=False,showCover=False)
-                       else:
-                               message = self.session.open(MessageBoxExt, _("This video is not available."), MessageBoxExt.TYPE_INFO, timeout=5)
-
-       def getVideoPage(self, data):
-               data = data.replace('\/','/')
-               if mp_globals.model in ["one"]:
-                       videoPage = re.findall('src":"(http[s]?:\/\/(?:lx\d+.spieletips.de|vid-cdn\d+.stroeermb.de)/\d+(?:_v\d+|)/(?:2160|1080|720|480|360)+p.mp4)"', data, re.S)
-               else:
-                       videoPage = re.findall('src":"(http[s]?:\/\/(?:lx\d+.spieletips.de|vid-cdn\d+.stroeermb.de)/\d+(?:_v\d+|)/(?:1080|720|480|360)+p.mp4)"', data, re.S)
-               if videoPage:
-                       url = videoPage[0]
-                       self.play(url)
-               else:
-                       message = self.session.open(MessageBoxExt, _("This video is not available."), MessageBoxExt.TYPE_INFO, timeout=5)
-               self.keyLocked = False
-
-       def play(self,file):
-               Title = self['liste'].getCurrent()[0][0]
-               self.session.open(SimplePlayer, [(Title, file)], showPlaylist=False, ltype='giga')
\ No newline at end of file
diff --git a/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/fun/heisevideo.py b/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/fun/heisevideo.py
deleted file mode 100644 (file)
index f76bbdd..0000000
+++ /dev/null
@@ -1,272 +0,0 @@
-# -*- coding: utf-8 -*-
-#######################################################################################################
-#
-#    MediaPortal for Dreambox OS
-#
-#    Coded by MediaPortal Team (c) 2013-2019
-#
-#  This plugin is open source but it is NOT free software.
-#
-#  This plugin may only be distributed to and executed on hardware which
-#  is licensed by Dream Property GmbH. This includes commercial distribution.
-#  In other words:
-#  It's NOT allowed to distribute any parts of this plugin or its source code in ANY way
-#  to hardware which is NOT licensed by Dream Property GmbH.
-#  It's NOT allowed to execute this plugin and its source code or even parts of it in ANY way
-#  on hardware which is NOT licensed by Dream Property GmbH.
-#
-#  This applies to the source code as a whole as well as to parts of it, unless explicitely
-#  stated otherwise.
-#
-#  If you want to use or modify the code or parts of it, permission from the authors is necessary.
-#  You have to keep OUR license and inform us about any modification, but it may NOT be distributed
-#  other than under the conditions noted above.
-#
-#  As an exception regarding modifcations, you are NOT permitted to remove
-#  any copy protections implemented in this plugin or change them for means of disabling
-#  or working around the copy protections, unless the change has been explicitly permitted
-#  by the original authors. Also decompiling and modification of the closed source
-#  parts is NOT permitted.
-#
-#  Advertising with this plugin is NOT allowed.
-#
-#  For other uses, permission from the authors is necessary.
-#
-#######################################################################################################
-from Plugins.Extensions.MediaPortal.plugin import _
-from Plugins.Extensions.MediaPortal.resources.imports import *
-
-default_cover = "file://%s/heisevideo.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
-heiseAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36"
-baseUrl = 'http://www.heise.de'
-
-class HeiseTvGenreScreen(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
-               }, -1)
-
-
-               self['title'] = Label("heise Video")
-               self['ContentTitle'] = Label("Genres")
-               self['name'] = Label(_("Selection:"))
-
-               self.keyLocked = True
-               self.data_rubrikid="2523"
-               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...'))
-               getPage(baseUrl+'/video').addCallback(self.buildMenu).addErrback(self.dataError)
-
-       def buildMenu(self, data):
-               m = re.search('<ul id="teaser_reiter_nav">(.*?)</ul>', data, re.S)
-               if m:
-                       list = re.findall('href="#(reiter.*?)">(.*?)</a></li>', m.group(1), re.S)
-                       if list:
-                               for r, n in list:
-                                       nm = decodeHtml(n)
-                                       m2 = re.search('<a href="(\?teaser=.*?);.*?into=%s' % r, data)
-                                       if m2:
-                                               self.genreliste.append((nm, 1, n, '/video/%s;offset=%%d;into=%s&hajax=1' % (m2.group(1), r)))
-               list = re.findall('<section class="kasten video.*?<h3><span></span>(.*?)</h3>', data, re.S)
-               if list:
-                       for x in list:
-                               if not [1 for item in self.genreliste if item[1] == x]:
-                                       nm = decodeHtml(x)
-                                       self.genreliste.append((nm, 3, x, '/video'))
-               m = re.search('<section id="cttv_archiv">(.*?)</section>', data, re.S)
-               if m:
-                       list = re.findall('data-jahr="(.*?)"', m.group(1), re.S)
-                       if list:
-                               for j in list:
-                                       nm = "c't-TV Archiv %s" % j
-                                       url = '/video/includes/cttv_archiv_json.pl?jahr=%s&rubrik=%s' % (j, self.data_rubrikid)
-                                       self.genreliste.append((nm, 2, nm, url))
-               self.ml.setList(map(self._defaultlistcenter, self.genreliste))
-               self.keyLocked = False
-               self['name'].setText(_("Selection:"))
-
-       def keyOK(self):
-               if self.keyLocked:
-                       return
-               genreID = self['liste'].getCurrent()[0][1]
-               genre = self['liste'].getCurrent()[0][0]
-               raw_genre = self['liste'].getCurrent()[0][2]
-               Link = self['liste'].getCurrent()[0][3]
-               self.session.open(HeiseTvListScreen, genreID, Link, genre, raw_genre)
-
-class HeiseTvListScreen(MPScreen, ThumbsHelper):
-
-       def __init__(self, session, genreID, Link, stvGenre, raw_genre):
-               self.genreID = genreID
-               self.Link = Link
-               self.genreName = stvGenre
-               self.rawGenre = raw_genre
-               MPScreen.__init__(self, session, skin='MP_Plugin', default_cover=default_cover)
-               ThumbsHelper.__init__(self)
-
-               self["actions"] = ActionMap(["MP_Actions"], {
-                       "ok" : self.keyOK,
-                       "cancel" : self.keyCancel,
-                       "5" : self.keyShowThumb,
-                       "nextBouquet" : self.keyPageUp,
-                       "prevBouquet" : self.keyPageDown,
-                       "up" : self.keyUp,
-                       "down" : self.keyDown,
-                       "right" : self.keyRight,
-                       "0" : self.closeAll,
-                       "left" : self.keyLeft
-               }, -1)
-
-               self['title'] = Label("heise Video")
-               self['ContentTitle'] = Label(self.genreName)
-               self['Page'] = Label(_("Page:"))
-
-               if self.genreID != 1:
-                       self['Page'].hide()
-                       self['page'].hide()
-
-               self.page = 0
-               self.lastpage = 999
-               self.keyLocked = True
-               self.filmliste = []
-               self.ml = MenuList([], enableWrapAround=True, content=eListboxPythonMultiContent)
-               self['liste'] = self.ml
-
-               self.onLayoutFinish.append(self.loadPage)
-
-       def loadPage(self):
-               self['name'].setText(_('Please wait...'))
-               self.filmliste = []
-               if self.genreID == 1:
-                       url = baseUrl+(self.Link % (self.page * 10))
-               else:
-                       url = baseUrl+self.Link
-               getPage(url).addCallback(self.genreData).addErrback(self.dataError)
-
-       def genreData(self, data):
-               if self.genreID == 1:
-                       json_data = json.loads(data)
-                       stvDaten = re.findall('class=\"rahmen\">.*?<img src=\"(.*?)\".*?<h3><a href=\"(.*?)\">(.*?)</a>.*?<p>(.*?)<a href=\"', str(json_data['actions'][1]['html']), re.S)
-                       if stvDaten:
-                               for (img,href,title,desc) in stvDaten:
-                                       title = decodeHtml(title).strip()
-                                       desc = decodeHtml(desc).strip()
-                                       img = baseUrl + img
-                                       self.filmliste.append((title, href, img, desc))
-                       self['page'].setText(str(self.page+1))
-               elif self.genreID == 2:
-                       json_data = json.loads(data[1:-2])
-                       for item in json_data:
-                               title = str(item['titel'])
-                               desc = str(item['anrisstext'])
-                               url = str(item['url'])
-                               if item['anrissbild'].has_key('src'):
-                                       img = baseUrl + str(item['anrissbild']['src'])
-                               else:
-                                       img = None
-                               self.filmliste.append((title, url, img, desc))
-               elif self.genreID == 3:
-                       patt = '<section class="kasten video.*?<h3><span></span>%s</h3>(.*?)</section>' % self.rawGenre
-                       m = re.search(patt, data, re.S)
-                       if m:
-                               stvDaten = re.findall('<img.*?src="(.*?)".*?<h4><a href="(.*?)">(.*?)</a></h4>', m.group(1), re.S)
-                               if stvDaten:
-                                       for (img,href,title) in stvDaten:
-                                               title = decodeHtml(title)
-                                               if img.startswith('//'):
-                                                       img = 'https:' + img
-                                               self.filmliste.append((title,href,img,''))
-               if len(self.filmliste) == 0:
-                       self.filmliste.append((_('No videos found!'),'','',''))
-                       self.ml.setList(map(self._defaultlistleft, self.filmliste))
-               else:
-                       self.keyLocked = False
-                       self.ml.setList(map(self._defaultlistleft, self.filmliste))
-                       self.th_ThumbsQuery(self.filmliste, 0, 1, 2, None, None, self.page, 999, mode=1)
-                       self.showInfos()
-
-       def showInfos(self):
-               stvTitle = self['liste'].getCurrent()[0][0]
-               stvImage = self['liste'].getCurrent()[0][2]
-               desc = self['liste'].getCurrent()[0][3]
-               self['name'].setText(stvTitle)
-               self['handlung'].setText(desc)
-               CoverHelper(self['coverArt']).getCover(stvImage)
-
-       def keyOK(self):
-               if self.keyLocked:
-                       return
-               self['name'].setText(_('Please wait...'))
-               self.keyLocked = True
-               url = baseUrl + self['liste'].getCurrent()[0][1]
-               getPage(url).addCallback(self.getVid).addErrback(self.dataError)
-
-       def getVid(self, data):
-               entryid = re.findall('entry-id="(.*?)"', data, re.S)
-               if entryid:
-                       partnerid = "2238431"
-                       url = "https://cdnapisec.kaltura.com/p/%s/sp/%s00/playManifest/entryId/%s/format/applehttp/protocol/https/a.m3u8" % (partnerid, partnerid, entryid[0])
-                       getPage(url, agent=heiseAgent).addCallback(self.loadplaylist, partnerid, entryid[0]).addErrback(self.dataError)
-
-       def loadplaylist(self, data, partnerid, entry_id):
-               self.bandwith_list = []
-               match_sec_m3u8=re.findall('BANDWIDTH=(.*?),.*?RESOLUTION=(.*?).*?https://.*?flavorId\/(.*?)\/.*?.m3u8', data, re.S)
-               max = 0
-               for x in match_sec_m3u8:
-                       if int(x[0]) > max:
-                               max = int(x[0])
-               videoPrio = int(config_mp.mediaportal.videoquali_others.value)
-               if videoPrio == 2:
-                       bw = max
-               elif videoPrio == 1:
-                       bw = max/2
-               else:
-                       bw = max/3
-               for each in match_sec_m3u8:
-                       bandwith,resolution,url = each
-                       self.bandwith_list.append((int(bandwith),url))
-               _x, best = min((abs(int(x[0]) - bw), x) for x in self.bandwith_list)
-               url = "https://cdnapisec.kaltura.com/p/%s/sp/%s00/playManifest/entryId/%s/flavorIds/%s/" % (partnerid, partnerid, entry_id, best[1])
-               getPage(url, agent=heiseAgent).addCallback(self.getVideo).addErrback(self.dataError)
-
-       def getVideo(self, data):
-               vid = re.findall('url="(.*?)"', data, re.S)
-               if vid:
-                       title = self['liste'].getCurrent()[0][0]
-                       self['name'].setText(title)
-                       self.keyLocked = False
-                       url = vid[0].replace('&amp;','&')
-                       self.session.open(SimplePlayer, [(title, url)], showPlaylist=False, ltype='heisetv')
-
-       def keyPageDown(self):
-               if self.mp_hide:
-                       return
-               if self.keyLocked:
-                       return
-               if self.genreID != 1:
-                       return
-               if not self.page < 2:
-                       self.page -= 1
-                       self.loadPage()
-
-       def keyPageUp(self):
-               if self.mp_hide:
-                       return
-               if self.keyLocked:
-                       return
-               if self.genreID != 1:
-                       return
-               if self.page < self.lastpage:
-                       self.page += 1
-                       self.loadPage()
\ No newline at end of file
diff --git a/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/porn/anyporn.py b/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/porn/anyporn.py
new file mode 100644 (file)
index 0000000..3bc2a11
--- /dev/null
@@ -0,0 +1,404 @@
+# -*- coding: utf-8 -*-
+#######################################################################################################
+#
+#    MediaPortal for Dreambox OS
+#
+#    Coded by MediaPortal Team (c) 2013-2019
+#
+#  This plugin is open source but it is NOT free software.
+#
+#  This plugin may only be distributed to and executed on hardware which
+#  is licensed by Dream Property GmbH. This includes commercial distribution.
+#  In other words:
+#  It's NOT allowed to distribute any parts of this plugin or its source code in ANY way
+#  to hardware which is NOT licensed by Dream Property GmbH.
+#  It's NOT allowed to execute this plugin and its source code or even parts of it in ANY way
+#  on hardware which is NOT licensed by Dream Property GmbH.
+#
+#  This applies to the source code as a whole as well as to parts of it, unless explicitely
+#  stated otherwise.
+#
+#  If you want to use or modify the code or parts of it, permission from the authors is necessary.
+#  You have to keep OUR license and inform us about any modification, but it may NOT be distributed
+#  other than under the conditions noted above.
+#
+#  As an exception regarding modifcations, you are NOT permitted to remove
+#  any copy protections implemented in this plugin or change them for means of disabling
+#  or working around the copy protections, unless the change has been explicitly permitted
+#  by the original authors. Also decompiling and modification of the closed source
+#  parts is NOT permitted.
+#
+#  Advertising with this plugin is NOT allowed.
+#
+#  For other uses, permission from the authors is necessary.
+#
+#######################################################################################################
+
+from Plugins.Extensions.MediaPortal.plugin import _
+from Plugins.Extensions.MediaPortal.resources.imports import *
+
+json_headers = {
+       'Accept':'application/json',
+       'Accept-Language':'en,en-US;q=0.7,en;q=0.3',
+       'X-Requested-With':'XMLHttpRequest',
+       'Content-Type':'application/x-www-form-urlencoded',
+       }
+agent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'
+cookies = CookieJar()
+
+class anypornGenreScreen(MPScreen):
+
+       def __init__(self, session, mode):
+               self.mode = mode
+
+               global default_cover
+               if self.mode == "anyporn":
+                       self.portal = "AnyPorn.com"
+                       self.baseurl = "https://anyporn.com"
+                       default_cover = "file://%s/anyporn.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
+               elif self.mode == "anysex":
+                       self.portal = "AnySex.com"
+                       self.baseurl = "https://anysex.com"
+                       default_cover = "file://%s/anysex.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
+               elif self.mode == "sex3":
+                       self.portal = "Sex3.com"
+                       self.baseurl = "https://sex3.com"
+                       default_cover = "file://%s/sex3.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
+               elif self.mode == "hellporno":
+                       self.portal = "HellPorno.com"
+                       self.baseurl = "https://hellporno.com"
+                       default_cover = "file://%s/hellporno.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
+               elif self.mode == "bravotube":
+                       self.portal = "BravoTube.net"
+                       self.baseurl = "https://www.bravotube.net"
+                       default_cover = "file://%s/bravotube.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
+               elif self.mode == "bravoporn":
+                       self.portal = "BravoPorn.com"
+                       self.baseurl = "https://www.bravoporn.com"
+                       default_cover = "file://%s/bravoporn.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
+               elif self.mode == "bravoteens":
+                       self.portal = "BravoTeens.com"
+                       self.baseurl = "https://www.bravoteens.com"
+                       default_cover = "file://%s/bravoteens.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
+               elif self.mode == "xbabe":
+                       self.portal = "XBabe.com"
+                       self.baseurl = "https://xbabe.com"
+                       default_cover = "file://%s/xbabe.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.ml = MenuList([], enableWrapAround=True, content=eListboxPythonMultiContent)
+               self['liste'] = self.ml
+
+               self.onLayoutFinish.append(self.loadPage)
+
+       def loadPage(self):
+               self.filmliste = []
+               self['name'].setText(_('Please wait...'))
+               if self.mode == "bravoteens":
+                       url = self.baseurl + "/cats/"
+               elif self.mode == "bravoporn":
+                       url = self.baseurl + "/c/"
+               else:
+                       url = self.baseurl + "/categories/"
+               twAgentGetPage(url, agent=agent, cookieJar=cookies).addCallback(self.parseData).addErrback(self.dataError)
+
+       def parseData(self, data):
+               if self.mode == "anysex":
+                       parse = re.search('SEX CATEGORIES</h2>(.*?)</ul>', data, re.S)
+                       cat = re.findall('class="img">.*?href="(.*?)"\s(?:class="popfire" |)title.*?img\sclass="thumb"\ssrc="(.*?)"\salt="(.*?)"', parse.group(1), re.S)
+                       if cat:
+                               for (Url, Image, Title) in cat:
+                                       self.filmliste.append((decodeHtml(Title), Url, Image))
+                       self.filmliste.sort()
+                       self.filmliste.insert(0, ("Top Rated", "%s/top-rated/" % self.baseurl, default_cover))
+                       self.filmliste.insert(0, ("Most Popular", "%s/most-popular/" % self.baseurl, default_cover))
+                       self.filmliste.insert(0, ("Newest", "%s/new-movies/" % self.baseurl, default_cover))
+               elif self.mode == "xbabe":
+                       parse = re.search('All categories</a>(.*?)</header>', data, re.S)
+                       cat = re.findall('href="(.*?)">(.*?)</a>', parse.group(1), re.S)
+                       if cat:
+                               for (Url, Title) in cat:
+                                       Title = upperString(Title)
+                                       self.filmliste.append((decodeHtml(Title), Url, default_cover))
+                       self.filmliste.sort()
+                       self.filmliste.insert(0, ("Newest", "%s/" % self.baseurl, default_cover))
+               elif self.mode == "hellporno":
+                       parse = re.search('Featured video categories</h3>(.*?)class="pagination"', data, re.S)
+                       cat = re.findall('href="(.*?)".*?img\ssrc="(.*?)".*?class="title(?: long-title|)">(.*?)</span>', parse.group(1), re.S)
+                       if cat:
+                               for (Url, Image, Title) in cat:
+                                       Title = upperString(Title)
+                                       self.filmliste.append((decodeHtml(Title), Url, Image))
+                       self.filmliste.sort()
+                       self.filmliste.insert(0, ("Newest", "%s/" % self.baseurl, default_cover))
+               else:
+                       parse = re.search('(?:class="tagslist">|class="list-tags">)(.*?)(?:class="footer-margin"|class="footer-box")', data, re.S)
+                       if parse:
+                               cat = re.findall('a\shref=[\"|\']((?:/categories/|/c/).*?)[\"|\']\stitle="(.*?)"', parse.group(1), re.S)
+                               if cat:
+                                       for (Url, Title) in cat:
+                                               Url = self.baseurl + Url
+                                               self.filmliste.append((decodeHtml(Title), Url, default_cover))
+                       else:
+                               parse = re.search('(?:class="th-wrap">|cat_thumbs|class="thumbs)(.*?)(?:class="headline"|class="heading"|class="clear")', data, re.S)
+                               cat = re.findall('a\shref="((?:/categories/|/cats/).*?)".*?<img src="(.*?)".*?alt="(.*?)"', parse.group(1), re.S)
+                               if cat:
+                                       for (Url, Image, Title) in cat:
+                                               Url = self.baseurl + Url
+                                               if Image.startswith('//'):
+                                                       Image = "https:" + Image
+                                               if Image.startswith('/'):
+                                                       Image = self.baseurl + Image
+                                               Title = upperString(Title)
+                                               self.filmliste.append((decodeHtml(Title), Url, Image))
+                       self.filmliste.sort()
+                       if self.mode in ["bravotube","bravoporn","sex3"]:
+                               self.filmliste.insert(0, ("Most Viewed", "%s/most-popular/" % self.baseurl, default_cover))
+                               self.filmliste.insert(0, ("Newest", "%s/latest-updates/" % self.baseurl, default_cover))
+                       elif self.mode == "bravoteens":
+                               self.filmliste.insert(0, ("Top Rated", "%s/top/" % self.baseurl, default_cover))
+                               self.filmliste.insert(0, ("Most Viewed", "%s/popular/" % self.baseurl, default_cover))
+                               self.filmliste.insert(0, ("Newest", "%s/new/" % self.baseurl, default_cover))
+                       else:
+                               self.filmliste.insert(0, ("Most Viewed", "%s/popular/" % self.baseurl, default_cover))
+                               self.filmliste.insert(0, ("Newest", "%s/newest/" % self.baseurl, default_cover))
+               self.filmliste.insert(0, ("--- Search ---", "callSuchen", default_cover))
+               self.ml.setList(map(self._defaultlistcenter, self.filmliste))
+               self.keyLocked = False
+               self['name'].setText('')
+               self.showInfos()
+
+       def showInfos(self):
+               Image = self['liste'].getCurrent()[0][2]
+               CoverHelper(self['coverArt']).getCover(Image)
+
+       def SuchenCallback(self, callback = None):
+               if callback is not None and len(callback):
+                       Name = "--- Search ---"
+                       self.suchString = callback
+                       if self.mode in ["anyporn","xbabe"]:
+                               Link = callback.replace(' ', '-')
+                       else:
+                               Link = callback.replace(' ', '+')
+                       if self.mode == "bravoteens":
+                               Link = urllib.quote(Link).replace('%2B', '+')
+                       self.session.open(anypornListScreen, Link, Name, self.portal, self.baseurl)
+
+       def getSuggestions(self, text, max_res):
+               if self.mode == "xbabe":
+                       url = "%s/s/?term=%s" % (self.baseurl, urllib.quote_plus(text))
+               elif self.mode == "hellporno":
+                       url = "%s/20_suggestions_videos.php?term=%s" % (self.baseurl, urllib.quote_plus(text))
+               d = twAgentGetPage(url, agent=agent, headers=json_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["label"]
+                               list.append(str(li))
+                               max_res -= 1
+                               if not max_res: break
+               elif err:
+                       printl(str(suggestions),self,'E')
+               return list
+
+       def keyOK(self):
+               if self.keyLocked:
+                       return
+               Name = self['liste'].getCurrent()[0][0]
+               if Name == "--- Search ---":
+                       if self.mode in ["hellporno","xbabe"]:
+                               self.suchen(suggest_func=self.getSuggestions)
+                       else:
+                               self.suchen()
+               else:
+                       Link = self['liste'].getCurrent()[0][1]
+                       self.session.open(anypornListScreen, Link, Name, self.portal, self.baseurl)
+
+class anypornListScreen(MPScreen, ThumbsHelper):
+
+       def __init__(self, session, Link, Name, portal, baseurl):
+               self.Link = Link
+               self.Name = Name
+               self.portal = portal
+               self.baseurl = baseurl
+
+               global default_cover
+               if self.portal == "AnyPorn.com":
+                       default_cover = "file://%s/anyporn.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
+               elif self.portal == "AnySex.com":
+                       default_cover = "file://%s/anysex.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
+               elif self.portal == "Sex3.com":
+                       default_cover = "file://%s/sex3.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
+               elif self.portal == "HellPorno.com":
+                       default_cover = "file://%s/hellporno.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
+               elif self.portal == "BravoTube.net":
+                       default_cover = "file://%s/bravotube.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
+               elif self.portal == "BravoPorn.com":
+                       default_cover = "file://%s/bravoporn.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
+               elif self.portal == "BravoTeens.com":
+                       default_cover = "file://%s/bravoteens.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
+               elif self.portal == "XBabe.com":
+                       default_cover = "file://%s/xbabe.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['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):
+                       if self.portal == "AnyPorn.com":
+                               url = "%s/search/%s/?mode=async&function=get_block&block_id=list_videos_v2_videos_list_search_result&q=%s&category_ids=&sort_by=&from_videos=%s&from_albums=%s" % (self.baseurl, self.Link, self.Link, str(self.page), str(self.page))
+                       elif self.portal == "BravoPorn.com":
+                               url = "%s/s/%s/?q=%s" % (self.baseurl, str(self.page), self.Link)
+                       else:
+                               url = "%s/search/%s/?q=%s" % (self.baseurl, str(self.page), self.Link)
+               else:
+                       if self.page == 1:
+                               url = self.Link
+                       else:
+                               url = "%s%s/" % (self.Link, str(self.page))
+               twAgentGetPage(url, agent=agent, cookieJar=cookies).addCallback(self.parseData).addErrback(self.dataError)
+
+       def parseData(self, data):
+               self.getLastPage(data, '(?:class="pagination">|class="pagination\d+">|pagination-holder">|class="pager">)(.*?)</div>')
+               movies = re.findall('class=[\"|\']item\s{0,2}[\"|\']>.*?href=[\"|\'](.*?)[\"|\'].*?<img\sclass="thumb(?: lazy-load|)"\s{0,1}(?:src|data-original)="(.*?)"\s{0,1}alt="(.*?)".*?(?:class="time">(.*?)</span>|durationid_\d+"\);element.innerHTML = "(.*?)")', data, re.S)
+               if movies:
+                       for (Url, Image, Title, Runtime1, Runtime2) in movies:
+                               if Url.startswith('/'):
+                                       Url = self.baseurl + Url
+                               if Image.startswith('//'):
+                                       Image = "https:" + Image
+                               Runtime = ''
+                               if Runtime1:
+                                       Runtime = Runtime1
+                               elif Runtime2:
+                                       Runtime = Runtime2.replace('s','').replace('m','').replace('h','')
+                               self.filmliste.append((decodeHtml(Title), Url, Image, Runtime))
+               else:
+                       movies = re.findall('(?:class="fuck|video_block|preview-item)">.*?href="(.*?)".*?img\s(?:class="thumb kt_imgrc" |)src="(.*?)".*?alt="(.*?)".*?class="time">(.*?)(?:</span>|</div>)', data, re.S)
+                       if movies:
+                               for (Url, Image, Title, Runtime) in movies:
+                                       if Url.startswith('/'):
+                                               Url = self.baseurl + Url
+                                       if Image.startswith('//'):
+                                               Image = "https:" + Image
+                                       Runtime = Runtime.replace('s','').replace('m','').replace('h','')
+                                       self.filmliste.append((decodeHtml(Title), Url, Image, Runtime))
+                       else:
+                               movies = re.findall('class="video".*?img\ssrc="(.*?)".*?href="(.*?)".*?><span>(.*?)</span.*?class="duration">(.*?)</span>', data, re.S)
+                               if movies:
+                                       for (Image, Url, Title, Runtime) in movies:
+                                               if Url.startswith('/'):
+                                                       Url = self.baseurl + Url
+                                               if Image.startswith('//'):
+                                                       Image = "https:" + Image
+                                               self.filmliste.append((decodeHtml(Title), Url, Image, Runtime))
+                               else:
+                                       movies = re.findall('class="video-thumb".*?href="(.*?)".*?class="time">(.*?)</span>.*?img\salt="(.*?)".*?src="(.*?)"', data, re.S)
+                                       if movies:
+                                               for (Url, Runtime, Title, Image) in movies:
+                                                       if Url.startswith('/'):
+                                                               Url = self.baseurl + Url
+                                                       if Image.startswith('//'):
+                                                               Image = "https:" + Image
+                                                       self.filmliste.append((decodeHtml(Title), Url, Image, Runtime))
+               if len(self.filmliste) == 0:
+                       self.filmliste.append((_('No videos found!'), None, None, '', ''))
+               self.ml.setList(map(self._defaultlistleft, self.filmliste))
+               self.ml.moveToIndex(0)
+               self.keyLocked = False
+               self.th_ThumbsQuery(self.filmliste, 0, 1, 2, None, None, self.page, 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]
+               if Link:
+                       twAgentGetPage(Link, agent=agent, cookieJar=cookies).addCallback(self.getStreamData).addErrback(self.dataError)
+
+       def getStreamData(self, data):
+               raw = re.findall('source\s(?:id="video_source_\d+"\s|data-fluid-hd\s|)src="(.*?)".*?title="(\d+|LQ|HQ|)(?:p|)"', data, re.S)
+               if raw:
+                       maxres = 0
+                       for vid in raw:
+                                       if vid[1] and int(vid[1].replace('HQ','720').replace('LQ','360')) > maxres:
+                                               url = vid[0]
+                                               maxres = int(vid[1].replace('HQ','720').replace('LQ','360'))
+                                       else:
+                                               url = vid[0]
+                       tw_agent_hlp = TwAgentHelper(cookieJar=cookies)
+                       tw_agent_hlp.getRedirectedUrl(url).addCallback(self.getStream).addErrback(self.dataError)
+               else:
+                       raw = re.findall('<source src="(.*?)"', data, re.S)
+                       if raw:
+                               url = raw[0]
+                               tw_agent_hlp = TwAgentHelper(cookieJar=cookies)
+                               tw_agent_hlp.getRedirectedUrl(url).addCallback(self.getStream).addErrback(self.dataError)
+
+       def getStream(self, url):
+               if url.startswith('//'):
+                       url = 'https:' + url
+               title = self['liste'].getCurrent()[0][0]
+               mp_globals.player_agent = agent
+               self.session.open(SimplePlayer, [(title, url)], showPlaylist=False, ltype='anyporn')
\ No newline at end of file
index 26fb991..62d0595 100644 (file)
@@ -172,20 +172,17 @@ class beegFilmScreen(MPScreen, ThumbsHelper):
                                title = str(node["ps_name"])
                        elif title.strip() == "-":
                                title = str(node["ps_name"])
-                       url = 'https://beeg.com/api/v6/%s/video/%s' % (beeg_apikey, str(node["id"]))
-                       try:
-                               image = 'https://img.beeg.com/800x450/%s' % str(node["thumbs"][0]["image"])
-                       except:
-                               image = 'https://img.beeg.com/800x450/%s.jpg' % str(node["id"])
-                       try:
-                               url2 = 'https://beeg.com/api/v6/%s/video/%s?v=2' % (beeg_apikey, str(node["svid"]))
-                       except:
-                               url2 = None
+                       image = 'https://img.beeg.com/800x450/%s' % str(node["thumbs"][0]["image"])
+                       svid = str(node["svid"])
+                       pid = str(node["thumbs"][0]["pid"])
+                       start = str(node["thumbs"][0]["start"])
+                       end = str(node["thumbs"][0]["end"])
+                       url = 'https://beeg.com/api/v6/%s/video/%s?v=2&p=%s&s=%s&e=%s' % (beeg_apikey, svid, pid, start, end)
                        duration = str(node["duration"])
                        added = str(node["datetime"])
-                       self.filmliste.append((title, url, image, duration, added, url2))
+                       self.filmliste.append((title, url, image, duration, added))
                if len(self.filmliste) == 0:
-                       self.filmliste.append((_('No videos found!'), '', None, None, None, None))
+                       self.filmliste.append((_('No videos found!'), '', None, None, None))
                self.ml.setList(map(self._defaultlistleft, self.filmliste))
                self.ml.moveToIndex(0)
                self.keyLocked = False
@@ -219,8 +216,10 @@ class beegFilmScreen(MPScreen, ThumbsHelper):
                twAgentGetPage(url, agent=IPhone5Agent, headers=MyHeaders).addCallback(self.getVideoPage).addErrback(self.dataError)
 
        def getVideoPage(self, data):
-               url2 = self['liste'].getCurrent()[0][5]
-               streamlinks = re.findall('\d{3}p":"(.*?)"', data , re.S)
+               if mp_globals.model in ["one"]:
+                       streamlinks = re.findall('(?:240|480|720|1080|2160)p":"(.*?)"', data , re.S)
+               else:
+                       streamlinks = re.findall('(?:240|480|720|1080)p":"(.*?)"', data , re.S)
                if streamlinks:
                        streamlink = streamlinks[-1].replace('/{DATA_MARKERS}/', '/data=pc_XX__%s/' % beeg_apikey)
                        if streamlink.startswith('//'):
@@ -229,7 +228,5 @@ class beegFilmScreen(MPScreen, ThumbsHelper):
                        Cover = self['liste'].getCurrent()[0][2]
                        mp_globals.player_agent = IPhone5Agent
                        self.session.open(SimplePlayer, [(Title, streamlink, Cover)], showPlaylist=False, ltype='beeg', cover=True)
-               elif url2:
-                       twAgentGetPage(url2, agent=IPhone5Agent, headers=MyHeaders).addCallback(self.getVideoPage).addErrback(self.dataError)
                else:
                        message = self.session.open(MessageBoxExt, _("Stream not found"), MessageBoxExt.TYPE_INFO, timeout=3)
\ No newline at end of file
index ceb4bfe..1410f22 100644 (file)
@@ -37,7 +37,9 @@
 from Plugins.Extensions.MediaPortal.plugin import _
 from Plugins.Extensions.MediaPortal.resources.imports import *
 
+agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36'
 default_cover = "file://%s/faapy.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
+cookies = CookieJar()
 
 class faapyGenreScreen(MPScreen):
 
@@ -67,8 +69,8 @@ class faapyGenreScreen(MPScreen):
 
        def layoutFinished(self):
                self.keyLocked = True
-               url = "http://faapy.com"
-               getPage(url).addCallback(self.genreData).addErrback(self.dataError)
+               url = "https://faapy.com"
+               twAgentGetPage(url, agent=agent, cookieJar=cookies).addCallback(self.genreData).addErrback(self.dataError)
 
        def genreData(self, data):
                parse = re.search('class="categories-drop">.*?<ul>(.*?)</ul>', data, re.S)
@@ -77,16 +79,16 @@ class faapyGenreScreen(MPScreen):
                        for (Url, Title) in Cats:
                                self.genreliste.append((Title, Url))
                        self.genreliste.sort()
-               self.genreliste.insert(0, ("Channels", "http://faapy.com/channels"))
-               self.genreliste.insert(0, ("Top Rated (All Time)", "http://faapy.com/top-rated/"))
-               self.genreliste.insert(0, ("Top Rated (Monthly)", "http://faapy.com/top-rated/month/"))
-               self.genreliste.insert(0, ("Top Rated (Weekly)", "http://faapy.com/top-rated/week/"))
-               self.genreliste.insert(0, ("Top Rated (Daily)", "http://faapy.com/top-rated/today/"))
-               self.genreliste.insert(0, ("Most Popular (All Time)", "http://faapy.com/most-popular/"))
-               self.genreliste.insert(0, ("Most Popular (Monthly)", "http://faapy.com/most-popular/month/"))
-               self.genreliste.insert(0, ("Most Popular (Weekly)", "http://faapy.com/most-popular/week/"))
-               self.genreliste.insert(0, ("Most Popular (Daily)", "http://faapy.com/most-popular/today/"))
-               self.genreliste.insert(0, ("Latest", "http://faapy.com/"))
+               self.genreliste.insert(0, ("Channels", "https://faapy.com/channels"))
+               self.genreliste.insert(0, ("Top Rated (All Time)", "https://faapy.com/top-rated/"))
+               self.genreliste.insert(0, ("Top Rated (Monthly)", "https://faapy.com/top-rated/month/"))
+               self.genreliste.insert(0, ("Top Rated (Weekly)", "https://faapy.com/top-rated/week/"))
+               self.genreliste.insert(0, ("Top Rated (Daily)", "https://faapy.com/top-rated/today/"))
+               self.genreliste.insert(0, ("Most Popular (All Time)", "https://faapy.com/most-popular/"))
+               self.genreliste.insert(0, ("Most Popular (Monthly)", "https://faapy.com/most-popular/month/"))
+               self.genreliste.insert(0, ("Most Popular (Weekly)", "https://faapy.com/most-popular/week/"))
+               self.genreliste.insert(0, ("Most Popular (Daily)", "https://faapy.com/most-popular/today/"))
+               self.genreliste.insert(0, ("Latest", "https://faapy.com/"))
                self.genreliste.insert(0, ("--- Search ---", "callSuchen"))
                self.ml.setList(map(self._defaultlistcenter, self.genreliste))
                self.keyLocked = False
@@ -106,9 +108,9 @@ class faapyGenreScreen(MPScreen):
 
        def SuchenCallback(self, callback = None):
                if callback is not None and len(callback):
-                       self.suchString = urllib.quote(callback).replace(' ', '+')
                        Name = "--- Search ---"
-                       Link = self.suchString
+                       self.suchString = callback
+                       Link = urllib.quote(self.suchString).replace(' ', '+')
                        self.session.open(faapyFilmScreen, Link, Name)
 
 class faapyChannelsScreen(MPScreen, ThumbsHelper):
@@ -152,16 +154,16 @@ class faapyChannelsScreen(MPScreen, ThumbsHelper):
                self['name'].setText(_('Please wait...'))
                self.filmliste = []
                url = self.Link + "/%s/" % self.page
-               getPage(url).addCallback(self.loadData).addErrback(self.dataError)
+               twAgentGetPage(url, agent=agent, cookieJar=cookies).addCallback(self.loadData).addErrback(self.dataError)
 
        def loadData(self, data):
                self.getLastPage(data, 'class="pagination">(.*?)</ul>')
-               parse = re.search('class="heading">(.*?)class="footer', data, re.S)
+               parse = re.search('class="thumbs channels">(.*?)class="footer', data, re.S)
                Movies = re.findall('<a\shref="(.*?/)"\stitle="(.*?)">.*?img\ssrc="(.*?)"', parse.group(1), re.S)
                if Movies:
                        for (Url, Title, Image) in Movies:
                                if Image.startswith('//'):
-                                       Image = "http:" + Image
+                                       Image = "https:" + Image
                                self.filmliste.append((decodeHtml(Title), Url, Image))
                if len(self.filmliste) == 0:
                        self.filmliste.append((_('Parsing error!'), None))
@@ -226,18 +228,18 @@ class faapyFilmScreen(MPScreen, ThumbsHelper):
                self['name'].setText(_('Please wait...'))
                self.filmliste = []
                if re.match(".*?Search", self.Name):
-                       url = "http://faapy.com/search/%s/?q=%s" % (str(self.page), self.Link)
+                       url = "https://faapy.com/search/%s/?q=%s" % (str(self.page), self.Link)
                else:
                        url = "%s%s/" % (self.Link, str(self.page))
-               getPage(url).addCallback(self.loadData).addErrback(self.dataError)
+               twAgentGetPage(url, agent=agent, cookieJar=cookies).addCallback(self.loadData).addErrback(self.dataError)
 
        def loadData(self, data):
                self.getLastPage(data, 'class="pagination">(.*?)</ul>')
-               Movies = re.findall('class="thumb".*?\s*href="(.*?)"\stitle="(.*?)".*?img\ssrc="(.*?)".*?class="icon-eye"></i>(\d+)\s*</span>', data, re.S)
+               Movies = re.findall('class="thumb".*?"url"\shref="(.*?)"\stitle="(.*?)".*?poster="(.*?)".*?class="icon-eye"></i>(\d+)</span>', data, re.S)
                if Movies:
                        for (Url, Title, Image, Views) in Movies:
                                if Image.startswith('//'):
-                                       Image = "http:" + Image
+                                       Image = "https:" + Image
                                self.filmliste.append((decodeHtml(Title), Url, Image, Views))
                if len(self.filmliste) == 0:
                        self.filmliste.append((_('No videos found!'), '', None, ''))
@@ -259,12 +261,16 @@ class faapyFilmScreen(MPScreen, ThumbsHelper):
                if self.keyLocked:
                        return
                Link = self['liste'].getCurrent()[0][1]
-               self.keyLocked = True
-               getPage(Link).addCallback(self.getVideoUrl).addErrback(self.dataError)
+               if Link:
+                       self.keyLocked = True
+                       twAgentGetPage(Link, agent=agent, cookieJar=cookies).addCallback(self.getVideoUrl).addErrback(self.dataError)
 
        def getVideoUrl(self, data):
-               videoUrl = re.findall("video_url:\s'(.*?)',", data, re.S)
+               videoUrl = re.findall("video_(?:alt_|)url(?:2|):\s\'function.*?(get_file.*?.mp4)", data, re.S)
                if videoUrl:
+                       url = videoUrl[-1].split('/')
+                       url = "https://cdn3.faapy.com/videos/%s/%s/%s" % (url[-3], url[-2], url[-1])
                        self.keyLocked = False
                        Title = self['liste'].getCurrent()[0][0]
-                       self.session.open(SimplePlayer, [(Title, videoUrl[-1])], showPlaylist=False, ltype='faapy')
\ No newline at end of file
+                       mp_globals.player_agent = agent
+                       self.session.open(SimplePlayer, [(Title, url)], showPlaylist=False, ltype='faapy')
\ No newline at end of file
index 1e05502..4060468 100644 (file)
@@ -89,6 +89,7 @@ class hotscopeGenreScreen(MPScreen):
                                self.genreliste.append((Title, Url, Image))
                        self.genreliste.sort()
                        self.genreliste.insert(0, ("Porn", BASE_URL + "videos/group?group=other&page=", default_cover))
+                       self.genreliste.insert(0, ("Snapchat", BASE_URL + "videos/group?group=snapchat&page=", default_cover))
                        self.genreliste.insert(0, ("Periscope", BASE_URL + "videos/group?group=periscope&page=", default_cover))
                        self.genreliste.insert(0, ("Most Viewed", BASE_URL + "videos/sortBy?sort=-views&page=", default_cover))
                        self.genreliste.insert(0, ("Most Recent", BASE_URL + "videos/sortBy?sort=-date&page=", default_cover))
diff --git a/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/porn/hypnotube.py b/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/porn/hypnotube.py
new file mode 100644 (file)
index 0000000..524240c
--- /dev/null
@@ -0,0 +1,202 @@
+# -*- coding: utf-8 -*-
+#######################################################################################################
+#
+#    MediaPortal for Dreambox OS
+#
+#    Coded by MediaPortal Team (c) 2013-2019
+#
+#  This plugin is open source but it is NOT free software.
+#
+#  This plugin may only be distributed to and executed on hardware which
+#  is licensed by Dream Property GmbH. This includes commercial distribution.
+#  In other words:
+#  It's NOT allowed to distribute any parts of this plugin or its source code in ANY way
+#  to hardware which is NOT licensed by Dream Property GmbH.
+#  It's NOT allowed to execute this plugin and its source code or even parts of it in ANY way
+#  on hardware which is NOT licensed by Dream Property GmbH.
+#
+#  This applies to the source code as a whole as well as to parts of it, unless explicitely
+#  stated otherwise.
+#
+#  If you want to use or modify the code or parts of it, permission from the authors is necessary.
+#  You have to keep OUR license and inform us about any modification, but it may NOT be distributed
+#  other than under the conditions noted above.
+#
+#  As an exception regarding modifcations, you are NOT permitted to remove
+#  any copy protections implemented in this plugin or change them for means of disabling
+#  or working around the copy protections, unless the change has been explicitly permitted
+#  by the original authors. Also decompiling and modification of the closed source
+#  parts is NOT permitted.
+#
+#  Advertising with this plugin is NOT allowed.
+#
+#  For other uses, permission from the authors is necessary.
+#
+#######################################################################################################
+
+from Plugins.Extensions.MediaPortal.plugin import _
+from Plugins.Extensions.MediaPortal.resources.imports import *
+
+agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36'
+default_cover = "file://%s/hypnotube.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
+cookies = CookieJar()
+
+class hypnotubeGenreScreen(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("hypnotube.com")
+               self['ContentTitle'] = Label("Genre:")
+               self.keyLocked = True
+               self.suchString = ''
+
+               self.filmliste = []
+               self.ml = MenuList([], enableWrapAround=True, content=eListboxPythonMultiContent)
+               self['liste'] = self.ml
+
+               self.onLayoutFinish.append(self.layoutFinished)
+
+       def layoutFinished(self):
+               self.keyLocked = True
+               url = "https://hypnotube.com/channels/"
+               twAgentGetPage(url, agent=agent, cookieJar=cookies).addCallback(self.genreData).addErrback(self.dataError)
+
+       def genreData(self, data):
+               parse = re.search('<h1>Categories\s{0,1}</h1>(.*?)$', data, re.S)
+               if parse:
+                       Cats = re.findall('class="item-col.*?href="(.*?)"\stitle="(.*?)".*?img\ssrc="(.*?)"', parse.group(1), re.S)
+                       if Cats:
+                               for (Url, Title, Image) in Cats:
+                                       if not Title in ["Images","Gifs"]:
+                                               self.filmliste.append((Title, Url, Image))
+               self.filmliste.sort()
+               self.filmliste.insert(0, ("Longest", "https://hypnotube.com/longest/", default_cover))
+               self.filmliste.insert(0, ("Most Discussed", "https://hypnotube.com/most-discussed/", default_cover))
+               self.filmliste.insert(0, ("Top Rated", "https://hypnotube.com/top-rated/", default_cover))
+               self.filmliste.insert(0, ("Most Viewed", "https://hypnotube.com/most-viewed/", default_cover))
+               self.filmliste.insert(0, ("Newest", "https://hypnotube.com/videos/", default_cover))
+               self.filmliste.insert(0, ("--- Search ---", "callSuchen", default_cover))
+               self.ml.setList(map(self._defaultlistcenter, self.filmliste))
+               self.ml.moveToIndex(0)
+               self.keyLocked = False
+               self.showInfos()
+
+       def showInfos(self):
+               cover = self['liste'].getCurrent()[0][2]
+               CoverHelper(self['coverArt']).getCover(cover, agent=agent, cookieJar=cookies, headers={'Referer':'https://hypnotube.com/'})
+
+       def keyOK(self):
+               if self.keyLocked:
+                       return
+               Name = self['liste'].getCurrent()[0][0]
+               Link = self['liste'].getCurrent()[0][1]
+               if Name == "--- Search ---":
+                       self.suchen()
+               else:
+                       self.session.open(hypnotubeFilmScreen, 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(hypnotubeFilmScreen, Link, Name)
+
+class hypnotubeFilmScreen(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("hypnotube.com")
+               self['ContentTitle'] = Label("Genre: %s" % self.Name)
+               self['F2'] = Label(_("Page"))
+
+               self['Page'] = Label(_("Page:"))
+               self.keyLocked = True
+               self.page = 1
+               self.lastpage = 1
+
+               self.filmliste = []
+               self.ml = MenuList([], enableWrapAround=True, content=eListboxPythonMultiContent)
+               self['liste'] = self.ml
+
+               self.onLayoutFinish.append(self.loadPage)
+
+       def loadPage(self):
+               self.keyLocked = True
+               self['name'].setText(_('Please wait...'))
+               self.filmliste = []
+               if re.match(".*Search", self.Name):
+                       url = "https://hypnotube.com/search/videos/%s/page%s.html" % (self.Link, str(self.page))
+               else:
+                       url = "%spage%s.html" % (self.Link, str(self.page))
+               twAgentGetPage(url, agent=agent, cookieJar=cookies).addCallback(self.genreData).addErrback(self.dataError)
+
+       def genreData(self, data):
+               self.getLastPage(data, 'class="pagination-col(.*?)</div>')
+               parse = re.search('class="content-col(.*?)$', data, re.S)
+               if parse:
+                       Movies = re.findall('class="item-col.*?href="(.*?)"\stitle="(.*?)".*?<img.*?src="(.*?)".*?class="time">(.*?)</span>.*?i-thumbs-up".*?sub-desc">(.*?)</span>.*?i-eye".*?sub-desc">(.*?)</span>', parse.group(1), re.S)
+                       if Movies:
+                               for (Url, Title, Image, Runtime, Rating, Views) in Movies:
+                                       if not "Photos" in Runtime:
+                                               self.filmliste.append((decodeHtml(Title), Url, Image, Runtime, Rating, Views))
+               if len(self.filmliste) == 0:
+                       self.filmliste.append((_('No videos found!'), None, None, '', '', ''))
+               self.ml.setList(map(self._defaultlistleft, self.filmliste))
+               self.ml.moveToIndex(0)
+               self.keyLocked = False
+               self.th_ThumbsQuery(self.filmliste, 0, 1, 2, None, None, self.page, self.lastpage, mode=1)
+               self.showInfos()
+
+       def showInfos(self):
+               title = self['liste'].getCurrent()[0][0]
+               url = self['liste'].getCurrent()[0][1]
+               pic = self['liste'].getCurrent()[0][2]
+               runtime = self['liste'].getCurrent()[0][3]
+               rating = self['liste'].getCurrent()[0][4]
+               views = self['liste'].getCurrent()[0][5]
+               self['name'].setText(title)
+               self['handlung'].setText("Runtime: %s\nRating: %s\nViews: %s" % (runtime, rating, views))
+               CoverHelper(self['coverArt']).getCover(pic, agent=agent, cookieJar=cookies, headers={'Referer':url})
+
+       def keyOK(self):
+               if self.keyLocked:
+                       return
+               Link = self['liste'].getCurrent()[0][1]
+               if Link:
+                       twAgentGetPage(Link, cookieJar=cookies, agent=agent).addCallback(self.parseVideo).addErrback(self.dataError)
+
+       def parseVideo(self, data):
+               streams = re.findall('<source src="(.*?)"', data, re.S)
+               if streams:
+                       Title = self['liste'].getCurrent()[0][0]
+                       self.session.open(SimplePlayer, [(Title, streams[-1])], showPlaylist=False, ltype='hypnotube')
\ No newline at end of file
index 1e49f29..489ac3c 100644 (file)
@@ -69,7 +69,7 @@ class nubilefilmsGenreScreen(MPScreen):
        def layoutFinished(self):
                self.keyLocked = True
                self['name'].setText(_('Please wait...'))
-               url = "http://nubilefilms.com/category/video/popular"
+               url = "https://nubilefilms.com/category/video/popular"
                getPage(url, agent=myagent).addCallback(self.genreData).addErrback(self.dataError)
 
        def genreData(self, data):
@@ -77,15 +77,15 @@ class nubilefilmsGenreScreen(MPScreen):
                if Cats:
                        for (Url, Title) in Cats:
                                if Url.startswith('//'):
-                                       Url = 'http:' + Url
+                                       Url = 'https:' + Url
                                Url = Url + '/'
-                               self.genreliste.append((decodeHtml(Title), Url))
+                               self.genreliste.append((decodeHtml(Title).strip(), Url))
                        self.genreliste.sort()
-               self.genreliste.insert(0, ("Models", 'http://nubilefilms.com/model/toprated/'))
-               self.genreliste.insert(0, ("Trending", 'http://nubilefilms.com/video/trending/'))
-               self.genreliste.insert(0, ("Popular", 'http://nubilefilms.com/video/popular/'))
-               self.genreliste.insert(0, ("Top Rated", 'http://nubilefilms.com/video/toprated/'))
-               self.genreliste.insert(0, ("Recent", 'http://nubilefilms.com/video/gallery/'))
+               self.genreliste.insert(0, ("Models", 'https://nubilefilms.com/model/toprated/'))
+               self.genreliste.insert(0, ("Trending", 'https://nubilefilms.com/video/trending/'))
+               self.genreliste.insert(0, ("Popular", 'https://nubilefilms.com/video/popular/'))
+               self.genreliste.insert(0, ("Top Rated", 'https://nubilefilms.com/video/toprated/'))
+               self.genreliste.insert(0, ("Recent", 'https://nubilefilms.com/video/gallery/'))
                self.ml.setList(map(self._defaultlistcenter, self.genreliste))
                self.ml.moveToIndex(0)
                self.keyLocked = False
@@ -150,13 +150,13 @@ class nubilefilmsModelsScreen(MPScreen, ThumbsHelper):
                getPage(url, agent=myagent).addCallback(self.loadData).addErrback(self.dataError)
 
        def loadData(self, data):
-               self.getLastPage(data, 'pagination">(.*?)</ul>')
-               Movies = re.findall('class="thumbnail-grid model.*?<img.*?src="(.*?)".*?<a\sclass="model"\shref="(.*?)">(.*?)</a>', data, re.S)
+               self.getLastPage(data, 'class="pagination(.*?)</ul>')
+               Movies = re.findall('<figure.*?<img.*?data-original="(.*?)".*?<a\sclass="title"\shref="(.*?)">(.*?)</a>', data, re.S)
                if Movies:
                        for (Image, Url, Title) in Movies:
                                if Image.startswith('//'):
-                                       Image = "http:" + Image
-                               Url = "http://nubilefilms.com" + Url
+                                       Image = "https:" + Image
+                               Url = "https://nubilefilms.com" + Url
                                self.filmliste.append((decodeHtml(Title), Url, Image))
                if len(self.filmliste) == 0:
                        self.filmliste.append((_('No pornstars found!'), None, None))
@@ -224,13 +224,16 @@ class nubilefilmsFilmScreen(MPScreen, ThumbsHelper):
                getPage(url, agent=myagent).addCallback(self.loadData).addErrback(self.dataError)
 
        def loadData(self, data):
-               self.getLastPage(data, 'pagination">(.*?)</ul>')
-               Movies = re.findall('class="thumbnail-grid videoset.*?<img.*?src="(.*?)".*?<a\sclass="title"\shref="(.*?)">(.*?)</a>.*?class="date">(.*?)</span.*?class="models">.*?Featuring:(.*?) </div>.*?class="rating">.*?</i>\s{0,1}(.*?)</span', data, re.S)
+               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)
                if Movies:
-                       for (Image, Url, Title, Date, Models, Rating) in Movies:
+                       for (Image, Url, Title, Models, Date, Rating) in Movies:
                                if Image.startswith('//'):
-                                       Image = "http:" + Image
-                               Url = "http://nubilefilms.com" + Url
+                                       Image = "https:" + Image
+                               if Url.startswith('//'):
+                                       Url = "https:" + Url.lower()
+                               elif Url.startswith('/'):
+                                       Url = "https://nubilefilms.com" + Url
                                models = stripAllTags(Models).replace('&nbsp;',',')
                                models = re.sub('\s+', ' ', models).strip().rstrip(',')
                                Title =  models + " - " + Title
@@ -256,6 +259,7 @@ class nubilefilmsFilmScreen(MPScreen, ThumbsHelper):
                if self.keyLocked:
                        return
                Link = self['liste'].getCurrent()[0][1]
+               print Link
                get_stream_link(self.session).check_link(Link, self.play)
 
        def play(self, url):
index f46abf7..33c0fad 100644 (file)
@@ -61,6 +61,10 @@ class pinflixGenreScreen(MPScreen):
                        self.portal = "Pornrox.com"
                        self.baseurl = "https://www.pornrox.com"
                        default_cover = "file://%s/pornrox.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
+               elif self.mode == "gotporn":
+                       self.portal = "GotPorn.com"
+                       self.baseurl = "https://www.gotporn.com"
+                       default_cover = "file://%s/gotporn.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
 
                MPScreen.__init__(self, session, skin='MP_Plugin', default_cover=default_cover)
 
@@ -71,11 +75,19 @@ class pinflixGenreScreen(MPScreen):
                        "up" : self.keyUp,
                        "down" : self.keyDown,
                        "right" : self.keyRight,
-                       "left" : self.keyLeft
+                       "left" : self.keyLeft,
+                       "yellow" : self.keyScope
                }, -1)
 
+               self.scope = 0
+               self.scopeText = ['Straight', 'Shemale', 'Gay']
+               self.scopeval = ['', 'shemale/', 'gay/']
+
                self['title'] = Label(self.portal)
                self['ContentTitle'] = Label("Genre:")
+               if self.mode == "gotporn":
+                       self['F3'] = Label(self.scopeText[self.scope])
+
                self.keyLocked = True
                self.suchString = ''
 
@@ -87,25 +99,66 @@ class pinflixGenreScreen(MPScreen):
 
        def layoutFinished(self):
                self.keyLocked = True
-               url = "%s/category" % self.baseurl
+               if self.mode == "gotporn":
+                       self['F3'].setText(self.scopeText[self.scope])
+                       url = "%s/%scategories" % (self.baseurl, self.scopeval[self.scope])
+               else:
+                       url = "%s/category" % self.baseurl
                twAgentGetPage(url, agent=agent, cookieJar=cookies).addCallback(self.genreData).addErrback(self.dataError)
 
        def genreData(self, data):
-               Cats = re.findall('class="(?:category|pfx-cat|small-thumb)\s{0,2}">\s{0,10}<a href="(.*?)".*?alt="(.*?)".*?(?:data-original|src)="(.*?)"', data, re.S)
-               if Cats:
-                       for (Url, Title, Image) in Cats:
-                               Url = self.baseurl + Url
-                               Title = upperString(Title)
-                               self.genreliste.append((Title, Url, Image))
+               if self.mode == "gotporn":
+                       Cats = re.findall('type="category".*?href="(.*?)".*?class="text">(.*?)</span>', data, re.S)
+                       if Cats:
+                               for (Url, Title) in Cats:
+                                       if not Url.endswith('/'):
+                                               Url = Url + "/"
+                                       self.genreliste.append((Title, Url, default_cover))
+               else:
+                       Cats = re.findall('class="(?:category|pfx-cat)\s{0,2}">\s{0,10}<a href="(.*?)".*?alt="(.*?)".*?(?:data-original|src)="(.*?)"', data, re.S)
+                       if Cats:
+                               for (Url, Title, Image) in Cats:
+                                       Url = self.baseurl + Url
+                                       Title = upperString(Title)
+                                       if Image.startswith('//'):
+                                               Image = "https:" + Image
+                                       self.genreliste.append((Title, Url, Image))
+                       else:
+                               Cats = re.findall('class="small-thumb\s{0,2}">\s{0,10}<a href="(.*?)".*?alt="(.*?)"(.*?)/>', data, re.S)
+                               if Cats:
+                                       for (Url, Title, Imagedata) in Cats:
+                                               Url = self.baseurl + Url
+                                               Title = upperString(Title)
+                                               Image = re.findall('src=[\'|\"](.*?)[\'|\"]', Imagedata, re.S)
+                                               if not "no-minithumb-image" in Image[0]:
+                                                       Image = Image[0]
+                                               else:
+                                                       Image = re.findall('data-src=[\'|\"](.*?)[\'|\"]', Imagedata, re.S)
+                                                       if Image:
+                                                               Image = Image[0]
+                                                       else:
+                                                               Image = default_cover
+                                               if Image.startswith('//'):
+                                                       Image = "https:" + Image
+                                               self.genreliste.append((Title, Url, Image))
                self.genreliste.sort()
-               if not self.mode == "pinflix":
+               if self.mode == "gotporn":
+                       self.genreliste.insert(0, ("Channels", "%s/%schannels" % (self.baseurl, self.scopeval[self.scope]), default_cover))
+                       self.genreliste.insert(0, ("Longest", "%s/%slongest" % (self.baseurl, self.scopeval[self.scope]), default_cover))
+                       self.genreliste.insert(0, ("Recommended", "%s/%srecommended" % (self.baseurl, self.scopeval[self.scope]), default_cover))
+                       self.genreliste.insert(0, ("Featured", "%s/%sfeatured" % (self.baseurl, self.scopeval[self.scope]), default_cover))
+                       self.genreliste.insert(0, ("Top Rated", "%s/%stop-rated" % (self.baseurl, self.scopeval[self.scope]), default_cover))
+                       self.genreliste.insert(0, ("Most Viewed", "%s/%smost-viewed" % (self.baseurl, self.scopeval[self.scope]), default_cover))
+                       self.genreliste.insert(0, ("Newest", "%s/%s" % (self.baseurl, self.scopeval[self.scope]), default_cover))
+               elif not self.mode == "pinflix":
                        self.genreliste.insert(0, ("Channels", "%s/channel" % self.baseurl, default_cover))
-               self.genreliste.insert(0, ("Pornstars", "%s/pornstars" % self.baseurl, default_cover))
-               self.genreliste.insert(0, ("Longtest", "%s/?order=longest" % self.baseurl, default_cover))
-               self.genreliste.insert(0, ("Featured", "%s/?order=featured" % self.baseurl, default_cover))
-               self.genreliste.insert(0, ("Top Rated", "%s/?order=top-rated" % self.baseurl, default_cover))
-               self.genreliste.insert(0, ("Most Viewed", "%s/?order=most-popular" % self.baseurl, default_cover))
-               self.genreliste.insert(0, ("Newest", "%s/?order=newest" % self.baseurl, default_cover))
+               if not self.mode == "gotporn":
+                       self.genreliste.insert(0, ("Pornstars", "%s/pornstars" % self.baseurl, default_cover))
+                       self.genreliste.insert(0, ("Longest", "%s/?order=longest" % self.baseurl, default_cover))
+                       self.genreliste.insert(0, ("Featured", "%s/?order=featured" % self.baseurl, default_cover))
+                       self.genreliste.insert(0, ("Top Rated", "%s/?order=top-rated" % self.baseurl, default_cover))
+                       self.genreliste.insert(0, ("Most Viewed", "%s/?order=most-popular" % self.baseurl, default_cover))
+                       self.genreliste.insert(0, ("Newest", "%s/?order=newest" % self.baseurl, default_cover))
                self.genreliste.insert(0, ("--- Search ---", "callSuchen", default_cover))
                self.ml.setList(map(self._defaultlistcenter, self.genreliste))
                self.keyLocked = False
@@ -128,12 +181,26 @@ class pinflixGenreScreen(MPScreen):
                        Link = self['liste'].getCurrent()[0][1]
                        self.session.open(pinflixFilmScreen, Link, Name, self.portal, self.baseurl)
 
+       def keyScope(self):
+               if self.keyLocked:
+                       return
+               if not self.mode == "gotporn":
+                       return
+               self.genreliste = []
+               if self.scope == 0:
+                       self.scope = 1
+               elif self.scope == 1:
+                       self.scope = 2
+               else:
+                       self.scope = 0
+               self.layoutFinished()
+
        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(pinflixFilmScreen, Link, Name, self.portal, self.baseurl)
+                       self.session.open(pinflixFilmScreen, Link, Name, self.portal, self.baseurl, Scope=self.scopeval[self.scope])
 
 class pinflixSitesScreen(MPScreen, ThumbsHelper):
 
@@ -168,8 +235,12 @@ class pinflixSitesScreen(MPScreen, ThumbsHelper):
                self['Page'] = Label(_("Page:"))
                self.keyLocked = True
                self.page = 1
-               self.sort = 'most-popular'
-               self.sorttext = 'Most Popular'
+               if self.portal == "GotPorn.com":
+                       self.sort = ''
+                       self.sorttext = 'Newest Videos'
+               else:
+                       self.sort = 'most-popular'
+                       self.sorttext = 'Most Viewed'
 
                self.filmliste = []
                self.ml = MenuList([], enableWrapAround=True, content=eListboxPythonMultiContent)
@@ -181,31 +252,41 @@ class pinflixSitesScreen(MPScreen, ThumbsHelper):
                self.keyLocked = True
                self['name'].setText(_('Please wait...'))
                self.filmliste = []
-               url = "%s?order=%s&page=%s" % (self.Link, self.sort, str(self.page))
+               if self.portal == "GotPorn.com":
+                       url = "%s/%s?page=%s" % (self.Link, self.sort, str(self.page))
+               else:
+                       url = "%s?order=%s&page=%s" % (self.Link, self.sort, str(self.page))
                twAgentGetPage(url, agent=agent, cookieJar=cookies).addCallback(self.loadData).addErrback(self.dataError)
 
        def loadData(self, data):
                self.getLastPage(data, '(?:paging|pagination)">(.*?)(?:</ul>|</div>)')
-               Movies = re.findall('class="(?:pfx-pornstar|pornstar)">\s{0,10}<a href="(.*?)".*?data-original="(.*?)".*?alt="(.*?)"', data, re.S)
+               Movies = re.findall('class="channel-card.*?img\ssrc="(.*?)"\salt="(.*?)".*?href="(.*?)"', data, re.S)
                if Movies:
-                       for (Url, Image, Title) in Movies:
-                               Url = self.baseurl + Url
+                       for (Image, Title, Url) in Movies:
+                               if Image.startswith('//'):
+                                       Image = "https:" + Image
                                self.filmliste.append((decodeHtml(Title), Url, Image))
                else:
-                       Movies = re.findall('article\sclass="small-thumb"\s{0,2}>\s{0,10}<a href="(.*?)".*?alt="(.*?)".*?src="(.*?)"', data, re.S)
+                       Movies = re.findall('class="(?:pfx-pornstar|pornstar)">\s{0,10}<a href="(.*?)".*?data-original="(.*?)".*?alt="(.*?)"', data, re.S)
                        if Movies:
-                               for (Url, Title, Image) in Movies:
+                               for (Url, Image, Title) in Movies:
+                                       Url = self.baseurl + Url
                                        self.filmliste.append((decodeHtml(Title), Url, Image))
                        else:
-                               parse = re.search('class="jsFilter(.*?)class="page-footer"', data, re.S)
-                               Movies = re.findall('<li><a href="(.*?)".*?img\ssrc="(.*?)"\salt="(.*?)"', parse.group(1), re.S)
+                               Movies = re.findall('article\sclass="small-thumb"\s{0,2}>\s{0,10}<a href="(.*?)".*?alt="(.*?)".*?src="(.*?)"', data, re.S)
                                if Movies:
-                                       for (Url, Image, Title) in Movies:
-                                               if not Url.startswith('http'):
-                                                       Url = self.baseurl + Url
-                                               if "placeholder" in Image:
-                                                       Image = default_cover
+                                       for (Url, Title, Image) in Movies:
                                                self.filmliste.append((decodeHtml(Title), Url, Image))
+                               else:
+                                       parse = re.search('class="jsFilter(.*?)class="page-footer"', data, re.S)
+                                       Movies = re.findall('<li><a href="(.*?)".*?img\ssrc="(.*?)"\salt="(.*?)"', parse.group(1), re.S)
+                                       if Movies:
+                                               for (Url, Image, Title) in Movies:
+                                                       if not Url.startswith('http'):
+                                                               Url = self.baseurl + Url
+                                                       if "placeholder" in Image:
+                                                               Image = default_cover
+                                                       self.filmliste.append((decodeHtml(Title), Url, Image))
                self.ml.setList(map(self._defaultlistleft, self.filmliste))
                self.ml.moveToIndex(0)
                self.th_ThumbsQuery(self.filmliste, 0, 1, 2, None, None, self.page, self.lastpage)
@@ -216,9 +297,12 @@ class pinflixSitesScreen(MPScreen, ThumbsHelper):
                if self.keyLocked:
                        return
                if self.Name == 'Pornstars':
-                       rangelist = [['Most Popular', 'most-popular'], ['Most Videos','video-count'], ['Alphabetical','alphabetical']]
+                       rangelist = [['Most Viewed', 'most-popular'], ['Most Videos','video-count'], ['Alphabetical','alphabetical']]
                else:
-                       rangelist = [['Most Popular', 'most-popular'], ['Most Videos','video-count'], ['Alphabetical','alphabetical'], ['Newest','newest']]
+                       if self.portal == "GotPorn.com":
+                               rangelist = [['Most Videos','videos-num'], ['Alphabetical','abc'], ['Newest Videos','']]
+                       else:
+                               rangelist = [['Most Viewed', 'most-popular'], ['Most Videos','video-count'], ['Alphabetical','alphabetical'], ['Newest','newest']]
                self.session.openWithCallback(self.keySortAction, ChoiceBoxExt, title=_('Select Action'), list = rangelist)
 
        def keySortAction(self, result):
@@ -243,11 +327,12 @@ class pinflixSitesScreen(MPScreen, ThumbsHelper):
 
 class pinflixFilmScreen(MPScreen, ThumbsHelper):
 
-       def __init__(self, session, Link, Name, portal, baseurl):
+       def __init__(self, session, Link, Name, portal, baseurl, Scope=''):
                self.Link = Link
                self.Name = Name
                self.portal = portal
                self.baseurl = baseurl
+               self.Scope = Scope
 
                global default_cover
                if self.portal == "Pinflix.com":
@@ -256,6 +341,8 @@ class pinflixFilmScreen(MPScreen, ThumbsHelper):
                        default_cover = "file://%s/pornhd.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
                elif self.portal == "Pornrox.com":
                        default_cover = "file://%s/pornrox.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
+               elif self.portal == "GotPorn.com":
+                       default_cover = "file://%s/gotporn.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
 
                MPScreen.__init__(self, session, skin='MP_Plugin', default_cover=default_cover)
                ThumbsHelper.__init__(self)
@@ -288,7 +375,10 @@ class pinflixFilmScreen(MPScreen, ThumbsHelper):
                        self.sort = 'mostrelevant'
                        self.sorttext = 'Most Relevant'
                else:
-                       self.sort = 'newest'
+                       if self.portal == "GotPorn.com":
+                               self.sort = ''
+                       else:
+                               self.sort = 'newest'
                        self.sorttext = 'Newest'
 
                self.filmliste = []
@@ -302,13 +392,19 @@ class pinflixFilmScreen(MPScreen, ThumbsHelper):
                self['name'].setText(_('Please wait...'))
                self.filmliste = []
                if re.match(".*?Search", self.Name):
-                       url = "%s/search?search=%s&order=%s&page=%s" % (self.baseurl, self.Link, self.sort, str(self.page))
+                       if self.portal == "GotPorn.com":
+                               url = "%s/%sresults?sort=%s&search_query=%s&page=%s" % (self.baseurl, self.Scope, self.sort, self.Link, str(self.page))
+                       else:
+                               url = "%s/search?search=%s&order=%s&page=%s" % (self.baseurl, self.Link, self.sort, str(self.page))
                else:
                        sortpart = re.findall('^(.*?)\?order=(.*?)$', self.Link)
                        if sortpart:
                                self.Link = sortpart[0][0]
                                self.sort = sortpart[0][1]
-                       url = "%s?order=%s&page=%s" % (self.Link, self.sort, str(self.page))
+                       if self.portal == "GotPorn.com":
+                               url = "%s%s?page=%s" % (self.Link, self.sort, str(self.page))
+                       else:
+                               url = "%s?order=%s&page=%s" % (self.Link, self.sort, str(self.page))
                twAgentGetPage(url, agent=agent, cookieJar=cookies).addCallback(self.loadData).addErrback(self.dataError)
 
        def loadData(self, data):
@@ -316,7 +412,7 @@ class pinflixFilmScreen(MPScreen, ThumbsHelper):
                        self.getLastPage(data, '', 'data-last-page="(\d+)"')
                else:
                        self.getLastPage(data, '(?:paging|pagination)">(.*?)(?:</ul>|</div>)')
-               Movies = re.findall('class="thumb(?: videoThumb|)(?: popTrigger|)"\shref="(/videos.*?)"><img\salt="(.*?)"\s+src="(.*?)"(\sclass="(?:pfx-|)lazy"\sdata-original=".*?"|).*?class="meta transition"><time>(.*?)</time', data, re.S)
+               Movies = re.findall('class="thumb(?: videoThumb|)(?: popTrigger|)"\shref="(/videos.*?)"><img\salt="(.*?)"\s+src="(.*?)"(\sclass="(?:pfx-|)lazy"\sdata-original=".*?"|).*?class="meta transition"><time>(.*?)</time', data, re.S|re.I)
                if Movies:
                        for (Url, Title, Image, BackupImage, Runtime) in Movies:
                                Url = self.baseurl + Url
@@ -326,9 +422,26 @@ class pinflixFilmScreen(MPScreen, ThumbsHelper):
                                self.filmliste.append((decodeHtml(Title).strip(), Url, Image, Runtime))
                else:
                        Movies = re.findall('article\sclass="video-item.*?href="(.*?/videos.*?)".*?<img\salt="(.*?)".*?src="(.*?)".*?class="meta">.*?<time.*?>(.*?)</time', data, re.S)
-                       for (Url, Title, Image, Runtime) in Movies:
-                               Image = Image.replace('.webp','.jpg')
-                               self.filmliste.append((decodeHtml(Title).strip(), Url, Image, Runtime))
+                       if Movies:
+                               for (Url, Title, Image, Runtime) in Movies:
+                                       Image = Image.replace('.webp','.jpg')
+                                       self.filmliste.append((decodeHtml(Title).strip(), Url, Image, Runtime))
+                       else:
+                               Movies = re.findall('class="video-item.*?href="(.*?)"\sdata-title="(.*?)">.*?class="duration">(.*?)</span.*?class="video-thumb-img(.*?)">', data, re.S|re.I)
+                               if Movies:
+                                       for (Url, Title, Runtime, Imagedata) in Movies:
+                                               Image = re.findall('src=[\'|\"](.*?)[\'|\"]', Imagedata, re.S)
+                                               if not "placeholder" in Image[0]:
+                                                       Image = Image[0]
+                                               else:
+                                                       Image = re.findall('data-src=[\'|\"](.*?)[\'|\"]', Imagedata, re.S)
+                                                       if Image:
+                                                               Image = Image[0]
+                                                       else:
+                                                               Image = default_cover
+                                               if Image.startswith('//'):
+                                                       Image = 'https:' + Image
+                                               self.filmliste.append((decodeHtml(Title).strip(), Url, Image, Runtime.strip()))
                self.ml.setList(map(self._defaultlistleft, self.filmliste))
                self.ml.moveToIndex(0)
                self.th_ThumbsQuery(self.filmliste, 0, 1, 2, None, None, self.page, self.lastpage, mode=1)
@@ -347,9 +460,15 @@ class pinflixFilmScreen(MPScreen, ThumbsHelper):
                if self.keyLocked:
                        return
                if re.match(".*?Search", self.Name):
-                       rangelist = [['Newest', 'newest'], ['Most Relevant','mostrelevant'], ['Featured','featured'], ['Most Popular','most-popular'], ['Top Rated','top-rated'], ['Longest','longest']]
+                       if self.portal == "GotPorn.com":
+                               rangelist = [['Newest', 'newest'], ['Featured','featured'], ['Recommended','recommended'], ['Most Viewed','most-viewed'], ['Top Rated','top-rated'], ['Longest','longest']]
+                       else:
+                               rangelist = [['Newest', 'newest'], ['Most Relevant','mostrelevant'], ['Featured','featured'], ['Most Viewed','most-popular'], ['Top Rated','top-rated'], ['Longest','longest']]
                else:
-                       rangelist = [['Newest', 'newest'], ['Featured','featured'], ['Most Popular','most-popular'], ['Top Rated','top-rated'], ['Longest','longest']]
+                       if self.portal == "GotPorn.com":
+                               rangelist = [['Newest', ''], ['Featured','featured'], ['Recommended','recommended'], ['Most Viewed','most-viewed'], ['Top Rated','top-rated'], ['Longest','longest']]
+                       else:
+                               rangelist = [['Newest', 'newest'], ['Featured','featured'], ['Most Viewed','most-popular'], ['Top Rated','top-rated'], ['Longest','longest']]
                self.session.openWithCallback(self.keySortAction, ChoiceBoxExt, title=_('Select Action'), list = rangelist)
 
        def keySortAction(self, result):
@@ -373,7 +492,7 @@ class pinflixFilmScreen(MPScreen, ThumbsHelper):
                        tw_agent_hlp = TwAgentHelper(cookieJar=cookies)
                        tw_agent_hlp.getRedirectedUrl(url).addCallback(self.getStream).addErrback(self.dataError)
                else:
-                       videoUrl = re.findall('source\ssrc="(.*?)".*?label=\'\d+p\'', data, re.S)
+                       videoUrl = re.findall('source\ssrc="(.*?)".*?(?:label=\'\d+p\'|type=\'video/mp4\')', data, re.S)
                        if videoUrl:
                                self.keyLocked = False
                                url = videoUrl[0].replace('\/','/')
diff --git a/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/porn/porngo.py b/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/porn/porngo.py
new file mode 100644 (file)
index 0000000..c373836
--- /dev/null
@@ -0,0 +1,297 @@
+# -*- coding: utf-8 -*-
+#######################################################################################################
+#
+#    MediaPortal for Dreambox OS
+#
+#    Coded by MediaPortal Team (c) 2013-2019
+#
+#  This plugin is open source but it is NOT free software.
+#
+#  This plugin may only be distributed to and executed on hardware which
+#  is licensed by Dream Property GmbH. This includes commercial distribution.
+#  In other words:
+#  It's NOT allowed to distribute any parts of this plugin or its source code in ANY way
+#  to hardware which is NOT licensed by Dream Property GmbH.
+#  It's NOT allowed to execute this plugin and its source code or even parts of it in ANY way
+#  on hardware which is NOT licensed by Dream Property GmbH.
+#
+#  This applies to the source code as a whole as well as to parts of it, unless explicitely
+#  stated otherwise.
+#
+#  If you want to use or modify the code or parts of it, permission from the authors is necessary.
+#  You have to keep OUR license and inform us about any modification, but it may NOT be distributed
+#  other than under the conditions noted above.
+#
+#  As an exception regarding modifcations, you are NOT permitted to remove
+#  any copy protections implemented in this plugin or change them for means of disabling
+#  or working around the copy protections, unless the change has been explicitly permitted
+#  by the original authors. Also decompiling and modification of the closed source
+#  parts is NOT permitted.
+#
+#  Advertising with this plugin is NOT allowed.
+#
+#  For other uses, permission from the authors is necessary.
+#
+#######################################################################################################
+
+from Plugins.Extensions.MediaPortal.plugin import _
+from Plugins.Extensions.MediaPortal.resources.imports import *
+
+agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36'
+json_headers = {
+       'Accept':'application/json',
+       'Accept-Language':'de,en-US;q=0.7,en;q=0.3',
+       'X-Requested-With':'XMLHttpRequest',
+       'Content-Type':'application/x-www-form-urlencoded',
+       }
+default_cover = "file://%s/porngo.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
+cookies = CookieJar()
+
+class porngoGenreScreen(MPScreen):
+
+       def __init__(self, session, url='', name='Genre'):
+               self.url = url
+               self.name = name
+               MPScreen.__init__(self, session, skin='MP_Plugin', default_cover=default_cover)
+
+               self["actions"] = ActionMap(["MP_Actions"], {
+                       "ok" : self.keyOK,
+                       "0" : self.closeAll,
+                       "up" : self.keyUp,
+                       "down" : self.keyDown,
+                       "right" : self.keyRight,
+                       "left" : self.keyLeft,
+                       "cancel" : self.keyCancel,
+                       "nextBouquet" : self.keyPageUp,
+                       "prevBouquet" : self.keyPageDown,
+               }, -1)
+
+               self['title'] = Label("PornGO.com")
+               self['ContentTitle'] = Label(self.name+":")
+               if self.url:
+                       self['F2'] = Label(_("Page"))
+                       self['Page'] = Label(_("Page:"))
+               self.keyLocked = True
+               self.page = 1
+               self.lastpage = 1
+
+               self.suchString = ''
+
+               self.cat1 = []
+               self.cat2 = []
+               self.filmliste = []
+               self.ml = MenuList([], enableWrapAround=True, content=eListboxPythonMultiContent)
+               self['liste'] = self.ml
+
+               self.onLayoutFinish.append(self.loadPage)
+
+       def loadPage(self):
+               self.filmliste = []
+               self.keyLocked = True
+               if self.url:
+                       url = self.url + str(self.page) + "/"
+               else:
+                       url = "https://www.porngo.com/categories/"
+               twAgentGetPage(url, agent=agent, cookieJar=cookies).addCallback(self.genreData).addErrback(self.dataError)
+
+       def genreData(self, data):
+               if self.url:
+                       self.getLastPage(data, 'class="pagination">(.*?)id="clck_ntv"', '.*(?:\/|">)(\d+)')
+                       pornstars = re.findall('class="thumb">.*?href="(.*?)".*?title="(.*?)".*?<img\ssrc="(.*?)"', data, re.S)
+                       if pornstars:
+                               for (Url, Title, Image) in pornstars:
+                                       self.filmliste.append((Title, Url, Image))
+                       self.ml.setList(map(self._defaultlistleft, self.filmliste))
+               else:
+                       self.filmliste.insert(0, ("Pornstars", "https://www.porngo.com/models/alphabetical/", default_cover))
+                       self.filmliste.insert(0, ("Top Rated", "https://www.porngo.com/top-rated/", default_cover))
+                       self.filmliste.insert(0, ("Most Viewed", "https://www.porngo.com/most-popular/", default_cover))
+                       self.filmliste.insert(0, ("Newest", "https://www.porngo.com/latest-updates/", default_cover))
+                       self.filmliste.insert(0, ("--- Search ---", "callSuchen", default_cover))
+                       Cats1 = re.findall('<a class="nav-menu__link" href="(.*?)">(.*?)</a>', data, re.S)
+                       if Cats1:
+                               for (Url, Title) in Cats1:
+                                       Url = "https://www.porngo.com" + Url
+                                       self.cat1.append((Title, Url, default_cover))
+                               self.cat1.sort()
+                       parse = re.search('class="letter-section">(.*?)class="letter">#', data, re.S)
+                       if parse:
+                               Cats2 = re.findall('class="letter-block__item">.*?href="(.*?)".*?<span>(.*?)</span>', parse.group(1), re.S)
+                               if Cats2:
+                                       for (Url, Title) in Cats2:
+                                               self.cat2.append((Title, Url, default_cover))
+                                       self.cat2.sort()
+                       if len(self.cat1) > 0:
+                               self.filmliste.append((400 * "—", None, default_cover))
+                               self.filmliste.extend(self.cat1)
+                       if len(self.cat2) > 0:
+                               self.filmliste.append((400 * "—", None, default_cover))
+                               self.filmliste.extend(self.cat2)
+                       self.ml.setList(map(self._defaultlistcenter, self.filmliste))
+               self.ml.moveToIndex(0)
+               self.keyLocked = False
+               self.showInfos()
+
+       def showInfos(self):
+               cover = self['liste'].getCurrent()[0][2]
+               CoverHelper(self['coverArt']).getCover(cover)
+
+       def keyOK(self):
+               if self.keyLocked:
+                       return
+               Name = self['liste'].getCurrent()[0][0]
+               Link = self['liste'].getCurrent()[0][1]
+               if Name == "--- Search ---":
+                       self.suchen(suggest_func=self.getSuggestions)
+               elif Name == "Pornstars":
+                       self.session.open(porngoGenreScreen, Link, Name)
+               elif Link:
+                       self.session.open(porngoFilmScreen, 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(porngoFilmScreen, Link, Name)
+
+       def getSuggestions(self, text, max_res):
+               url = "https://www.porngo.com/search_suggestion.php?query=%s" % urllib.quote_plus(text)
+               d = twAgentGetPage(url, agent=agent, headers=json_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["suggestions"]:
+                               li = item['value']
+                               list.append(str(li))
+                               max_res -= 1
+                               if not max_res: break
+               elif err:
+                       printl(str(suggestions),self,'E')
+               return list
+
+class porngoFilmScreen(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("PornGO.com")
+               self['ContentTitle'] = Label("Genre: %s" % self.Name)
+               self['F2'] = Label(_("Page"))
+
+               self['Page'] = Label(_("Page:"))
+               self.keyLocked = True
+               self.page = 1
+               self.lastpage = 1
+
+               self.filmliste = []
+               self.ml = MenuList([], enableWrapAround=True, content=eListboxPythonMultiContent)
+               self['liste'] = self.ml
+
+               self.onLayoutFinish.append(self.loadPage)
+
+       def loadPage(self):
+               self.keyLocked = True
+               self['name'].setText(_('Please wait...'))
+               self.filmliste = []
+               if re.match(".*Search", self.Name):
+                       url = "https://www.porngo.com/search/%s/%s/" % (self.Link, str(self.page))
+               else:
+                       url = "%s%s/" % (self.Link, str(self.page))
+               twAgentGetPage(url, agent=agent, cookieJar=cookies).addCallback(self.genreData).addErrback(self.dataError)
+
+       def genreData(self, data):
+               self.getLastPage(data, 'class="pagination">(.*?)id="clck_ntv"', '.*(?:\/|">)(\d+)')
+               Movies = re.findall('class="thumb item">.*?href="(.*?)".*?<img\ssrc="(.*?)".*?duration">(.*?)</span>.*?class="thumb__title">(.*?)</div.*?class="thumb__text">(\d+.)\sviews</span>', data, re.S)
+               if Movies:
+                       for (Url, Image, Runtime, Title, Views) in Movies:
+                               Title = stripAllTags(Title).strip()
+                               self.filmliste.append((decodeHtml(Title), Url, Image, Runtime, Views))
+               if len(self.filmliste) == 0:
+                       self.filmliste.append((_('No videos found!'), None, None, '', ''))
+               self.ml.setList(map(self._defaultlistleft, self.filmliste))
+               self.ml.moveToIndex(0)
+               self.keyLocked = False
+               self.th_ThumbsQuery(self.filmliste, 0, 1, 2, None, None, self.page, self.lastpage, mode=1)
+               self.showInfos()
+
+       def showInfos(self):
+               title = self['liste'].getCurrent()[0][0]
+               url = self['liste'].getCurrent()[0][1]
+               pic = self['liste'].getCurrent()[0][2]
+               runtime = self['liste'].getCurrent()[0][3]
+               views = self['liste'].getCurrent()[0][4]
+               self['name'].setText(title)
+               self['handlung'].setText("Runtime: %s\nViews: %s" % (runtime, views))
+               CoverHelper(self['coverArt']).getCover(pic)
+
+       def keyOK(self):
+               if self.keyLocked:
+                       return
+               Link = self['liste'].getCurrent()[0][1]
+               if Link:
+                       twAgentGetPage(Link, cookieJar=cookies, agent=agent).addCallback(self.parseVideo).addErrback(self.dataError)
+
+       def parseVideo(self, data):
+               url = None
+               streams = re.findall('class="video-links__link"\shref="(https://www.porngo.com/get_file.*?)".*?>(\d+k{0,1})', data, re.S)
+               if streams:
+                       import requests
+                       max = 0
+                       def url_ok(url):
+                               r = requests.head(url, allow_redirects=True)
+                               return r.status_code
+                       for (stream, res) in reversed(streams):
+                               res = res.replace('4k','2160')
+                               if int(res) <= 720:
+                                       if int(res) > max:
+                                               check = url_ok(stream)
+                                               if check == 200:
+                                                       url = stream
+                                                       max = int(res)
+                                       else:
+                                               break
+                               #elif mp_globals.model in ["one"]:
+                               #       if int(res) > max:
+                               #               check = url_ok(stream)
+                               #               if check == 200:
+                               #                       url = stream
+                               #                       max = int(res)
+                               #       else:
+                               #               break
+               else:
+                       streams = re.findall('<source src="(.*?)"', data, re.S)
+                       if streams:
+                               url = streams[-1]
+               if url:
+                       tw_agent_hlp = TwAgentHelper(cookieJar=cookies)
+                       tw_agent_hlp.getRedirectedUrl(url).addCallback(self.getStream).addErrback(self.dataError)
+
+       def getStream(self, url):
+               if url.startswith('//'):
+                       url = 'https:' + url
+               Title = self['liste'].getCurrent()[0][0]
+               mp_globals.player_agent = agent
+               self.session.open(SimplePlayer, [(Title, url)], showPlaylist=False, ltype='porngo')
\ No newline at end of file
index 32f61a4..9cd4198 100644 (file)
@@ -37,6 +37,9 @@
 from Plugins.Extensions.MediaPortal.plugin import _
 from Plugins.Extensions.MediaPortal.resources.imports import *
 
+agent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'
+cookies = CookieJar()
+
 class tubewolfGenreScreen(MPScreen):
 
        def __init__(self, session, mode):
@@ -83,13 +86,14 @@ class tubewolfGenreScreen(MPScreen):
                self.filmliste = []
                self['name'].setText(_('Please wait...'))
                url = self.baseurl
-               getPage(url).addCallback(self.parseData).addErrback(self.dataError)
+               twAgentGetPage(url, agent=agent, cookieJar=cookies).addCallback(self.parseData).addErrback(self.dataError)
 
        def parseData(self, data):
                parse = re.search('Categories<(.*?)class="(?:wrap|all|link_all_cat)"', data, re.S)
                cat = re.findall('a\shref="(.*?)"\stitle="(.*?)"', parse.group(1), re.S)
                if cat:
                        for (Url, Title) in cat:
+                               Title = upperString(Title)
                                self.filmliste.append((decodeHtml(Title), Url))
                        self.filmliste.sort()
                        self.filmliste.insert(0, ("Top Rated", "%s/top-rated" % self.baseurl, default_cover))
@@ -173,7 +177,7 @@ class tubewolfListScreen(MPScreen, ThumbsHelper):
                        url = "%s/search/%s/?q=%s" % (self.baseurl, self.page, self.Link)
                else:
                        url = self.Link + "/" + str(self.page) + "/"
-               getPage(url).addCallback(self.parseData).addErrback(self.dataError)
+               twAgentGetPage(url, agent=agent, cookieJar=cookies).addCallback(self.parseData).addErrback(self.dataError)
 
        def parseData(self, data):
                self.getLastPage(data, '"pagination(?:-list|)"(.*?)</ul>')
@@ -217,10 +221,28 @@ class tubewolfListScreen(MPScreen, ThumbsHelper):
                if self.keyLocked:
                        return
                Link = self['liste'].getCurrent()[0][1]
-               getPage(Link).addCallback(self.getStreamData).addErrback(self.dataError)
+               twAgentGetPage(Link, agent=agent, cookieJar=cookies).addCallback(self.getStreamData).addErrback(self.dataError)
 
        def getStreamData(self, data):
-               title = self['liste'].getCurrent()[0][0]
-               raw = re.findall('source src="(.*?)"', data, re.S)
+               raw = re.findall('source\ssrc="(.*?)".*?title="(\d+|LQ|HQ)', data, re.S)
                if raw:
-                       self.session.open(SimplePlayer, [(title, raw[-1])], showPlaylist=False, ltype='tubewolf')
\ No newline at end of file
+                       maxres = 0
+                       for vid in raw:
+                                       if int(vid[1].replace('HQ','720').replace('LQ','360')) > maxres:
+                                               url = vid[0]
+                                               maxres = int(vid[1].replace('HQ','720').replace('LQ','360'))
+                       tw_agent_hlp = TwAgentHelper(cookieJar=cookies)
+                       tw_agent_hlp.getRedirectedUrl(url).addCallback(self.getStream).addErrback(self.dataError)
+               else:
+                       raw = re.findall('<source src="(.*?)"', data, re.S)
+                       if raw:
+                               url = raw[0]
+                               tw_agent_hlp = TwAgentHelper(cookieJar=cookies)
+                               tw_agent_hlp.getRedirectedUrl(url).addCallback(self.getStream).addErrback(self.dataError)
+
+       def getStream(self, url):
+               if url.startswith('//'):
+                       url = 'https:' + url
+               title = self['liste'].getCurrent()[0][0]
+               mp_globals.player_agent = agent
+               self.session.open(SimplePlayer, [(title, url)], showPlaylist=False, ltype='tubewolf')
\ No newline at end of file
index 19f03fd..ac6cc8d 100644 (file)
@@ -104,7 +104,7 @@ class xnxxGenreScreen(MPScreen):
                else:
                        parse = re.search('id="tags">(.*?)$', data, re.S)
                        if parse:
-                               Cats = re.findall('<li><a href="(/tags/.*?)">(.*?)</a><strong>(.*?)</strong></li>', parse.group(1), re.S)
+                               Cats = re.findall('<li><a href="(/search/.*?)">(.*?)</a><strong>(.*?)</strong></li>', parse.group(1), re.S)
                                if Cats:
                                        for (Url, Title, Count) in Cats:
                                                Count = int(Count.replace(',',''))
@@ -113,7 +113,7 @@ class xnxxGenreScreen(MPScreen):
                                                        self.filmliste.append((upperString(Title), Url, default_cover, False))
                        self.filmliste.sort()
                        self.filmliste.insert(0, ("Best Of", "https://www.xnxx.com/best", default_cover, False))
-                       self.filmliste.insert(0, ("Most Popular", "https://www.xnxx.com/home/$$PAGE$$", default_cover, False))
+                       self.filmliste.insert(0, ("Most Popular", "https://www.xnxx.com/todays-selection/$$PAGE$$", default_cover, False))
                        self.filmliste.insert(0, ("Most Viewed", "https://www.xnxx.com/hits/$$AGE$$$$PAGE$$", default_cover, True))
                        self.filmliste.insert(0, ("--- Search ---", "callSuchen", default_cover, True))
                self.ml.setList(map(self._defaultlistcenter, self.filmliste))
@@ -232,8 +232,10 @@ class xnxxFilmScreen(MPScreen, ThumbsHelper):
                        if re.match(".*Search", self.Name):
                                url = "https://www.xnxx.com/search/%s%s/%s/" % (self.age, self.Link, str(self.page-1))
                        else:
-                               url = self.Link.replace('$$PAGE$$', str(self.page-1)).replace('$$AGE$$', self.age)
-                       print url
+                               if self.page == 1 and self.Name == "Most Popular":
+                                       url = self.Link.replace('$$PAGE$$','')
+                               else:
+                                       url = self.Link.replace('$$PAGE$$', str(self.page-1)).replace('$$AGE$$', self.age)
                        twAgentGetPage(url, agent=agent, headers=headers).addCallback(self.genreData).addErrback(self.dataError)
 
        def genreData(self, data):
@@ -254,7 +256,7 @@ class xnxxFilmScreen(MPScreen, ThumbsHelper):
                                        self.filmliste.append((decodeHtml(Title), Url, Image, Runtime, Views, Rating))
                else:
                        self.getLastPage(data, 'class="pagination(.*?)</div>')
-                       Movies = re.findall('id="video_\d+"\sclass="thumb-block\s{0,1}">.*?class="thumb"><a href="(.*?)"><img src=".*?data-src="(.*?)".*?<a href.*?title="(.*?)">.*?</a></p><p class="metadata">(.*?)</div>', data, re.S)
+                       Movies = re.findall('id="video_\d+"\sdata-id="\d+"\sclass="thumb-block\s{0,1}">.*?class="thumb"><a href="(.*?)"><img src=".*?data-src="(.*?)".*?<a href.*?title="(.*?)">.*?</a></p><p class="metadata">(.*?)</div>', data, re.S)
                        if Movies:
                                for (Url, Image, Title, Meta) in Movies:
                                        Metadata = re.findall('<span class="right">(?:\s(.*?)\s<span class="icon-f icf-eye"></span>|)(?:<span class="superfluous">(.*?)</span>|)</span>\s(.*?)\s<span class="video-hd">', Meta, re.S)
index ab3f2e8..f1597d3 100644 (file)
@@ -105,11 +105,13 @@ class xvideosGenreScreen(MPScreen):
 
        def genreData(self, data):
                if self.Name:
-                       Cats = re.findall('<li(?: class="hidden"|)><a href="(.*?)" class="btn btn-default.*?">(.*?)</a></li>', data, re.S)
-                       if Cats:
-                               for (Url, Title) in Cats:
-                                       Url = "https://www.xvideos.com" + Url + "/$$PAGE$$"
-                                       self.filmliste.append((Title, Url, default_cover, False))
+                       parse = re.search('id="main">(.*?)$', data, re.S)
+                       if parse:
+                               Cats = re.findall('<li(?: class="hidden"|)><a href="(.*?)" class="btn btn-default.*?">(.*?)</a></li>', parse.group(1), re.S)
+                               if Cats:
+                                       for (Url, Title) in Cats:
+                                               Url = "https://www.xvideos.com" + Url + "/$$PAGE$$"
+                                               self.filmliste.append((Title, Url, default_cover, False))
                else:
                        Cats = re.findall('class="dyn.*?href="/c/(.*?)".*?>(.*?)</a', data, re.S)
                        if Cats:
@@ -147,8 +149,6 @@ class xvideosGenreScreen(MPScreen):
 
        def showInfos(self):
                url = self['liste'].getCurrent()[0][1]
-               print "###"
-               print url
                cover = self['liste'].getCurrent()[0][2]
                CoverHelper(self['coverArt']).getCover(cover)
 
diff --git a/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/porn/xxxdan.py b/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/porn/xxxdan.py
new file mode 100644 (file)
index 0000000..35e1fff
--- /dev/null
@@ -0,0 +1,259 @@
+# -*- coding: utf-8 -*-
+#######################################################################################################
+#
+#    MediaPortal for Dreambox OS
+#
+#    Coded by MediaPortal Team (c) 2013-2019
+#
+#  This plugin is open source but it is NOT free software.
+#
+#  This plugin may only be distributed to and executed on hardware which
+#  is licensed by Dream Property GmbH. This includes commercial distribution.
+#  In other words:
+#  It's NOT allowed to distribute any parts of this plugin or its source code in ANY way
+#  to hardware which is NOT licensed by Dream Property GmbH.
+#  It's NOT allowed to execute this plugin and its source code or even parts of it in ANY way
+#  on hardware which is NOT licensed by Dream Property GmbH.
+#
+#  This applies to the source code as a whole as well as to parts of it, unless explicitely
+#  stated otherwise.
+#
+#  If you want to use or modify the code or parts of it, permission from the authors is necessary.
+#  You have to keep OUR license and inform us about any modification, but it may NOT be distributed
+#  other than under the conditions noted above.
+#
+#  As an exception regarding modifcations, you are NOT permitted to remove
+#  any copy protections implemented in this plugin or change them for means of disabling
+#  or working around the copy protections, unless the change has been explicitly permitted
+#  by the original authors. Also decompiling and modification of the closed source
+#  parts is NOT permitted.
+#
+#  Advertising with this plugin is NOT allowed.
+#
+#  For other uses, permission from the authors is necessary.
+#
+#######################################################################################################
+
+from Plugins.Extensions.MediaPortal.plugin import _
+from Plugins.Extensions.MediaPortal.resources.imports import *
+from Plugins.Extensions.MediaPortal.resources.keyboardext import VirtualKeyBoardExt
+from Plugins.Extensions.MediaPortal.resources.choiceboxext import ChoiceBoxExt
+
+agent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'
+default_cover = None
+cookies = CookieJar()
+
+class xxxdanGenreScreen(MPScreen):
+
+       def __init__(self, session, mode):
+               self.mode = mode
+
+               global default_cover
+               if self.mode == "xxxdan":
+                       self.portal = "XXXDan.com"
+                       self.baseurl = "https://xxxdan.com"
+                       default_cover = "file://%s/xxxdan.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
+               elif self.mode == "wankgalore":
+                       self.portal = "WankGalore.com"
+                       self.baseurl = "https://wankgalore.com"
+                       default_cover = "file://%s/wankgalore.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
+               elif self.mode == "jizzbunker":
+                       self.portal = "JizzBunker.com"
+                       self.baseurl = "https://jizzbunker.com"
+                       default_cover = "file://%s/jizzbunker.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.keyLocked = True
+               url = "%s/channels" % self.baseurl
+               twAgentGetPage(url, agent=agent, cookieJar=cookies).addCallback(self.genreData).addErrback(self.dataError)
+
+       def genreData(self, data):
+               Cats = re.findall('<figure>.*?href="(.*?)".*?img\sclass="lazy"\sdata-original="(.*?)"\salt="(.*?)"', data, re.S)
+               if Cats:
+                       for (Url, Image, Title) in Cats:
+                               Title = upperString(Title)
+                               self.genreliste.append((Title, Url, Image))
+               self.genreliste.sort()
+               self.genreliste.insert(0, ("Longtest", "%s/longest" % self.baseurl, default_cover))
+               self.genreliste.insert(0, ("Trending", "%s/trending" % self.baseurl, default_cover))
+               self.genreliste.insert(0, ("Most Popular", "%s/popular" % self.baseurl, default_cover))
+               self.genreliste.insert(0, ("Newest", "%s/newest" % self.baseurl, default_cover))
+               self.genreliste.insert(0, ("--- Search ---", "callSuchen", default_cover))
+               self.ml.setList(map(self._defaultlistcenter, self.genreliste))
+               self.keyLocked = False
+               self.showInfos()
+
+       def showInfos(self):
+               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(xxxdanFilmScreen, 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 = urllib.quote(self.suchString).replace(' ', '+')
+                       self.session.open(xxxdanFilmScreen, Link, Name, self.portal, self.baseurl)
+
+class xxxdanFilmScreen(MPScreen, ThumbsHelper):
+
+       def __init__(self, session, Link, Name, portal, baseurl):
+               self.Link = Link
+               self.Name = Name
+               self.portal = portal
+               self.baseurl = baseurl
+
+               global default_cover
+               if self.portal == "XXXDan.com":
+                       default_cover = "file://%s/xxxdan.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
+               elif self.portal == "WankGalore.com":
+                       default_cover = "file://%s/wankgalore.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
+               elif self.portal == "JizzBunker.com":
+                       default_cover = "file://%s/jizzbunker.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,
+                       "blue" : self.keyFilter
+               }, -1)
+
+               self['title'] = Label(self.portal)
+               self['ContentTitle'] = Label("Genre: %s" % self.Name)
+               self['F2'] = Label(_("Page"))
+               if ("/channel/" in self.Link) or ("/popular" in self.Link):
+                       self['F4'] = Label(_("Filter"))
+
+               self['Page'] = Label(_("Page:"))
+               self.keyLocked = True
+               self.page = 1
+               self.lastpage = 1
+               if ("/channel/" in self.Link) or ("/popular" in self.Link):
+                       self.filter = ''
+                       self.filtertext = 'All time'
+               else:
+                       self.filter = ''
+                       self.filtertext = ''
+
+               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 = "%s/search?query=%s&page=%s" % (self.baseurl, self.Link, str(self.page))
+               else:
+                       filterpart = re.findall('^(.*?)\?order=(.*?)$', self.Link)
+                       if filterpart:
+                               self.Link = filterpart[0][0]
+                               self.filter = filterpart[0][1]
+                       url = "%s/%s" % (self.Link, str(self.page))
+                       url = url.replace('/channel/','/channel%s/' % self.filter)
+                       url = url.replace('/popular/','/popular%s/' % self.filter)
+               twAgentGetPage(url, agent=agent, cookieJar=cookies).addCallback(self.loadData).addErrback(self.dataError)
+
+       def loadData(self, data):
+               self.getLastPage(data, '(?:paging|pagination)">(.*?)(?:</ul>|</div>)')
+               parse = re.search('class="gallery" id="(?:g1|gsearch)">(.*?)$', data, re.S)
+               if parse:
+                       Movies = re.findall('<figure>.*?href="(.*?)".*?img\sclass="lazy"\sdata-original="(.*?)"\salt="(.*?)".*?class="dur"><time datetime=".*?">(.*?)</time>.*?class="pubtime">(.*?)</li>', parse.group(1), re.S)
+                       if Movies:
+                               for (Url, Image, Title, Runtime, Age) in Movies:
+                                       self.filmliste.append((decodeHtml(Title), Url, Image, Runtime, Age))
+               if len(self.filmliste) == 0:
+                       self.filmliste.append((_('No videos found!'), None, None, '', ''))
+               self.ml.setList(map(self._defaultlistleft, self.filmliste))
+               self.ml.moveToIndex(0)
+               self.th_ThumbsQuery(self.filmliste, 0, 1, 2, None, None, self.page, self.lastpage, mode=1)
+               self.showInfos()
+               self.keyLocked = False
+
+       def showInfos(self):
+               title = self['liste'].getCurrent()[0][0]
+               pic = self['liste'].getCurrent()[0][2]
+               runtime = self['liste'].getCurrent()[0][3]
+               age = self['liste'].getCurrent()[0][4]
+               self['name'].setText(title)
+               if ("/channel/" in self.Link) or ("/popular" in self.Link):
+                       self['handlung'].setText("%s: %s\nRuntime: %s\nAdded: %s" % (_("Filter"), self.filtertext, runtime, age))
+               else:
+                       self['handlung'].setText("Runtime: %s\nAdded: %s" % (runtime, age))
+               CoverHelper(self['coverArt']).getCover(pic)
+
+       def keyFilter(self):
+               if self.keyLocked:
+                       return
+               if ("/channel/" in self.Link) or ("/popular" in self.Link):
+                       rangelist = [['All time', ''], ['30 days','30'], ['7 days','7'], ['1 days','1']]
+                       self.session.openWithCallback(self.keyFilterAction, ChoiceBoxExt, title=_('Select Action'), list = rangelist)
+
+       def keyFilterAction(self, result):
+               if result:
+                       self.filter = result[1]
+                       self.filtertext = result[0]
+                       self.loadPage()
+
+       def keyOK(self):
+               if self.keyLocked:
+                       return
+               Link = self['liste'].getCurrent()[0][1]
+               self.keyLocked = True
+               twAgentGetPage(Link, agent=agent, cookieJar=cookies).addCallback(self.getVideoUrl).addErrback(self.dataError)
+
+       def getVideoUrl(self, data):
+               videoUrl = re.findall("type:'video/mp4',src:'(.*?)',", data, re.S)
+               if videoUrl:
+                       self.keyLocked = False
+                       url = videoUrl[-1].replace('https','http')
+                       Title = self['liste'].getCurrent()[0][0]
+                       mp_globals.player_agent = agent
+                       self.session.open(SimplePlayer, [(Title, url)], showPlaylist=False, ltype='xxxdan')
\ No newline at end of file
index 985f72b..4f927d6 100644 (file)
@@ -155,8 +155,8 @@ config.mediaportal = ConfigSubsection()
 config_mp.mediaportal.fake_entry = NoSave(ConfigNothing())
 
 # Allgemein
-config_mp.mediaportal.version = NoSave(ConfigText(default="2019090701"))
-config.mediaportal.version = NoSave(ConfigText(default="2019090701"))
+config_mp.mediaportal.version = NoSave(ConfigText(default="2019092801"))
+config.mediaportal.version = NoSave(ConfigText(default="2019092801"))
 config_mp.mediaportal.autoupdate = ConfigYesNo(default = True)
 config.mediaportal.autoupdate = NoSave(ConfigYesNo(default = True))
 
index a49afb1..1c8fb43 100644 (file)
@@ -14,9 +14,9 @@ def datoporn(self, data):
                        if links:
                                url = links[-1]
        else:
-               links = re.findall('player.updateSrc\(\[\{src: "(.*?\.(?:m3u8|mp4))"', data, re.S)
+               links = re.findall('file:"(https://[a-z0-9\/\.,]+(?:m3u8|mp4))"', data, re.S)
                if links:
-                       url = links[0]
+                       url = links[-1]
        if url:
                self._callback(url)
        else:
index f7d0763..793cdad 100644 (file)
@@ -1,13 +1,23 @@
 # -*- coding: utf-8 -*-
-import base64
 import re
 from Plugins.Extensions.MediaPortal.plugin import _
 from Plugins.Extensions.MediaPortal.resources.imports import *
 
 def vivo(self, data, url):
-       crypt = re.findall('data-stream="(.*?)">', data)
+       def rot47(s):
+               x = []
+               for i in range(len(s)):
+                       j = ord(s[i])
+                       if j >= 33 and j <= 126:
+                               x.append(chr(33 + ((j + 14) % 94)))
+                       else:
+                               x.append(s[i])
+               return ''.join(x)
+
+       crypt = re.findall('InitializeStream.*?source:\s{0,1}[\'|\"](.*?)[\'|\"],', data, re.S)
        if crypt:
-               stream_url = base64.b64decode(crypt[0])
+               stream_url = rot47(urllib.unquote(crypt[0]))
                self._callback(stream_url)
        else:
-               self.stream_not_found()
\ No newline at end of file
+               self.stream_not_found()
+
index 2d04561..6326140 100644 (file)
@@ -34,6 +34,7 @@ bsp = None
 bdmt = None
 nav_suburi = ""
 veryref = ""
+sa = False
 
 std_headers = {
        'User-Agent': 'Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.6) Gecko/20100627 Firefox/3.6.6',
index cb884cd..57d3239 100644 (file)
@@ -640,15 +640,15 @@ class MPScreen(Screen, HelpableScreen):
                                        lheight = height - 2 * mp_globals.sizefactor
                                        lwidth = int(lheight * lratio)
                                vpos = round(float((height-lheight)/2))
-                               scale = AVSwitch().getFramebufferScale()
-                               picload = ePicLoad()
-                               picload.setPara((lwidth, lheight, scale[0], scale[1], False, 1, "#FF000000"))
                                if mp_globals.isDreamOS:
-                                       picload.startDecode(path, False)
+                                       res.append((eListboxPythonMultiContent.TYPE_PIXMAP_ALPHATEST, pwidth+50, vpos, lwidth, lheight, llang))
                                else:
+                                       scale = AVSwitch().getFramebufferScale()
+                                       picload = ePicLoad()
+                                       picload.setPara((lwidth, lheight, scale[0], scale[1], True, 1, "#FF000000"))
                                        picload.startDecode(path, 0, 0, False)
-                               lang = picload.getData()
-                               res.append((eListboxPythonMultiContent.TYPE_PIXMAP_ALPHATEST, pwidth+50, vpos, lwidth, lheight, lang))
+                                       lang = picload.getData()
+                                       res.append((eListboxPythonMultiContent.TYPE_PIXMAP_ALPHATEST, pwidth+50, vpos, lwidth, lheight, lang))
                                self.langoffset = lwidth+25
                except:
                        pass
index 9b382d8..6864ef0 100644 (file)
@@ -1161,6 +1161,12 @@ class SimplePlayer(Screen, M3U8Player, CoverSearchHelper, SimpleSeekHelper, Simp
                else:
                        is_eServiceMP3 = True
 
+               try:
+                       if eval(gfcdf("Y29uZmlnLnBsdWdpbnMuc2VydmljZWFwcC5zZXJ2aWNlbXAzLnJlcGxhY2UudmFsdWU=")):
+                               mp_globals.sa = True
+               except:
+                       pass
+
                Screen.__init__(self, session)
                self.skin_path = mp_globals.pluginPath + mp_globals.skinsPath
                path = "%s/%s/simpleplayer/SimplePlayer.xml" % (self.skin_path, mp_globals.currentskin)
@@ -1623,7 +1629,7 @@ class SimplePlayer(Screen, M3U8Player, CoverSearchHelper, SimpleSeekHelper, Simp
                                        url = url[8:].strip()
                                        sref = eServiceReference(url)
                                else:
-                                       if url.endswith('.ts'):
+                                       if url.endswith('.ts') or mp_globals.sa:
                                                sref = eServiceReference(0x0001, 0, unquote(url))
                                                self.isTSVideo = True
                                        else: