import enigma2-plugin-extensions-mediaportal 2020051502 v2020051502
authorChristian Weiske <cweiske@cweiske.de>
Fri, 15 May 2020 23:15:25 +0000 (01:15 +0200)
committerChristian Weiske <cweiske@cweiske.de>
Fri, 15 May 2020 23:15:25 +0000 (01:15 +0200)
50 files changed:
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/additions.xml
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/fun/liveleak.py
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/fun/twitch.py
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/mediatheken/popcorntimes.py
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/mediatheken/servustv.py
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/mediatheken/tvnow.py
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/mediatheken/youtube.py
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/mediatheken/zdf.py
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/porn/camhub.py
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/porn/cumlouder.py
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/porn/faapy.py
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/porn/mofos.py [deleted file]
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/porn/porn7.py
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/porn/porndoe.py
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/porn/porngo.py
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/porn/pornhat.py
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/porn/pornhub.py
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/porn/pornicom.py
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/porn/pornid.py
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/porn/pornoreino.py
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/porn/pornoxo.py
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/porn/porntrex.py [new file with mode: 0644]
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/porn/porntv.py
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/porn/pornxio.py
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/porn/redtube.py
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/porn/slutload.py
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/porn/teamskeet.py [deleted file]
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/porn/tube8.py
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/porn/txxx.py
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/porn/xfreehd.py [moved from usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/porn/voyeurhit.py with 53% similarity]
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/porn/xhamster.py
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/porn/xnxx.py
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/porn/xpaja.py
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/porn/xvideos.py
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/images/star.png [new file with mode: 0644]
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/locale/de/LC_MESSAGES/MediaPortal.mo
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/locale/de/LC_MESSAGES/MediaPortal.po
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/plugin.py
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/resources/hosters/clipwatching.py
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/resources/hosters/datoporn.py [deleted file]
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/resources/hosters/gounlimited.py
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/resources/hosters/hosters.xml
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/resources/hosters/upstream.py [new file with mode: 0644]
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/resources/hosters/vidto.py [deleted file]
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/resources/hosters/voe.py [new file with mode: 0644]
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/resources/mp_yt-apikey [new file with mode: 0644]
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/resources/mpscreen.py
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/resources/streams.py
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/resources/tmdb.py
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/resources/update.py

index a02440a..d8b9bbe 100644 (file)
                <plugin type="mod" modfile="porn.chaturbate" confopt="showchaturbate" default="False" confcat="porn" gz="0" name="Chaturbate" icon="chaturbate" filter="Porn" screen="chaturbateGenreScreen" param1="" param2="" />
                <plugin type="mod" modfile="porn.cam4" confopt="showcam4" default="False" confcat="porn" gz="0" name="Cam4" icon="cam4" filter="Porn" screen="cam4GenreScreen" param1="" param2="" />
                <plugin type="mod" modfile="porn.bongacams" confopt="showbongacams" default="False" confcat="porn" gz="0" name="BongaCams" icon="bongacams" filter="Porn" screen="bongacamsGenreScreen" param1="" param2="" />
-               <plugin type="mod" modfile="porn.camsoda" confopt="showcamsoda" default="False" confcat="porn" gz="0" name="CamSoda" icon="camsoda" filter="Porn" screen="camsodaGenreScreen" param1="" param2="" />
+               <!--<plugin type="mod" modfile="porn.camsoda" confopt="showcamsoda" default="False" confcat="porn" gz="0" name="CamSoda" icon="camsoda" filter="Porn" screen="camsodaGenreScreen" param1="" param2="" />-->
                <plugin type="mod" modfile="porn.x2search4porn" confopt="show2search4porn" default="True" confcat="porn" gz="0" name="2Search4Porn" icon="2search4porn" filter="Porn" screen="toSearchForPorn" param1="" param2=""/>
                <plugin type="mod" modfile="porn.brazzers" confopt="showbrazzerscom" default="False" confcat="porn" gz="0" name="Brazzers.com" icon="brazzers" filter="Porn" screen="brazzersGenreScreen" param1="" param2="" search="1" delim="+" searchurl="%s" searchscreen="brazzersFilmScreen" searchparam=""/>
-               <plugin type="mod" modfile="porn.mofos" confopt="showmofoscom" default="False" confcat="porn" gz="0" name="Mofos.com" icon="mofos" filter="Porn" screen="mofosGenreScreen" param1="" param2="" search="0" delim="" searchurl="" searchscreen="" searchparam=""/>
                <plugin type="mod" modfile="porn.nubilefilms" confopt="shownubilefilms" default="False" confcat="porn" gz="0" name="Nubilefilms.com" icon="nubilefilms" filter="Porn" screen="nubilefilmsGenreScreen" param1="" param2="" search="0" delim="" searchurl="" searchscreen="" searchparam=""/>
-               <plugin type="mod" modfile="porn.teamskeet" confopt="showteamskeetcom" default="False" confcat="porn" gz="0" name="TeamSkeet.com" icon="teamskeet" filter="Porn" screen="teamskeetGenreScreen" param1="" param2="" search="1" delim="%20" searchurl="%s" searchscreen="teamskeetFilmScreen" searchparam=""/>
                <plugin type="mod" modfile="porn.cumlouder" confopt="showcumlouder" default="False" confcat="porn" gz="0" name="Cumlouder" icon="cumlouder" filter="Porn" screen="cumlouderGenreScreen" param1="" param2="" search="1" delim="%20" searchurl="%s" searchscreen="cumlouderFilmScreen" searchparam=""/>
-               <plugin type="mod" modfile="porn.pornhub" confopt="showpornhub" default="False" confcat="porn" gz="0" name="Pornhub" icon="pornhub" filter="Porn" screen="pornhubGenreScreen" param1="" param2="" search="1" delim="+" searchurl="https://www.pornhub.com/video/search?search=%s&amp;page=" searchscreen="pornhubFilmScreen" searchparam=""/>
+               <plugin type="mod" modfile="porn.pornhub" confopt="showpornhub" default="False" confcat="porn" gz="0" name="Pornhub" icon="pornhub" filter="Porn" screen="pornhubGenreScreen" param1="pornhub" param2="" search="1" delim="+" searchurl="%s" searchscreen="pornhubFilmScreen" searchparam=", mode=&quot;pornhub&quot;"/>
+               <plugin type="mod" modfile="porn.pornhub" confopt="showpornhubpremium" default="False" confcat="porn" gz="0" name="PornhubPremium" icon="pornhubpremium" filter="Porn" screen="pornhubGenreScreen" param1="pornhubpremium" param2="" search="1" delim="+" searchurl="%s" searchscreen="pornhubFilmScreen" searchparam=", mode=&quot;pornhubpremium&quot;"/>
                <plugin type="mod" modfile="porn.xvideos" confopt="showxvideos" default="False" confcat="porn" gz="0" name="XVideos" icon="xvideos" filter="Porn" screen="xvideosGenreScreen" param1="" param2="" search="1" delim="+" searchurl="%s" searchscreen="xvideosFilmScreen" searchparam=", True"/>
                <plugin type="mod" modfile="porn.xnxx" confopt="showxnxx" default="False" confcat="porn" gz="0" name="XNXX" icon="xnxx" filter="Porn" screen="xnxxGenreScreen" param1="" param2="" search="1" delim="+" searchurl="%s" searchscreen="xnxxFilmScreen" searchparam=""/>
                <plugin type="mod" modfile="porn.youjizz" confopt="showyoujizz" default="False" confcat="porn" gz="0" name="YouJizz" icon="youjizz" filter="Porn" screen="youjizzGenreScreen" param1="" param2="" search="1" delim="-" searchurl="%s" searchscreen="youjizzFilmScreen" searchparam=""/>
                <plugin type="mod" modfile="porn.spankbang" confopt="showspankbang" default="False" confcat="porn" gz="0" name="SpankBang" icon="spankbang" filter="Porn" screen="spankbangGenreScreen" param1="" param2="" search="1" delim="+" searchurl="%s" searchscreen="spankbangFilmScreen" searchparam=", True, True"/>
                <plugin type="mod" modfile="porn.redtube" confopt="showredtube" default="False" confcat="porn" gz="0" name="RedTube" icon="redtube" filter="Porn" screen="redtubeGenreScreen" param1="" param2="" search="1" delim="+" searchurl="%s" searchscreen="redtubeFilmScreen" searchparam=", True"/>
                <plugin type="mod" modfile="porn.youporn" confopt="showyouporn" default="False" confcat="porn" gz="0" name="YouPorn" icon="youporn" filter="Porn" screen="youpornGenreScreen" param1="" param2="" search="1" delim="+" searchurl="https://www.youporn.com/search/?query=%s&amp;page=" searchscreen="youpornFilmScreen" searchparam=""/>
-               <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.tube8" confopt="showtube8" default="False" confcat="porn" gz="0" name="Tube8" icon="tube8" filter="Porn" screen="tube8GenreScreen" param1="" param2="" search="1" delim="+" 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.porntrex" confopt="showporntrex" default="False" confcat="porn" gz="1" name="Porntrex" icon="porntrex" filter="Porn" screen="porntrexGenreScreen" param1="porntrex" param2="" search="1" delim="-" searchurl="%s" searchscreen="porntrexFilmScreen" searchparam=", &quot;Porntrex.com&quot;, &quot;https://www.porntrex.com&quot;"/>
+               <plugin type="mod" modfile="porn.porntrex" confopt="showcamwhoresbay" default="False" confcat="porn" gz="1" name="Camwhoresbay" icon="camwhoresbay" filter="Porn" screen="porntrexGenreScreen" param1="camwhoresbay" param2="" search="1" delim="-" searchurl="%s" searchscreen="porntrexFilmScreen" searchparam=", &quot;Camwhoresbay.com&quot;, &quot;http://www.camwhoresbay.com&quot;"/>
+               <plugin type="mod" modfile="porn.porntrex" confopt="showjavwhores" default="False" confcat="porn" gz="1" name="JavBangers" icon="javbangers" filter="Porn" screen="porntrexGenreScreen" param1="javbangers" param2="" search="1" delim="-" searchurl="%s" searchscreen="porntrexFilmScreen" searchparam=", &quot;JavBangers.com&quot;, &quot;https://www.javbangers.com&quot;"/>
                <plugin type="mod" modfile="porn.pornxio" confopt="showpornxio" default="False" confcat="porn" gz="0" name="PornXio" icon="pornxio" filter="Porn" screen="pornxioGenreScreen" param1="pornxio" param2="" search="1" delim="-" searchurl="%s" searchscreen="pornxioFilmScreen" searchparam=", &quot;PornXio.com&quot;, &quot;https://pornxio.com&quot;"/>
                <plugin type="mod" modfile="porn.pornxio" confopt="showhandjobhub" default="False" confcat="porn" gz="0" name="HandjobHub" icon="handjobhub" filter="Porn" screen="pornxioGenreScreen" param1="handjobhub" param2="" search="1" delim="-" searchurl="%s" searchscreen="pornxioFilmScreen" searchparam=", &quot;HandjobHub.com&quot;, &quot;https://handjobhub.com&quot;"/>
                <plugin type="mod" modfile="porn.pornxio" confopt="showhypnotube" default="False" confcat="porn" gz="0" name="hypnotube" icon="hypnotube" filter="Porn" screen="pornxioGenreScreen" param1="hypnotube" param2="" search="1" delim="-" searchurl="%s" searchscreen="pornxioFilmScreen" searchparam=", &quot;hypnotube.com&quot;, &quot;https://hypnotube.com&quot;"/>
                <plugin type="mod" modfile="porn.pornxio" confopt="showxnxxhamster" default="False" confcat="porn" gz="0" name="XNXXHamster" icon="xnxxhamster" filter="Porn" screen="pornxioGenreScreen" param1="xnxxhamster" param2="" search="1" delim="-" searchurl="%s" searchscreen="pornxioFilmScreen" searchparam=", &quot;XNXXHamster.net&quot;, &quot;https://xnxxhamster.net&quot;"/>
                <plugin type="mod" modfile="porn.pornxio" confopt="showdrporntube" default="False" confcat="porn" gz="0" name="DrPornTube" icon="drporntube" filter="Porn" screen="pornxioGenreScreen" param1="drporntube" param2="" search="1" delim="-" searchurl="%s" searchscreen="pornxioFilmScreen" searchparam=", &quot;DrPornTube.com&quot;, &quot;https://www.drporntube.com&quot;"/>
                <plugin type="mod" modfile="porn.pornxio" confopt="showsinclips" default="False" confcat="porn" gz="0" name="SinClips" icon="sinclips" filter="Porn" screen="pornxioGenreScreen" param1="sinclips" param2="" search="1" delim="-" searchurl="%s" searchscreen="pornxioFilmScreen" searchparam=", &quot;SinClips.com&quot;, &quot;https://sinclips.com&quot;"/>
+               <plugin type="mod" modfile="porn.pornxio" confopt="showfreepornhq" default="False" confcat="porn" gz="0" name="FreePornHQ" icon="freepornhq" filter="Porn" screen="pornxioGenreScreen" param1="freepornhq" param2="" search="1" delim="-" searchurl="%s" searchscreen="pornxioFilmScreen" searchparam=", &quot;FreePornHQ.xxx&quot;, &quot;https://www.freepornhq.xxx&quot;"/>
+               <plugin type="mod" modfile="porn.pornxio" confopt="showyouramateurtube" default="False" confcat="porn" gz="0" name="YourAmateurTube" icon="youramateurtube" filter="Porn" screen="pornxioGenreScreen" param1="youramateurtube" param2="" search="1" delim="-" searchurl="%s" searchscreen="pornxioFilmScreen" searchparam=", &quot;YourAmateurTube.com&quot;, &quot;https://youramateurtube.com&quot;"/>
+               <plugin type="mod" modfile="porn.pornxio" confopt="showal4a" default="False" confcat="porn" gz="0" name="Al4a" icon="al4a" filter="Porn" screen="pornxioGenreScreen" param1="al4a" param2="" search="1" delim="-" searchurl="%s" searchscreen="pornxioFilmScreen" searchparam=", &quot;Al4a.com&quot;, &quot;https://www.al4a.com&quot;"/>
+               <plugin type="mod" modfile="porn.pornxio" confopt="showpornomovies" default="False" confcat="porn" gz="0" name="PornoMovies" icon="pornomovies" filter="Porn" screen="pornxioGenreScreen" param1="pornomovies" param2="" search="1" delim="-" searchurl="%s" searchscreen="pornxioFilmScreen" searchparam=", &quot;PornoMovies.com&quot;, &quot;https://www.pornomovies.com&quot;"/>
+               <plugin type="mod" modfile="porn.xfreehd" confopt="showxfreehd" default="False" confcat="porn" gz="0" name="XFreeHD" icon="xfreehd" filter="Porn" screen="xfreehdGenreScreen" param1="" param2="" search="1" delim="-" searchurl="%s" searchscreen="xfreehdFilmScreen" searchparam=""/>
                <plugin type="mod" modfile="porn.camhub" confopt="showcamhub" default="False" confcat="porn" gz="0" name="Camhub" icon="camhub" filter="Porn" screen="camhubGenreScreen" param1="" param2="" search="1" delim="-" searchurl="%s" searchscreen="camhubFilmScreen" searchparam=""/>
                <plugin type="mod" modfile="porn.pornoreino" confopt="showpornoreino" default="False" confcat="porn" gz="0" name="PornoReino" icon="pornoreino" filter="Porn" screen="pornoreinoGenreScreen" param1="" param2="" search="1" delim="-" searchurl="%s" searchscreen="pornoreinoFilmScreen" searchparam=""/>
                <plugin type="mod" modfile="porn.slutload" confopt="showslutload" default="False" confcat="porn" gz="0" name="Slutload" icon="slutload" filter="Porn" screen="slutloadGenreScreen" param1="slutload" param2="" search="1" delim="-" searchurl="%s" searchscreen="slutloadFilmScreen" searchparam=", &quot;Slutload.com&quot;, &quot;https://www.slutload.com&quot;"/>
+               <plugin type="mod" modfile="porn.slutload" confopt="show0dayporn" default="False" confcat="porn" gz="0" name="0DayPorn" icon="0dayporn" filter="Porn" screen="slutloadGenreScreen" param1="0dayporn" param2="" search="1" delim="-" searchurl="%s" searchscreen="slutloadFilmScreen" searchparam=", &quot;0DayPorn.com&quot;, &quot;https://0dayporn.com&quot;"/>
+               <plugin type="mod" modfile="porn.slutload" confopt="showdatoporn" default="False" confcat="porn" gz="0" name="DatoPorn" icon="datoporn" filter="Porn" screen="slutloadGenreScreen" param1="datoporn" param2="" search="1" delim="-" searchurl="%s" searchscreen="slutloadFilmScreen" searchparam=", &quot;DatoPorn.com&quot;, &quot;https://dato.porn&quot;"/>
                <plugin type="mod" modfile="porn.slutload" confopt="showmadthumbs" default="False" confcat="porn" gz="0" name="MadThumbs" icon="madthumbs" filter="Porn" screen="slutloadGenreScreen" param1="madthumbs" param2="" search="1" delim="-" searchurl="%s" searchscreen="slutloadFilmScreen" searchparam=", &quot;MadThumbs.com&quot;, &quot;http://www.madthumbs.com&quot;"/>
                <plugin type="mod" modfile="porn.slutload" confopt="showfapster" default="False" confcat="porn" gz="0" name="Fapster" icon="fapster" filter="Porn" screen="slutloadGenreScreen" param1="fapster" param2="" search="1" delim="-" searchurl="%s" searchscreen="slutloadFilmScreen" searchparam=", &quot;Fapster.xxx&quot;, &quot;https://fapster.xxx&quot;"/>
                <plugin type="mod" modfile="porn.slutload" confopt="showvqtube" default="False" confcat="porn" gz="0" name="VQTube" icon="vqtube" filter="Porn" screen="slutloadGenreScreen" param1="vqtube" param2="" search="1" delim="-" searchurl="%s" searchscreen="slutloadFilmScreen" searchparam=", &quot;VQTube.com&quot;, &quot;https://vqtube.com&quot;"/>
-               <plugin type="mod" modfile="porn.slutload" confopt="showporntube69" default="False" confcat="porn" gz="0" name="PornTube69" icon="porntube69" filter="Porn" screen="slutloadGenreScreen" param1="porntube69" param2="" search="1" delim="-" searchurl="%s" searchscreen="slutloadFilmScreen" searchparam=", &quot;PornTube69.net&quot;, &quot;https://www.porntube69.net&quot;"/>
                <plugin type="mod" modfile="porn.slutload" confopt="showmegatube" default="False" confcat="porn" gz="0" name="MegaTube" icon="megatube" filter="Porn" screen="slutloadGenreScreen" param1="megatube" param2="" search="1" delim="-" searchurl="%s" searchscreen="slutloadFilmScreen" searchparam=", &quot;MegaTube.xxx&quot;, &quot;https://www.megatube.xxx&quot;"/>
                <plugin type="mod" modfile="porn.slutload" confopt="showwatchmygf" default="False" confcat="porn" gz="0" name="WatchMyGF" icon="watchmygf" filter="Porn" screen="slutloadGenreScreen" param1="watchmygf" param2="" search="1" delim="-" searchurl="%s" searchscreen="slutloadFilmScreen" searchparam=", &quot;WatchMyGF.me&quot;, &quot;https://www.watchmygf.me&quot;"/>
                <plugin type="mod" modfile="porn.slutload" confopt="showwatchmyexgf" default="False" confcat="porn" gz="0" name="WatchMyExGF" icon="watchmyexgf" filter="Porn" screen="slutloadGenreScreen" param1="watchmyexgf" param2="" search="1" delim="-" searchurl="%s" searchscreen="slutloadFilmScreen" searchparam=", &quot;WatchMyExGF.net&quot;, &quot;https://www.watchmyexgf.net&quot;"/>
                <plugin type="mod" modfile="porn.slutload" confopt="showpornbimbo" default="False" confcat="porn" gz="0" name="PornBimbo" icon="pornbimbo" filter="Porn" screen="slutloadGenreScreen" param1="pornbimbo" param2="" search="1" delim="-" searchurl="%s" searchscreen="slutloadFilmScreen" searchparam=", &quot;PornBimbo.com&quot;, &quot;http://pornbimbo.com&quot;"/>
                <plugin type="mod" modfile="porn.slutload" confopt="showboundhub" default="False" confcat="porn" gz="0" name="BoundHub" icon="boundhub" filter="Porn" screen="slutloadGenreScreen" param1="boundhub" param2="" search="1" delim="-" searchurl="%s" searchscreen="slutloadFilmScreen" searchparam=", &quot;BoundHub.com&quot;, &quot;https://www.boundhub.com&quot;"/>
                <plugin type="mod" modfile="porn.slutload" confopt="showeroclips" default="False" confcat="porn" gz="0" name="EroClips" icon="eroclips" filter="Porn" screen="slutloadGenreScreen" param1="eroclips" param2="" search="1" delim="-" searchurl="%s" searchscreen="slutloadFilmScreen" searchparam=", &quot;EroClips.org&quot;, &quot;http://www.eroclips.org&quot;"/>
-               <plugin type="mod" modfile="porn.slutload" confopt="showcamvideos" default="False" confcat="porn" gz="0" name="CamVideos" icon="camvideos" filter="Porn" screen="slutloadGenreScreen" param1="camvideos" param2="" search="1" delim="-" searchurl="%s" searchscreen="slutloadFilmScreen" searchparam=", &quot;CamVideos.tv&quot;, &quot;http://www.camvideos.tv&quot;"/>
                <plugin type="mod" modfile="porn.slutload" confopt="showanonv" default="False" confcat="porn" gz="0" name="Anon-V" icon="anonv" filter="Porn" screen="slutloadGenreScreen" param1="anonv" param2="" search="1" delim="-" searchurl="%s" searchscreen="slutloadFilmScreen" searchparam=", &quot;Anon-V.com&quot;, &quot;https://anon-v.com&quot;"/>
                <plugin type="mod" modfile="porn.slutload" confopt="showmrdeepfakes" default="False" confcat="porn" gz="0" name="MrDeepFakes" icon="mrdeepfakes" filter="Porn" screen="slutloadGenreScreen" param1="mrdeepfakes" param2="" search="1" delim="-" searchurl="%s" searchscreen="slutloadFilmScreen" searchparam=", &quot;MrDeepFakes.com&quot;, &quot;https://mrdeepfakes.com&quot;"/>
                <plugin type="mod" modfile="porn.slutload" confopt="showebony8" default="False" confcat="porn" gz="0" name="Ebony8" icon="ebony8" filter="Porn" screen="slutloadGenreScreen" param1="ebony8" param2="" search="1" delim="-" searchurl="%s" searchscreen="slutloadFilmScreen" searchparam=", &quot;Ebony8.com&quot;, &quot;https://www.ebony8.com&quot;"/>
+               <plugin type="mod" modfile="porn.slutload" confopt="showmypornhere" default="False" confcat="porn" gz="0" name="MyPornHere" icon="mypornhere" filter="Porn" screen="slutloadGenreScreen" param1="mypornhere" param2="" search="1" delim="-" searchurl="%s" searchscreen="slutloadFilmScreen" searchparam=", &quot;MyPornHere.com&quot;, &quot;https://www.mypornhere.com&quot;"/>
+               <plugin type="mod" modfile="porn.slutload" confopt="showalotporn" default="False" confcat="porn" gz="0" name="AlotPorn" icon="alotporn" filter="Porn" screen="slutloadGenreScreen" param1="alotporn" param2="" search="1" delim="-" searchurl="%s" searchscreen="slutloadFilmScreen" searchparam=", &quot;AlotPorn.com&quot;, &quot;https://www.alotporn.com&quot;"/>
+               <plugin type="mod" modfile="porn.slutload" confopt="showcambro" default="False" confcat="porn" gz="0" name="CamBro" icon="cambro" filter="Porn" screen="slutloadGenreScreen" param1="cambro" param2="" search="1" delim="-" searchurl="%s" searchscreen="slutloadFilmScreen" searchparam=", &quot;CamBro.tv&quot;, &quot;https://www.cambro.tv&quot;"/>
+               <plugin type="mod" modfile="porn.slutload" confopt="showfiltercams" default="False" confcat="porn" gz="0" name="FilterCams" icon="filtercams" filter="Porn" screen="slutloadGenreScreen" param1="filtercams" param2="" search="1" delim="-" searchurl="%s" searchscreen="slutloadFilmScreen" searchparam=", &quot;FilterCams.com&quot;, &quot;https://filtercams.com&quot;"/>
+               <plugin type="mod" modfile="porn.slutload" confopt="showcamvideos" default="False" confcat="porn" gz="0" name="CamVideos" icon="camvideos" filter="Porn" screen="slutloadGenreScreen" param1="camvideos" param2="" search="1" delim="-" searchurl="%s" searchscreen="slutloadFilmScreen" searchparam=", &quot;CamVideos.tv&quot;, &quot;http://www.camvideos.tv&quot;"/>
                <plugin type="mod" modfile="porn.slutload" confopt="showcamuploads" default="False" confcat="porn" gz="0" name="CamUploads" icon="camuploads" filter="Porn" screen="slutloadGenreScreen" param1="camuploads" param2="" search="1" delim="-" searchurl="%s" searchscreen="slutloadFilmScreen" searchparam=", &quot;CamUploads.com&quot;, &quot;https://www.camuploads.com&quot;"/>
                <plugin type="mod" modfile="porn.pornicom" confopt="showpornicom" default="False" confcat="porn" gz="0" name="Pornicom" icon="pornicom" filter="Porn" screen="pornicomGenreScreen" param1="pornicom" param2="" search="1" delim="+" searchurl="%s" searchscreen="pornicomFilmScreen" searchparam=", &quot;Pornicom.com&quot;, &quot;https://www.pornicom.com&quot;"/>
                <plugin type="mod" modfile="porn.pornicom" confopt="showfetishshrine" default="False" confcat="porn" gz="0" name="FetishShrine" icon="fetishshrine" filter="Porn" screen="pornicomGenreScreen" param1="fetishshrine" param2="" search="1" delim="+" searchurl="%s" searchscreen="pornicomFilmScreen" searchparam=", &quot;FetishShrine.com&quot;, &quot;https://www.fetishshrine.com&quot;"/>
                <plugin type="mod" modfile="porn.pornid" confopt="showhdtube" default="False" confcat="porn" gz="0" name="HDtube" icon="hdtube" filter="Porn" screen="pornidGenreScreen" param1="hdtube" param2="" search="1" delim="+" searchurl="%s" searchscreen="pornidFilmScreen" searchparam=", &quot;HDtube.porn&quot;, &quot;https://www.hdtube.porn&quot;"/>
                <plugin type="mod" modfile="porn.pornid" confopt="showzbporn" default="False" confcat="porn" gz="0" name="ZBPorn" icon="zbporn" filter="Porn" screen="pornidGenreScreen" param1="zbporn" param2="" search="1" delim="+" searchurl="%s" searchscreen="pornidFilmScreen" searchparam=", &quot;ZBPorn.com&quot;, &quot;https://www.zbporn.com&quot;"/>
                <plugin type="mod" modfile="porn.porn7" confopt="showporn7" default="False" confcat="porn" gz="0" name="Porn7" icon="porn7" filter="Porn" screen="porn7GenreScreen" param1="porn7" param2="" search="1" delim="-" searchurl="%s" searchscreen="porn7FilmScreen" searchparam=", &quot;Porn7.xxx&quot;, &quot;https://www.porn7.xxx&quot;"/>
+               <plugin type="mod" modfile="porn.porn7" confopt="showjizzboom" default="False" confcat="porn" gz="0" name="JizzBoom" icon="jizzboom" filter="Porn" screen="porn7GenreScreen" param1="jizzboom" param2="" search="1" delim="-" searchurl="%s" searchscreen="porn7FilmScreen" searchparam=", &quot;JizzBoom.com&quot;, &quot;https://jizzboom.com&quot;"/>
+               <plugin type="mod" modfile="porn.porn7" confopt="showfamilyporn" default="False" confcat="porn" gz="0" name="FamilyPorn" icon="familyporn" filter="Porn" screen="porn7GenreScreen" param1="familyporn" param2="" search="1" delim="-" searchurl="%s" searchscreen="porn7FilmScreen" searchparam=", &quot;FamilyPorn.tv&quot;, &quot;https://familyporn.tv&quot;"/>
+               <plugin type="mod" modfile="porn.porn7" confopt="showfemefun" default="False" confcat="porn" gz="0" name="FemeFun" icon="femefun" filter="Porn" screen="porn7GenreScreen" param1="femefun" param2="" search="1" delim="-" searchurl="%s" searchscreen="porn7FilmScreen" searchparam=", &quot;FemeFun.com&quot;, &quot;https://femefun.com&quot;"/>
                <plugin type="mod" modfile="porn.porn7" confopt="showadultcartoons" default="False" confcat="porn" gz="0" name="AdultCartoons" icon="adultcartoons" filter="Porn" screen="porn7GenreScreen" param1="adultcartoons" param2="" search="1" delim="-" searchurl="%s" searchscreen="porn7FilmScreen" searchparam=", &quot;AdultCartoons.com&quot;, &quot;https://www.adultcartoons.com&quot;"/>
                <plugin type="mod" modfile="porn.porn7" confopt="showmoviesand" default="False" confcat="porn" gz="0" name="Moviesand" icon="moviesand" filter="Porn" screen="porn7GenreScreen" param1="moviesand" param2="" search="1" delim="-" searchurl="%s" searchscreen="porn7FilmScreen" searchparam=", &quot;Moviesand.com&quot;, &quot;https://www.moviesand.com&quot;"/>
                <plugin type="mod" modfile="porn.porn7" confopt="showbabestube" default="False" confcat="porn" gz="0" name="Babestube" icon="babestube" filter="Porn" screen="porn7GenreScreen" param1="babestube" param2="" search="1" delim="-" searchurl="%s" searchscreen="porn7FilmScreen" searchparam=", &quot;Babestube.com&quot;, &quot;https://www.babestube.com&quot;"/>
                <plugin type="mod" modfile="porn.porn7" confopt="showinterracial" default="False" confcat="porn" gz="0" name="Interracial" icon="interracial" filter="Porn" screen="porn7GenreScreen" param1="interracial" param2="" search="1" delim="-" searchurl="%s" searchscreen="porn7FilmScreen" searchparam=", &quot;Interracial.com&quot;, &quot;https://www.interracial.com&quot;"/>
                <plugin type="mod" modfile="porn.porn7" confopt="showdeviants" default="False" confcat="porn" gz="0" name="Deviants" icon="deviants" filter="Porn" screen="porn7GenreScreen" param1="deviants" param2="" search="1" delim="-" searchurl="%s" searchscreen="porn7FilmScreen" searchparam=", &quot;Deviants.com&quot;, &quot;https://www.deviants.com&quot;"/>
+               <plugin type="mod" modfile="porn.porn7" confopt="shownakedgirls" default="False" confcat="porn" gz="0" name="NakedGirls" icon="nakedgirls" filter="Porn" screen="porn7GenreScreen" param1="nakedgirls" param2="" search="1" delim="-" searchurl="%s" searchscreen="porn7FilmScreen" searchparam=", &quot;NakedGirls.mobi&quot;, &quot;https://www.nakedgirls.mobi&quot;"/>
                <plugin type="mod" modfile="porn.pornhat" confopt="showpornhat" default="False" confcat="porn" gz="0" name="PornHat" icon="pornhat" filter="Porn" screen="pornhatGenreScreen" param1="pornhat" param2="" search="1" delim="-" searchurl="%s" searchscreen="pornhatFilmScreen" searchparam=", &quot;PornHat.com&quot;, &quot;https://www.pornhat.com&quot;"/>
                <plugin type="mod" modfile="porn.pornhat" confopt="showokxxx" default="False" confcat="porn" gz="0" name="OK.XXX" icon="okxxx" filter="Porn" screen="pornhatGenreScreen" param1="okxxx" param2="" search="1" delim="-" searchurl="%s" searchscreen="pornhatFilmScreen" searchparam=", &quot;OK.XXX&quot;, &quot;https://www.ok.xxx&quot;"/>
                <plugin type="mod" modfile="porn.tnaflix" confopt="showtnaflix" default="False" confcat="porn" gz="0" name="TnAflix" icon="tnaflix" filter="Porn" screen="TnAflixGenreScreen" param1="tnaflix" param2="" search="1" delim="%20" searchurl="%s" searchscreen="TnAflixFilmScreen" searchparam=", &quot;TnAflix.com&quot;, &quot;https://www.tnaflix.com&quot;"/>
                <plugin type="mod" modfile="porn.tnaflix" confopt="showempflix" default="False" confcat="porn" gz="0" name="Empflix" icon="empflix" filter="Porn" screen="TnAflixGenreScreen" param1="empflix" param2="" search="1" delim="%20" searchurl="%s" searchscreen="TnAflixFilmScreen" searchparam=", &quot;Empflix.com&quot;, &quot;https://www.empflix.com&quot;"/>
                <plugin type="mod" modfile="porn.txxx" confopt="showtxxx" default="False" confcat="porn" gz="0" name="TXXX" icon="txxx" filter="Porn" screen="txxxGenreScreen" param1="txxx" param2="" search="1" delim="+" searchurl="%s" searchscreen="txxxFilmScreen" searchparam=", &quot;TXXX.com&quot;, &quot;https://txxx.com&quot;"/>
                <plugin type="mod" modfile="porn.txxx" confopt="showhclips" default="False" confcat="porn" gz="0" name="HClips" icon="hclips" filter="Porn" screen="txxxGenreScreen" param1="hclips" param2="" search="1" delim="+" searchurl="%s" searchscreen="txxxFilmScreen" searchparam=", &quot;HClips.com&quot;, &quot;https://hclips.com&quot;"/>
+               <plugin type="mod" modfile="porn.txxx" confopt="showvoyeurhit" default="False" confcat="porn" gz="0" name="VoyeurHit" icon="voyeurhit" filter="Porn" screen="txxxGenreScreen" param1="voyeurhit" param2="" search="1" delim="+" searchurl="%s" searchscreen="txxxFilmScreen" searchparam=", &quot;VoyeurHit.com&quot;, &quot;https://voyeurhit.com&quot;"/>
                <plugin type="mod" modfile="porn.upornia" confopt="showupornia" default="False" confcat="porn" gz="0" name="Upornia" icon="upornia" filter="Porn" screen="uporniaGenreScreen" param1="" param2="" search="1" delim="+" searchurl="%s" searchscreen="uporniaFilmScreen" searchparam=""/>
                <plugin type="mod" modfile="porn.hdzog" confopt="showhdzog" default="False" confcat="porn" gz="0" name="HDZog" icon="hdzog" filter="Porn" screen="hdzogGenreScreen" param1="" param2="" search="1" delim="+" searchurl="%s" searchscreen="hdzogFilmScreen" searchparam=""/>
                <plugin type="mod" modfile="porn.hotmovs" confopt="showhotmovs" default="False" confcat="porn" gz="0" name="HotMovs" icon="hotmovs" filter="Porn" screen="hotmovsGenreScreen" param1="" param2="" search="1" delim="+" searchurl="%s" searchscreen="hotmovsFilmScreen" searchparam=""/>
-               <plugin type="mod" modfile="porn.voyeurhit" confopt="showvoyeurhit" default="False" confcat="porn" gz="0" name="VoyeurHit" icon="voyeurhit" filter="Porn" screen="voyeurhitGenreScreen" param1="" param2="" search="1" delim="+" searchurl="%s" searchscreen="voyeurhitFilmScreen" searchparam=""/>
                <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.porntv" confopt="showlesbianpornvideos" default="False" confcat="porn" gz="0" name="LesbianPornVideos" icon="lesbianpornvideos" filter="Porn" screen="porntvGenreScreen" param1="lesbianpornvideos" param2="" search="1" delim="+" searchurl="%s" searchscreen="porntvFilmScreen" searchparam=", &quot;LesbianPornVideos.com&quot;, &quot;https://www.lesbianpornvideos.com&quot;"/>
                <plugin type="mod" modfile="porn.porntv" confopt="showsexoasis" default="False" confcat="porn" gz="0" name="SexOasis" icon="sexoasis" filter="Porn" screen="porntvGenreScreen" param1="sexoasis" param2="" search="1" delim="+" searchurl="%s" searchscreen="porntvFilmScreen" searchparam=", &quot;SexOasis.com&quot;, &quot;https://www.sexoasis.com&quot;"/>
                <plugin type="mod" modfile="porn.porntv" confopt="showasspoint" default="False" confcat="porn" gz="0" name="AssPoint" icon="asspoint" filter="Porn" screen="porntvGenreScreen" param1="asspoint" param2="" search="1" delim="+" searchurl="%s" searchscreen="porntvFilmScreen" searchparam=", &quot;AssPoint.com&quot;, &quot;https://www.asspoint.com&quot;"/>
-               <plugin type="mod" modfile="porn.porntv" confopt="showanalpornvideos" default="False" confcat="porn" gz="0" name="AnalPornVideos" icon="analpornvideos" filter="Porn" screen="porntvGenreScreen" param1="analpornvideos" param2="" search="1" delim="+" searchurl="%s" searchscreen="porntvFilmScreen" searchparam=", &quot;AnalPornVideos.com&quot;, &quot;https://www.analpornvideos.com&quot;"/>
-               <plugin type="mod" modfile="porn.porntv" confopt="showhoodtube" default="False" confcat="porn" gz="0" name="HoodTube" icon="hoodtube" filter="Porn" screen="porntvGenreScreen" param1="hoodtube" param2="" search="1" delim="+" searchurl="%s" searchscreen="porntvFilmScreen" searchparam=", &quot;HoodTube.com&quot;, &quot;https://www.hoodtube.com&quot;"/>
-               <plugin type="mod" modfile="porn.porntv" confopt="showsuzisporn" default="False" confcat="porn" gz="0" name="SuzisPorn" icon="suzisporn" filter="Porn" screen="porntvGenreScreen" param1="suzisporn" param2="" search="1" delim="+" searchurl="%s" searchscreen="porntvFilmScreen" searchparam=", &quot;SuzisPorn.com&quot;, &quot;https://www.suzisporn.com&quot;"/>
                <plugin type="mod" modfile="porn.porntv" confopt="showmovieshark" default="False" confcat="porn" gz="0" name="MovieShark" icon="movieshark" filter="Porn" screen="porntvGenreScreen" param1="movieshark" param2="" search="1" delim="+" searchurl="%s" searchscreen="porntvFilmScreen" searchparam=", &quot;MovieShark.com&quot;, &quot;https://www.movieshark.com&quot;"/>
                <plugin type="mod" modfile="porn.porntv" confopt="showyoungporno" default="False" confcat="porn" gz="0" name="YoungPorno" icon="youngporno" filter="Porn" screen="porntvGenreScreen" param1="youngporno" param2="" search="1" delim="+" searchurl="%s" searchscreen="porntvFilmScreen" searchparam=", &quot;YoungPorno.com&quot;, &quot;https://www.youngporno.com&quot;"/>
                <plugin type="mod" modfile="porn.porntv" confopt="showporntitan" default="False" confcat="porn" gz="0" name="PornTitan" icon="porntitan" filter="Porn" screen="porntvGenreScreen" param1="porntitan" param2="" search="1" delim="+" searchurl="%s" searchscreen="porntvFilmScreen" searchparam=", &quot;PornTitan.com&quot;, &quot;https://www.porntitan.com&quot;"/>
index 2302ab7..346c32c 100644 (file)
@@ -151,13 +151,8 @@ class LiveLeakClips(MPScreen, ThumbsHelper):
                url = self['liste'].getCurrent()[0][1]
                Title = self['liste'].getCurrent()[0][0]
                Image = self['liste'].getCurrent()[0][2]
-               descr = self['liste'].getCurrent()[0][3]
-               date = self['liste'].getCurrent()[0][4]
-               views = self['liste'].getCurrent()[0][5]
                self['name'].setText(Title)
-               self['handlung'].setText("Leaked: %s\nViews: %s\n\n%s" % (date, views, descr))
-               if descr.endswith('..'):
-                       getPage(url).addCallback(self.showInfos2).addErrback(self.dataError)
+               getPage(url).addCallback(self.showInfos2).addErrback(self.dataError)
                CoverHelper(self['coverArt']).getCover(Image)
 
        def showInfos2(self, data):
index 8b688c5..72565fc 100644 (file)
@@ -185,10 +185,9 @@ class twitchGames(MPScreen):
                                        data = re.findall('"(.*?)" "(.*?)" "(.*?)"', rawData, re.S)
                                        if data:
                                                (Title, Name, Id) = data[0]
-                                               user_id += "&user_id=" + Id
+                                               user_id += "," + Id
                                read.close()
-                               url_tmp = "https://api.twitch.tv/helix/streams" + user_id
-                               url = url_tmp.replace('streams&', 'streams?')
+                               url = "https://api.twitch.tv/kraken/streams?channel=" + user_id.strip(',')
                        twAgentGetPage(url, agent=agent, headers=headers).addCallback(self.parseData).addErrback(self.dataError)
 
        def parseData(self, data):
@@ -214,8 +213,11 @@ class twitchGames(MPScreen):
                if self.ID == "favorites":
                        jsondata = json.loads(data)
                        self.live = []
-                       for node in jsondata["data"]:
-                               self.live.append(str(node["user_id"]))
+                       try:
+                               for node in jsondata["streams"]:
+                                       self.live.append(str(node["channel"]["_id"]))
+                       except:
+                               pass
                        if not fileExists(config_mp.mediaportal.watchlistpath.value+"mp_twitch_favorites"):
                                open(config_mp.mediaportal.watchlistpath.value+"mp_twitch_favorites","w").close()
                        if fileExists(config_mp.mediaportal.watchlistpath.value+"mp_twitch_favorites"):
index 44e18b0..91f80c5 100644 (file)
@@ -162,6 +162,7 @@ class popcorntimesFilmeScreen(MPScreen, ThumbsHelper):
                                        if image.startswith('//'):
                                                image = 'https:' + image
                                        meta = stripAllTags(meta)
+                                       meta = re.sub(r"\s+", " ", meta).strip()
                                        self.filmliste.append((decodeHtml(title), image, url, desc, meta))
                        else:
                                vids = re.findall('class="pt-movie-tile.*?href="(.*?)".*?<img.*?data-src="(.*?)"\salt="(.*?)".*?.*?pt-video-time">(.*?)</p>', data, re.S)
@@ -171,6 +172,7 @@ class popcorntimesFilmeScreen(MPScreen, ThumbsHelper):
                                                if image.startswith('//'):
                                                        image = 'https:' + image
                                                meta = stripAllTags(meta)
+                                               meta = re.sub(r"\s+", " ", meta).strip()
                                                self.filmliste.append((decodeHtml(title), image, url, '', meta))
                else:
                        check = re.search('class="pt-hero(.*?)class="pt-section', data, re.S)
@@ -183,6 +185,7 @@ class popcorntimesFilmeScreen(MPScreen, ThumbsHelper):
                                                if image.startswith('//'):
                                                        image = 'https:' + image
                                                meta = stripAllTags(meta)
+                                               meta = re.sub(r"\s+", " ", meta).strip()
                                                self.filmliste.append((decodeHtml(title), image, url, desc, meta))
                if len(self.filmliste) == 0:
                        self.filmliste.append((_("No videos found!"), default_cover, None, '', ''))
index fe49aa0..02bc173 100644 (file)
@@ -158,7 +158,7 @@ class sTVids(MPScreen):
                        for (url,id,image,title,subtitle,date) in shows:
                                id = id.upper()
                                image = image + "?resize=600,413&crop_strategy=smart"
-                               title = title + " - " + subtitle
+                               title = title.strip() + " - " + subtitle.strip()
                                self.filmliste.append((decodeHtml(title),id,image,url,date.strip()))
                        self.ml.setList(map(self._defaultlistleft, self.filmliste))
                        self.ml.moveToIndex(0)
index 593fd69..7a6554a 100644 (file)
@@ -80,7 +80,7 @@ class tvnowFirstScreen(MPScreen, ThumbsHelper):
                self.senderliste.append(("SUPER RTL", "superrtl", default_cover))
                self.senderliste.append(("n-tv", "ntv", default_cover))
                self.senderliste.append(("RTLplus", "rtlplus",  default_cover))
-               self.senderliste.append(("Watchbox", "watchbox",  "file://%s/watchbox.png" % (config_mp.mediaportal.iconcachepath.value + "logos")))
+               self.senderliste.append(("Watchbox", "watchbox",  default_cover))
                self.ml.setList(map(self._defaultlistcenter, self.senderliste))
                self.keyLocked = False
                self.th_ThumbsQuery(self.senderliste, 0, 1, 2, None, None, 1, 1, mode=1)
index c6b98df..a275311 100644 (file)
@@ -1,4 +1,4 @@
-# -*- coding: utf-8 -*-
+# -*- coding: utf-8 -*-
 
 import json
 import thread
@@ -30,7 +30,9 @@ config_mp.mediaportal.yt_param_event_types_idx = ConfigInteger(default = 0)
 config_mp.mediaportal.yt_param_video_type_idx = ConfigInteger(default = 0)
 config_mp.mediaportal.yt_refresh_token = ConfigText(default="")
 
-APIKEYV3 = mp_globals.yt_a
+APIKEYV3 = ''
+APIKEYV3_MASTER = ''
+APIKEYV3_BACKUP = ''
 param_hl = ('&hl=en-US', '&hl=de-DE', '&hl=fr-FR', '&hl=it-IT', '&hl=es-ES', '&hl=pt-PT', '&hl=pl-PL', '&hl=da-DK', '&hl=nb-NO', '&hl=sv-SE', '&hl=fi-FI', '')
 param_ajax_hl = ('en','de','fr','it','es','pt','pl','da','no','sv','fi','')
 picker_lang = ''
@@ -361,6 +363,7 @@ class youtubeGenreScreen(MenuHelper):
                                self.subCatMusicPlaylists.append(self.subCatPlaylist)
 
                self.SelectedChannels = [
+                       ('4Players', 'https://www.youtube.com/channel/UC0jRczpEKxLbGOo45XGkrzg'),
                        ('GIGA Tech', 'https://www.youtube.com/user/tabtechde'),
                        ('GIGA Games', 'https://www.youtube.com/user/giga'),
                        ('KinoCheck', 'https://www.youtube.com/user/KinoCheck'),
@@ -374,6 +377,7 @@ class youtubeGenreScreen(MenuHelper):
                        ('Spiegel TV', 'https://www.youtube.com/user/spiegeltv'),
                        ('BILD', 'https://www.youtube.com/channel/UC4zcMHyrT_xyWlgy5WGpFFQ'),
                        ]
+
                self.SelectedChannels.sort(key=lambda t : t[0].lower())
                self.subCatSelectedChannels = []
                for item in self.SelectedChannels:
@@ -388,6 +392,14 @@ class youtubeGenreScreen(MenuHelper):
                        pass
 
                try:
+                       api_file = config_mp.mediaportal.watchlistpath.value + "mp_yt-apikey"
+                       fname = mp_globals.pluginPath + "/resources/mp_yt-apikey"
+                       if not exists(api_file):
+                               shutil.copyfile(fname, api_file)
+               except:
+                       pass
+
+               try:
                        fname = mp_globals.pluginPath + "/resources/userchan.xml"
                        self.user_path = config_mp.mediaportal.watchlistpath.value + "mp_userchan.xml"
                        if not exists(self.user_path):
@@ -467,6 +479,29 @@ class youtubeGenreScreen(MenuHelper):
                self.channelId = None
 
        def initSubCat(self):
+               global APIKEYV3
+               global APIKEYV3_MASTER
+               global APIKEYV3_BACKUP
+               apikeys = []
+               api_file = config_mp.mediaportal.watchlistpath.value + "mp_yt-apikey"
+               fp = open(api_file)
+               data = fp.read()
+               fp.close()
+               master = re.search('master=(.*?)\n', data)
+               if master:
+                       APIKEYV3_MASTER = master.group(1).strip()
+                       if len(APIKEYV3_MASTER) < 8:
+                               APIKEYV3_MASTER = ''
+                       apikeys.append(APIKEYV3_MASTER)
+               backup = re.search('backup=(.*?)\n', data)
+               if backup:
+                       APIKEYV3_BACKUP = backup.group(1).strip()
+                       if len(APIKEYV3_BACKUP) < 8:
+                               APIKEYV3_BACKUP = ''
+                       apikeys.append(APIKEYV3_BACKUP)
+               if len(apikeys) > 0:
+                       APIKEYV3 = random.choice(apikeys)
+
                if fileExists("/tmp/mp_yt_cache"):
                        tmp = open("/tmp/mp_yt_cache","r")
                        data = tmp.read()
@@ -755,6 +790,9 @@ class youtubeGenreScreen(MenuHelper):
                        self.session.open(YT_ListScreen, genreurl, self.mh_genreTitle)
 
        def mh_callGenreListScreen(self):
+               if not APIKEYV3:
+                       self.session.open(MessageBoxExt, _("Missing API-key, please fill the file 'mp_yt-apikey' first then restart the plugin."), MessageBoxExt.TYPE_ERROR)
+                       return
                global picker_lang
                picker_lang = ''
                if _('My channel') in self.mh_genreTitle:
@@ -1133,12 +1171,14 @@ class YT_ListScreen(MPScreen, ThumbsHelper):
 
                elif ("quotaExceeded" in data) or ("dailyLimitExceeded" in data):
                        global APIKEYV3
-                       if APIKEYV3 != mp_globals.yt_a_backup:
-                               APIKEYV3 = mp_globals.yt_a_backup
-                               self.ml.setList(map(self.YT_ListEntry, [('',_('We switched to our API backup key, please try again!'),'','','','','')]))
-                       else:
-                               self.ml.setList(map(self.YT_ListEntry, [('',_('Our YouTube API quota exceeded, try again tomorrow!'),'','','','','')]))
-                       self['handlung'].setText("")
+                       if APIKEYV3_BACKUP and APIKEYV3 != APIKEYV3_BACKUP:
+                               APIKEYV3 = APIKEYV3_BACKUP
+                               self.ml.setList(map(self.YT_ListEntry, [('',_('YouTube API quota of your master key exceeded, switched to your API backup key, please try again!'),'','','','','')]))
+                               self['handlung'].setText(_('YouTube API quota of your master key exceeded, switched to your API backup key, please try again!'))
+                       elif APIKEYV3_MASTER and APIKEYV3 != APIKEYV3_MASTER:
+                               APIKEYV3 = APIKEYV3_MASTER
+                               self.ml.setList(map(self.YT_ListEntry, [('',_('YouTube API quota of your backup key exceeded, switched to your API master key, please try again!'),'','','','','')]))
+                               self['handlung'].setText(_('YouTube API quota of your backup key exceeded, switched to your API master key, please try again!'))
                        self.keyLocked = True
                else:
                        if self.apiUrlv3:
@@ -1182,7 +1222,7 @@ class YT_ListScreen(MPScreen, ThumbsHelper):
                                        else:
                                                return str(thumbnails['default']['url'])
 
-                               listType = re.search('ItemList|subscriptionList|activityList|playlistList|CategoryList|channelList|videoListResponse', data.get('kind', '')) != None
+                               listType = re.search('ItemList|subscriptionList|SubscriptionListResponse|activityList|playlistList|CategoryList|channelList|videoListResponse', data.get('kind', '')) != None
                                runtimeurl = 'https://www.googleapis.com/youtube/v3/videos?key=%KEY%&part=contentDetails,snippet,statistics&id='
                                runtimeurl = runtimeurl.replace('%KEY%', APIKEYV3)
                                for item in data.get('items', []):
@@ -2076,4 +2116,4 @@ class YT_Oauth2:
                else:
                        return self.accessToken
 
-yt_oauth2 = YT_Oauth2()
\ No newline at end of file
+yt_oauth2 = YT_Oauth2()
index fc629e7..fbb14ac 100644 (file)
@@ -410,9 +410,9 @@ class ZDFStreamScreen(MPScreen, ThumbsHelper):
                        for article in articles:
                                data = re.sub('<div class="img-container x-large-8 x-column">','<source class="m-16-9" data-srcset="/static~Trash">',article, flags=re.S)
                                data = re.sub('itemprop="image" content=""','',data,flags=re.S)
-                               treffer = re.findall('<article.*?picture class.*?data-srcset="(.*?)[\"|\s].*?title="(.*?)".*?"special-info">(.*?)</div.*?teaser-info.*?>(.*?)<.*?data-plusbar-id=\"(.*?)\".*?data-plusbar-url=\"(.*?)\"', data, re.S)
+                               treffer = re.findall('<article.*?picture class.*?data-srcset="(.*?)[\"|\s].*?title="(.*?)".*?teaser-info.*?>(.*?)<.*?"special-info">(.*?)</div.*?data-plusbar-id=\"(.*?)\".*?data-plusbar-url=\"(.*?)\"', data, re.S)
                                if treffer:
-                                       for (image,title,clock,dur,assetId,assetPath) in treffer:
+                                       for (image,title,dur,clock,assetId,assetPath) in treffer:
                                                if "/static" in image:
                                                        try:
                                                                if "m-16-9" in data:
@@ -629,6 +629,8 @@ class ZDFStreamScreen(MPScreen, ThumbsHelper):
                c = c.replace("1496k","3296k")
                c = c.replace("p13v13","p15v13")
                c = c.replace("p13v14","p15v14")
+               c = c.replace("1628k","3360k")
+               c = c.replace("p13v15","p36v15")
                url = str(c).replace("https","http")
                if '.f4m' in url:
                        b = []
index 19e6c84..bd03da3 100644 (file)
@@ -192,14 +192,14 @@ class camhubFilmScreen(MPScreen, ThumbsHelper):
                        message = self.session.open(MessageBoxExt, _("Stream not found"), MessageBoxExt.TYPE_INFO, timeout=5)
                else:
                        license = re.findall('license_code:\s\'(.*?)\',', data, re.S)
-                       url = re.findall('video_(?:alt_|)url\d{0,1}:\s\'(.*?)\'.*?video_(?:alt_|)url_text:\s\'(\d+)(?:p|)\',', data, re.S)
+                       url = re.findall('video_(?:alt_|)url\d{0,1}:\s\'(.*?)\'.*?video_(?:alt_|)url\d{0,1}_text:\s\'(\d+)(?:p|)(?: HD|)\',', data, re.S)
                        if not url:
                                url = re.findall('video_(?:alt_|)url\d{0,1}:\s\'(.*?)\'', data, re.S)
                        if license and url:
                                try:
                                        max = 0
                                        for vid in url:
-                                               if int(vid[1]) > max:
+                                               if int(vid[1]) > max and not "login" in vid[0]:
                                                        max = int(vid[1])
                                                        url = vid[0]
                                except:
@@ -218,9 +218,9 @@ class camhubFilmScreen(MPScreen, ThumbsHelper):
                                        message = self.session.open(MessageBoxExt, _("Stream not found"), MessageBoxExt.TYPE_INFO, timeout=5)
 
        def getStream(self, url, referer):
-               self['name'].setText('')
                Title = self['liste'].getCurrent()[0][0]
                Link = self['liste'].getCurrent()[0][1]
+               self['name'].setText(Title)
                import requests
                ck = requests.utils.dict_from_cookiejar(cookies)
                headers = '&Cookie=%s' % ','.join(['%s=%s' % (key, urllib.quote_plus(ck[key])) for key in ck])
index 90c504b..b863678 100644 (file)
@@ -476,6 +476,10 @@ class cumlouderFilmScreen(MPScreen):
 
        def loadData(self, data):
                self.getLastPage(data, 'class="pagination"(.*?)</ul>')
+               if "termina LISTADO" in data:
+                       data = re.search('(.*?)termina LISTADO', data, re.S).group(1)
+               elif 'class="related-sites' in data:
+                       data = re.search('(.*?)class="related-sites', data, re.S).group(1)
                if 'class="box-link-productora">' in data:
                        Movies = re.findall('class="muestra-escena"\shref="(.*?)".*?data-src="(.*?)".*?alt="(.*?)".*?vistas sprite"></span>(.*?)views.*?minutos sprite"></span>(.*?)(?:\sm|)</span.*?class="link-productora.*?>(.*?)</a', data, re.S)
                        if Movies:
@@ -493,7 +497,7 @@ class cumlouderFilmScreen(MPScreen):
                                                Image = 'http:' + Image
                                        self.filmliste.append((decodeHtml(Title), Url, Image, Date, Runtime, Views, None))
                if len(self.filmliste) == 0:
-                       self.filmliste.append((_('No videos found!'), '', None, ''))
+                       self.filmliste.append((_('No videos found!'), '', None, '', '', '', None))
                self.ml.setList(map(self._defaultlistleft, self.filmliste))
                self.ml.moveToIndex(0)
                self.keyLocked = False
index 66fa5e0..7a17814 100644 (file)
@@ -36,6 +36,7 @@
 
 from Plugins.Extensions.MediaPortal.plugin import _
 from Plugins.Extensions.MediaPortal.resources.imports import *
+from Plugins.Extensions.MediaPortal.resources.decrypt import decrypturl
 
 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")
@@ -262,15 +263,46 @@ class faapyFilmScreen(MPScreen, ThumbsHelper):
                        return
                Link = self['liste'].getCurrent()[0][1]
                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_(?: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]
-                       mp_globals.player_agent = agent
-                       self.session.open(SimplePlayer, [(Title, url)], showPlaylist=False, ltype='faapy')
\ No newline at end of file
+                       self['name'].setText(_('Please wait...'))
+                       twAgentGetPage(Link, agent=agent, cookieJar=cookies).addCallback(self.parseVideo).addErrback(self.dataError)
+
+       def parseVideo(self, data):
+               Title = self['liste'].getCurrent()[0][0]
+               mp_globals.player_agent = agent
+               license = re.findall('license_code:\s\'(.*?)\',', data, re.S)
+               url = re.findall('video_(?:alt_|)url\d{0,1}:\s\'(.*?)\'.*?video_(?:alt_|)url\d{0,1}_text:\s\'(\d+)(?:p|)(?: HD|)\',', data, re.S)
+               if not url:
+                       url = re.findall('video_(?:alt_|)url\d{0,1}:\s\'(.*?)\'', data, re.S)
+               if license and url:
+                       try:
+                               max = 0
+                               for vid in url:
+                                       if int(vid[1]) > max and not "login" in vid[0]:
+                                               max = int(vid[1])
+                                               url = vid[0]
+                       except:
+                               if not "login" in url[-1]:
+                                       url = url[-1]
+                               else:
+                                       url = url[-2]
+                       if 'function/0/' in url:
+                               url = decrypturl(url, license[0])
+                       if url:
+                               tw_agent_hlp = TwAgentHelper(cookieJar=cookies)
+                               tw_agent_hlp.getRedirectedUrl(url).addCallback(self.getStream).addErrback(self.dataError)
+               else:
+                       message = self.session.open(MessageBoxExt, _("Stream not found"), MessageBoxExt.TYPE_INFO, timeout=5)
+
+       def getStream(self, url):
+               Title = self['liste'].getCurrent()[0][0]
+               Link = self['liste'].getCurrent()[0][1]
+               self['name'].setText(Title)
+               import requests
+               ck = requests.utils.dict_from_cookiejar(cookies)
+               headers = '&Cookie=%s' % ','.join(['%s=%s' % (key, urllib.quote_plus(ck[key])) for key in ck])
+               headers = headers + '&Referer=%s' % Link
+               if url.startswith('//'):
+                       url = 'https:' + url
+               url = url + '#User-Agent='+agent+headers
+               mp_globals.player_agent = agent
+               self.session.open(SimplePlayer, [(Title, url)], showPlaylist=False, ltype='faapy')
\ No newline at end of file
diff --git a/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/porn/mofos.py b/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/porn/mofos.py
deleted file mode 100644 (file)
index eec7e9b..0000000
+++ /dev/null
@@ -1,265 +0,0 @@
-# -*- coding: utf-8 -*-
-#######################################################################################################
-#
-#    MediaPortal for Dreambox OS
-#
-#    Coded by MediaPortal Team (c) 2013-2020
-#
-#  This plugin is open source but it is NOT free software.
-#
-#  This plugin may only be distributed to and executed on hardware which
-#  is licensed by Dream Property GmbH. This includes commercial distribution.
-#  In other words:
-#  It's NOT allowed to distribute any parts of this plugin or its source code in ANY way
-#  to hardware which is NOT licensed by Dream Property GmbH.
-#  It's NOT allowed to execute this plugin and its source code or even parts of it in ANY way
-#  on hardware which is NOT licensed by Dream Property GmbH.
-#
-#  This applies to the source code as a whole as well as to parts of it, unless explicitely
-#  stated otherwise.
-#
-#  If you want to use or modify the code or parts of it, permission from the authors is necessary.
-#  You have to keep OUR license and inform us about any modification, but it may NOT be distributed
-#  other than under the conditions noted above.
-#
-#  As an exception regarding modifcations, you are NOT permitted to remove
-#  any copy protections implemented in this plugin or change them for means of disabling
-#  or working around the copy protections, unless the change has been explicitly permitted
-#  by the original authors. Also decompiling and modification of the closed source
-#  parts is NOT permitted.
-#
-#  Advertising with this plugin is NOT allowed.
-#
-#  For other uses, permission from the authors is necessary.
-#
-#######################################################################################################
-
-from Plugins.Extensions.MediaPortal.plugin import _
-from Plugins.Extensions.MediaPortal.resources.imports import *
-
-myagent = 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:40.0) Gecko/20100101 Firefox/40.0'
-BASE_NAME = "Mofos.com"
-default_cover = "file://%s/mofos.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
-
-class mofosGenreScreen(MPScreen):
-
-       def __init__(self, session):
-               MPScreen.__init__(self, session, skin='MP_Plugin', default_cover=default_cover)
-
-               self["actions"] = ActionMap(["MP_Actions"], {
-                       "ok" : self.keyOK,
-                       "0" : self.closeAll,
-                       "cancel" : self.keyCancel,
-                       "up" : self.keyUp,
-                       "down" : self.keyDown,
-                       "right" : self.keyRight,
-                       "left" : self.keyLeft
-               }, -1)
-
-               self['title'] = Label(BASE_NAME)
-               self['ContentTitle'] = Label("Genre:")
-               self.keyLocked = True
-               self.suchString = ''
-
-               self.genreliste = []
-               self.ml = MenuList([], enableWrapAround=True, content=eListboxPythonMultiContent)
-               self['liste'] = self.ml
-
-               self.onLayoutFinish.append(self.layoutFinished)
-
-       def layoutFinished(self):
-               self.keyLocked = True
-               self['name'].setText(_('Please wait...'))
-               url = "https://www.mofos.com/scenes"
-               getPage(url, agent=myagent).addCallback(self.genreData).addErrback(self.dataError)
-
-       def genreData(self, data):
-               Cats = re.findall('"\d+":{"id":(\d+),"name":"([\w ]+)","images":\[\],"groups":\[\]},', data, re.S)
-               if Cats:
-                       for (Url, Title) in Cats:
-                               Url = 'https://www.mofos.com/scenes?tags=' + Url + '&page='
-                               self.genreliste.append((decodeHtml(Title), Url, default_cover))
-                       self.genreliste.sort()
-               self.genreliste.insert(0, ("Girls", 'https://www.mofos.com/models?sortby=rating&page=', default_cover))
-               self.genreliste.insert(0, ("Most Viewed", 'https://www.mofos.com/scenes?sortby=views&page=', default_cover))
-               self.genreliste.insert(0, ("Top Rated", 'https://www.mofos.com/scenes?sortby=rating&page=', default_cover))
-               self.genreliste.insert(0, ("Release Date", 'https://www.mofos.com/scenes?sortby=date&page=', default_cover))
-               self.ml.setList(map(self._defaultlistcenter, self.genreliste))
-               self.ml.moveToIndex(0)
-               self.keyLocked = False
-               self.showInfos()
-
-       def showInfos(self):
-               title = self['liste'].getCurrent()[0][0]
-               self['name'].setText(title)
-               Image = self['liste'].getCurrent()[0][2]
-               CoverHelper(self['coverArt']).getCover(Image)
-
-       def keyOK(self):
-               if self.keyLocked:
-                       return
-               if not config_mp.mediaportal.premiumize_use.value:
-                       message = self.session.open(MessageBoxExt, _("%s only works with enabled MP premiumize.me option (MP Setup)!" % BASE_NAME), MessageBoxExt.TYPE_INFO, timeout=10)
-                       return
-               Name = self['liste'].getCurrent()[0][0]
-               if Name == "Girls":
-                       Link = self['liste'].getCurrent()[0][1]
-                       self.session.open(mofosGirlsScreen, Link, Name)
-               else:
-                       Link = self['liste'].getCurrent()[0][1]
-                       self.session.open(mofosFilmScreen, Link, Name)
-
-class mofosGirlsScreen(MPScreen, ThumbsHelper):
-
-       def __init__(self, session, Link, Name):
-               self.Link = Link
-               self.Name = Name
-               MPScreen.__init__(self, session, skin='MP_Plugin', default_cover=default_cover)
-               ThumbsHelper.__init__(self)
-
-               self["actions"] = ActionMap(["MP_Actions"], {
-                       "ok" : self.keyOK,
-                       "0" : self.closeAll,
-                       "cancel" : self.keyCancel,
-                       "5" : self.keyShowThumb,
-                       "up" : self.keyUp,
-                       "down" : self.keyDown,
-                       "right" : self.keyRight,
-                       "left" : self.keyLeft,
-                       "nextBouquet" : self.keyPageUp,
-                       "prevBouquet" : self.keyPageDown,
-                       "green" : self.keyPageNumber
-               }, -1)
-
-               self['title'] = Label(BASE_NAME)
-               self['ContentTitle'] = Label("Genre: %s" % self.Name)
-               self['F2'] = Label(_("Page"))
-
-               self['Page'] = Label(_("Page:"))
-               self.keyLocked = True
-               self.page = 1
-               self.lastpage = 1
-
-               self.filmliste = []
-               self.ml = MenuList([], enableWrapAround=True, content=eListboxPythonMultiContent)
-               self['liste'] = self.ml
-
-               self.onLayoutFinish.append(self.loadPage)
-
-       def loadPage(self):
-               self.keyLocked = True
-               self['name'].setText(_('Please wait...'))
-               self.filmliste = []
-               url = "%s%s" % (self.Link, str(self.page))
-               getPage(url, agent=myagent).addCallback(self.loadData).addErrback(self.dataError)
-
-       def loadData(self, data):
-               self.getLastPage(data, 'class="vlgkf8-0(.*?)<script', '.*\?page=(\d+)')
-               preparse = re.search('>Mofos Girls<div class=(.*?)<script', data, re.S)
-               Girls = re.findall('<a href="(/model/.*?)" title="(.*?)".*?<img alt=".*?" src="(.*?)".*?href=', preparse.group(1), re.S)
-               if Girls:
-                       for (Url, Title, Image) in Girls:
-                               Url = "https://www.mofos.com" + Url + "?page="
-                               if Image.startswith('//'):
-                                       Image = 'https:' + Image
-                               Title = Title.replace('Gay Black Porn Scenes','').strip()
-                               self.filmliste.append((decodeHtml(Title), Url, Image))
-               if len(self.filmliste) == 0:
-                       self.filmliste.append((_('No pornstars found!'), None, None))
-               self.ml.setList(map(self._defaultlistleft, self.filmliste))
-               self.ml.moveToIndex(0)
-               self.keyLocked = False
-               self.th_ThumbsQuery(self.filmliste, 0, 1, 2, self.page, int(self.lastpage), 1, 1, mode=1)
-               self.showInfos()
-
-       def showInfos(self):
-               title = self['liste'].getCurrent()[0][0]
-               pic = self['liste'].getCurrent()[0][2]
-               self['name'].setText(title)
-               CoverHelper(self['coverArt']).getCover(pic)
-
-       def keyOK(self):
-               if self.keyLocked:
-                       return
-               Name = self['liste'].getCurrent()[0][0]
-               Link = self['liste'].getCurrent()[0][1]
-               self.session.open(mofosFilmScreen, Link, Name)
-
-class mofosFilmScreen(MPScreen, ThumbsHelper):
-
-       def __init__(self, session, Link, Name):
-               self.Link = Link
-               self.Name = Name
-               MPScreen.__init__(self, session, skin='MP_Plugin', default_cover=default_cover)
-               ThumbsHelper.__init__(self)
-
-               self["actions"] = ActionMap(["MP_Actions"], {
-                       "ok" : self.keyOK,
-                       "0" : self.closeAll,
-                       "cancel" : self.keyCancel,
-                       "5" : self.keyShowThumb,
-                       "up" : self.keyUp,
-                       "down" : self.keyDown,
-                       "right" : self.keyRight,
-                       "left" : self.keyLeft,
-                       "nextBouquet" : self.keyPageUp,
-                       "prevBouquet" : self.keyPageDown,
-                       "green" : self.keyPageNumber
-               }, -1)
-
-               self['title'] = Label(BASE_NAME)
-               self['ContentTitle'] = Label("Genre: %s" % self.Name)
-               self['F2'] = Label(_("Page"))
-
-               self['Page'] = Label(_("Page:"))
-               self.keyLocked = True
-               self.page = 1
-               self.lastpage = 1
-
-               self.filmliste = []
-               self.ml = MenuList([], enableWrapAround=True, content=eListboxPythonMultiContent)
-               self['liste'] = self.ml
-
-               self.onLayoutFinish.append(self.loadPage)
-
-       def loadPage(self):
-               self.keyLocked = True
-               self['name'].setText(_('Please wait...'))
-               self.filmliste = []
-               url = "%s%s" % (self.Link, str(self.page))
-               getPage(url, agent=myagent).addCallback(self.loadData).addErrback(self.dataError)
-
-       def loadData(self, data):
-               self.getLastPage(data, 'class="vlgkf8-0(.*?)<script', '.*\?page=(\d+)')
-               preparse = re.search('>Mofos Videos<div class=(.*?)<script', data, re.S)
-               Movies = re.findall('<a href="(/scene/.*?)" title="(.*?)".*?<img alt=".*?" src="(.*?)".*?href=.*?(<a href="/model/.*?" title=".*?".*?</div>)', data, re.S)
-               if Movies:
-                       for (Url, Title, Image, Pornstars) in Movies:
-                               if Image.startswith('//'):
-                                       Image = "https:" + Image
-                               Url = "https://www.mofos.com" + Url
-                               Title = stripAllTags(Pornstars).replace('+1','').strip() + " - " + Title.replace(' - Asian HD Porn','').strip()
-                               self.filmliste.append((decodeHtml(Title), Url, Image))
-               if len(self.filmliste) == 0:
-                       self.filmliste.append((_('No videos found!'), '', None, ''))
-               self.ml.setList(map(self._defaultlistleft, self.filmliste))
-               self.ml.moveToIndex(0)
-               self.keyLocked = False
-               self.th_ThumbsQuery(self.filmliste, 0, 1, 2, None, None, self.page, int(self.lastpage), mode=1)
-               self.showInfos()
-
-       def showInfos(self):
-               title = self['liste'].getCurrent()[0][0]
-               pic = self['liste'].getCurrent()[0][2]
-               self['name'].setText(title)
-               CoverHelper(self['coverArt']).getCover(pic)
-
-       def keyOK(self):
-               if self.keyLocked:
-                       return
-               Link = self['liste'].getCurrent()[0][1]
-               get_stream_link(self.session).check_link(Link, self.play)
-
-       def play(self, url):
-               title = self['liste'].getCurrent()[0][0]
-               self.session.open(SimplePlayer, [(title, url)], showPlaylist=False, ltype='mofos')
\ No newline at end of file
index eba5aa5..80129de 100644 (file)
@@ -70,6 +70,22 @@ class porn7GenreScreen(MPScreen):
                        self.portal = "Deviants.com"
                        self.baseurl = "https://www.deviants.com"
                        default_cover = "file://%s/deviants.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
+               elif self.mode == "nakedgirls":
+                       self.portal = "NakedGirls.mobi"
+                       self.baseurl = "https://www.nakedgirls.mobi"
+                       default_cover = "file://%s/nakedgirls.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
+               elif self.mode == "jizzboom":
+                       self.portal = "JizzBoom.com"
+                       self.baseurl = "https://jizzboom.com"
+                       default_cover = "file://%s/jizzboom.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
+               elif self.mode == "familyporn":
+                       self.portal = "FamilyPorn.tv"
+                       self.baseurl = "https://familyporn.tv"
+                       default_cover = "file://%s/familyporn.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
+               elif self.mode == "femefun":
+                       self.portal = "FemeFun.com"
+                       self.baseurl = "https://femefun.com"
+                       default_cover = "file://%s/femefun.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
 
                MPScreen.__init__(self, session, skin='MP_Plugin', default_cover=default_cover)
 
@@ -107,6 +123,28 @@ class porn7GenreScreen(MPScreen):
                        self.maincat.insert(0, ("Most Viewed", "popular#video_viewed", default_cover))
                        self.maincat.insert(0, ("Newest", "new#post_date", default_cover))
                        self.maincat.insert(0, ("--- Search ---", "callSuchen", default_cover))
+               if self.mode == "jizzboom":
+                       self.maincat.insert(0, ("Longest", "longest.html#duration", default_cover))
+                       self.maincat.insert(0, ("Featured", "#ctr", default_cover))
+                       self.maincat.insert(0, ("Top Rated", "rating.html#rating", default_cover))
+                       self.maincat.insert(0, ("Most Viewed", "popular.html#video_viewed", default_cover))
+                       self.maincat.insert(0, ("Newest", "updates.html#post_date", default_cover))
+                       self.maincat.insert(0, ("--- Search ---", "callSuchen", default_cover))
+               elif self.mode in ["nakedgirls", "familyporn"]:
+                       self.maincat.insert(0, ("Longest", "videos#duration", default_cover))
+                       self.maincat.insert(0, ("Most Favorited", "videos#most_favourited", default_cover))
+                       self.maincat.insert(0, ("Most Commented", "videos#most_commented", default_cover))
+                       self.maincat.insert(0, ("Featured", "videos#ctr", default_cover))
+                       self.maincat.insert(0, ("Top Rated", "videos#rating", default_cover))
+                       self.maincat.insert(0, ("Most Viewed", "videos#video_viewed", default_cover))
+                       self.maincat.insert(0, ("Newest", "videos#post_date", default_cover))
+                       self.maincat.insert(0, ("--- Search ---", "callSuchen", default_cover))
+               elif self.mode in ["femefun"]:
+                       self.maincat.insert(0, ("Longest", "videos#duration", default_cover))
+                       self.maincat.insert(0, ("Featured", "videos#ctr", default_cover))
+                       self.maincat.insert(0, ("Top Rated", "videos#rating", default_cover))
+                       self.maincat.insert(0, ("Newest", "videos#post_date", default_cover))
+                       self.maincat.insert(0, ("--- Search ---", "callSuchen", default_cover))
                else:
                        self.maincat.insert(0, ("Longest", "longest#duration", default_cover))
                        self.maincat.insert(0, ("Most Favorited", "latest-updates#most_favourited", default_cover))
@@ -117,7 +155,11 @@ class porn7GenreScreen(MPScreen):
                        self.maincat.insert(0, ("Newest", "latest-updates#post_date", default_cover))
                        self.maincat.insert(0, ("--- Search ---", "callSuchen", default_cover))
                self.keyLocked = True
-               url = "%s/categories/?mode=async&function=get_block&block_id=list_categories_categories_list&sort_by=total_videos" % self.baseurl
+               if self.mode == "jizzboom":
+                       catmode = "category.html"
+               else:
+                       catmode = "categories/"
+               url = "%s/%s?mode=async&function=get_block&block_id=list_categories_categories_list&sort_by=total_videos" % (self.baseurl, catmode)
                twAgentGetPage(url, agent=agent).addCallback(self.genreData).addErrback(self.dataError)
                if self.mode == "porn7":
                        twAgentGetPage(url+'&from=02', agent=agent).addCallback(self.genreData).addErrback(self.dataError)
@@ -128,15 +170,25 @@ class porn7GenreScreen(MPScreen):
                        twAgentGetPage(url+'&from=07', agent=agent).addCallback(self.genreData).addErrback(self.dataError)
                        twAgentGetPage(url+'&from=08', agent=agent).addCallback(self.genreData).addErrback(self.dataError)
                        twAgentGetPage(url+'&from=09', agent=agent).addCallback(self.genreData).addErrback(self.dataError)
+               elif self.mode == "femefun":
+                       twAgentGetPage(url+'&from=02', agent=agent).addCallback(self.genreData).addErrback(self.dataError)
+                       twAgentGetPage(url+'&from=03', agent=agent).addCallback(self.genreData).addErrback(self.dataError)
 
        def genreData(self, data):
-               if self.mode == "porn7":
-                       Cats = re.findall('class="item".*?href="(.*?)".*?"thumb\s{0,2}"\ssrc="(.*?)".*?class="title"><u>(.*?)</u>', data, re.S)
+               if self.mode in ["porn7", "jizzboom"]:
+                       Cats = re.findall('class="item".*?href="(.*?)".*?"thumb\s{0,2}(?:lazy-load|)"\ssrc="(.*?)".*?class="title">(?:<u>|)(.*?)(?:</u>|</span)', data, re.S)
+               elif self.mode in ["nakedgirls", "familyporn", "femefun"]:
+                       Cats = re.findall('class="th".*?href="(.*?)".*?<img.*?data-original="(.*?)"\salt="(.*?)"', data, re.S)
                else:
                        Cats = re.findall('class="thumb grid item".*?href="(.*?)".*?<img src="(.*?)"\salt="(.*?)"', data, re.S)
                if Cats:
                        for (Url, Image, Title) in Cats:
-                               self.extcat.append((upperString(stripAllTags(Title)), Url.strip('/'), Image))
+                               if self.mode == "nakedgirls":
+                                       Image = default_cover
+                               if self.mode == "jizzboom":
+                                       Title = Title.title()
+                               if not "Beastiality" in Title:
+                                       self.extcat.append((upperString(stripAllTags(Title)), Url.strip('/'), Image))
                        self.extcat.sort()
                self.filmliste = []
                self.filmliste.extend(self.maincat)
@@ -187,6 +239,14 @@ class porn7FilmScreen(MPScreen, ThumbsHelper):
                        default_cover = "file://%s/interracial.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
                elif self.portal == "Deviants.com":
                        default_cover = "file://%s/deviants.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
+               elif self.portal == "NakedGirls.mobi":
+                       default_cover = "file://%s/nakedgirls.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
+               elif self.portal == "JizzBoom.com":
+                       default_cover = "file://%s/jizzboom.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
+               elif self.portal == "FamilyPorn.tv":
+                       default_cover = "file://%s/familyporn.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
+               elif self.portal == "FemeFun.com":
+                       default_cover = "file://%s/femefun.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
 
                MPScreen.__init__(self, session, skin='MP_Plugin', default_cover=default_cover)
                ThumbsHelper.__init__(self)
@@ -227,35 +287,88 @@ class porn7FilmScreen(MPScreen, ThumbsHelper):
                if re.match(".*Search", self.Name):
                        if self.portal == "Porn7.xxx":
                                url = "%s/search/%s/?mode=async&function=get_block&block_id=list_videos_videos_list_search_result&sort_by=&from2=%s" % (self.baseurl, self.Link, str(self.page))
+                       elif self.portal == "NakedGirls.mobi":
+                               url = "%s/search/%s/?mode=async&action=get_block&block_id=list_videos_common_videos_list&from=%s&sort_by=post_date" % (self.baseurl, self.Link, str(self.page))
+                       elif self.portal == "JizzBoom.com":
+                               url = "%s/research/%s.html?mode=async&function=get_block&block_id=list_videos_videos_list_search_result&q=%s&category_ids=&sort_by=pseudo_rand&from_videos=%s&from_albums=%s" % (self.baseurl, self.Link.replace('-','%20'), self.Link, str(self.page), str(self.page))
+                       elif self.portal == "FamilyPorn.tv":
+                               url = "%s/search/%s/%s/" % (self.baseurl, self.Link, str(self.page))
+                       elif self.portal == "FemeFun.com":
+                               url = "%s/search/%s/%s/?mode=async&function=get_block&block_id=list_videos_common_videos_list" % (self.baseurl, self.Link, str(self.page))
                        else:
                                url = "%s/search/%s/?mode=async&function=get_block&block_id=list_videos_videos_list_search_result&sort_by=post_date&from_videos=%s&from_albums=%s" % (self.baseurl, self.Link, str(self.page), str(self.page))
                else:
+                       if self.portal == "JizzBoom.com":
+                               delimit = ""
+                       else:
+                               delimit = "/"
                        if self.Link.startswith('http'):
-                               url = "%s/?mode=async&function=get_block&block_id=list_videos_common_videos_list&sort_by=post_date&from=%s&ipp=40" % (self.Link, str(self.page))
+                               url = "%s%s?mode=async&function=get_block&block_id=list_videos_common_videos_list&sort_by=post_date&from=%s&ipp=40" % (self.Link, delimit, str(self.page))
                        else:
-                               if self.Name in ["Newest", "Most Commented", "Most Favorited"] and self.portal == "Porn7.xxx":
+                               if self.Name in ["Newest", "Most Commented", "Most Favorited"] and self.portal in ["Porn7.xxx", "JizzBoom.com"]:
                                        blockid = "list_videos_latest_videos_list"
+                               elif self.Name in ["Featured"] and self.portal == "JizzBoom.com":
+                                       blockid = "list_videos_videos_watched_right_now"
                                else:
                                        blockid = "list_videos_common_videos_list"
-                               url = "%s/%s/?mode=async&function=get_block&block_id=%s&sort_by=%s&from=%s&ipp=40" % (self.baseurl, self.Link.split('#')[0], blockid, self.Link.split('#')[-1], str(self.page))
+                               url = "%s/%s%s?mode=async&function=get_block&block_id=%s&sort_by=%s&from=%s&ipp=40" % (self.baseurl, self.Link.split('#')[0], delimit, blockid, self.Link.split('#')[-1], str(self.page))
+               print url
                twAgentGetPage(url, agent=agent).addCallback(self.genreData).addErrback(self.dataError)
 
        def genreData(self, data):
                if re.match(".*Search", self.Name):
-                       self.getLastPage(data, 'class="pagination"(.*?)(?:class="next"|</ul>)', '.*(?:from2:|from_albums:|<span>)(\d{2,5})(?:</span>|\")')
+                       if self.portal in ["NakedGirls.mobi", "FemeFun.com"]:
+                               if 'js-load-more' in data or 'data-ajax="more"' in data:
+                                       self.lastpage = self.page + 1
+                               if self.lastpage > 1:
+                                       self['page'].setText(str(self.page) + ' / ' + str(self.lastpage))
+                               else:
+                                       self['page'].setText('1 / 1')
+                       else:
+                               self.getLastPage(data, 'class="pagination"(.*?)(?:class="next"|</ul>)', '.*(?:from:|from2:|from_albums:|<span>)(\d{2,5})(?:</span>|\")')
                else:
-                       if 'class="link_show_more"' in data or 'class="show_more"' in data:
-                               self.lastpage = self.page + 1
-                       if self.lastpage > 1:
-                               self['page'].setText(str(self.page) + ' / ' + str(self.lastpage))
+                       if self.portal in ["JizzBoom.com", "FamilyPorn.tv"]:
+                               self.getLastPage(data, 'class="pagination"(.*?)(?:class="next"|</ul>)', '.*(?:from:|from2:|from_albums:|<span>)(\d{2,5})(?:</span>|\")')
                        else:
-                               self['page'].setText('1 / 1')
-               Movies = re.findall('class="item\s{0,3}(?:thumb|)".*?href="(.*?)"\s+title="(.*?)".*?(?:src|data-original)="(?!data:image)(.*?)".*?class="(?:duration|time)">(.*?)</div>', data, re.S)
-               if Movies:
-                       for (Url, Title, Image, Runtime) in Movies:
-                               self.filmliste.append((decodeHtml(Title), Url, Image, Runtime))
+                               if 'class="link_show_more"' in data or 'class="show_more"' in data or 'js-load-more' in data or 'data-ajax="more"' in data:
+                                       self.lastpage = self.page + 1
+                               if self.lastpage > 1:
+                                       self['page'].setText(str(self.page) + ' / ' + str(self.lastpage))
+                               else:
+                                       self['page'].setText('1 / 1')
+               if self.portal == "NakedGirls.mobi":
+                       Movies = re.findall('class="th item-thumb.*?href="(.*?)"\stitle="(.*?)".*?<img.*?(?:src|data-original)="(?!data:image)(.*?)"', data, re.S)
+                       if Movies:
+                               for (Url, Title, Image) in Movies:
+                                       self.filmliste.append((decodeHtml(Title), Url, Image, '', '', '', ''))
+               elif self.portal in ["FamilyPorn.tv", "FemeFun.com"]:
+                       Movies = re.findall('class="(?:item\s|)th".*?href="(.*?)"\stitle="(.*?)".*?<img.*?(?:src|data-original)="(?!data:image)(.*?)".*?class="icon-calendar">(.*?)</span.*?class="icon-view">(.*?)</span>.*?class="icon-time">(.*?)</span.*?rating thumb.*?>(.*?)</span>', data, re.S)
+                       if Movies:
+                               for (Url, Title, Image, Added, Views, Runtime, Rating) in Movies:
+                                       stop = False
+                                       Runtime = stripAllTags(Runtime).strip()
+                                       Added = stripAllTags(Added).strip()
+                                       Views = stripAllTags(Views).replace(' ','').strip()
+                                       if self.portal == "FemeFun.com":
+                                               blacklist = ['k9', 'scat', 'toilet', 'pony', 'canine', 'doggy', 'doggie', 'animal', 'beast', 'beasts', 'pooch', 'poodle', 'goat', 'pet', 'sheep', 'dog', 'horse', 'donkey', 'mustang', 'stallion', 'pig', 'bestiality', 'beastality', 'beastiality', 'zoo']
+                                               for x in blacklist:
+                                                       if " "+x.lower() in Title.lower():
+                                                               stop = True
+                                                       elif x.lower()+" " in Title.lower():
+                                                               stop = True
+                                                       elif x.lower()+"'s " in Title.lower():
+                                                               stop = True
+                                               if stop:
+                                                       continue
+                                       self.filmliste.append((decodeHtml(Title), Url, Image, Runtime, Views, Added, Rating.strip()))
+               else:
+                       Movies = re.findall('class="item\s{0,3}(?:thumb|)".*?href="(.*?)"\s+title="(.*?)".*?(?:src|data-original)="(?!data:image)(.*?)".*?class="(?:duration|time)(?: icon-stopwatch|)">(.*?)</div>', data, re.S)
+                       if Movies:
+                               for (Url, Title, Image, Runtime) in Movies:
+                                       Runtime = Runtime.replace('h','').replace('m','').replace('s','')
+                                       self.filmliste.append((decodeHtml(Title), Url, Image, Runtime, '', '', ''))
                if len(self.filmliste) == 0:
-                       self.filmliste.append((_('No videos found!'), None, None, ''))
+                       self.filmliste.append((_('No videos found!'), None, None, '', '', '', ''))
                self.ml.setList(map(self._defaultlistleft, self.filmliste))
                self.ml.moveToIndex(0)
                self.keyLocked = False
@@ -267,8 +380,19 @@ class porn7FilmScreen(MPScreen, ThumbsHelper):
                url = self['liste'].getCurrent()[0][1]
                pic = self['liste'].getCurrent()[0][2]
                runtime = self['liste'].getCurrent()[0][3]
+               views = self['liste'].getCurrent()[0][4]
+               added = self['liste'].getCurrent()[0][5]
+               rating = self['liste'].getCurrent()[0][6]
                self['name'].setText(title)
-               self['handlung'].setText("Runtime: %s" % runtime)
+               if runtime:
+                       runtime = "Runtime: %s" % runtime
+               if added:
+                       added = "\nAdded: %s" % added
+               if views:
+                       views = "\nViews: %s" % views
+               if rating:
+                       rating = "\nRating: %s" % rating
+               self['handlung'].setText("%s%s%s%s" % (runtime, added, views, rating))
                CoverHelper(self['coverArt']).getCover(pic)
 
        def keyOK(self):
@@ -283,14 +407,14 @@ class porn7FilmScreen(MPScreen, ThumbsHelper):
                Title = self['liste'].getCurrent()[0][0]
                mp_globals.player_agent = agent
                license = re.findall('license_code:\s\'(.*?)\',', data, re.S)
-               url = re.findall('video_(?:alt_|)url\d{0,1}:\s\'(.*?)\'.*?video_(?:alt_|)url_text:\s\'(\d+)(?:p|)\',', data, re.S)
+               url = re.findall('video_(?:alt_|)url\d{0,1}:\s\'(.*?)\'.*?video_(?:alt_|)url\d{0,1}_text:\s\'(\d+)(?:p|)(?: HD|)\',', data, re.S)
                if not url:
                        url = re.findall('video_(?:alt_|)url\d{0,1}:\s\'(.*?)\'', data, re.S)
                if license and url:
                        try:
                                max = 0
                                for vid in url:
-                                       if int(vid[1]) > max:
+                                       if int(vid[1]) > max and not "login" in vid[0]:
                                                max = int(vid[1])
                                                url = vid[0]
                        except:
index 1b22872..b08e43c 100644 (file)
@@ -90,6 +90,7 @@ class porndoeGenreScreen(MPScreen):
                        self.genreliste.sort()
                        self.genreliste.insert(0, ("Longest", "https://www.porndoe.com/videos?sort=duration-down", default_cover, False))
                        self.genreliste.insert(0, ("Most Viewed", "https://www.porndoe.com/videos?sort=views-down", default_cover, False))
+                       self.genreliste.insert(0, ("Most Popular", "https://www.porndoe.com/videos?sort=popular-down", default_cover, False))
                        self.genreliste.insert(0, ("Top Rated", "https://www.porndoe.com/videos?sort=likes-down", default_cover, False))
                        self.genreliste.insert(0, ("Newest", "https://www.porndoe.com/videos", default_cover, False))
                        self.genreliste.insert(0, ("--- Search ---", "callSuchen", default_cover, False))
@@ -234,19 +235,26 @@ class porndoeFilmScreen(MPScreen, ThumbsHelper):
                Link = self['liste'].getCurrent()[0][1]
                self.keyLocked = True
                self['name'].setText(_('Please wait...'))
-               getPage(Link, agent=agent, cookies=ck).addCallback(self.getVideoPage).addErrback(self.dataError)
+               getPage(Link, agent=agent, cookies=ck).addCallback(self.getId).addErrback(self.dataError)
+
+       def getId(self, data):
+               id = re.findall('"id": "(\d+)"', data, re.S)
+               if id:
+                       url = "https://porndoe.com/service/index?device=desktop&page=video&id=" + id[0]
+                       ref = self['liste'].getCurrent()[0][1]
+                       getPage(url, agent=agent, cookies=ck, headers={'Referer':ref}).addCallback(self.getVideoPage).addErrback(self.dataError)
 
        def getVideoPage(self, data):
                Title = self['liste'].getCurrent()[0][0]
                self['name'].setText(Title)
-               videoPage = re.findall('"(\d+)": {\s+"type": "video".*?"url":\s"(.*?)"', data, re.S)
+               videoPage = re.findall('"(\d+)":{"type":"video".*?"url":"(.*?)"', data, re.S)
                self.keyLocked = False
                if videoPage:
                        maxres = 0
                        for (res, vidurl) in videoPage:
                                if int(res) > maxres:
                                        maxres = int(res)
-                                       url = vidurl
+                                       url = vidurl.replace('\/','/')
                        if url.startswith('//'):
                                url = 'http:' + url
                        headers = '&Referer=' + self['liste'].getCurrent()[0][1]
index dba39e6..3d743fb 100644 (file)
@@ -96,7 +96,7 @@ class porngoGenreScreen(MPScreen):
 
        def genreData(self, data):
                if self.url:
-                       self.getLastPage(data, 'class="pagination">(.*?)id="clck_ntv"', '.*(?:\/|">)(\d+)')
+                       self.getLastPage(data, 'class="pagination">(.*?)spot_footer', '.*(?:\/|">)(\d+)')
                        pornstars = re.findall('class="thumb">.*?href="(.*?)".*?title="(.*?)".*?<img\ssrc="(.*?)"', data, re.S)
                        if pornstars:
                                for (Url, Title, Image) in pornstars:
@@ -223,7 +223,7 @@ class porngoFilmScreen(MPScreen, ThumbsHelper):
                twAgentGetPage(url, agent=agent, cookieJar=cookies).addCallback(self.genreData).addErrback(self.dataError)
 
        def genreData(self, data):
-               self.getLastPage(data, 'class="pagination">(.*?)<!-- Composite Start', '.*(?:\/|">)(\d+)')
+               self.getLastPage(data, 'class="pagination">(.*?)spot_footer', '.*(?:\/|">)(\d+)')
                Movies = re.findall('class="thumb item\s{0,1}">.*?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:
index 3ceecb8..58b7e1f 100644 (file)
@@ -53,7 +53,7 @@ class pornhatGenreScreen(MPScreen):
                        default_cover = "file://%s/pornhat.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
                elif self.mode == "okxxx":
                        self.portal = "OK.XXX"
-                       self.baseurl = "http://www.ok.xxx"
+                       self.baseurl = "https://www.ok.xxx"
                        default_cover = "file://%s/okxxx.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
 
                MPScreen.__init__(self, session, skin='MP_Plugin', default_cover=default_cover)
@@ -203,6 +203,8 @@ class pornhatFilmScreen(MPScreen, ThumbsHelper):
                        for (Url, Title, Image) in Movies:
                                if Url.startswith('/'):
                                        Url = self.baseurl + Url
+                               if Image.startswith('//'):
+                                       Image = "https:" + Image
                                self.filmliste.append((decodeHtml(Title), Url, Image))
                if len(self.filmliste) == 0:
                        self.filmliste.append((_('No videos found!'), None, None, '', ''))
@@ -231,19 +233,19 @@ class pornhatFilmScreen(MPScreen, ThumbsHelper):
                Title = self['liste'].getCurrent()[0][0]
                mp_globals.player_agent = agent
                license = re.findall('license_code:\s\'(.*?)\',', data, re.S)
-               url = re.findall('video_(?:alt_|)url\d{0,1}:\s\'(.*?)\'.*?video_(?:alt_|)url_text:\s\'(\d+)(?:p|)\',', data, re.S)
+               url = re.findall('video_(?:alt_|)url\d{0,1}:\s\'(.*?)\'.*?video_(?:alt_|)url\d{0,1}_text:\s\'(\d+)(?:p|)(?: HD|)\',', data, re.S)
                if not url:
                        url = re.findall('video_(?:alt_|)url\d{0,1}:\s\'(.*?)\'', data, re.S)
                if license and url:
                        try:
                                max = 0
                                for vid in url:
-                                       if int(vid[1]) > max:
+                                       if int(vid[1]) > max and not "login" in vid[0]:
                                                max = int(vid[1])
                                                url = vid[0]
                        except:
                                url = url[-1]
                        if 'function/0/' in url:
                                url = decrypturl(url, license[0])
-                       self['name'].setText('')
+                       self['name'].setText(Title)
                        self.session.open(SimplePlayer, [(Title, url)], showPlaylist=False, ltype='pornhat')
\ No newline at end of file
index d881736..39fc1f0 100644 (file)
@@ -44,23 +44,22 @@ import subprocess
 
 config_mp.mediaportal.pornhub_username = ConfigText(default="pornhubUserName", fixed_size=False)
 config_mp.mediaportal.pornhub_password = ConfigPassword(default="pornhubPassword", fixed_size=False)
-
-base_url = 'https://www.pornhub.com'
+config_mp.mediaportal.pornhubpremium_username = ConfigText(default="pornhubpremiumUserName", fixed_size=False)
+config_mp.mediaportal.pornhubpremium_password = ConfigPassword(default="pornhubpremiumPassword", fixed_size=False)
 
 ph_cookies = CookieJar()
 ph_cookiesUrl = CookieJar()
 ck = {}
 phLoggedIn = False
-phAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36"
+phAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.113 Safari/537.36"
 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',
-       'Referer':base_url
+       'Referer':'https://www.pornhub.com'
        }
 
-default_cover = "file://%s/pornhub.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
 token = ''
 
 class LoginFunc:
@@ -78,25 +77,34 @@ class LoginFunc:
                        self.Login(callback)
 
        def Login(self, callback):
-               url = base_url
+               if self.mode == "pornhubpremium":
+                       url = self.baseurl + "/premium/login"
+               else:
+                       url = self.baseurl
                twAgentGetPage(url, agent=phAgent, cookieJar=ph_cookies).addCallback(self.Login2, callback).addErrback(self.dataError)
 
        def Login2(self, data, callback):
-               self.username = str(config_mp.mediaportal.pornhub_username.value)
-               self.password = str(config_mp.mediaportal.pornhub_password.value)
-               parse = re.findall('name="redirect"\svalue="(.*?)".*?name="token"\svalue="(.*?)"', data, re.S)
+               if self.mode == "pornhubpremium":
+                       parse = re.findall('id="token"\svalue="(.*?)".*?id="redirect"\s+value="(.*?)"', data, re.S)
+               else:
+                       parse = re.findall('name="redirect"\s+value="(.*?)".*?name="token"\svalue="(.*?)"', data, re.S)
                if parse:
                        global token
-                       token = str(parse[0][1])
+                       if self.mode == "pornhubpremium":
+                               token = str(parse[0][0])
+                       else:
+                               token = str(parse[0][1])
                        if self.username != "pornhubUserName" and self.password != "pornhubPassword":
-                               loginUrl = base_url + "/front/authenticate"
+                               loginUrl = self.baseurl + "/front/authenticate"
                                loginData = {
                                        'redirect' : str(parse[0][0]),
                                        'token' : token,
                                        'remember_me' : '1',
                                        'from' : 'pc_login_modal_:index',
                                        'username' : self.username,
-                                       'password' : self.password
+                                       'password' : self.password,
+                                       'subscribe' : 'undefined',
+                                       'setSendTip' : 'false'
                                        }
                                twAgentGetPage(loginUrl, agent=phAgent, method='POST', postdata=urlencode(loginData), cookieJar=ph_cookies, headers={'Content-Type':'application/x-www-form-urlencoded'}).addCallback(self.Login3, callback).addErrback(self.dataError)
                        else:
@@ -115,7 +123,23 @@ class LoginFunc:
 
 class pornhubGenreScreen(MPScreen, LoginFunc):
 
-       def __init__(self, session):
+       def __init__(self, session, mode):
+               self.mode = mode
+
+               global default_cover
+               if self.mode == "pornhub":
+                       self.portal = "Pornhub.com"
+                       self.baseurl = "https://www.pornhub.com"
+                       default_cover = "file://%s/pornhub.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
+                       self.username = str(config_mp.mediaportal.pornhub_username.value)
+                       self.password = str(config_mp.mediaportal.pornhub_password.value)
+               elif self.mode == "pornhubpremium":
+                       self.portal = "PornhubPremium.com"
+                       self.baseurl = "https://www.pornhubpremium.com"
+                       default_cover = "file://%s/pornhubpremium.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
+                       self.username = str(config_mp.mediaportal.pornhubpremium_username.value)
+                       self.password = str(config_mp.mediaportal.pornhubpremium_password.value)
+
                MPScreen.__init__(self, session, skin='MP_Plugin', default_cover=default_cover)
 
                self["actions"] = ActionMap(["MP_Actions"], {
@@ -129,10 +153,7 @@ class pornhubGenreScreen(MPScreen, LoginFunc):
                        "blue": self.keySetup
                }, -1)
 
-               self.username = str(config_mp.mediaportal.pornhub_username.value)
-               self.password = str(config_mp.mediaportal.pornhub_password.value)
-
-               self['title'] = Label("Pornhub.com")
+               self['title'] = Label(self.portal)
                self['ContentTitle'] = Label("Genre:")
                self['F4'] = Label(_("Setup"))
                self.keyLocked = True
@@ -149,7 +170,7 @@ class pornhubGenreScreen(MPScreen, LoginFunc):
 
        def layoutFinished(self,res=None):
                self.keyLocked = True
-               url = base_url + "/categories"
+               url = self.baseurl + "/categories"
                twAgentGetPage(url, agent=phAgent, cookieJar=ph_cookies).addCallback(self.genreData).addErrback(self.dataError)
 
        def genreData(self, data):
@@ -158,54 +179,62 @@ class pornhubGenreScreen(MPScreen, LoginFunc):
                if Cats:
                        for (Url, Image, Title) in Cats:
                                if re.match(".*\?",Url):
-                                       Url = base_url + Url + "&page="
+                                       Url = self.baseurl + Url + "&page="
                                else:
-                                       Url = base_url + Url + "?page="
+                                       Url = self.baseurl + Url + "?page="
                                Image = re.sub(r"\(.*\)", "", Image)
                                self.filmliste.append((Title, Url, Image))
                        self.filmliste.sort()
                if phLoggedIn:
                        self.filmliste.insert(0, (400 * "—", None, default_cover))
-                       self.filmliste.insert(0, ("Previously Viewed", "%s/users/%s/videos/recent?page=" % (base_url, self.username), default_cover))
-                       self.filmliste.insert(0, ("My Feed", "%s/feeds?section=videos&page=" % base_url, default_cover))
-                       self.filmliste.insert(0, ("Recommended - Longest", "%s/recommended?ajax=1&o=duration&page=" % base_url, default_cover))
-                       self.filmliste.insert(0, ("Recommended - Top Rated", "%s/recommended?ajax=1&o=rating&page=" % base_url, default_cover))
-                       self.filmliste.insert(0, ("Recommended - Most Viewed", "%s/recommended?ajax=1&o=views&page=" % base_url, default_cover))
-                       self.filmliste.insert(0, ("Recommended - Most Relevant", "%s/recommended?ajax=1&page=" % base_url, default_cover))
-                       self.filmliste.insert(0, ("Recommended - Newest", "%s/recommended?ajax=1&o=time&page=" % base_url, default_cover))
-                       self.filmliste.insert(0, ("Member Subscriptions", "%s/users/%s/subscriptions?page=" % (base_url, self.username), default_cover))
-                       self.filmliste.insert(0, ("Channel Subscriptions", "%s/users/%s/channel_subscriptions?page=" % (base_url, self.username), default_cover))
-                       self.filmliste.insert(0, ("Pornstar Subscriptions", "%s/users/%s/pornstar_subscriptions?page=" % (base_url, self.username), default_cover))
-                       self.filmliste.insert(0, ("Favourite Playlists", "%s/users/%s/playlists/favorites?page=" % (base_url, self.username), default_cover))
-                       self.filmliste.insert(0, ("Favourite Videos", "%s/users/%s/videos/favorites?page=" % (base_url, self.username), default_cover))
+                       self.filmliste.insert(0, ("Previously Viewed", "%s/users/%s/videos/recent?page=" % (self.baseurl, self.username), default_cover))
+                       self.filmliste.insert(0, ("My Feed", "%s/feeds?section=videos&page=" % self.baseurl, default_cover))
+                       self.filmliste.insert(0, ("Recommended - Most Relevant", "%s/recommended?ajax=1&page=" % self.baseurl, default_cover))
+                       self.filmliste.insert(0, ("Recommended - Newest", "%s/recommended?ajax=1&o=time&page=" % self.baseurl, default_cover))
+                       self.filmliste.insert(0, ("Member Subscriptions", "%s/users/%s/subscriptions?page=" % (self.baseurl, self.username), default_cover))
+                       self.filmliste.insert(0, ("Channel Subscriptions", "%s/users/%s/channel_subscriptions?page=" % (self.baseurl, self.username), default_cover))
+                       self.filmliste.insert(0, ("Pornstar Subscriptions", "%s/users/%s/pornstar_subscriptions?page=" % (self.baseurl, self.username), default_cover))
+                       self.filmliste.insert(0, ("Favourite Playlists", "%s/users/%s/playlists/favorites?page=" % (self.baseurl, self.username), default_cover))
+                       self.filmliste.insert(0, ("Favourite Videos", "%s/users/%s/videos/favorites?page=" % (self.baseurl, self.username), default_cover))
                self.filmliste.insert(0, (400 * "—", None, default_cover))
-               self.filmliste.insert(0, ("Playlists", "%s/playlists?page=" % base_url, default_cover))
-               self.filmliste.insert(0, ("Channels", "%s/channels?page=" % base_url, default_cover))
-               self.filmliste.insert(0, ("Amateur Models", "%s/pornstars?page=" % base_url, default_cover))
-               self.filmliste.insert(0, ("Pornstars", "%s/pornstars?page=" % base_url, default_cover))
+               self.filmliste.insert(0, ("Playlists", "%s/playlists?page=" % self.baseurl, default_cover))
+               self.filmliste.insert(0, ("Channels", "%s/channels?page=" % self.baseurl, default_cover))
+               self.filmliste.insert(0, ("Amateur Models", "%s/pornstars?page=" % self.baseurl, default_cover))
+               self.filmliste.insert(0, ("Pornstars", "%s/pornstars?page=" % self.baseurl, default_cover))
                self.filmliste.insert(0, (400 * "—", None, default_cover))
-               self.filmliste.insert(0, ("Homemade - Longest", "%s/video?p=homemade&o=lg&page=" % base_url, default_cover))
-               self.filmliste.insert(0, ("Homemade - Hottest", "%s/video?p=homemade&o=ht&page=" % base_url, default_cover))
-               self.filmliste.insert(0, ("Homemade - Top Rated", "%s/video?p=homemade&o=tr&page=" % base_url, default_cover))
-               self.filmliste.insert(0, ("Homemade - Most Viewed", "%s/video?p=homemade&o=mv&page=" % base_url, default_cover))
-               self.filmliste.insert(0, ("Homemade - Featured Recently", "%s/video?p=homemade&o=mr&page=" % base_url, default_cover))
-               self.filmliste.insert(0, ("Homemade - Newest", "%s/video?p=homemade&o=cm&page=" % base_url, default_cover))
-               self.filmliste.insert(0, ("Professional - Longest", "%s/video?p=professional&o=lg&page=" % base_url, default_cover))
-               self.filmliste.insert(0, ("Professional - Hottest", "%s/video?p=professional&o=ht&page=" % base_url, default_cover))
-               self.filmliste.insert(0, ("Professional - Top Rated", "%s/video?p=professional&o=tr&page=" % base_url, default_cover))
-               self.filmliste.insert(0, ("Professional - Most Viewed", "%s/video?p=professional&o=mv&page=" % base_url, default_cover))
-               self.filmliste.insert(0, ("Professional - Featured Recently", "%s/video?p=professional&o=mr&page=" % base_url, default_cover))
-               self.filmliste.insert(0, ("Professional - Newest", "%s/video?p=professional&o=cm&page=" % base_url, default_cover))
+               self.filmliste.insert(0, ("Homemade - Longest", "%s/video?p=homemade&o=lg&page=" % self.baseurl, default_cover))
+               self.filmliste.insert(0, ("Homemade - Hottest", "%s/video?p=homemade&o=ht&page=" % self.baseurl, default_cover))
+               self.filmliste.insert(0, ("Homemade - Top Rated", "%s/video?p=homemade&o=tr&page=" % self.baseurl, default_cover))
+               self.filmliste.insert(0, ("Homemade - Most Viewed", "%s/video?p=homemade&o=mv&page=" % self.baseurl, default_cover))
+               self.filmliste.insert(0, ("Homemade - Featured Recently", "%s/video?p=homemade&o=mr&page=" % self.baseurl, default_cover))
+               self.filmliste.insert(0, ("Homemade - Newest", "%s/video?p=homemade&o=cm&page=" % self.baseurl, default_cover))
+               self.filmliste.insert(0, ("Professional - Longest", "%s/video?p=professional&o=lg&page=" % self.baseurl, default_cover))
+               self.filmliste.insert(0, ("Professional - Hottest", "%s/video?p=professional&o=ht&page=" % self.baseurl, default_cover))
+               self.filmliste.insert(0, ("Professional - Top Rated", "%s/video?p=professional&o=tr&page=" % self.baseurl, default_cover))
+               self.filmliste.insert(0, ("Professional - Most Viewed", "%s/video?p=professional&o=mv&page=" % self.baseurl, default_cover))
+               self.filmliste.insert(0, ("Professional - Featured Recently", "%s/video?p=professional&o=mr&page=" % self.baseurl, default_cover))
+               self.filmliste.insert(0, ("Professional - Newest", "%s/video?p=professional&o=cm&page=" % self.baseurl, default_cover))
+               if self.mode == "pornhubpremium":
+                       self.filmliste.insert(0, (400 * "—", None, default_cover))
+                       self.filmliste.insert(0, ("Popular DVDs", "%s/dvds?o=p&page=" % self.baseurl, default_cover))
+                       self.filmliste.insert(0, ("New DVDs", "%s/dvds?o=n&page=" % self.baseurl, default_cover))
+                       self.filmliste.insert(0, (400 * "—", None, default_cover))
+                       self.filmliste.insert(0, ("Premium - Longest", "%s/video?premium=1&o=lg&page=" % self.baseurl, default_cover))
+                       self.filmliste.insert(0, ("Premium - Hottest", "%s/video?premium=1&o=ht&page=" % self.baseurl, default_cover))
+                       self.filmliste.insert(0, ("Premium - Top Rated", "%s/video?premium=1&o=tr&page=" % self.baseurl, default_cover))
+                       self.filmliste.insert(0, ("Premium - Most Viewed", "%s/video?premium=1&o=mv&page=" % self.baseurl, default_cover))
+                       self.filmliste.insert(0, ("Premium - Featured Recently", "%s/video?premium=1&o=mr&page=" % self.baseurl, default_cover))
+                       self.filmliste.insert(0, ("Premium - Newest", "%s/video?premium=1&o=cm&page=" % self.baseurl, default_cover))
                self.filmliste.insert(0, (400 * "—", None, default_cover))
-               self.filmliste.insert(0, ("Community Feed", "%s/community?content=videos&page=" % base_url, default_cover))
+               self.filmliste.insert(0, ("Community Feed", "%s/community?content=videos&page=" % self.baseurl, default_cover))
                if not phLoggedIn:
-                       self.filmliste.insert(0, ("Recommended", "%s/recommended?ajax=1&page=" % base_url, default_cover))
-               self.filmliste.insert(0, ("Longest", "%s/video?o=lg&page=" % base_url, default_cover))
-               self.filmliste.insert(0, ("Hottest", "%s/video?o=ht&page=" % base_url, default_cover))
-               self.filmliste.insert(0, ("Top Rated", "%s/video?o=tr&page=" % base_url, default_cover))
-               self.filmliste.insert(0, ("Most Viewed", "%s/video?o=mv&page=" % base_url, default_cover))
-               self.filmliste.insert(0, ("Featured Recently", "%s/video?o=mr&page=" % base_url, default_cover))
-               self.filmliste.insert(0, ("Newest", "%s/video?o=cm&page=" % base_url, default_cover))
+                       self.filmliste.insert(0, ("Recommended", "%s/recommended?ajax=1&page=" % self.baseurl, default_cover))
+               self.filmliste.insert(0, ("Longest", "%s/video?o=lg&page=" % self.baseurl, default_cover))
+               self.filmliste.insert(0, ("Hottest", "%s/video?o=ht&page=" % self.baseurl, default_cover))
+               self.filmliste.insert(0, ("Top Rated", "%s/video?o=tr&page=" % self.baseurl, default_cover))
+               self.filmliste.insert(0, ("Most Viewed", "%s/video?o=mv&page=" % self.baseurl, default_cover))
+               self.filmliste.insert(0, ("Featured Recently", "%s/video?o=mr&page=" % self.baseurl, default_cover))
+               self.filmliste.insert(0, ("Newest", "%s/video?o=cm&page=" % self.baseurl, default_cover))
                self.filmliste.insert(0, ("--- Search ---", "callSuchen", default_cover))
                self.ml.setList(map(self._defaultlistcenter, self.filmliste))
                self.ml.moveToIndex(0)
@@ -224,30 +253,33 @@ class pornhubGenreScreen(MPScreen, LoginFunc):
                        self.suchen(suggest_func=self.getSuggestions)
                elif re.match(".*Subscriptions", Name):
                        Link = self['liste'].getCurrent()[0][1]
-                       self.session.open(pornhubSubscriptionsScreen, Link, Name)
+                       self.session.open(pornhubSubscriptionsScreen, Link, Name, self.portal, self.baseurl, self.mode)
                elif re.match(".*Pornstars", Name):
                        Link = self['liste'].getCurrent()[0][1]
-                       self.session.open(pornhubPornstarScreen, Link, Name, 'pornstar')
+                       self.session.open(pornhubPornstarScreen, Link, Name, 'pornstar', self.portal, self.baseurl, self.mode)
                elif re.match(".*Amateur Models", Name):
                        Link = self['liste'].getCurrent()[0][1]
-                       self.session.open(pornhubPornstarScreen, Link, Name, 'amateur')
+                       self.session.open(pornhubPornstarScreen, Link, Name, 'amateur', self.portal, self.baseurl, self.mode)
                elif re.match(".*Channels", Name):
                        Link = self['liste'].getCurrent()[0][1]
-                       self.session.open(pornhubChannelScreen, Link, Name)
+                       self.session.open(pornhubChannelScreen, Link, Name, self.portal, self.baseurl, self.mode)
+               elif re.match(".*DVDs", Name):
+                       Link = self['liste'].getCurrent()[0][1]
+                       self.session.open(pornhubDVDScreen, Link, Name, self.portal, self.baseurl, self.mode)
                elif re.match(".*Playlists", Name):
                        Link = self['liste'].getCurrent()[0][1]
-                       self.session.open(pornhubPlayListScreen, Link, Name)
+                       self.session.open(pornhubPlayListScreen, Link, Name, self.portal, self.baseurl, self.mode)
                else:
                        Link = self['liste'].getCurrent()[0][1]
                        if Link:
-                               self.session.open(pornhubFilmScreen, Link, Name)
+                               self.session.open(pornhubFilmScreen, Link, Name, mode=self.mode)
 
        def SuchenCallback(self, callback = None):
                if callback is not None and len(callback):
                        Name = "--- Search ---"
                        self.suchString = callback
-                       Link = base_url + '/video/search?search=%s&page=' % urllib.quote(self.suchString).replace(' ', '+')
-                       self.session.open(pornhubFilmScreen, Link, Name)
+                       Link = urllib.quote(self.suchString).replace(' ', '+')
+                       self.session.open(pornhubFilmScreen, Link, Name, mode=self.mode)
 
        def getSuggestions(self, text, max_res):
                url = "https://www.pornhub.com/video/search_autocomplete?pornstars=true&orientation=straight&q=%s" % urllib.quote_plus(text)
@@ -271,9 +303,9 @@ class pornhubGenreScreen(MPScreen, LoginFunc):
 
        def keySetup(self):
                if mp_globals.isDreamOS:
-                       self.session.openWithCallback(self.setupCallback, pornhubSetupScreen, is_dialog=True)
+                       self.session.openWithCallback(self.setupCallback, pornhubSetupScreen, self.portal, self.mode, is_dialog=True)
                else:
-                       self.session.openWithCallback(self.setupCallback, pornhubSetupScreen)
+                       self.session.openWithCallback(self.setupCallback, pornhubSetupScreen, self.portal, self.mode)
 
        def setupCallback(self, answer=False):
                if answer:
@@ -283,24 +315,32 @@ class pornhubGenreScreen(MPScreen, LoginFunc):
                        global phLoggedIn
                        phLoggedIn = False
                        token = ''
-                       self.username = str(config_mp.mediaportal.pornhub_username.value)
-                       self.password = str(config_mp.mediaportal.pornhub_password.value)
+                       if self.mode == "pornhubpremium":
+                               self.username = str(config_mp.mediaportal.pornhubpremium_username.value)
+                               self.password = str(config_mp.mediaportal.pornhubpremium_password.value)
+                       else:
+                               self.username = str(config_mp.mediaportal.pornhub_username.value)
+                               self.password = str(config_mp.mediaportal.pornhub_password.value)
                        self.LoginClear(self.layoutFinished)
 
 class pornhubSetupScreen(MPSetupScreen, ConfigListScreenExt):
 
-       def __init__(self, session):
+       def __init__(self, session, portal, mode):
                MPSetupScreen.__init__(self, session, skin='MP_PluginSetup')
 
-               self['title'] = Label("Pornhub.com " + _("Setup"))
+               self['title'] = Label(portal + " " + _("Setup"))
                self['F4'] = Label('')
-               self.setTitle("Pornhub.com " + _("Setup"))
+               self.setTitle(portal + " " + _("Setup"))
 
                self.list = []
                ConfigListScreenExt.__init__(self, self.list)
 
-               self.list.append(getConfigListEntry(_("Username:"), config_mp.mediaportal.pornhub_username))
-               self.list.append(getConfigListEntry(_("Password:"), config_mp.mediaportal.pornhub_password))
+               if mode == "pornhubpremium":
+                       self.list.append(getConfigListEntry(_("Username:"), config_mp.mediaportal.pornhubpremium_username))
+                       self.list.append(getConfigListEntry(_("Password:"), config_mp.mediaportal.pornhubpremium_password))
+               else:
+                       self.list.append(getConfigListEntry(_("Username:"), config_mp.mediaportal.pornhub_username))
+                       self.list.append(getConfigListEntry(_("Password:"), config_mp.mediaportal.pornhub_password))
 
                self["config"].setList(self.list)
 
@@ -318,9 +358,12 @@ class pornhubSetupScreen(MPSetupScreen, ConfigListScreenExt):
 
 class pornhubPlayListScreen(MPScreen, ThumbsHelper):
 
-       def __init__(self, session, Link, Name):
+       def __init__(self, session, Link, Name, portal, baseurl, mode):
                self.Link = Link
                self.Name = Name
+               self.portal = portal
+               self.baseurl = baseurl
+               self.mode = mode
                MPScreen.__init__(self, session, skin='MP_Plugin', default_cover=default_cover)
                ThumbsHelper.__init__(self)
 
@@ -340,7 +383,7 @@ class pornhubPlayListScreen(MPScreen, ThumbsHelper):
                        "blue" : self.keyFavourite
                }, -1)
 
-               self['title'] = Label("Pornhub.com")
+               self['title'] = Label(self.portal)
                self['ContentTitle'] = Label("Genre: %s" % self.Name)
                self['F2'] = Label(_("Page"))
                self['F3'] = Label(_("Sort"))
@@ -381,7 +424,7 @@ class pornhubPlayListScreen(MPScreen, ThumbsHelper):
                        Cats = re.findall('class="number"><span>(.*?)</span>.*?borderLink.*?class="viewPlaylistLink\s{0,1}"\shref="(.*?)".*?data-mediumthumb="(.*?)".*?class="title\s{0,1}"\stitle="(.*?)".*?class="favorited">(.*?)</span>.*?class="value">(.*?)</div>.*?class="views on-playlist-thumb"><var>(.*?)</var>', each, re.S)
                        if Cats:
                                for (Videos, Url, Image, Title, Favorites, Rating, Views) in Cats:
-                                       Url = base_url + Url
+                                       Url = self.baseurl + Url
                                        Favorites = Favorites.replace('favorites','').strip()
                                        self.filmliste.append((decodeHtml(Title), Videos, Image, Url, Favorites, Rating, Views))
                if len(self.filmliste) == 0:
@@ -437,7 +480,7 @@ class pornhubPlayListScreen(MPScreen, ThumbsHelper):
                Count = self['liste'].getCurrent()[0][1]
                CatLink = self['liste'].getCurrent()[0][3]
                NameLink = self['liste'].getCurrent()[0][0]
-               self.session.open(pornhubFilmScreen, CatLink, NameLink, Count)
+               self.session.open(pornhubFilmScreen, CatLink, NameLink, Count, mode=self.mode)
 
        def keySort(self):
                if self.keyLocked:
@@ -471,9 +514,9 @@ class pornhubPlayListScreen(MPScreen, ThumbsHelper):
                        favtoken = str(parse[0][0])
                        id = str(parse[0][2])
                        if isfav == "1":
-                               FavUrl = base_url + "/playlist/remove_favourite?playlist_id=%s&token=%s" % (id, favtoken)
+                               FavUrl = self.baseurl + "/playlist/remove_favourite?playlist_id=%s&token=%s" % (id, favtoken)
                        else:
-                               FavUrl = base_url + "/playlist_json/favourite?playlist_id=%s&token=%s" % (id, favtoken)
+                               FavUrl = self.baseurl + "/playlist_json/favourite?playlist_id=%s&token=%s" % (id, favtoken)
                        twAgentGetPage(FavUrl, agent=phAgent, cookieJar=ph_cookies, headers={'Content-Type':'application/x-www-form-urlencoded','Referer':self.playurl}).addCallback(self.ok).addErrback(self.dataError)
                        self.reload = True
                        TimerCall(1, self.loadPage)
@@ -488,9 +531,12 @@ class pornhubPlayListScreen(MPScreen, ThumbsHelper):
 
 class pornhubSubscriptionsScreen(MPScreen, ThumbsHelper):
 
-       def __init__(self, session, Link, Name):
+       def __init__(self, session, Link, Name, portal, baseurl, mode):
                self.Link = Link
                self.Name = Name
+               self.portal = portal
+               self.baseurl = baseurl
+               self.mode = mode
                MPScreen.__init__(self, session, skin='MP_Plugin', default_cover=default_cover)
                ThumbsHelper.__init__(self)
 
@@ -510,7 +556,7 @@ class pornhubSubscriptionsScreen(MPScreen, ThumbsHelper):
                        "yellow" : self.keySort
                }, -1)
 
-               self['title'] = Label("Pornhub.com")
+               self['title'] = Label(self.portal)
                self['ContentTitle'] = Label("Genre: %s" % self.Name)
                self['F1'] = Label(_("Unsubscribe"))
                self['F2'] = Label(_("Page"))
@@ -582,7 +628,7 @@ class pornhubSubscriptionsScreen(MPScreen, ThumbsHelper):
                                        Url = Url + '/videos?page='
                                else:
                                        Url = Url + '/videos?o=da&page='
-                               Url = base_url + Url
+                               Url = self.baseurl + Url
                                self.filmliste.append((decodeHtml(Title), Url, Image))
                        if self.Name == "Pornstar Subscriptions" and self.sortname == "Pornstar Name":
                                self.filmliste.sort()
@@ -606,7 +652,7 @@ class pornhubSubscriptionsScreen(MPScreen, ThumbsHelper):
        def keyOK(self):
                Name = self['liste'].getCurrent()[0][0]
                Link = self['liste'].getCurrent()[0][1]
-               self.session.open(pornhubFilmScreen, Link, Name, Cat=self.Name)
+               self.session.open(pornhubFilmScreen, Link, Name, Cat=self.Name, mode=self.mode)
 
        def keySort(self):
                if self.keyLocked:
@@ -639,7 +685,7 @@ class pornhubSubscriptionsScreen(MPScreen, ThumbsHelper):
        def parseSubscribe(self, data):
                subs = re.findall('data-unsubscribe-url="(.*?)"', data, re.S)
                if subs:
-                       url = base_url + subs[0].replace('&amp;','&')
+                       url = self.baseurl + subs[0].replace('&amp;','&')
                        twAgentGetPage(url, agent=phAgent, cookieJar=ph_cookies).addCallback(self.parseSubscribe2).addErrback(self.dataError)
 
        def parseSubscribe2(self, data):
@@ -652,10 +698,13 @@ class pornhubSubscriptionsScreen(MPScreen, ThumbsHelper):
 
 class pornhubPornstarScreen(MPScreen, ThumbsHelper):
 
-       def __init__(self, session, Link, Name, Type):
+       def __init__(self, session, Link, Name, Type, portal, baseurl, mode):
                self.Link = Link
                self.Name = Name
                self.Type = Type
+               self.portal = portal
+               self.baseurl = baseurl
+               self.mode = mode
                MPScreen.__init__(self, session, skin='MP_Plugin', default_cover=default_cover)
                ThumbsHelper.__init__(self)
 
@@ -675,7 +724,7 @@ class pornhubPornstarScreen(MPScreen, ThumbsHelper):
                        "yellow" : self.keySort
                }, -1)
 
-               self['title'] = Label("Pornhub.com")
+               self['title'] = Label(self.portal)
                self['ContentTitle'] = Label("Genre: %s" % self.Name)
                self['F2'] = Label(_("Page"))
                self['F3'] = Label(_("Sort"))
@@ -707,7 +756,7 @@ class pornhubPornstarScreen(MPScreen, ThumbsHelper):
                Stars = re.findall('rank_number">(.*?)<.*?data-thumb_url="(.*?)".*?href="(.*?)".*?class="title.*?>(.*?)<.*?videosNumber">(.*?)\sVideos\s+(.*?)\sviews', parse.group(1), re.S)
                if Stars:
                        for (Rank, Image, Url, Title, Videos, Views) in Stars:
-                               Url = base_url + Url + "/videos?page="
+                               Url = self.baseurl + Url + "/videos?page="
                                Rank = Rank.strip()
                                self.filmliste.append((decodeHtml(Title), Url, Image, Rank, Videos, Views))
                if len(self.filmliste) == 0:
@@ -728,14 +777,17 @@ class pornhubPornstarScreen(MPScreen, ThumbsHelper):
                Views = self['liste'].getCurrent()[0][5]
                self['name'].setText(Title)
                self['extrainfo'].setText("%s: %s" % (_("Sort order"), self.sortname))
-               CoverHelper(self['coverArt']).getCover(Image)
                self['handlung'].setText("Rank: %s\nVideos: %s\nViews: %s" % (Rank, Count, Views))
+               CoverHelper(self['coverArt']).getCover(Image)
                if phLoggedIn:
                        url = self['liste'].getCurrent()[0][1] + "1"
                        if self.retry:
                                self.retry = False
                                url = url.replace('/videos','')
-                       twAgentGetPage(url, agent=phAgent, cookieJar=ph_cookies).addCallback(self.showInfos2).addErrback(self.dataError)
+                       TimerCall(0.5, self.CallshowInfos2, url)
+
+       def CallshowInfos2(self, url):
+               twAgentGetPage(url, agent=phAgent, cookieJar=ph_cookies).addCallback(self.showInfos2).addErrback(self.dataError)
 
        def showInfos2(self, data):
                if "Error Page Not Found" in data:
@@ -768,10 +820,10 @@ class pornhubPornstarScreen(MPScreen, ThumbsHelper):
                                birthplace = re.findall('class="infoPiece"><span>Birthplace:</span>(.*?)</div>', data, re.S)
                        birthplace = "\nBirth Place: " + birthplace[0].strip().replace('United States of America','USA') if birthplace else ''
 
-                       age = re.findall('<span>Age:</span>.*?itemprop="".*?>(.*?)</span>', data, re.S)
+                       age = re.findall('<span>Age:</span>.*?(?:itemprop=""|).*?>(.*?)</span>', data, re.S)
                        age = "\nAge: " + age[0].strip() if age else ''
 
-                       measurements = re.findall('<span>Measurements:</span>.*?itemprop="".*?>(.*?)</span>', data, re.S)
+                       measurements = re.findall('<span>Measurements:</span>.*?(?:itemprop=""|).*?>(.*?)</span>', data, re.S)
                        if measurements:
                                measurements = re.findall('(\d+|)(\w+|)-(\d+|)-(\d+|)', measurements[0].strip(), re.S)
                                if measurements[0][0]:
@@ -806,37 +858,37 @@ class pornhubPornstarScreen(MPScreen, ThumbsHelper):
                                weight = re.findall('class="infoPiece"><span>Weight:</span>.*?\((.*?)</div>', data, re.S)
                        weight = "\nWeight: " + weight[0].strip().replace(')','') if weight else ''
 
-                       ethnicity = re.findall('<span>Ethnicity:</span>.*?itemprop="".*?>(.*?)</span>', data, re.S)
+                       ethnicity = re.findall('<span>Ethnicity:</span>.*?(?:itemprop=""|).*?>(.*?)</span>', data, re.S)
                        ethnicity = "\nEthnicity: " + ethnicity[0].strip() if ethnicity else ''
 
-                       background = re.findall('<span>Background:</span>.*?itemprop="".*?>(.*?)</span>', data, re.S)
+                       background = re.findall('<span>Background:</span>.*?(?:itemprop=""|).*?>(.*?)</span>', data, re.S)
                        background = "\nBackground: " + background[0].strip() if background else ''
 
-                       haircolor = re.findall('<span>Hair Color:</span>.*?itemprop="".*?>(.*?)</span>', data, re.S)
+                       haircolor = re.findall('<span>Hair Color:</span>.*?(?:itemprop=""|).*?>(.*?)</span>', data, re.S)
                        haircolor = "\nHair Color: " + haircolor[0].strip() if haircolor else ''
 
-                       boobs = re.findall('<span>Fake Boobs:</span>.*?itemprop="".*?>(.*?)</span>', data, re.S)
+                       boobs = re.findall('<span>Fake Boobs:</span>.*?(?:itemprop=""|).*?>(.*?)</span>', data, re.S)
                        boobs = "\nFake Boobs: " + boobs[0].strip() if boobs else ''
 
-                       tattoos = re.findall('<span>Tattoos:</span>.*?itemprop="".*?>(.*?)</span>', data, re.S)
+                       tattoos = re.findall('<span>Tattoos:</span>.*?(?:itemprop=""|).*?>(.*?)</span>', data, re.S)
                        tattoos = "\nTattoos: " + tattoos[0].strip() if tattoos else ''
 
-                       piercings = re.findall('<span>Piercings:</span>.*?itemprop="".*?>(.*?)</span>', data, re.S)
+                       piercings = re.findall('<span>Piercings:</span>.*?(?:itemprop=""|).*?>(.*?)</span>', data, re.S)
                        piercings = "\nPiercings: " + piercings[0].strip() if piercings else ''
 
-                       relationship = re.findall('<span>Relationship status:</span>.*?itemprop="".*?>(.*?)</span>', data, re.S)
+                       relationship = re.findall('<span>Relationship status:</span>.*?(?:itemprop=""|).*?>(.*?)</span>', data, re.S)
                        relationship = "\nRelationship status: " + relationship[0].strip() if relationship else ''
 
-                       interest = re.findall('<span>Interested in:</span>.*?itemprop="".*?>(.*?)</span>', data, re.S)
+                       interest = re.findall('<span>Interested in:</span>.*?(?:itemprop=""|).*?>(.*?)</span>', data, re.S)
                        interest = "\nInterested in: " + interest[0].strip() if interest else ''
 
-                       citycountry = re.findall('<span>City and Country:</span>.*?itemprop="".*?>(.*?)</span>', data, re.S)
+                       citycountry = re.findall('<span>City and Country:</span>.*?(?:itemprop=""|).*?>(.*?)</span>', data, re.S)
                        citycountry = "\nCity and Country: " + citycountry[0].strip() if citycountry else ''
 
-                       status = re.findall('<span>Career Status:</span>.*?itemprop="".*?>(.*?)</span>', data, re.S)
+                       status = re.findall('<span>Career Status:</span>.*?(?:itemprop=""|).*?>(.*?)</span>', data, re.S)
                        status = "\nCareer Status: " + status[0].strip() if status else ''
 
-                       startend = re.findall('<span>Career Start and End:</span>.*?itemprop="".*?>(.*?)</span>', data, re.S)
+                       startend = re.findall('<span>Career Start and End:</span>.*?(?:itemprop=""|).*?>(.*?)</span>', data, re.S)
                        startend = re.sub(r"\s+", " ", startend[0]).strip() if startend else ''
                        startend = "\nCareer Start and End: " + startend if startend else ''
 
@@ -854,7 +906,7 @@ class pornhubPornstarScreen(MPScreen, ThumbsHelper):
                Name = self['liste'].getCurrent()[0][0]
                Link = self['liste'].getCurrent()[0][1]
                Count = self['liste'].getCurrent()[0][4]
-               self.session.open(pornhubFilmScreen, Link, Name, Count, Cat=self.Type)
+               self.session.open(pornhubFilmScreen, Link, Name, Count, Cat=self.Type, mode=self.mode)
 
        def keySort(self):
                if self.keyLocked:
@@ -882,9 +934,9 @@ class pornhubPornstarScreen(MPScreen, ThumbsHelper):
                if subs:
                        Subscribed = subs[0][2]
                        if Subscribed == "1":
-                               url = base_url + subs[0][1].replace('&amp;','&')
+                               url = self.baseurl + subs[0][1].replace('&amp;','&')
                        else:
-                               url = base_url + subs[0][0].replace('&amp;','&')
+                               url = self.baseurl + subs[0][0].replace('&amp;','&')
                        twAgentGetPage(url, agent=phAgent, cookieJar=ph_cookies).addCallback(self.parseSubscribe2).addErrback(self.dataError)
 
        def parseSubscribe2(self, data):
@@ -902,9 +954,12 @@ class pornhubPornstarScreen(MPScreen, ThumbsHelper):
 
 class pornhubChannelScreen(MPScreen, ThumbsHelper):
 
-       def __init__(self, session, Link, Name):
+       def __init__(self, session, Link, Name, portal, baseurl, mode):
                self.Link = Link
                self.Name = Name
+               self.portal = portal
+               self.baseurl = baseurl
+               self.mode = mode
                MPScreen.__init__(self, session, skin='MP_Plugin', default_cover=default_cover)
                ThumbsHelper.__init__(self)
 
@@ -924,7 +979,7 @@ class pornhubChannelScreen(MPScreen, ThumbsHelper):
                        "yellow" : self.keySort
                }, -1)
 
-               self['title'] = Label("Pornhub.com")
+               self['title'] = Label(self.portal)
                self['ContentTitle'] = Label("Genre: %s" % self.Name)
                self['F2'] = Label(_("Page"))
                self['F3'] = Label(_("Sort"))
@@ -954,9 +1009,9 @@ class pornhubChannelScreen(MPScreen, ThumbsHelper):
                Chans = re.findall('class="channelsWrapper.*?class="rank">.*?<span>Rank<br/>\s{0,1}(\d+)</span>.*?href="(.*?)".*?img.*?alt="(.*?)".*?data-thumb_url="(.*?)".*?Subscribers<span>(.*?)</span>.*?Videos<span>(.*?)</span>.*?Videos Views<span>(.*?)</span>.*?data-subscribe-url="(.*?)"\sdata-unsubscribe-url="(.*?)"\sdata-subscribed="(.*?)"', data, re.S)
                if Chans:
                        for (Rank, Url, Title, Image, Subscribers, Videos, Views, Reg, Unreg, Subscribed) in Chans:
-                               Url = base_url + Url + "/videos?o=da&page="
-                               Reg = base_url + Reg.replace('&amp;','&')
-                               Unreg = base_url + Unreg.replace('&amp;','&')
+                               Url = self.baseurl + Url + "/videos?o=da&page="
+                               Reg = self.baseurl + Reg.replace('&amp;','&')
+                               Unreg = self.baseurl + Unreg.replace('&amp;','&')
                                Subscribers = Subscribers.replace(',','')
                                Videos = Videos.replace(',','')
                                Views = Views.replace(',','')
@@ -996,7 +1051,7 @@ class pornhubChannelScreen(MPScreen, ThumbsHelper):
                Name = self['liste'].getCurrent()[0][0]
                Link = self['liste'].getCurrent()[0][1]
                Count = self['liste'].getCurrent()[0][4]
-               self.session.open(pornhubFilmScreen, Link, Name, Count)
+               self.session.open(pornhubFilmScreen, Link, Name, Count, mode=self.mode)
 
        def keySort(self):
                if self.keyLocked:
@@ -1034,9 +1089,102 @@ class pornhubChannelScreen(MPScreen, ThumbsHelper):
                        else:
                                self.session.open(MessageBoxExt, _("Unknown error."), MessageBoxExt.TYPE_INFO)
 
+class pornhubDVDScreen(MPScreen, ThumbsHelper):
+
+       def __init__(self, session, Link, Name, portal, baseurl, mode):
+               self.Link = Link
+               self.Name = Name
+               self.portal = portal
+               self.baseurl = baseurl
+               self.mode = mode
+               MPScreen.__init__(self, session, skin='MP_Plugin', default_cover=default_cover)
+               ThumbsHelper.__init__(self)
+
+               self["actions"] = ActionMap(["MP_Actions"], {
+                       "ok" : self.keyOK,
+                       "0" : self.closeAll,
+                       "cancel" : self.keyCancel,
+                       "5" : self.keyShowThumb,
+                       "up" : self.keyUp,
+                       "down" : self.keyDown,
+                       "right" : self.keyRight,
+                       "left" : self.keyLeft,
+                       "nextBouquet" : self.keyPageUp,
+                       "prevBouquet" : self.keyPageDown,
+                       "green" : self.keyPageNumber,
+               }, -1)
+
+               self['title'] = Label(self.portal)
+               self['ContentTitle'] = Label("Genre: %s" % self.Name)
+               self['F2'] = Label(_("Page"))
+
+               self['Page'] = Label(_("Page:"))
+               self.keyLocked = True
+               self.page = 1
+               self.lastpage = 1
+
+               self.filmliste = []
+               self.ml = MenuList([], enableWrapAround=True, content=eListboxPythonMultiContent)
+               self['liste'] = self.ml
+
+               self.onLayoutFinish.append(self.loadPage)
+
+       def loadPage(self):
+               self.filmliste = []
+               self.keyLocked = True
+               url = self.Link + str(self.page)
+               twAgentGetPage(url, agent=phAgent, cookieJar=ph_cookies).addCallback(self.loadPageData).addErrback(self.dataError)
+
+       def loadPageData(self, data):
+               self.getLastPage(data, 'class="pagination3">(.*?)</div>')
+               parse = re.search('class="sectionWrapper"(.*?)$', data, re.S)
+               dvds = re.findall('class="dvdImage">.*?href="(.*?)"\stitle="(.*?)".*?data-src="(.*?)".*?class="videos"><var>(.*?)</.*?class="views"><var>(.*?)</', parse.group(1), re.S)
+               if dvds:
+                       for (Url, Title, Image, Videos, Views) in dvds:
+                               Url = self.baseurl + Url + "?page="
+                               Videos = Videos.replace(',','')
+                               Views = Views.replace(',','')
+                               self.filmliste.append((decodeHtml(Title), Url, Image, Videos, Views))
+               if len(self.filmliste) == 0:
+                       self.filmliste.append((_('No DVDs 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=0)
+               self.showInfos()
+
+       def showInfos(self):
+               Title = self['liste'].getCurrent()[0][0]
+               Image = self['liste'].getCurrent()[0][2]
+               Count = self['liste'].getCurrent()[0][3]
+               Views = self['liste'].getCurrent()[0][4]
+               self['name'].setText(Title)
+               self['handlung'].setText("Videos: %s\nViews: %s" % (Count, Views))
+               CoverHelper(self['coverArt']).getCover(Image)
+
+       def keyOK(self):
+               Name = self['liste'].getCurrent()[0][0]
+               Link = self['liste'].getCurrent()[0][1]
+               self.session.open(pornhubFilmScreen, Link, Name, mode=self.mode)
+
 class pornhubFilmScreen(MPScreen, ThumbsHelper, LoginFunc):
 
-       def __init__(self, session, Link, Name, Count=None, Cat=None):
+       def __init__(self, session, Link, Name, Count=None, Cat=None, mode=''):
+               self.mode = mode
+               global default_cover
+               if self.mode == "pornhub":
+                       self.portal = "Pornhub.com"
+                       self.baseurl = "https://www.pornhub.com"
+                       default_cover = "file://%s/pornhub.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
+                       self.username = str(config_mp.mediaportal.pornhub_username.value)
+                       self.password = str(config_mp.mediaportal.pornhub_password.value)
+               elif self.mode == "pornhubpremium":
+                       self.portal = "PornhubPremium.com"
+                       self.baseurl = "https://www.pornhubpremium.com"
+                       default_cover = "file://%s/pornhubpremium.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
+                       self.username = str(config_mp.mediaportal.pornhubpremium_username.value)
+                       self.password = str(config_mp.mediaportal.pornhubpremium_password.value)
+
                self.Link = Link
                self.Name = Name
                self.Count = Count
@@ -1061,7 +1209,7 @@ class pornhubFilmScreen(MPScreen, ThumbsHelper, LoginFunc):
                        "blue" : self.keyFavourite
                }, -1)
 
-               self['title'] = Label("Pornhub.com")
+               self['title'] = Label(self.portal)
                self['ContentTitle'] = Label("Genre: %s" % self.Name)
                self['F2'] = Label(_("Page"))
 
@@ -1095,7 +1243,9 @@ class pornhubFilmScreen(MPScreen, ThumbsHelper, LoginFunc):
        def loadPage(self,res=None):
                self.keyLocked = True
                self['name'].setText(_('Please wait...'))
-               if re.match(".*Feed",self.Name):
+               if re.match(".*Search", self.Name):
+                       url = self.baseurl + '/video/search?search=%s&page=%s' % (self.Link, str(self.page))
+               elif re.match(".*Feed",self.Name):
                        if self.feedpageurl:
                                url = self.feedpageurl + str(self.page)
                        else:
@@ -1104,7 +1254,7 @@ class pornhubFilmScreen(MPScreen, ThumbsHelper, LoginFunc):
                        if self.page == 1:
                                url = "%s" % self.Link
                        else:
-                               url = base_url + "/playlist/viewChunked?id=%s&offset=%s&itemsPerPage=36" % (self.Link.split('playlist/')[-1], str((self.page-1)*36))
+                               url = self.baseurl + "/playlist/viewChunked?id=%s&offset=%s&itemsPerPage=36" % (self.Link.split('playlist/')[-1], str((self.page-1)*36))
                else:
                        url = "%s%s" % (self.Link, str(self.page))
                if re.match(".*Feed",self.Name):
@@ -1141,23 +1291,25 @@ class pornhubFilmScreen(MPScreen, ThumbsHelper, LoginFunc):
                                                self['page'].setText(str(self.page) + ' / ' + str(self.lastpage))
                                        else:
                                                self.getLastPage(data, 'class="pagination3">(.*?)</div>')
-               parse = re.search('FAN ONLY VIDEOS -->.*?<div class="videoSection(.*?)(?:class="pagination3">|class="nf-wrapper">)', data, re.S)
+               parse = re.search('class="sectionWrapper dvdVideos"(.*?)id="footer">', data, re.S)
                if not parse:
-                       parse = re.search('class="nf-videos(.*?)class="pagination3">', data, re.S)
+                       parse = re.search('FAN ONLY VIDEOS -->.*?<div class="videoSection(.*?)(?:class="pagination3">|class="nf-wrapper">)', data, re.S)
                        if not parse:
-                               parse = re.search('class="videos\srow-5-thumbs(.*?)id="cmtWrapper">', data, re.S)
+                               parse = re.search('class="nf-videos(.*?)class="pagination3">', data, re.S)
                                if not parse:
-                                       parse = re.search('class="videos\srow-5-thumbs(.*?)class="pagination3">', data, re.S)
+                                       parse = re.search('class="videos\srow-5-thumbs(.*?)id="cmtWrapper">', data, re.S)
                                        if not parse:
-                                               parse = re.search('class="videos\srow-5-thumbs(.*?)class="footer-title">', data, re.S)
+                                               parse = re.search('class="videos\srow-5-thumbs(.*?)class="pagination3">', data, re.S)
                                                if not parse:
-                                                       parse = re.search('class="videos\srecommendedContainerLoseOne(.*?)class="pagination3">', data, re.S)
+                                                       parse = re.search('class="videos\srow-5-thumbs(.*?)class="footer-title">', data, re.S)
                                                        if not parse:
-                                                               parse = re.search('class="profileVids">(.*?)class="profileContentRight', data, re.S)
+                                                               parse = re.search('class="videos\srecommendedContainerLoseOne(.*?)class="pagination3">', data, re.S)
                                                                if not parse:
-                                                                       parse = re.search('id="lrelateRecommendedItems"(.*?)</ul>', data, re.S)
+                                                                       parse = re.search('class="profileVids">(.*?)class="profileContentRight', data, re.S)
                                                                        if not parse:
-                                                                               parse = re.search('class="videos\srow-5-thumbs(.*?)class="pre-footer">', data, re.S)
+                                                                               parse = re.search('id="lrelateRecommendedItems"(.*?)</ul>', data, re.S)
+                                                                               if not parse:
+                                                                                       parse = re.search('class="videos\srow-5-thumbs(.*?)class="pre-footer">', data, re.S)
                if parse:
                        viddata = parse.group(1)
                else:
@@ -1179,11 +1331,15 @@ class pornhubFilmScreen(MPScreen, ThumbsHelper, LoginFunc):
                        Movies = re.findall('(class="(?:pcVideoListItem |)(?:\s{0,1}notLoaded |)(?:\s{0,1}js-pop |)videoblock.*?<var\sclass="added">.*?</var>)', viddata, re.S)
                        if Movies:
                                for each in Movies:
-                                       if not ('class="price"' in each or 'class="premiumIcon' in each or 'class="privateOverlay"' in each):
+                                       if not ('class="price"' in each or 'class="privateOverlay"' in each):
                                                Movie = re.findall('class="(?:pcVideoListItem |)(?:\s{0,1}notLoaded |)(?:\s{0,1}js-pop |)videoblock.*?<a\shref="(.*?)".*?title="(.*?)".*?data-(?:mediumthumb|image)="(.*?)".*?class="duration">(.*?)</var>.*?<span\sclass="views"><var>(.*?)<.*?<var\sclass="added">(.*?)</var>', each, re.S)
                                                for (Url, Title, Image, Runtime, Views, Added) in Movie:
-                                                       Url = base_url + Url
+                                                       Url = self.baseurl + Url
                                                        Title = Title.replace('&amp;amp;','&')
+                                                       if 'class="premiumIcon' in each:
+                                                               premium = True
+                                                       else:
+                                                               premium = False
                                                        if 'class="watchedVideoText"' in each:
                                                                watched = True
                                                        else:
@@ -1199,7 +1355,7 @@ class pornhubFilmScreen(MPScreen, ThumbsHelper, LoginFunc):
                                                                        if usertype.endswith('s'):
                                                                                usertype = usertype[:-1]
                                                                        username = userinfo[0][1]
-                                                       self.filmliste.append((decodeHtml(Title), Url, watched, Image, Runtime, Views, Added, usertype, username))
+                                                       self.filmliste.append((decodeHtml(Title), Url, watched, Image, Runtime, Views, Added, usertype, username, premium, 'ph'))
                        if len(self.filmliste) == 0:
                                if self.Link.endswith('/videos/public?page=') and self.Cat == "Member Subscriptions":
                                        self.retry = True
@@ -1212,7 +1368,7 @@ class pornhubFilmScreen(MPScreen, ThumbsHelper, LoginFunc):
                                        self.loadPage()
                                        return
                                else:
-                                       self.filmliste.append((_('No movies found!'), None, False, None, "", "", "", "", ""))
+                                       self.filmliste.append((_('No movies found!'), None, False, None, "", "", "", "", "", False, 'ph'))
                self.ml.setList(map(self._defaultlistleftmarked, self.filmliste))
                if not self.reload:
                        self.ml.moveToIndex(0)
@@ -1224,17 +1380,21 @@ class pornhubFilmScreen(MPScreen, ThumbsHelper, LoginFunc):
        def loadFeedData(self, data):
                pageurl = re.findall('onclick="loadMoreDataStream\(\'(/.*?)\',', data, re.S)
                if pageurl:
-                       self.feedpageurl = base_url + pageurl[0].replace('&amp;','&') + "&page="
+                       self.feedpageurl = self.baseurl + pageurl[0].replace('&amp;','&') + "&page="
                self.filmliste = []
                parse = re.findall('feedItemSection"(.*?)</section', data, re.S)
                if parse:
                        for each in parse:
-                               if not ('class="price"' in each or 'class="premiumIcon' in each or 'class="privateOverlay"' in each):
-                                       Movies = re.findall('class="(?:\s{0,1}js-pop |)videoblock.*?<a\shref="(.*?)".*?title="(.*?)".*?data-(?:mediumthumb|image)="(.*?)".*?class="duration">(.*?)</var>.*?<span\sclass="views"><var>(.*?)<.*?<var\sclass="added">(.*?)</var>', each, re.S)
+                               if not ('class="price"' in each or 'class="privateOverlay"' in each):
+                                       Movies = re.findall('class="(?:\s{0,1}pcVideoListItem |)(?:\s{0,1}js-pop |)videoblock.*?<a\shref="(.*?)".*?title="(.*?)".*?data-(?:mediumthumb|image)="(.*?)".*?class="duration">(.*?)</var>.*?<span\sclass="views"><var>(.*?)<.*?<var\sclass="added">(.*?)</var>', each, re.S)
                                        if Movies:
                                                for (Url, Title, Image, Runtime, Views, Added) in Movies:
-                                                       Url = base_url + Url
+                                                       Url = self.baseurl + Url
                                                        Title = Title.replace('&amp;amp;','&')
+                                                       if 'class="premiumIcon' in each:
+                                                               premium = True
+                                                       else:
+                                                               premium = False
                                                        if 'class="watchedVideoText"' in each:
                                                                watched = True
                                                        else:
@@ -1248,9 +1408,9 @@ class pornhubFilmScreen(MPScreen, ThumbsHelper, LoginFunc):
                                                                        if usertype.endswith('s'):
                                                                                usertype = usertype[:-1]
                                                                        username = userinfo[0][1]
-                                                       self.filmliste.append((decodeHtml(Title), Url, watched, Image, Runtime, Views, Added, usertype, username))
+                                                       self.filmliste.append((decodeHtml(Title), Url, watched, Image, Runtime, Views, Added, usertype, username, premium, 'ph'))
                if len(self.filmliste) == 0:
-                       self.filmliste.append((_('No movies found!'), None, False, None, "", "", "", "", ""))
+                       self.filmliste.append((_('No movies found!'), None, False, None, "", "", "", "", "", False, 'ph'))
                self.ml.setList(map(self._defaultlistleftmarked, self.filmliste))
                if not self.reload:
                        self.ml.moveToIndex(0)
@@ -1297,7 +1457,7 @@ class pornhubFilmScreen(MPScreen, ThumbsHelper, LoginFunc):
                                self.getInfos2()
 
        def getInfos2(self):
-               twAgentGetPage(self.url, agent=phAgent, cookieJar=ph_cookies, headers={'Referer':base_url}).addCallback(self.showInfos2).addErrback(self.dataError)
+               twAgentGetPage(self.url, agent=phAgent, cookieJar=ph_cookies, headers={'Referer':self.baseurl}).addCallback(self.showInfos2).addErrback(self.dataError)
 
        def showInfos2(self, data):
                runtime = self['liste'].getCurrent()[0][4]
@@ -1311,20 +1471,21 @@ class pornhubFilmScreen(MPScreen, ThumbsHelper, LoginFunc):
                if favparse:
                        self.favtoken = str(favparse[0][2])
                        self.favourited = str(favparse[0][1])
-               userinfo = re.findall('From:.*?href="/(.*?)/.*?".*?bolded">(.*?)</', data, re.S)
+               userinfo = re.findall('From:(.*?)bolded">(.*?)</.*?', data, re.S)
                if userinfo:
-                       usertype = userinfo[0][0].title()
+                       if "href=" in userinfo[0][0]:
+                               usertype = re.search('href="/(.*?)/.*?"', userinfo[0][0], re.S).group(1).title()
                        if usertype.endswith('s'):
                                usertype = usertype[:-1]
                        username = userinfo[0][1]
                else:
-                       username = "unknown"
+                       username = "Unknown"
                        usertype = ""
-               if not username == "unknown":
+               if not username == "Unknown":
                        subparse = re.findall('data-subscribe-url="(.*?)".{0,4}data-unsubscribe-url="(.*?)".{0,4}data-subscribed="(.*?)"', data, re.S)
                        if subparse:
-                               self.suburl = base_url + subparse[0][0].replace('&amp;','&')
-                               self.unsuburl = base_url + subparse[0][1].replace('&amp;','&')
+                               self.suburl = self.baseurl + subparse[0][0].replace('&amp;','&')
+                               self.unsuburl = self.baseurl + subparse[0][1].replace('&amp;','&')
                                self.subscribed = str(subparse[0][2])
                if self.subscribed == "1" and phLoggedIn:
                        submsg = "\n" + usertype + ": " + username + " - Subscribed"
@@ -1353,7 +1514,10 @@ class pornhubFilmScreen(MPScreen, ThumbsHelper, LoginFunc):
                self.url = self['liste'].getCurrent()[0][1]
                if self.url:
                        self['name'].setText(_('Please wait...'))
-                       if retry:
+                       if self.mode == "pornhubpremium":
+                               self.retrycount = 0
+                               cookies = ph_cookies
+                       elif retry:
                                if self.retrycount == 0:
                                        self.retrycount = 1
                                        cookies = ph_cookies
@@ -1371,7 +1535,7 @@ class pornhubFilmScreen(MPScreen, ThumbsHelper, LoginFunc):
                if self.lock:
                        return
                if phLoggedIn:
-                       FavUrl = base_url + "/video/favourite"
+                       FavUrl = self.baseurl + "/video/favourite"
                        toggle = self.favourited
                        if toggle == "0":
                                toggle = "1"
@@ -1394,8 +1558,8 @@ class pornhubFilmScreen(MPScreen, ThumbsHelper, LoginFunc):
                        return
                if self.id == '':
                        return
-               RelatedUrl = base_url + "/video/relateds?ajax=1&id=%s&num_per_page=10&page=" % self.id
-               self.session.open(pornhubFilmScreen, RelatedUrl, "Related")
+               RelatedUrl = self.baseurl + "/video/relateds?ajax=1&id=%s&num_per_page=10&page=" % self.id
+               self.session.open(pornhubFilmScreen, RelatedUrl, "Related", mode=self.mode)
 
        def keySubscribe(self):
                if self.keyLocked:
@@ -1438,7 +1602,8 @@ class pornhubFilmScreen(MPScreen, ThumbsHelper, LoginFunc):
                                added = self['liste'].getCurrent()[0][6]
                                usertype = self['liste'].getCurrent()[0][7]
                                username = self['liste'].getCurrent()[0][8]
-                               self.filmliste.insert(pos, (title, url, True, image, runtime, views, added, usertype, username))
+                               premium = self['liste'].getCurrent()[0][9]
+                               self.filmliste.insert(pos, (title, url, True, image, runtime, views, added, usertype, username, premium, 'ph'))
                                self.ml.setList(map(self._defaultlistleftmarked, self.filmliste))
                        except:
                                pass
@@ -1452,7 +1617,7 @@ class pornhubFilmScreen(MPScreen, ThumbsHelper, LoginFunc):
                                vr = True
                        else:
                                vr = False
-                       js = re.findall('type="text/javascript">.*?(var\sflashvars.*?)loadScriptUniqueId', data, re.S)
+                       js = re.findall('type="text/javascript">.*?(var\sflashvars.*?)(?:loadScriptUniqueId|playerObjList)', data, re.S)
                        if js:
                                js = js[0]
                                if "media_0=" in js:
@@ -1467,6 +1632,14 @@ class pornhubFilmScreen(MPScreen, ThumbsHelper, LoginFunc):
                                        js = js + "console.log(media_4+'\\n');"
                                if "media_5=" in js:
                                        js = js + "console.log(media_5+'\\n');"
+                               if "media_6=" in js:
+                                       js = js + "console.log(media_6+'\\n');"
+                               if "media_7=" in js:
+                                       js = js + "console.log(media_7+'\\n');"
+                               if "media_8=" in js:
+                                       js = js + "console.log(media_8+'\\n');"
+                               if "media_9=" in js:
+                                       js = js + "console.log(media_9+'\\n');"
                                try:
                                        urls = subprocess.check_output(["node", "-e", js]).strip()
                                except OSError as e:
@@ -1480,7 +1653,13 @@ class pornhubFilmScreen(MPScreen, ThumbsHelper, LoginFunc):
                                        i = 0
                                        fetchurl = url[i]
                                        while i < len(url)-1:
-                                               if vr and ('1440P' in url[i] or '1080P' in url[i] or '.m3u8' in url[i]) and not mp_globals.model in ["one","two"]:
+                                               if vr and ('2160P' in url[i] or '1440P' in url[i] or '1080P' in url[i] or '.m3u8' in url[i]) and not mp_globals.model in ["one","two"]:
+                                                       i += 1
+                                                       fetchurl = url[i]
+                                               elif vr and ('2160P' in url[i] or '.m3u8' in url[i]) and mp_globals.model in ["one","two"]:
+                                                       i += 1
+                                                       fetchurl = url[i]
+                                               elif not vr and ('2160P' in url[i] or '1440P' in url[i]) and not mp_globals.model in ["one","two"]:
                                                        i += 1
                                                        fetchurl = url[i]
                                                else:
@@ -1490,11 +1669,16 @@ class pornhubFilmScreen(MPScreen, ThumbsHelper, LoginFunc):
                                        self['name'].setText(Title)
                                        mp_globals.player_agent = phAgent
 
-                                       if not vr and '1080P' in fetchurl and not mp_globals.model in ["one","two"]:
+                                       if not vr and ('2160P' in fetchurl or '1440P' in fetchurl or '1080P' in fetchurl) and not mp_globals.model in ["one","two"]:
                                                self.streamliste = []
                                                self.streamliste.append((Title, fetchurl))
-                                               t = re.search('(?:\/|_)(\d+)P_', url[i+2]).group(1) + 'p'
-                                               self.streamliste.append((Title + ' (' + t + ')', url[i+2]))
+                                               i = 0
+                                               while i < len(url)-1:
+                                                       res = re.search('(?:\/|_)(\d+)P_', url[i]).group(1)
+                                                       t = res + 'p'
+                                                       if int(res) < 1440 and int(res) > 480 and not '.m3u8' in url[i]:
+                                                               self.streamliste.append((Title + ' (' + t + ')', url[i]))
+                                                       i += 1
                                                self.session.open(SimplePlayer, self.streamliste, playIdx=0, playAll=False, showPlaylist=True, listTitle='Quality:', ltype='pornhub')
                                        else:
                                                self.session.open(SimplePlayer, [(Title, fetchurl)], showPlaylist=False, ltype='pornhub')
index fd2e197..0127f98 100644 (file)
@@ -286,19 +286,19 @@ class pornicomFilmScreen(MPScreen, ThumbsHelper):
                Title = self['liste'].getCurrent()[0][0]
                mp_globals.player_agent = agent
                license = re.findall('license_code:\s\'(.*?)\',', data, re.S)
-               url = re.findall('video_(?:alt_|)url\d{0,1}:\s\'(.*?)\'.*?video_(?:alt_|)url_text:\s\'(\d+)(?:p|)\',', data, re.S)
+               url = re.findall('video_(?:alt_|)url\d{0,1}:\s\'(.*?)\'.*?video_(?:alt_|)url\d{0,1}_text:\s\'(\d+)(?:p|)(?: HD|)\',', data, re.S)
                if not url:
                        url = re.findall('video_(?:alt_|)url\d{0,1}:\s\'(.*?)\'', data, re.S)
                if license and url:
                        try:
                                max = 0
                                for vid in url:
-                                       if int(vid[1]) > max:
+                                       if int(vid[1]) > max and not "login" in vid[0]:
                                                max = int(vid[1])
                                                url = vid[0]
                        except:
                                url = url[-1]
                        if 'function/0/' in url:
                                url = decrypturl(url, license[0])
-                       self['name'].setText('')
+                       self['name'].setText(Title)
                        self.session.open(SimplePlayer, [(Title, url)], showPlaylist=False, ltype='pornicom')
\ No newline at end of file
index 38ecc91..d46e054 100644 (file)
@@ -224,7 +224,7 @@ class pornidFilmScreen(MPScreen, ThumbsHelper):
 
        def genreData(self, data):
                self.getLastPage(data, 'class="pagination(.*?)(?:>Last<|Page last|</ul>|</div>)', '.*[>|\/](\d+)[<|\/]')
-               parse = re.search('(?:class="thumbs thumbs-expandable"|class="thumbs videos"|class="thumbs_holder"|class="cards__list)(.*?)(?:class="thumb_spots|class="bottom-banners"|class="pagination)', data, re.S)
+               parse = re.search('(?:class="thumbs thumbs-expandable"|class="thumbs videos(?: desktop-thumbs|)"|class="thumbs_holder"|class="cards__list)(.*?)(?:class="thumb_spots|class="bottom-banners"|class="pagination)', data, re.S)
                if parse:
                        data = parse.group(1)
                        fix = ''
@@ -292,19 +292,19 @@ class pornidFilmScreen(MPScreen, ThumbsHelper):
                Title = self['liste'].getCurrent()[0][0]
                mp_globals.player_agent = agent
                license = re.findall('license_code:\s\'(.*?)\',', data, re.S)
-               url = re.findall('video_(?:alt_|)url\d{0,1}:\s\'(.*?)\'.*?video_(?:alt_|)url_text:\s\'(\d+)(?:p|)\',', data, re.S)
+               url = re.findall('video_(?:alt_|)url\d{0,1}:\s\'(.*?)\'.*?video_(?:alt_|)url\d{0,1}_text:\s\'(\d+)(?:p|)(?: HD|)\',', data, re.S)
                if not url:
                        url = re.findall('video_(?:alt_|)url\d{0,1}:\s\'(.*?)\'', data, re.S)
                if license and url:
                        try:
                                max = 0
                                for vid in url:
-                                       if int(vid[1]) > max:
+                                       if int(vid[1]) > max and not "login" in vid[0]:
                                                max = int(vid[1])
                                                url = vid[0]
                        except:
                                url = url[-1]
                        if 'function/0/' in url:
                                url = decrypturl(url, license[0])
-                       self['name'].setText('')
+                       self['name'].setText(Title)
                        self.session.open(SimplePlayer, [(Title, url)], showPlaylist=False, ltype='pornid')
\ No newline at end of file
index 208f98c..8ad9208 100644 (file)
@@ -193,19 +193,19 @@ class pornoreinoFilmScreen(MPScreen, ThumbsHelper):
                Title = self['liste'].getCurrent()[0][0]
                mp_globals.player_agent = agent
                license = re.findall('license_code:\s\'(.*?)\',', data, re.S)
-               url = re.findall('video_(?:alt_|)url\d{0,1}:\s\'(.*?)\'.*?video_(?:alt_|)url_text:\s\'(\d+)(?:p|)\',', data, re.S)
+               url = re.findall('video_(?:alt_|)url\d{0,1}:\s\'(.*?)\'.*?video_(?:alt_|)url\d{0,1}_text:\s\'(\d+)(?:p|)(?: HD|)\',', data, re.S)
                if not url:
                        url = re.findall('video_(?:alt_|)url\d{0,1}:\s\'(.*?)\'', data, re.S)
                if license and url:
                        try:
                                max = 0
                                for vid in url:
-                                       if int(vid[1]) > max:
+                                       if int(vid[1]) > max and not "login" in vid[0]:
                                                max = int(vid[1])
                                                url = vid[0]
                        except:
                                url = url[-1]
                        if 'function/0/' in url:
                                url = decrypturl(url, license[0])
-                       self['name'].setText('')
+                       self['name'].setText(Title)
                        self.session.open(SimplePlayer, [(Title, url)], showPlaylist=False, ltype='pornoreino')
\ No newline at end of file
index 2bd6fef..44331a2 100644 (file)
@@ -87,25 +87,24 @@ class pornoxoGenreScreen(MPScreen):
 
        def layoutFinished(self):
                self.keyLocked = True
-               url = "%s/tags/" % self.baseurl
+               url = "%s/tags/json/" % self.baseurl
                getPage(url, agent=myagent).addCallback(self.genreData).addErrback(self.dataError)
 
        def genreData(self, data):
-               parse = re.search('<div id="maincolumn2"(.*?)$', data, re.S)
-               Cats = re.findall('href="(/videos/.*?)(?:most-popular/today/|)".*?class="tag-item.*?>(.*?)<span', parse.group(1), re.S)
-               if Cats:
-                       for (Url, Title) in Cats:
-                               Url = self.baseurl + Url + "newest/"
-                               self.genreliste.append((Title.strip(), Url))
-                       self.genreliste.sort()
-                       self.genreliste.insert(0, ("Longest", "%s/videos/longest/" % self.baseurl, None))
-                       self.genreliste.insert(0, ("Best Recent", "%s/videos/best-recent/" % self.baseurl, None))
-                       self.genreliste.insert(0, ("Top Rated", "%s/videos/top-rated/" % self.baseurl, None))
-                       self.genreliste.insert(0, ("Most Popular", "%s/videos/most-popular/today/" % self.baseurl, None))
-                       self.genreliste.insert(0, ("Most Recent", "%s/videos/newest/" % self.baseurl, None))
-                       self.genreliste.insert(0, ("--- Search ---", "callSuchen", None))
-                       self.ml.setList(map(self._defaultlistcenter, self.genreliste))
-                       self.keyLocked = False
+               jsondata = json.loads(data)
+               for item in jsondata:
+                       Title = upperString(str(item["name"]))
+                       Url = self.baseurl + str(item["link"]).replace('most-popular/today/','') + "newest/"
+                       self.genreliste.append((Title.strip(), Url))
+               self.genreliste.sort()
+               self.genreliste.insert(0, ("Longest", "%s/videos/longest/" % self.baseurl, None))
+               self.genreliste.insert(0, ("Best Recent", "%s/videos/best-recent/" % self.baseurl, None))
+               self.genreliste.insert(0, ("Top Rated", "%s/videos/top-rated/" % self.baseurl, None))
+               self.genreliste.insert(0, ("Most Popular", "%s/videos/most-popular/today/" % self.baseurl, None))
+               self.genreliste.insert(0, ("Most Recent", "%s/videos/newest/" % self.baseurl, None))
+               self.genreliste.insert(0, ("--- Search ---", "callSuchen", None))
+               self.ml.setList(map(self._defaultlistcenter, self.genreliste))
+               self.keyLocked = False
 
        def SuchenCallback(self, callback = None):
                if callback is not None and len(callback):
diff --git a/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/porn/porntrex.py b/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/porn/porntrex.py
new file mode 100644 (file)
index 0000000..5303335
--- /dev/null
@@ -0,0 +1,381 @@
+# -*- coding: utf-8 -*-
+#######################################################################################################
+#
+#    MediaPortal for Dreambox OS
+#
+#    Coded by MediaPortal Team (c) 2013-2020
+#
+#  This plugin is open source but it is NOT free software.
+#
+#  This plugin may only be distributed to and executed on hardware which
+#  is licensed by Dream Property GmbH. This includes commercial distribution.
+#  In other words:
+#  It's NOT allowed to distribute any parts of this plugin or its source code in ANY way
+#  to hardware which is NOT licensed by Dream Property GmbH.
+#  It's NOT allowed to execute this plugin and its source code or even parts of it in ANY way
+#  on hardware which is NOT licensed by Dream Property GmbH.
+#
+#  This applies to the source code as a whole as well as to parts of it, unless explicitely
+#  stated otherwise.
+#
+#  If you want to use or modify the code or parts of it, permission from the authors is necessary.
+#  You have to keep OUR license and inform us about any modification, but it may NOT be distributed
+#  other than under the conditions noted above.
+#
+#  As an exception regarding modifcations, you are NOT permitted to remove
+#  any copy protections implemented in this plugin or change them for means of disabling
+#  or working around the copy protections, unless the change has been explicitly permitted
+#  by the original authors. Also decompiling and modification of the closed source
+#  parts is NOT permitted.
+#
+#  Advertising with this plugin is NOT allowed.
+#
+#  For other uses, permission from the authors is necessary.
+#
+#######################################################################################################
+
+from Plugins.Extensions.MediaPortal.plugin import _
+from Plugins.Extensions.MediaPortal.resources.imports import *
+from Plugins.Extensions.MediaPortal.resources.configlistext import ConfigListScreenExt
+
+myagent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.167 Safari/537.36'
+
+config_mp.mediaportal.porntrex_username = ConfigText(default="porntrexUserName", fixed_size=False)
+config_mp.mediaportal.porntrex_password = ConfigPassword(default="porntrexPassword", fixed_size=False)
+config_mp.mediaportal.javwhores_username = ConfigText(default="javbangersUserName", fixed_size=False)
+config_mp.mediaportal.javwhores_password = ConfigPassword(default="javbangersPassword", fixed_size=False)
+config_mp.mediaportal.camwhoresbay_username = ConfigText(default="camwhoresbayUserName", fixed_size=False)
+config_mp.mediaportal.camwhoresbay_password = ConfigPassword(default="camwhoresbayPassword", fixed_size=False)
+
+ck = {}
+LoggedIn = False
+username = ""
+password = ""
+
+class porntrexGenreScreen(MPScreen):
+
+       def __init__(self, session, mode):
+               self.mode = mode
+
+               global default_cover
+               global username
+               global password
+               if self.mode == "porntrex":
+                       self.portal = "Porntrex.com"
+                       self.baseurl = "https://www.porntrex.com"
+                       default_cover = "file://%s/porntrex.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
+                       username = str(config_mp.mediaportal.porntrex_username.value)
+                       password = str(config_mp.mediaportal.porntrex_password.value)
+               elif self.mode == "javbangers":
+                       self.portal = "JavBangers.com"
+                       self.baseurl = "https://www.javbangers.com"
+                       default_cover = "file://%s/javbangers.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
+                       username = str(config_mp.mediaportal.javwhores_username.value)
+                       password = str(config_mp.mediaportal.javwhores_password.value)
+               elif self.mode == "camwhoresbay":
+                       self.portal = "Camwhoresbay.com"
+                       self.baseurl = "https://www.camwhoresbay.com"
+                       default_cover = "file://%s/camwhoresbay.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
+                       username = str(config_mp.mediaportal.camwhoresbay_username.value)
+                       password = str(config_mp.mediaportal.camwhoresbay_password.value)
+
+               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,
+                       "blue": self.keySetup
+               }, -1)
+
+               self['title'] = Label(self.portal)
+               self['ContentTitle'] = Label("Genre:")
+               self['F4'] = Label(_("Setup"))
+               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):
+               ck.clear()
+               global LoggedIn
+               LoggedIn = False
+               url = self.baseurl + "/categories/"
+               getPage(url, agent=myagent).addCallback(self.genreData).addErrback(self.dataError)
+
+       def genreData(self, data):
+               parse = re.search('.*?class="list-categories">(.*?)</html>', data, re.S)
+               if parse:
+                       Cats = re.findall('class="item"\shref="(.*?)"\stitle="(.*?)".*?thumb"\ssrc="(.*?)"', parse.group(1), re.S)
+                       if Cats:
+                               for (Url, Title, Image) in Cats:
+                                       Title = upperString(Title)
+                                       if Image.startswith('//'):
+                                               Image = 'https:' + Image
+                                       self.genreliste.append((decodeHtml(Title), Url, Image))
+                               self.genreliste.sort()
+                               self.genreliste.insert(0, ("Top Rated", '%s/top-rated/' % self.baseurl, default_cover))
+                               self.genreliste.insert(0, ("Most Popular", '%s/most-popular/' % self.baseurl, default_cover))
+                               self.genreliste.insert(0, ("Most Recent", '%s/latest-updates/' % self.baseurl, default_cover))
+                               self.genreliste.insert(0, ("--- Search ---", "callSuchen", default_cover))
+                               self.ml.setList(map(self._defaultlistcenter, self.genreliste))
+                               self.ml.moveToIndex(0)
+                               self.keyLocked = False
+                               self.showInfos()
+
+       def showInfos(self):
+               Link = self['liste'].getCurrent()[0][1]
+               Image = self['liste'].getCurrent()[0][2]
+               CoverHelper(self['coverArt']).getCover(Image, headers={'Referer':Link})
+
+       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(porntrexFilmScreen, 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(callback).replace(' ', '-')
+                       self.session.open(porntrexFilmScreen, Link, Name, self.portal, self.baseurl)
+
+       def keySetup(self):
+               if mp_globals.isDreamOS:
+                       self.session.openWithCallback(self.setupCallback, porntrexSetupScreen, self.mode, self.portal, is_dialog=True)
+               else:
+                       self.session.openWithCallback(self.setupCallback, porntrexSetupScreen, self.mode, self.portal)
+
+       def setupCallback(self, answer=False):
+               if answer:
+                       global LoggedIn
+                       global username
+                       global password
+                       ck.clear()
+                       LoggedIn = False
+                       if self.mode == "porntrex":
+                               username = str(config_mp.mediaportal.porntrex_username.value)
+                               password = str(config_mp.mediaportal.porntrex_password.value)
+                       elif self.mode == "javbangers":
+                               username = str(config_mp.mediaportal.javwhores_username.value)
+                               password = str(config_mp.mediaportal.javwhores_password.value)
+                       elif self.mode == "camwhoresbay":
+                               username = str(config_mp.mediaportal.camwhoresbay_username.value)
+                               password = str(config_mp.mediaportal.camwhoresbay_password.value)
+
+class porntrexSetupScreen(MPSetupScreen, ConfigListScreenExt):
+
+       def __init__(self, session, mode, portal):
+               self.mode = mode
+               self.portal = portal
+               MPSetupScreen.__init__(self, session, skin='MP_PluginSetup')
+
+               self['title'] = Label(self.portal + " " + _("Setup"))
+               self['F4'] = Label('')
+               self.setTitle(self.portal + " " + _("Setup"))
+
+               self.list = []
+               ConfigListScreenExt.__init__(self, self.list)
+
+               if self.mode == "porntrex":
+                       self.list.append(getConfigListEntry(_("Username:"), config_mp.mediaportal.porntrex_username))
+                       self.list.append(getConfigListEntry(_("Password:"), config_mp.mediaportal.porntrex_password))
+               elif self.mode == "javbangers":
+                       self.list.append(getConfigListEntry(_("Username:"), config_mp.mediaportal.javwhores_username))
+                       self.list.append(getConfigListEntry(_("Password:"), config_mp.mediaportal.javwhores_password))
+               elif self.mode == "camwhoresbay":
+                       self.list.append(getConfigListEntry(_("Username:"), config_mp.mediaportal.camwhoresbay_username))
+                       self.list.append(getConfigListEntry(_("Password:"), config_mp.mediaportal.camwhoresbay_password))
+
+               self["config"].setList(self.list)
+
+               self["setupActions"] = ActionMap(["SetupActions"],
+               {
+                       "ok":           self.saveConfig,
+                       "cancel":       self.exit
+               }, -1)
+
+       def saveConfig(self):
+               for x in self["config"].list:
+                       x[1].save()
+               configfile_mp.save()
+               self.close()
+
+       def exit(self):
+               self.close()
+
+class porntrexFilmScreen(MPScreen, ThumbsHelper):
+
+       def __init__(self, session, Link, Name, portal, baseurl):
+               self.portal = portal
+               self.baseurl = baseurl
+               self.Link = Link
+               self.Name = Name
+
+               global default_cover
+               if self.portal == "Porntrex.com":
+                       default_cover = "file://%s/porntrex.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
+               elif self.portal == "JavBangers.com":
+                       default_cover = "file://%s/javbangers.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
+               elif self.portal == "Camwhoresbay.com":
+                       default_cover = "file://%s/camwhoresbay.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
+
+               MPScreen.__init__(self, session, skin='MP_Plugin', default_cover=default_cover)
+               ThumbsHelper.__init__(self)
+
+               self["actions"] = ActionMap(["MP_Actions"], {
+                       "ok" : self.keyOK,
+                       "0" : self.closeAll,
+                       "cancel" : self.keyCancel,
+                       "5" : self.keyShowThumb,
+                       "up" : self.keyUp,
+                       "down" : self.keyDown,
+                       "right" : self.keyRight,
+                       "left" : self.keyLeft,
+                       "nextBouquet" : self.keyPageUp,
+                       "prevBouquet" : self.keyPageDown,
+                       "green" : self.keyPageNumber
+               }, -1)
+
+               self['title'] = Label(self.portal)
+               self['ContentTitle'] = Label("Genre: %s" % self.Name)
+               self['F2'] = Label(_("Page"))
+
+               self['Page'] = Label(_("Page:"))
+               self.keyLocked = True
+               self.page = 1
+               self.lastpage = 1
+
+               self.filmliste = []
+               self.ml = MenuList([], enableWrapAround=True, content=eListboxPythonMultiContent)
+               self['liste'] = self.ml
+
+               self.onLayoutFinish.append(self.loadPage)
+
+       def loadPage(self):
+               self.keyLocked = True
+               self['name'].setText(_('Please wait...'))
+               self.filmliste = []
+               if re.match(".*?Search", self.Name):
+                       if self.portal == "Porntrex.com":
+                               url = "%s/search/%s/?mode=async&function=get_block&block_id=list_videos_videos&q=%s&category_ids=&sort_by=relevance&from_videos=%s" % (self.baseurl, self.Link, self.Link.replace('-','+'), str(self.page))
+                       else:
+                               url = "%s/search/%s/?mode=async&function=get_block&block_id=list_videos_videos_list_search_result&from_videos=%s" % (self.baseurl, self.Link, str(self.page))
+               else:
+                       if self.portal == "Porntrex.com":
+                               if self.page == 1 or self.Name == "Most Recent":
+                                       url = "%s%s/" % (self.Link, str(self.page))
+                               else:
+                                       url = "%s%s/?mode=async&function=get_block&block_id=list_videos_common_videos_list_norm&sort_by=video_viewed&from4=%s" % (self.Link, str(self.page), str(self.page))
+                                       if self.Name == "Top Rated":
+                                               url = url.replace('video_viewed','rating')
+                       else:
+                               url = "%s%s/" % (self.Link, str(self.page))
+               getPage(url, agent=myagent).addCallback(self.loadData).addErrback(self.dataError)
+
+       def loadData(self, data):
+               self.getLastPage(data, 'class="pagination"(.*?)</ul>')
+               if self.portal == "Porntrex.com":
+                       Movies = re.findall('class="video-preview.*?href="(.*?)".*?data-(?:original|src)="(.*?)".*?alt="(.*?)".*?</a>(.*?)class="ico.*?class="viewsthumb">(.*?)\sviews.*?clock-o"></i>(.*?)</div.*?list-unstyled">.*?<li>(.*?)</li', data, re.S)
+                       if Movies:
+                               for (url, image, title, private, views, runtime, added) in Movies:
+                                       if image.startswith('//'):
+                                               image = 'https:' + image
+                                       runtime = runtime.strip()
+                                       views = views.replace(' ','')
+                                       if "private" in private:
+                                               private = True
+                                       else:
+                                               private = False
+                                       self.filmliste.append((decodeHtml(title), url, image, runtime, views, added, private))
+               else:
+                       Movies = re.findall('class="video-item.*?href="(.*?)"\stitle="(.*?)".*?data-(?:original|src)="(.*?)".*?</a>(.*?)class="ico.*?class="viewsthumb">(.*?)\sviews.*?clock-o"></i>(.*?)</div.*?list-unstyled">.*?<li>(.*?)</li', data, re.S)
+                       if Movies:
+                               for (url, title, image, private, views, runtime, added) in Movies:
+                                       if image.startswith('//'):
+                                               image = 'https:' + image
+                                       runtime = runtime.strip()
+                                       views = views.replace(' ','')
+                                       if "private" in private:
+                                               private = True
+                                       else:
+                                               private = False
+                                       self.filmliste.append((decodeHtml(title), url, image, runtime, views, added, private))
+               if len(self.filmliste) == 0:
+                       self.filmliste.append((_('No videos found!'), None, None, '', '', '', False))
+               self.ml.setList(map(self._defaultlistleft, self.filmliste))
+               self.ml.moveToIndex(0)
+               self.keyLocked = False
+               self.th_ThumbsQuery(self.filmliste, 0, 1, 2, None, None, self.page, int(self.lastpage), mode=1)
+               self.showInfos()
+
+       def showInfos(self):
+               title = self['liste'].getCurrent()[0][0]
+               url = self['liste'].getCurrent()[0][1]
+               pic = self['liste'].getCurrent()[0][2]
+               runtime = self['liste'].getCurrent()[0][3]
+               views = self['liste'].getCurrent()[0][4]
+               added = self['liste'].getCurrent()[0][5]
+               self['handlung'].setText("Runtime: %s\nAdded: %s\nViews: %s" % (runtime, added, views))
+               self['name'].setText(title)
+               CoverHelper(self['coverArt']).getCover(pic, headers={'Referer':url})
+
+       def keyOK(self):
+               if self.keyLocked:
+                       return
+               url = self['liste'].getCurrent()[0][1]
+               private = self['liste'].getCurrent()[0][6]
+               if not private:
+                       self.keyLocked = True
+                       getPage(url, agent=myagent).addCallback(self.getVideoPage).addErrback(self.dataError)
+               elif LoggedIn:
+                       self.keyLocked = True
+                       getPage(url, agent=myagent, cookies=ck).addCallback(self.getVideoPage).addErrback(self.dataError)
+               else:
+                       self.Login(url)
+
+       def Login(self, url):
+               self['name'].setText(_('Please wait...'))
+               loginUrl = "%s/login/" % self.baseurl
+               loginData = {'action': "login", 'pass': password, 'remember_me': 1, 'username': username, 'format': "json", 'mode': "async", 'email_link': "%s/email/" % self.baseurl}
+               getPage(loginUrl, agent=myagent, method='POST', postdata=urlencode(loginData), cookies=ck, timeout=30, headers={'Content-Type':'application/x-www-form-urlencoded'}).addCallback(self.Login2, url).addErrback(self.dataError)
+
+       def Login2(self, data, url):
+               if '"status":"success",' in data:
+                       global LoggedIn
+                       LoggedIn = True
+                       self.keyLocked = True
+                       getPage(url, agent=myagent, cookies=ck).addCallback(self.getVideoPage).addErrback(self.dataError)
+               else:
+                       message = self.session.open(MessageBoxExt, _("Login data is required for video playback!"), MessageBoxExt.TYPE_INFO, timeout=5)
+
+       def getVideoPage(self, data):
+               vidurl = None
+               url = re.findall("video_(?:alt_|)url(?:\d+|):\s.{0,1}'(.*?)'", data, re.S)
+               if url:
+                       vidurl = url[-1]
+                       if "2160p" in vidurl or "1440p" in vidurl:
+                               vidurl = url[-2]
+                       if "2160p" in vidurl or "1440p" in vidurl:
+                               vidurl = url[-3]
+               else:
+                       url = re.findall('Download:.*?href="(.*?)\/\?download', data, re.S)
+                       if url:
+                               vidurl = url[-1]
+               if vidurl:
+                       Title = self['liste'].getCurrent()[0][0]
+                       self.session.open(SimplePlayer, [(Title, vidurl)], showPlaylist=False, ltype='porntrex')
+               self.keyLocked = False
\ No newline at end of file
index a4f11a6..ab3183f 100644 (file)
@@ -82,18 +82,6 @@ class porntvGenreScreen(MPScreen):
                        self.portal = "AssPoint.com"
                        self.baseurl = "https://www.asspoint.com"
                        default_cover = "file://%s/asspoint.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
-               elif self.mode == "analpornvideos":
-                       self.portal = "AnalPornVideos.com"
-                       self.baseurl = "https://www.analpornvideos.com"
-                       default_cover = "file://%s/analpornvideos.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
-               elif self.mode == "hoodtube":
-                       self.portal = "HoodTube.com"
-                       self.baseurl = "https://www.hoodtube.com"
-                       default_cover = "file://%s/hoodtube.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
-               elif self.mode == "suzisporn":
-                       self.portal = "SuzisPorn.com"
-                       self.baseurl = "https://www.suzisporn.com"
-                       default_cover = "file://%s/suzisporn.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
                elif self.mode == "movieshark":
                        self.portal = "MovieShark.com"
                        self.baseurl = "https://www.movieshark.com"
@@ -145,29 +133,29 @@ class porntvGenreScreen(MPScreen):
                getPage(url, agent=agent).addCallback(self.genreData).addErrback(self.dataError)
 
        def genreData(self, data):
-               parse = re.search('<h1>Popular Categories</h1>(.*?)<h1>', data, re.S)
+               parse = re.search('<h1>Popular Categories</h1>(.*?)(?:<h1>|class="tabs")', data, re.S)
                if not parse:
                        parse = re.search('class="universalheader">(.*?)$', data, re.S)
                        if not parse:
                                parse = re.search('id="load">(.*?)$', data, re.S)
                                if not parse:
                                        parse = re.search('class="cat-list(.*?)class="cat-list', data, re.S)
-               Cats = re.findall('(?:class="item"|<div style=).*?href="(.*?)">(?:<font size=3><b>|)(.*?)(?:</a|</b></font>).*?(?:cat-img"|img|loading="lazy").src="(.*?)"', parse.group(1), re.S)
+               Cats = re.findall('(?:class="item(?: video-category|)"|<div style=).*?href="(.*?)".*?src="(.*?)".*?title="(.*?)"', parse.group(1), re.S)
                if Cats:
-                       for (Url, Title, Image) in Cats:
-                               if Url.endswith('.html'):
-                                       Url = Url.replace('-popular.html','-recent.html').split('.html')[0] + "-$$PAGE$$.html"
-                                       if Url.startswith('/'):
-                                               Url = self.baseurl + Url
-                               if self.mode == "porntitan":
-                                       Title = Title.split(' Porn')[0]
-                               self.genreliste.append((upperString(Title), Url, Image))
+                       for (Url, Image, Title) in Cats:
+                               if not "galleries" in Url:
+                                       Title = Title.replace(' Videos', '').replace(' Movies', '').replace(' Tube', '')
+                                       if Url.endswith('.html'):
+                                               Url = Url.replace('-popular.html','-recent.html').split('.html')[0] + "-$$PAGE$$.html"
+                                               if Url.startswith('/'):
+                                                       Url = self.baseurl + Url
+                                       self.genreliste.append((upperString(Title), Url, Image))
                        self.genreliste.sort()
-               self.genreliste.insert(0, ("Longest", "%s/videos/straight/all-length-$$PAGE$$.html" % self.baseurl, default_cover))
-               self.genreliste.insert(0, ("Top Rated", "%s/videos/straight/all-rate-$$PAGE$$.html" % self.baseurl, default_cover))
-               self.genreliste.insert(0, ("Most Viewed", "%s/videos/straight/all-view-$$PAGE$$.html" % self.baseurl, default_cover))
-               self.genreliste.insert(0, ("Most Popular", "%s/videos/straight/all-popular-$$PAGE$$.html" % self.baseurl, default_cover))
-               self.genreliste.insert(0, ("Most Recent", "%s/videos/straight/all-recent-$$PAGE$$.html" % self.baseurl, default_cover))
+               self.genreliste.insert(0, ("Longest", "%s/videos/all-length-$$PAGE$$.html" % self.baseurl, default_cover))
+               self.genreliste.insert(0, ("Top Rated", "%s/videos/all-rate-$$PAGE$$.html" % self.baseurl, default_cover))
+               self.genreliste.insert(0, ("Most Viewed", "%s/videos/all-view-$$PAGE$$.html" % self.baseurl, default_cover))
+               self.genreliste.insert(0, ("Most Popular", "%s/videos/all-popular-$$PAGE$$.html" % self.baseurl, default_cover))
+               self.genreliste.insert(0, ("Most Recent", "%s/videos/all-recent-$$PAGE$$.html" % self.baseurl, default_cover))
                self.genreliste.insert(0, ("--- Search ---", "callSuchen", default_cover))
                self.ml.setList(map(self._defaultlistcenter, self.genreliste))
                self.keyLocked = False
@@ -223,12 +211,6 @@ class porntvFilmScreen(MPScreen, ThumbsHelper):
                        default_cover = "file://%s/sexoasis.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
                elif self.portal == "AssPoint.com":
                        default_cover = "file://%s/asspoint.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
-               elif self.portal == "AnalPornVideos.com":
-                       default_cover = "file://%s/analpornvideos.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
-               elif self.portal == "HoodTube.com":
-                       default_cover = "file://%s/hoodtube.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
-               elif self.portal == "SuzisPorn.com":
-                       default_cover = "file://%s/suzisporn.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
                elif self.portal == "MovieShark.com":
                        default_cover = "file://%s/movieshark.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
                elif self.portal == "YoungPorno.com":
@@ -283,10 +265,12 @@ class porntvFilmScreen(MPScreen, ThumbsHelper):
                getPage(url, agent=agent).addCallback(self.loadData).addErrback(self.dataError)
 
        def loadData(self, data):
-               self.getLastPage(data, '(?:class="pagination"|class="pages2">)(.*?)</div>')
-               Items = re.findall('class="(?:item"|thumb"|group)(.*?(?:clock.*?</span>|infoBox.*?</div>|class="ago">.*?</div>|Views: <strong>.*?</p>))', data, re.S)
+               self.getLastPage(data, '(?:class="pagination(?: _767p|)"|class="pages2">)(.*?)</div>')
+               Items = re.findall('class="(?:item"|thumb"|group)(.*?(?:clock.*?</span>|infoBox.*?</div>|class="ago">.*?</div>|Views: <strong>.*?</p>|</span>\s{2,20}</div>))', data, re.S)
                for item in Items:
                        Movies = re.findall('href="(.*?)".*?img(?: loading="lazy"|)(?: class="pop-execute"|)\ssrc="(.*?)"\swidth="\d+"\sheight="\d+".*?alt="(.*?)"(.*?clock.*?</span>|.*?infoBox.*?</div>|.*?class="ago">.*?</div>|.*?Views: <strong>.*?</p>)', item, re.S)
+                       if not Movies:
+                               Movies = re.findall('href="(.*?)".*?img(?: loading="lazy"|)(?: class="pop-execute"|)\ssrc="(.*?)" alt="(.*?)"(.*?clock.*?</span>|.*?infoBox.*?</div>|.*?class="ago">.*?</div>|.*?Views: <strong>.*?</p>|.*?#eye.*?</span)', item, re.S)
                        if Movies:
                                for (Url, Image, Title, Meta) in Movies:
                                        if "infoBox" in Meta:
@@ -307,6 +291,12 @@ class porntvFilmScreen(MPScreen, ThumbsHelper):
                                                        if Url.startswith('/'):
                                                                Url = self.baseurl + Url
                                                self.filmliste.append((decodeHtml(Title), Url, Image, '', Date, Views, Runtime))
+                                       elif 'class="time"' in Meta:
+                                               info = re.findall('class="time">(.*?)</span>.*?#like"></use></svg>(.*?)</span>.*?eye"></use></svg>(.*?)</span', Meta, re.S)
+                                               for (Runtime, Rating, Views) in info:
+                                                       if Url.startswith('/'):
+                                                               Url = self.baseurl + Url
+                                               self.filmliste.append((decodeHtml(Title), Url, Image, Rating, '', Views, Runtime))
                                        else:
                                                Rating = re.findall('like"></use></svg>(.*?)</span>', Meta, re.S)
                                                Date = re.findall('calendar"></use></svg>(.*?)</span>', Meta, re.S)
@@ -333,9 +323,18 @@ class porntvFilmScreen(MPScreen, ThumbsHelper):
                views = self['liste'].getCurrent()[0][5]
                runtime = self['liste'].getCurrent()[0][6]
                if rating:
-                       self['handlung'].setText("Runtime: %s\nViews: %s\nAdded: %s\nRating: %s" % (runtime, views, added, rating))
+                       rating = "\nRating: %s" % rating
+               else:
+                       rating = ""
+               if added:
+                       added = "\nAdded: %s" % added
+               else:
+                       added = ""
+               if views:
+                       views = "\nViews: %s" % views
                else:
-                       self['handlung'].setText("Runtime: %s\nViews: %s\nAdded: %s" % (runtime, views, added))
+                       views = ""
+               self['handlung'].setText("Runtime: %s%s%s%s" % (runtime, views, added, rating))
                CoverHelper(self['coverArt']).getCover(pic)
 
        def keyOK(self):
index 0104523..6acbe1a 100644 (file)
@@ -39,6 +39,7 @@ 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/pornxio.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
+cookies = CookieJar()
 
 class pornxioGenreScreen(MPScreen):
 
@@ -100,9 +101,33 @@ class pornxioGenreScreen(MPScreen):
                elif self.mode == "xnxxhamster":
                        if self.genre == "category":
                                self.genre = "channels"
-                       self.portal = "XNXXHamster.com"
+                       self.portal = "XNXXHamster.net"
                        self.baseurl = "https://xnxxhamster.net"
                        default_cover = "file://%s/xnxxhamster.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
+               elif self.mode == "freepornhq":
+                       if self.genre == "category":
+                               self.genre = "channels"
+                       self.portal = "FreePornHQ.xxx"
+                       self.baseurl = "https://www.freepornhq.xxx"
+                       default_cover = "file://%s/freepornhq.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
+               elif self.mode == "youramateurtube":
+                       if self.genre == "category":
+                               self.genre = "channels"
+                       self.portal = "YourAmateurTube.com"
+                       self.baseurl = "https://youramateurtube.com"
+                       default_cover = "file://%s/youramateurtube.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
+               elif self.mode == "al4a":
+                       if self.genre == "category":
+                               self.genre = "channels"
+                       self.portal = "Al4a.com"
+                       self.baseurl = "https://www.al4a.com"
+                       default_cover = "file://%s/al4a.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
+               elif self.mode == "pornomovies":
+                       if self.genre == "category":
+                               self.genre = "categories"
+                       self.portal = "PornoMovies.com"
+                       self.baseurl = "https://www.pornomovies.com"
+                       default_cover = "file://%s/pornomovies.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
 
                MPScreen.__init__(self, session, skin='MP_Plugin', default_cover=default_cover)
 
@@ -156,9 +181,9 @@ class pornxioGenreScreen(MPScreen):
                                                                self.filmliste.append((upperString(decodeHtml(Title)), Url, Image))
                                        self.filmliste.sort()
                else:
-                       parse = re.search('<h(?:1|2).*?>\s{0,70}(?:Porn Channels|Channels|Categories|List of Handjob Categories|Browse HD Porn Sites|Amateur Porn Categories)(.*?)$', data, re.S)
+                       parse = re.search('<h(?:1|2).*?>\s{0,70}(?:Porn Channels|Channels|Categories|List of Handjob Categories|Browse HD Porn Sites|Amateur Porn Categories|Free Porn Categories|Porno Categories)(.*?)$', data, re.S)
                        if parse:
-                               Cats = re.findall('class="item-col item--(?:channel|paysite).*?href="(.*?)".*?img.*?(?:src|data-opts-original)="(\w.*?)".*?alt="(.*?)"', parse.group(1), re.S)
+                               Cats = re.findall('class="item-(?:col|block) item-{1,2}(?:channel|paysite|normal).*?href="(.*?)".*?img.*?(?:src|data-opts-original)="(\w.*?)".*?alt="(.*?)"', parse.group(1), re.S)
                                if Cats:
                                        for (Url, Image, Title) in Cats:
                                                if "4K" in Title:
@@ -167,6 +192,12 @@ class pornxioGenreScreen(MPScreen):
                                                else:
                                                        if not "Premium VOD" in Title:
                                                                if not "GIFS" in Title:
+                                                                       if "Porno Movies" in Title:
+                                                                               Title = Title.split('Porno Movies')[0].strip()
+                                                                       if self.mode == "freepornhq":
+                                                                               Image = default_cover
+                                                                       if Url.startswith('/'):
+                                                                               Url = self.baseurl + Url
                                                                        self.filmliste.append((upperString(decodeHtml(Title)), Url, Image))
                                        self.filmliste.sort()
                if (self.genre == "category" or self.genre == "categories" or self.genre == "cat" or self.genre == "channels" or self.genre == "porn-categories" or self.genre == "tags"):
@@ -178,7 +209,10 @@ class pornxioGenreScreen(MPScreen):
                        self.filmliste.insert(0, ("Most Discussed", "%s/most-discussed/" % self.baseurl, default_cover))
                        self.filmliste.insert(0, ("Top Rated", "%s/top-rated/" % self.baseurl, default_cover))
                        self.filmliste.insert(0, ("Most Viewed", "%s/most-viewed/" % self.baseurl, default_cover))
-                       self.filmliste.insert(0, ("Newest", "%s/videos/" % self.baseurl, default_cover))
+                       if self.mode == "pornomovies":
+                               self.filmliste.insert(0, ("Newest", "%s/most-recent/" % self.baseurl, default_cover))
+                       else:
+                               self.filmliste.insert(0, ("Newest", "%s/videos/" % self.baseurl, default_cover))
                        self.filmliste.insert(0, ("--- Search ---", "callSuchen", default_cover))
                self.ml.setList(map(self._defaultlistcenter, self.filmliste))
                self.keyLocked = False
@@ -241,6 +275,14 @@ class pornxioFilmScreen(MPScreen, ThumbsHelper):
                        default_cover = "file://%s/eroxia.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
                elif self.portal == "XNXXHamster.net":
                        default_cover = "file://%s/xnxxhamster.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
+               elif self.portal == "FreePornHQ.xxx":
+                       default_cover = "file://%s/freepornhq.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
+               elif self.portal == "YourAmateurTube.com":
+                       default_cover = "file://%s/youramateurtube.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
+               elif self.portal == "Al4a.com":
+                       default_cover = "file://%s/al4a.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
+               elif self.portal == "PornoMovies.com":
+                       default_cover = "file://%s/pornomovies.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
 
                MPScreen.__init__(self, session, skin='MP_Plugin', default_cover=default_cover)
                ThumbsHelper.__init__(self)
@@ -282,10 +324,14 @@ class pornxioFilmScreen(MPScreen, ThumbsHelper):
                        url = "%s/search/videos/%s/page%s.html" % (self.baseurl, self.Link, str(self.page))
                else:
                        url = "%s/page%s.html" % (self.Link, str(self.page))
+               print url
                twAgentGetPage(url, agent=agent).addCallback(self.genreData).addErrback(self.dataError)
 
        def genreData(self, data):
-               self.getLastPage(data, 'class="pagination(.*?)(?:rel=\'next\'|</nav>)', '.*(?:page|<span>)(\d+)(?:\.html|</span>)')
+               if self.portal == "PornoMovies.com":
+                       self.getLastPage(data, 'class="pagination(.*?)</div>', '.*>(\d+)<')
+               else:
+                       self.getLastPage(data, 'class="pagination(.*?)(?:rel=\'next\'|</nav>)', '.*(?:page|<span>)(\d+)(?:\.html|</span>)')
                if "<!-- // TOPLIST TEMPLATE // -->" in data:
                        parse = re.search('^(.*?)<!-- // TOPLIST TEMPLATE // -->', data, re.S)
                        if parse:
@@ -294,29 +340,71 @@ class pornxioFilmScreen(MPScreen, ThumbsHelper):
                        parse = re.search('<!-- STANDARD CONTENT -->(.*?)$', data, re.S)
                        if parse:
                                data = parse.group(1)
+               if "<!-- title END -->" in data:
+                       parse = re.search('<!-- title END -->(.*?)$', data, re.S)
+                       if parse:
+                               data = parse.group(1)
                if "<!-- FOOTER DOWN -->" in data:
                        parse = re.search('^(.*?)<!-- FOOTER DOWN -->', data, re.S)
                        if parse:
                                data = parse.group(1)
-               Movies = re.findall('class="item-col col\s{0,1}"\s{0,1}(?:\sid="content-\d+"|\s{0,1}|data-video=".*?")>.*?href="(.*?)".*?(?:src|data-opts-original)="(?!data:image/)(\w.*?)".*?alt="(.*?)".*?class="time">(.*?)</span>.*?i-thumbs-up".*?sub-desc">(.*?)</span>.*?class="icon i-eye">.*?class="sub-desc">(.*?)</span>', data, re.S)
-               if Movies:
-                       for (Url, Image, Title, Runtime, Rating, Views) in Movies:
-                               if Runtime and not "Photos" in Runtime:
+               if "</main>" in data:
+                       parse = re.search('^(.*?)</main>', data, re.S)
+                       if parse:
+                               data = parse.group(1)
+               if self.portal == "FreePornHQ.xxx":
+                       Movies = re.findall('class="item-col col\s{0,1}"\s{0,1}(?:\sid="content-\d+"|\s{0,1}|data-video=".*?")>.*?href="(.*?)".*?(?:src|data-opts-original)="(?!data:image/)(\w.*?)".*?alt="(.*?)".*?class="time">(.*?)</span>', data, re.S)
+                       if Movies:
+                               for (Url, Image, Title, Runtime) in Movies:
+                                       if Runtime and not "Photos" in Runtime:
+                                               if Title == '':
+                                                       Title = Image.split('/')[-1]
+                                                       if "." in Title:
+                                                               Title = Title.split('.')[0]
+                                               self.filmliste.append((decodeHtml(Title).strip(), Url, Image.replace(' ','%20'), Runtime, '', '', ''))
+               elif self.portal == "Al4a.com":
+                       Movies = re.findall('class="item-col col\s{0,1}"\s{0,1}(?:\sid="content-\d+"|\s{0,1}|data-video=".*?")>.*?href="(.*?)".*?(?:src|data-opts-original)="(?!data:image/)(\w.*?)".*?alt="(.*?)"', data, re.S)
+                       if Movies:
+                               for (Url, Image, Title) in Movies:
                                        if Title == '':
                                                Title = Image.split('/')[-1]
                                                if "." in Title:
                                                        Title = Title.split('.')[0]
-                                       self.filmliste.append((decodeHtml(Title).strip(), Url, Image.replace(' ','%20'), Runtime, Rating, Views))
+                                       self.filmliste.append((decodeHtml(Title).strip(), Url, Image.replace(' ','%20'), '', '', '', ''))
                else:
-                       Movies = re.findall('class="item col">.*?href="(.*?)".*?class="icon -thumb-up">.*?class="item__stat-label">(.*?)</span>.*?class="icon -eye">.*?class="item__stat-label">(.*?)</span>.*?class="icon -time">.*?class="item__stat-label">(.*?)</span>.*?(?:src|data-opts-original)="(?!data:image/)(\w.*?)".*?alt="(.*?)".*?', data, re.S)
+                       Movies = re.findall('class="item-col col\s{0,1}"\s{0,1}(?:\sid="content-\d+"|\s{0,1}|data-video=".*?")>.*?href="(.*?)".*?(?:src|data-opts-original)="(?!data:image/)(\w.*?)".*?alt="(.*?)".*?class="time">(.*?)</span>.*?i-thumbs-up".*?sub-desc">(.*?)</span>.*?class="icon i-eye">.*?class="sub-desc">(.*?)</span>', data, re.S)
                        if Movies:
-                               for (Url, Rating, Views, Runtime, Image, Title) in Movies:
-                                       if not "Photos" in Runtime:
+                               for (Url, Image, Title, Runtime, Rating, Views) in Movies:
+                                       if Runtime and not "Photos" in Runtime:
                                                if Title == '':
                                                        Title = Image.split('/')[-1]
                                                        if "." in Title:
                                                                Title = Title.split('.')[0]
-                                               self.filmliste.append((decodeHtml(Title).strip(), Url, Image.replace(' ','%20'), Runtime, Rating, Views))
+                                               self.filmliste.append((decodeHtml(Title).strip(), Url, Image.replace(' ','%20'), Runtime, Rating, Views, ''))
+                       else:
+                               Movies = re.findall('class="item col">.*?href="(.*?)".*?class="icon -thumb-up">.*?class="item__stat-label">(.*?)</span>.*?class="icon -eye">.*?class="item__stat-label">(.*?)</span>.*?class="icon -time">.*?class="item__stat-label">(.*?)</span>.*?(?:src|data-opts-original)="(?!data:image/)(\w.*?)".*?alt="(.*?)".*?', data, re.S)
+                               if Movies:
+                                       for (Url, Rating, Views, Runtime, Image, Title) in Movies:
+                                               if not "Photos" in Runtime:
+                                                       if Title == '':
+                                                               Title = Image.split('/')[-1]
+                                                               if "." in Title:
+                                                                       Title = Title.split('.')[0]
+                                                       self.filmliste.append((decodeHtml(Title).strip(), Url, Image.replace(' ','%20'), Runtime, Rating, Views, ''))
+                               else:
+                                       Movies = re.findall('class="item-block item-normal col\s{0,1}"\s{0,1}(?:\sid="content-\d+"|\s{0,1}|data-video=".*?")\s{0,1}>.*?href="(.*?)".*?(?:src|data-opts-original)="(?!data:image/)(\w.*?)".*?alt="(.*?)".*?class="icon i-time">(.*?)\|.*?class="icon i-calendar">(.*?)\|.*?class="icon i-eye"></span>(.*?)</span>', data, re.S)
+                                       if Movies:
+                                               for (Url, Image, Title, Runtime, Added, Views) in Movies:
+                                                       if not "Photos" in Runtime:
+                                                               if Title == '':
+                                                                       Title = Image.split('/')[-1]
+                                                                       if "." in Title:
+                                                                               Title = Title.split('.')[0]
+                                                               Runtime = stripAllTags(Runtime).strip()
+                                                               Added = stripAllTags(Added).strip()
+                                                               Runtime = stripAllTags(Runtime).strip()
+                                                               Views = Views.replace(',','').strip()
+                                                               self.filmliste.append((decodeHtml(Title).strip(), Url, Image.replace(' ','%20'), Runtime, '', Views, Added))
                if len(self.filmliste) == 0:
                        self.filmliste.append((_('No videos found!'), None, None, '', '', ''))
                self.ml.setList(map(self._defaultlistleft, self.filmliste))
@@ -332,8 +420,17 @@ class pornxioFilmScreen(MPScreen, ThumbsHelper):
                runtime = self['liste'].getCurrent()[0][3]
                rating = self['liste'].getCurrent()[0][4]
                views = self['liste'].getCurrent()[0][5]
+               added = self['liste'].getCurrent()[0][6]
                self['name'].setText(title)
-               self['handlung'].setText("Runtime: %s\nRating: %s\nViews: %s" % (runtime, rating, views))
+               if runtime:
+                       runtime = "Runtime: %s" % runtime
+               if rating:
+                       rating = "\nRating: %s" % rating
+               if views:
+                       views = "\nViews: %s" % views
+               if added:
+                       added = "\nAdded: %s" % added
+               self['handlung'].setText("%s%s%s%s" % (runtime, added, rating, views))
                if self.portal == "LaidHub.com":
                        headers = {}
                else:
@@ -346,10 +443,11 @@ class pornxioFilmScreen(MPScreen, ThumbsHelper):
                Link = self['liste'].getCurrent()[0][1]
                if Link:
                        self['name'].setText(_('Please wait...'))
-                       twAgentGetPage(Link, agent=agent).addCallback(self.parseVideo).addErrback(self.dataError)
+                       twAgentGetPage(Link, agent=agent, cookieJar=cookies).addCallback(self.parseVideo).addErrback(self.dataError)
 
        def parseVideo(self, data):
                Title = self['liste'].getCurrent()[0][0]
+               Link = self['liste'].getCurrent()[0][1]
                mp_globals.player_agent = agent
                url = re.findall('<source\ssrc=["|\'](.*?)["|\']', data, re.S)
                if not url:
@@ -358,4 +456,10 @@ class pornxioFilmScreen(MPScreen, ThumbsHelper):
                        url = url[0]
                        if "laidhub" in url:
                                url = url.replace('https','http')
+                       import requests
+                       ck = requests.utils.dict_from_cookiejar(cookies)
+                       headers = '&Cookie=%s' % ','.join(['%s=%s' % (key, urllib.quote_plus(ck[key])) for key in ck])
+                       headers = headers + '&Referer=%s' % Link
+                       url = url + '#User-Agent='+agent+headers
+                       mp_globals.player_agent = agent
                        self.session.open(SimplePlayer, [(Title, url)], showPlaylist=False, ltype='pornxio')
\ No newline at end of file
index 8de3409..633dfe6 100644 (file)
@@ -239,7 +239,7 @@ class redtubeFilmScreen(MPScreen, ThumbsHelper):
                        parse = re.search('id="search_results_block"(.*?)$', data, re.S)
                        if parse:
                                data = parse.group(1)
-               Movies = re.findall('class="video_block_wrapper.*?<a\sclass="video_link.*?href="(\/\d+)".*?data-src\s{0,1}=\s{0,1}"(.*?)".*?duration">.*?(\d.*?)</a.*?a\stitle="(.*?)".*?video_count">(.*?)views', data, re.S)
+               Movies = re.findall('class="video_block_wrapper.*?<a\sclass\s{0,1}=\s{0,1}"video_link.*?href\s{0,1}=\s{0,1}"(\/\d+)".*?data-src\s{0,1}=\s{0,1}"(.*?)".*?duration">.*?(\d.*?)</a.*?a\stitle="(.*?)".*?video_count">(.*?)views', data, re.S)
                if Movies:
                        for (Url, Image, Runtime, Title, Views) in Movies:
                                if Image.startswith('//'):
index 728b94e..770235b 100644 (file)
 from Plugins.Extensions.MediaPortal.plugin import _
 from Plugins.Extensions.MediaPortal.resources.imports import *
 from Plugins.Extensions.MediaPortal.resources.decrypt import decrypturl
+from Plugins.Extensions.MediaPortal.resources.configlistext import ConfigListScreenExt
 
 agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36'
 cookies = CookieJar()
+username = ""
+password = ""
+LoggedIn = False
+
+config_mp.mediaportal._0dayporn_username = ConfigText(default="", fixed_size=False)
+config_mp.mediaportal._0dayporn_password = ConfigPassword(default="", fixed_size=False)
+config_mp.mediaportal._datoporn_username = ConfigText(default="", fixed_size=False)
+config_mp.mediaportal._datoporn_password = ConfigPassword(default="", fixed_size=False)
 
 class slutloadGenreScreen(MPScreen):
 
@@ -47,6 +56,10 @@ class slutloadGenreScreen(MPScreen):
                self.mode = mode
 
                global default_cover
+               global username
+               global password
+               global LoggedIn
+               LoggedIn = False
                if self.mode == "slutload":
                        self.portal = "Slutload.com"
                        self.baseurl = "https://www.slutload.com"
@@ -63,10 +76,6 @@ class slutloadGenreScreen(MPScreen):
                        self.portal = "VQTube.com"
                        self.baseurl = "https://vqtube.com"
                        default_cover = "file://%s/vqtube.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
-               elif self.mode == "porntube69":
-                       self.portal = "PornTube69.net"
-                       self.baseurl = "https://www.porntube69.net"
-                       default_cover = "file://%s/porntube69.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
                elif self.mode == "megatube":
                        self.portal = "MegaTube.xxx"
                        self.baseurl = "https://www.megatube.xxx"
@@ -85,7 +94,7 @@ class slutloadGenreScreen(MPScreen):
                        default_cover = "file://%s/tropictube.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
                elif self.mode == "pornfd":
                        self.portal = "PornFD.com"
-                       self.baseurl = "https://www.pornfd.com"
+                       self.baseurl = "http://www.pornfd.com"
                        default_cover = "file://%s/pornfd.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
                elif self.mode == "pornbimbo":
                        self.portal = "PornBimbo.com"
@@ -123,17 +132,48 @@ class slutloadGenreScreen(MPScreen):
                        self.portal = "CamUploads.com"
                        self.baseurl = "https://www.camuploads.com"
                        default_cover = "file://%s/camuploads.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
+               elif self.mode == "datoporn":
+                       self.portal = "DatoPorn.com"
+                       self.baseurl = "https://dato.porn"
+                       default_cover = "file://%s/datoporn.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
+                       username = str(config_mp.mediaportal._datoporn_username.value)
+                       password = str(config_mp.mediaportal._datoporn_password.value)
+               elif self.mode == "mypornhere":
+                       self.portal = "MyPornHere.com"
+                       self.baseurl = "https://www.mypornhere.com"
+                       default_cover = "file://%s/mypornhere.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
+               elif self.mode == "filtercams":
+                       self.portal = "FilterCams.com"
+                       self.baseurl = "https://filtercams.com"
+                       default_cover = "file://%s/filtercams.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
+               elif self.mode == "alotporn":
+                       self.portal = "AlotPorn.com"
+                       self.baseurl = "https://www.alotporn.com"
+                       default_cover = "file://%s/alotporn.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
+               elif self.mode == "0dayporn":
+                       self.portal = "0DayPorn.com"
+                       self.baseurl = "https://0dayporn.com"
+                       default_cover = "file://%s/0dayporn.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
+                       username = str(config_mp.mediaportal._0dayporn_username.value)
+                       password = str(config_mp.mediaportal._0dayporn_password.value)
+               elif self.mode == "cambro":
+                       self.portal = "CamBro.tv"
+                       self.baseurl = "https://www.cambro.tv"
+                       default_cover = "file://%s/cambro.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
+                       "cancel" : self.keyCancel,
+                       "blue": self.keySetup
                }, -1)
 
                self['title'] = Label(self.portal)
                self['ContentTitle'] = Label("Genre:")
+               if self.mode in ["0dayporn", "datoporn"]:
+                       self['F4'] = Label(_("Setup"))
                self.keyLocked = True
 
                self.suchString = ''
@@ -156,6 +196,11 @@ class slutloadGenreScreen(MPScreen):
                        self.maincat.insert(0, ("Most Viewed", "popular#video_viewed"))
                        self.maincat.insert(0, ("Newest", "new#post_date"))
                        self.maincat.insert(0, ("--- Search ---", "callSuchen"))
+               elif self.mode == "alotporn":
+                       self.maincat.insert(0, ("Top Rated", "rated#rating"))
+                       self.maincat.insert(0, ("Most Viewed", "popular#video_viewed"))
+                       self.maincat.insert(0, ("Newest", "recent#post_date"))
+                       self.maincat.insert(0, ("--- Search ---", "callSuchen"))
                else:
                        self.maincat.insert(0, ("Longest", "duration"))
                        if self.mode == "punishbang":
@@ -239,6 +284,66 @@ class slutloadGenreScreen(MPScreen):
                        Link = urllib.quote(self.suchString).replace(' ', '-')
                        self.session.open(slutloadFilmScreen, Link, Name, self.portal, self.baseurl)
 
+       def keySetup(self):
+               if not self.mode in["0dayporn", "datoporn"]:
+                       return
+               if mp_globals.isDreamOS:
+                       self.session.openWithCallback(self.setupCallback, slutloadSetupScreen, self.mode, self.portal, is_dialog=True)
+               else:
+                       self.session.openWithCallback(self.setupCallback, slutloadSetupScreen, self.mode, self.portal)
+
+       def setupCallback(self, answer=False):
+               if answer:
+                       global username
+                       global password
+                       global LoggedIn
+                       LoggedIn = False
+                       cookies.clear()
+                       if self.mode == "0dayporn":
+                               username = str(config_mp.mediaportal._0dayporn_username.value)
+                               password = str(config_mp.mediaportal._0dayporn_password.value)
+                       elif self.mode == "datoporn":
+                               username = str(config_mp.mediaportal._datoporn_username.value)
+                               password = str(config_mp.mediaportal._datoporn_password.value)
+
+class slutloadSetupScreen(MPSetupScreen, ConfigListScreenExt):
+
+       def __init__(self, session, mode, portal):
+               self.mode = mode
+               self.portal = portal
+               MPSetupScreen.__init__(self, session, skin='MP_PluginSetup')
+
+               self['title'] = Label(self.portal + " " + _("Setup"))
+               self['F4'] = Label('')
+               self.setTitle(self.portal + " " + _("Setup"))
+
+               self.list = []
+               ConfigListScreenExt.__init__(self, self.list)
+
+               if self.mode == "0dayporn":
+                       self.list.append(getConfigListEntry(_("Username:"), config_mp.mediaportal._0dayporn_username))
+                       self.list.append(getConfigListEntry(_("Password:"), config_mp.mediaportal._0dayporn_password))
+               elif self.mode == "datoporn":
+                       self.list.append(getConfigListEntry(_("Username:"), config_mp.mediaportal._datoporn_username))
+                       self.list.append(getConfigListEntry(_("Password:"), config_mp.mediaportal._datoporn_password))
+
+               self["config"].setList(self.list)
+
+               self["setupActions"] = ActionMap(["SetupActions"],
+               {
+                       "ok":           self.saveConfig,
+                       "cancel":       self.exit
+               }, -1)
+
+       def saveConfig(self):
+               for x in self["config"].list:
+                       x[1].save()
+               configfile_mp.save()
+               self.close()
+
+       def exit(self):
+               self.close()
+
 class slutloadFilmScreen(MPScreen, ThumbsHelper):
        blacklist = ['scat', 'poo', 'shit', 'toilet', 'meal', 'lunch', 'gaia', 'chinese femdom']
 
@@ -249,6 +354,9 @@ class slutloadFilmScreen(MPScreen, ThumbsHelper):
                self.baseurl = baseurl
 
                global default_cover
+               global username
+               global password
+               global LoggedIn
                if self.portal == "Slutload.com":
                        default_cover = "file://%s/slutload.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
                elif self.portal == "MadThumbs.com":
@@ -257,8 +365,6 @@ class slutloadFilmScreen(MPScreen, ThumbsHelper):
                        default_cover = "file://%s/fapster.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
                elif self.portal == "VQTube.com":
                        default_cover = "file://%s/vqtube.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
-               elif self.portal == "PornTube69.net":
-                       default_cover = "file://%s/porntube69.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
                elif self.portal == "MegaTube.xxx":
                        default_cover = "file://%s/megatube.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
                elif self.portal == "WatchMyGF.me":
@@ -287,6 +393,24 @@ class slutloadFilmScreen(MPScreen, ThumbsHelper):
                        default_cover = "file://%s/ebony8.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
                elif self.portal == "CamUploads.com":
                        default_cover = "file://%s/camuploads.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
+               elif self.portal == "CamUploads.com":
+                       default_cover = "file://%s/camuploads.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
+               elif self.portal == "DatoPorn.com":
+                       default_cover = "file://%s/datoporn.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
+                       username = str(config_mp.mediaportal._datoporn_username.value)
+                       password = str(config_mp.mediaportal._datoporn_password.value)
+               elif self.portal == "MyPornHere.com":
+                       default_cover = "file://%s/mypornhere.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
+               elif self.portal == "FilterCams.com":
+                       default_cover = "file://%s/filtercams.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
+               elif self.portal == "AlotPorn.com":
+                       default_cover = "file://%s/alotporn.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
+               elif self.portal == "0DayPorn.com":
+                       default_cover = "file://%s/0dayporn.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
+                       username = str(config_mp.mediaportal._0dayporn_username.value)
+                       password = str(config_mp.mediaportal._0dayporn_password.value)
+               elif self.portal == "CamBro.tv":
+                       default_cover = "file://%s/cambro.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
 
                MPScreen.__init__(self, session, skin='MP_Plugin', default_cover=default_cover)
                ThumbsHelper.__init__(self)
@@ -322,6 +446,7 @@ class slutloadFilmScreen(MPScreen, ThumbsHelper):
 
        def loadPage(self):
                cookies.clear()
+               LoggedIn = False
                self.keyLocked = True
                self['name'].setText(_('Please wait...'))
                self.filmliste = []
@@ -330,6 +455,8 @@ class slutloadFilmScreen(MPScreen, ThumbsHelper):
                                url = "%s/search/%s/?mode=async&function=get_block&block_id=list_videos_videos_list_search_result&category_ids=&sort_by=&from=%s" % (self.baseurl, self.Link, str(self.page))
                        elif self.portal == "WatchMyExGF.net":
                                url = "%s/porn/%s/?mode=async&function=get_block&block_id=list_videos_videos_list_search_result&q=%s&category_ids=&sort_by=&from_videos=%s&from_albums=%s" % (self.baseurl, self.Link, self.Link.replace('-','+'), str(self.page), str(self.page))
+                       elif self.portal == "AlotPorn.com":
+                               url = "%s/vid/%s/?mode=async&function=get_block&block_id=list_videos_videos_list_search_result&q=%s&category_ids=&sort_by=&from_videos=%s&from_albums=%s" % (self.baseurl, self.Link, self.Link.replace('-','+'), str(self.page), str(self.page))
                        else:
                                if self.portal == "PornFD.com":
                                        stop = False
@@ -353,9 +480,12 @@ class slutloadFilmScreen(MPScreen, ThumbsHelper):
                                if self.page > 1:
                                        url = url + "&from=%s" % str(self.page)
                        else:
-                               if self.portal == "WatchMyGF.me":
+                               if self.portal in ["WatchMyGF.me", "AlotPorn.com"]:
                                        if self.Name in ["Newest"]:
-                                               blockid = "list_videos_common_videos_list"
+                                               if self.portal == "AlotPorn.com":
+                                                       blockid = "list_videos_latest_videos_list"
+                                               else:
+                                                       blockid = "list_videos_common_videos_list"
                                                url = "%s/%s/%s/?mode=async&function=get_block&block_id=%s&sort_by=%s&from=%s" % (self.baseurl, self.Link.split('#')[0], str(self.page), blockid, self.Link.split('#')[-1], str(self.page))
                                        else:
                                                blockid = "list_videos_common_videos_list"
@@ -436,6 +566,23 @@ class slutloadFilmScreen(MPScreen, ThumbsHelper):
                                                if Image.startswith('//'):
                                                        Image = "http:" + Image
                                                self.filmliste.append((decodeHtml(Title), Url, Image, Runtime, Views, ''))
+                       elif self.portal == "AlotPorn.com":
+                               Movie = re.findall('href="(.*?)" title="(.*?)".*?(?:src|data-original)="(?!data:image/)(.*?)".*?class="is-hd">(?:<i>HD</i>&nbsp; |)(.*?)</span>', item, re.S)
+                               if Movie:
+                                       for (Url, Title, Image, Runtime) in Movie:
+                                               Runtime = Runtime.replace('h','').replace('m','').replace('s','').strip()
+                                               if Image.startswith('//'):
+                                                       Image = "http:" + Image
+                                               self.filmliste.append((decodeHtml(Title), Url, Image, Runtime, '', ''))
+                       elif self.portal == "CamBro.tv":
+                               if not 'private' in item:
+                                       Movie = re.findall('href="(.*?)" title="(.*?)".*?(?:src|data-original)="(?!data:image/)(.*?)".*?class="duration">(.*?)</div>', item, re.S)
+                                       if Movie:
+                                               for (Url, Title, Image, Runtime) in Movie:
+                                                       Runtime = Runtime.replace('h','').replace('m','').replace('s','').strip()
+                                                       if Image.startswith('//'):
+                                                               Image = "http:" + Image
+                                                       self.filmliste.append((decodeHtml(Title), Url, Image, Runtime, '', ''))
                        else:
                                if not 'private' in item:
                                        Movie = re.findall('href="(.*?)" title="(.*?)".*?(?:src|data-original)="(?!data:image/)(.*?)".*?(class="duration">(.*?)</div>.*?class="added">(?:<em>|)(.*?)(?:</em>|)</div>.*?$)', item, re.S)
@@ -476,7 +623,9 @@ class slutloadFilmScreen(MPScreen, ThumbsHelper):
                self['name'].setText(title)
                if added:
                        added = "\nAdded: %s" % added
-               self['handlung'].setText("Runtime: %s%s\nViews: %s" % (runtime, added, views))
+               if views:
+                       views = "\nViews: %s" % views
+               self['handlung'].setText("Runtime: %s%s%s" % (runtime, added, views))
                CoverHelper(self['coverArt']).getCover(pic)
 
        def keyOK(self):
@@ -484,23 +633,43 @@ class slutloadFilmScreen(MPScreen, ThumbsHelper):
                        return
                Link = self['liste'].getCurrent()[0][1]
                if Link:
-                       self['name'].setText(_('Please wait...'))
-                       twAgentGetPage(Link, agent=agent, cookieJar=cookies).addCallback(self.parseVideo).addErrback(self.dataError)
+                       if not LoggedIn and self.portal in ["0DayPorn.com", "DatoPorn.com"] and username and password:
+                               self.Login(Link)
+                       else:
+                               self['name'].setText(_('Please wait...'))
+                               twAgentGetPage(Link, agent=agent, cookieJar=cookies).addCallback(self.parseVideo).addErrback(self.dataError)
+
+       def Login(self, url):
+               self['name'].setText(_('Please wait...'))
+               loginUrl = "%s/login/" % self.baseurl
+               loginData = {'action': "login", 'pass': password, 'remember_me': 1, 'username': username, 'format': "json", 'mode': "async", 'email_link': "%s/email/" % self.baseurl}
+               twAgentGetPage(loginUrl, agent=agent, method='POST', postdata=urlencode(loginData), cookieJar=cookies, timeout=30, headers={'Content-Type':'application/x-www-form-urlencoded'}).addCallback(self.Login2, url).addErrback(self.dataError)
+
+       def Login2(self, data, url):
+               if '"status":"success",' in data:
+                       global LoggedIn
+                       LoggedIn = True
+               self.keyLocked = True
+               twAgentGetPage(url, agent=agent, cookieJar=cookies).addCallback(self.parseVideo).addErrback(self.dataError)
 
        def parseVideo(self, data):
                Title = self['liste'].getCurrent()[0][0]
                mp_globals.player_agent = agent
                license = re.findall('license_code:\s\'(.*?)\',', data, re.S)
-               url = re.findall('video_(?:alt_|)url\d{0,1}:\s\'(.*?)\'.*?video_(?:alt_|)url_text:\s\'(\d+)(?:p|)\',', data, re.S)
+               url = re.findall('video_(?:alt_|)url\d{0,1}:\s\'(.*?)\'.*?video_(?:alt_|)url\d{0,1}_text:\s\'(\d+)(?:p|)(?: HD|)\',', data, re.S)
                if not url:
                        url = re.findall('video_(?:alt_|)url\d{0,1}:\s\'(.*?)\'', data, re.S)
                if license and url:
                        try:
                                max = 0
                                for vid in url:
-                                       if int(vid[1]) > max:
-                                               max = int(vid[1])
-                                               url = vid[0]
+                                       if int(vid[1]) > max and not "login" in vid[0]:
+                                               if mp_globals.model in ["one","two"]:
+                                                       max = int(vid[1])
+                                                       url = vid[0]
+                                               elif int(vid[1]) <= 1080:
+                                                       max = int(vid[1])
+                                                       url = vid[0]
                        except:
                                if not "login" in url[-1]:
                                        url = url[-1]
@@ -512,12 +681,18 @@ class slutloadFilmScreen(MPScreen, ThumbsHelper):
                                tw_agent_hlp = TwAgentHelper(cookieJar=cookies)
                                tw_agent_hlp.getRedirectedUrl(url).addCallback(self.getStream).addErrback(self.dataError)
                else:
-                       message = self.session.open(MessageBoxExt, _("Stream not found"), MessageBoxExt.TYPE_INFO, timeout=5)
+                       raw = re.findall("<source(?: data-fluid-hd|) src='(.*?)'", data, re.S)
+                       if raw:
+                               url = raw[-1]
+                               tw_agent_hlp = TwAgentHelper(cookieJar=cookies)
+                               tw_agent_hlp.getRedirectedUrl(url).addCallback(self.getStream).addErrback(self.dataError)
+                       else:
+                               message = self.session.open(MessageBoxExt, _("Stream not found"), MessageBoxExt.TYPE_INFO, timeout=5)
 
        def getStream(self, url):
-               self['name'].setText('')
                Title = self['liste'].getCurrent()[0][0]
                Link = self['liste'].getCurrent()[0][1]
+               self['name'].setText(Title)
                import requests
                ck = requests.utils.dict_from_cookiejar(cookies)
                headers = '&Cookie=%s' % ','.join(['%s=%s' % (key, urllib.quote_plus(ck[key])) for key in ck])
@@ -526,4 +701,5 @@ class slutloadFilmScreen(MPScreen, ThumbsHelper):
                        url = 'https:' + url
                url = url + '#User-Agent='+agent+headers
                mp_globals.player_agent = agent
-               self.session.open(SimplePlayer, [(Title, url)], showPlaylist=False, ltype='slutload')
\ No newline at end of file
+               self.session.open(SimplePlayer, [(Title, url)], showPlaylist=False, ltype='slutload')
+               self.keyLocked = False
\ No newline at end of file
diff --git a/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/porn/teamskeet.py b/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/porn/teamskeet.py
deleted file mode 100644 (file)
index 6f96ecf..0000000
+++ /dev/null
@@ -1,205 +0,0 @@
-# -*- coding: utf-8 -*-
-#######################################################################################################
-#
-#    MediaPortal for Dreambox OS
-#
-#    Coded by MediaPortal Team (c) 2013-2020
-#
-#  This plugin is open source but it is NOT free software.
-#
-#  This plugin may only be distributed to and executed on hardware which
-#  is licensed by Dream Property GmbH. This includes commercial distribution.
-#  In other words:
-#  It's NOT allowed to distribute any parts of this plugin or its source code in ANY way
-#  to hardware which is NOT licensed by Dream Property GmbH.
-#  It's NOT allowed to execute this plugin and its source code or even parts of it in ANY way
-#  on hardware which is NOT licensed by Dream Property GmbH.
-#
-#  This applies to the source code as a whole as well as to parts of it, unless explicitely
-#  stated otherwise.
-#
-#  If you want to use or modify the code or parts of it, permission from the authors is necessary.
-#  You have to keep OUR license and inform us about any modification, but it may NOT be distributed
-#  other than under the conditions noted above.
-#
-#  As an exception regarding modifcations, you are NOT permitted to remove
-#  any copy protections implemented in this plugin or change them for means of disabling
-#  or working around the copy protections, unless the change has been explicitly permitted
-#  by the original authors. Also decompiling and modification of the closed source
-#  parts is NOT permitted.
-#
-#  Advertising with this plugin is NOT allowed.
-#
-#  For other uses, permission from the authors is necessary.
-#
-#######################################################################################################
-
-from Plugins.Extensions.MediaPortal.plugin import _
-from Plugins.Extensions.MediaPortal.resources.imports import *
-
-myagent = 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:40.0) Gecko/20100101 Firefox/40.0'
-BASE_NAME = "TeamSkeet.com"
-default_cover = "file://%s/teamskeet.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
-ck = {}
-
-class teamskeetGenreScreen(MPScreen):
-
-       def __init__(self, session):
-               MPScreen.__init__(self, session, skin='MP_Plugin', default_cover=default_cover)
-
-               self["actions"] = ActionMap(["MP_Actions"], {
-                       "ok" : self.keyOK,
-                       "0" : self.closeAll,
-                       "cancel" : self.keyCancel,
-                       "up" : self.keyUp,
-                       "down" : self.keyDown,
-                       "right" : self.keyRight,
-                       "left" : self.keyLeft
-               }, -1)
-
-               self['title'] = Label(BASE_NAME)
-               self['ContentTitle'] = Label("Genre:")
-               self.keyLocked = True
-               self.suchString = ''
-
-               self.genreliste = []
-               self.ml = MenuList([], enableWrapAround=True, content=eListboxPythonMultiContent)
-               self['liste'] = self.ml
-
-               self.onLayoutFinish.append(self.layoutFinished)
-
-       def layoutFinished(self):
-               self.keyLocked = True
-               self['name'].setText(_('Please wait...'))
-               url = "http://www.teamskeet.com/t1/updates/load?view=rating&page=1&fltrs[tags]=&fltrs[site]=ALL&fltrs[alpha]="
-               getPage(url, agent=myagent, cookies=ck, headers={'Content-Type': 'application/x-www-form-urlencoded', 'X-Requested-With': 'XMLHttpRequest', 'Referer': 'http://www.teamskeet.com/t1/updates/?site=ts'}).addCallback(self.genreData).addErrback(self.dataError)
-
-       def genreData(self, data):
-               Tags = re.findall('option\s+value="http.*?\?tags=(.*?)"', data, re.S)
-               if Tags:
-                       for Tag in Tags:
-                               if Tag != "":
-                                       url = "http://www.teamskeet.com/t1/updates/load?view=newest&changedOrder=0&fltrs[tags]=%s&fltrs[time]=ALL&fltrs[site]=ALL&order=DESC&tags_select=&fltrs[title]=&nats=null" % Tag.replace(' ','+')
-                                       self.genreliste.append((upperString(Tag), url, default_cover))
-                       self.genreliste.sort()
-               self.genreliste.insert(0, ("Most Favorited", 'http://www.teamskeet.com/t1/updates/load?view=favorited&fltrs[tags]=&fltrs[site]=ALL&changedOrder=0&fltrs[tags]=&fltrs[time]=ALL&fltrs[site]=ALL&order=DESC&tags_select=&fltrs[title]=', default_cover))
-               self.genreliste.insert(0, ("Most Viewed", 'http://www.teamskeet.com/t1/updates/load?view=views&fltrs[tags]=&fltrs[site]=ALL&changedOrder=0&fltrs[tags]=&fltrs[time]=ALL&fltrs[site]=ALL&order=DESC&tags_select=&fltrs[title]=', default_cover))
-               self.genreliste.insert(0, ("Top Rated", 'http://www.teamskeet.com/t1/updates/load?view=rating&fltrs[tags]=&fltrs[site]=ALL&fltrs[alpha]=&changedOrder=0&fltrs[tags]=&fltrs[time]=ALL&fltrs[site]=ALL&order=DESC&tags_select=&fltrs[title]=', default_cover))
-               self.genreliste.insert(0, ("Most Recent", 'http://www.teamskeet.com/t1/updates/load?view=newest&fltrs[tags]=&fltrs[site]=ALL&changedOrder=0&fltrs[tags]=&fltrs[time]=ALL&fltrs[site]=ALL&order=ASC&tags_select=&fltrs[title]=', default_cover))
-               self.genreliste.insert(0, ("--- Search ---", "callSuchen", default_cover))
-               self.ml.setList(map(self._defaultlistcenter, self.genreliste))
-               self.ml.moveToIndex(0)
-               self.keyLocked = False
-               self.showInfos()
-
-       def showInfos(self):
-               title = self['liste'].getCurrent()[0][0]
-               self['name'].setText(title)
-               Image = self['liste'].getCurrent()[0][2]
-               CoverHelper(self['coverArt']).getCover(Image)
-
-       def keyOK(self):
-               if self.keyLocked:
-                       return
-               if not config_mp.mediaportal.premiumize_use.value:
-                       message = self.session.open(MessageBoxExt, _("%s only works with enabled MP premiumize.me option (MP Setup)!" % BASE_NAME), MessageBoxExt.TYPE_INFO, timeout=10)
-                       return
-               Name = self['liste'].getCurrent()[0][0]
-               if Name == "--- Search ---":
-                       self.suchen()
-               else:
-                       Link = self['liste'].getCurrent()[0][1]
-                       self.session.open(teamskeetFilmScreen, Link, Name)
-
-       def SuchenCallback(self, callback = None):
-               if callback is not None and len(callback):
-                       self.suchString = callback
-                       Name = "--- Search ---"
-                       Link = urllib.quote(self.suchString).replace(' ', '%20')
-                       self.session.open(teamskeetFilmScreen, Link, Name)
-
-class teamskeetFilmScreen(MPScreen, ThumbsHelper):
-
-       def __init__(self, session, Link, Name):
-               self.Link = Link
-               self.Name = Name
-               MPScreen.__init__(self, session, skin='MP_Plugin', default_cover=default_cover)
-               ThumbsHelper.__init__(self)
-
-               self["actions"] = ActionMap(["MP_Actions"], {
-                       "ok" : self.keyOK,
-                       "0" : self.closeAll,
-                       "cancel" : self.keyCancel,
-                       "5" : self.keyShowThumb,
-                       "up" : self.keyUp,
-                       "down" : self.keyDown,
-                       "right" : self.keyRight,
-                       "left" : self.keyLeft,
-                       "nextBouquet" : self.keyPageUp,
-                       "prevBouquet" : self.keyPageDown,
-                       "green" : self.keyPageNumber
-               }, -1)
-
-               self['title'] = Label(BASE_NAME)
-               self['ContentTitle'] = Label("Genre: %s" % self.Name)
-               self['F2'] = Label(_("Page"))
-
-               self['Page'] = Label(_("Page:"))
-               self.keyLocked = True
-               self.page = 1
-               self.lastpage = 1
-
-               self.filmliste = []
-               self.ml = MenuList([], enableWrapAround=True, content=eListboxPythonMultiContent)
-               self['liste'] = self.ml
-
-               self.onLayoutFinish.append(self.loadPage)
-
-       def loadPage(self):
-               self.keyLocked = True
-               self['name'].setText(_('Please wait...'))
-               self.filmliste = []
-               if re.match(".*?Search", self.Name):
-                       url = "http://teamskeet.com/t1/search/results/?&query=%s&searchType=scenes&fields=title,name,location,producer,story,tags&timeSpan=ALL&sort=rating&page=%s" % (self.Link, str(self.page))
-               else:
-                       url = "%s&page=%s" % (self.Link, str(self.page))
-               getPage(url, agent=myagent, cookies=ck, headers={'Content-Type': 'application/x-www-form-urlencoded', 'X-Requested-With': 'XMLHttpRequest', 'Referer': 'http://www.teamskeet.com/t1/updates/?site=ts'}).addCallback(self.loadData).addErrback(self.dataError)
-
-       def loadData(self, data):
-               self.getLastPage(data, 'paging_links"(.*?)</div>')
-               Movies = re.findall('class="(?:white|grey)".*?<a\shref="(.*?)".*?data-original="(.*?)".*?class="info".*?12px;">(.*?)</a', data, re.S)
-               if not Movies:
-                       Movies = re.findall('class="play.*?window.location=\'(.*?)\'.*?img\ssrc="(.*?)".*?class="info".*?12px;"\s{0,2}>(.*?)</a', data, re.S)
-               if Movies:
-                       for (Url, Image, Title) in Movies:
-                               if "join.teamskeet" in Url:
-                                       continue
-                               if Title.endswith('...'):
-                                       tmp1 = stripAllTags(Title).split(' ')[0]
-                                       tmp2 = Url.split('/view/')[1].split('/')[0].lower().replace(tmp1.lower(),'').replace('_',' ').strip()
-                                       Title = tmp1 + " " + tmp2
-                                       Title = ' '.join(s[:1].upper() + s[1:] for s in stripAllTags(Title).split(' '))
-                               self.filmliste.append((decodeHtml(Title.strip()), Url, Image))
-               if len(self.filmliste) == 0:
-                       self.filmliste.append((_('No videos found!'), '', None))
-               self.ml.setList(map(self._defaultlistleft, self.filmliste))
-               self.ml.moveToIndex(0)
-               self.keyLocked = False
-               self.th_ThumbsQuery(self.filmliste, 0, 1, 2, None, None, self.page, int(self.lastpage), mode=1)
-               self.showInfos()
-
-       def showInfos(self):
-               title = self['liste'].getCurrent()[0][0]
-               pic = self['liste'].getCurrent()[0][2]
-               self['name'].setText(title)
-               CoverHelper(self['coverArt']).getCover(pic)
-
-       def keyOK(self):
-               if self.keyLocked:
-                       return
-               Link = self['liste'].getCurrent()[0][1]
-               get_stream_link(self.session).check_link(Link, self.play)
-
-       def play(self, url):
-               title = self['liste'].getCurrent()[0][0]
-               self.session.open(SimplePlayer, [(title, url)], showPlaylist=False, ltype='teamkeet')
\ No newline at end of file
index b50ab1d..444a9be 100644 (file)
@@ -146,16 +146,16 @@ class tube8GenreScreen(MPScreen):
                if callback is not None and len(callback):
                        Name = "--- Search ---"
                        self.suchString = callback
-                       Link = urllib.quote(self.suchString).replace(' ', '%20')
-                       self.session.open(tube8FilmScreen, Link, Name, Scope=self.scopeval[self.scope][:-1])
+                       Link = urllib.quote(self.suchString).replace(' ', '+')
+                       self.session.open(tube8FilmScreen, Link, Name, Scope=self.scopeval[self.scope])
 
        def getSuggestions(self, text, max_res):
                if self.scopeval[self.scope][:-1] == '':
                        scope = 'straight'
                else:
                        scope = self.scopeval[self.scope][:-1]
-               url = "https://bnzmzkcxit-dsn.algolia.net/1/indexes/popular_queries_" + scope + "_de/query?x-algolia-agent=Algolia%20for%20vanilla%20JavaScript%203.32.0&x-algolia-application-id=BNZMZKCXIT&x-algolia-api-key=3624454cb0b8c87da7f6100dde6ce062"
-               postdata = {'params':'query='+text}
+               url = "https://www.tube8.com/ajax2/search/all/"
+               postdata = {"suggestions":[{"country":"DE","orientation":scope,"query":text}]}
                postdata = json.dumps(postdata)
                d = twAgentGetPage(url, method='POST', postdata=postdata, agent=agent, headers=json_headers, timeout=5)
                d.addCallback(self.gotSuggestions, max_res)
@@ -166,8 +166,8 @@ class tube8GenreScreen(MPScreen):
                list = []
                if not err and type(suggestions) in (str, buffer):
                        suggestions = json.loads(suggestions)
-                       for item in suggestions['hits']:
-                               li = item['query']
+                       for item in suggestions['suggestions'][0]['searchSuggestion']:
+                               li = item['name']
                                list.append(str(li))
                                max_res -= 1
                                if not max_res: break
@@ -180,10 +180,7 @@ class tube8FilmScreen(MPScreen, ThumbsHelper):
        def __init__(self, session, Link, Name, Scope=''):
                self.Link = Link
                self.Name = Name
-               if Scope == '':
-                       self.Scope = 'straight'
-               else:
-                       self.Scope = Scope
+               self.Scope = Scope
                MPScreen.__init__(self, session, skin='MP_Plugin', default_cover=default_cover)
                ThumbsHelper.__init__(self)
 
@@ -236,9 +233,8 @@ class tube8FilmScreen(MPScreen, ThumbsHelper):
                self['name'].setText(_('Please wait...'))
                self.filmliste = []
                if re.match(".*Search", self.Name):
-                       url = "https://bnzmzkcxit-dsn.algolia.net/1/indexes/*/queries?x-algolia-agent=Algolia%20for%20JavaScript%20(3.33.0)%3B%20Browser&x-algolia-application-id=BNZMZKCXIT&x-algolia-api-key=3624454cb0b8c87da7f6100dde6ce062"
-                       postdata = '{"requests":[{"indexName":"' + self.sortsearch + '","params":"query=' + self.Link + '&optionalWords=null&facetFilters=%5B%22attributes.orientation%3A' + self.Scope + '%22' + self.filtersearch + '%5D&facets=*&page=' + str(self.page-1) +'&hitsPerPage=19"}]}'
-                       getPage(url, method='POST', agent=agent, postdata=postdata, headers={'Content-Type': 'application/x-www-form-urlencoded'}).addCallback(self.genreData).addErrback(self.dataError)
+                       url = "https://www.tube8.com/%ssearches.html?q=%s&page=%s" % (self.Scope, self.Link, str(self.page))
+                       getPage(url, agent=agent).addCallback(self.genreData).addErrback(self.dataError)
                else:
                        if self.page == 1:
                                url = self.Link.replace('page/','').replace('?page=','')
@@ -258,35 +254,25 @@ class tube8FilmScreen(MPScreen, ThumbsHelper):
                        getPage(url).addCallback(self.genreData).addErrback(self.dataError)
 
        def genreData(self, data):
-               if re.match(".*Search", self.Name):
-                       results = json.loads(data)
-                       if results:
-                               self.lastpage = int(results["results"][0]["nbPages"])
-                               self['page'].setText(str(self.page) + ' / ' + str(self.lastpage))
-                               for node in results["results"][0]["hits"]:
-                                       Url = str(node["link"])
-                                       Image = str(node["thumbnails"][0]["urls"][0])
-                                       Title = str(node["title"])
-                                       Seconds = int(node["attributes"]["durationInSeconds"])
-                                       m, s = divmod(Seconds, 60)
-                                       Runtime = "%02d:%02d" % (m, s)
-                                       Views = str(node["attributes"]["stats"]["views"])
-                                       self.filmliste.append((Title, Url, Image, Runtime, Views))
+               preparse = re.search('id="category_video_list"(.*?)$', data, re.S)
+               if preparse:
+                       self.getLastPage(data, 'id="pagination"(.*?)</ul>')
+
                else:
-                       preparse = re.search('id="category_video_list"(.*?)$', data, re.S)
+                       preparse = re.search('<!-- SEARCH RESULT -->(.*?)$', data, re.S)
                        if preparse:
-                               self.getLastPage(data, 'id="pagination"(.*?)</ul>')
+                               self.getLastPage(data, 'id="pagination"(.*?)</ul>', '.*>(\d+)</a></strong>')
                        else:
-                               preparse = re.search('<!-- SEARCH RESULT -->(.*?)$', data, re.S)
+                               preparse = re.search('id="result_container"(.*?)$', data, re.S)
                                if preparse:
-                                       self.getLastPage(data, 'id="pagination"(.*?)</ul>', '.*>(\d+)</a></strong>')
-                       Movies = re.findall('id="video_i\d+.*?href="(.*?)".*?data-thumb="(http[s]?://.*?\.jpg)".*?title="(.*?)".*?(class="video-attributes-features">.*?video-likes)', preparse.group(1), re.S)
-                       if Movies:
-                               for (Url, Image, Title, Meta) in Movies:
-                                       Metadata = re.findall('video-duration">(.*?)</span.*?video-views"></span><span>(.*?)</span', Meta, re.S)
-                                       Runtime = Metadata[0][0]
-                                       Views = Metadata[0][1]
-                                       self.filmliste.append((decodeHtml(Title), Url, Image, Runtime, Views.strip()))
+                                       self.getLastPage(data, 'id="pagination"(.*?)</ul>')
+               Movies = re.findall('id="video_i\d+.*?href="(.*?)".*?data-thumb="(http[s]?://.*?\.jpg)".*?title="(.*?)".*?(class="video-attributes-features">.*?video-likes)', preparse.group(1), re.S)
+               if Movies:
+                       for (Url, Image, Title, Meta) in Movies:
+                               Metadata = re.findall('video-duration">(.*?)</span.*?video-views"></span><span>(.*?)</span', Meta, re.S)
+                               Runtime = Metadata[0][0]
+                               Views = Metadata[0][1]
+                               self.filmliste.append((decodeHtml(Title), Url, Image, Runtime, Views.strip()))
                if len(self.filmliste) == 0:
                        self.filmliste.append((_('No movies found!'), "", None, None, None))
                self.ml.setList(map(self._defaultlistleft, self.filmliste))
index 999b607..770961e 100644 (file)
@@ -61,6 +61,10 @@ class txxxGenreScreen(MPScreen):
                        self.portal = "HClips.com"
                        self.baseurl = "https://hclips.com"
                        default_cover = "file://%s/hclips.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
+               elif self.mode == "voyeurhit":
+                       self.portal = "VoyeurHit.com"
+                       self.baseurl = "https://voyeurhit.com"
+                       default_cover = "file://%s/voyeurhit.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
 
                self.cat = cat
                MPScreen.__init__(self, session, skin='MP_Plugin', default_cover=default_cover)
@@ -131,7 +135,8 @@ class txxxGenreScreen(MPScreen):
                        self.genreliste.insert(0, (400 * "—", None, default_cover))
                        if self.mode == "txxx":
                                self.genreliste.insert(0, ("Playlists", "playlists", default_cover))
-                       self.genreliste.insert(0, ("Channels", "channels", default_cover))
+                       if self.mode in ["txxx", "hclips"]:
+                               self.genreliste.insert(0, ("Channels", "channels", default_cover))
                        if self.mode == "txxx":
                                self.genreliste.insert(0, ("Pornstars", "pornstars", default_cover))
                                self.genreliste.insert(0, (400 * "—", None, default_cover))
@@ -274,6 +279,8 @@ class txxxFilmScreen(MPScreen, ThumbsHelper):
                        default_cover = "file://%s/txxx.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
                elif self.portal == "HClips.com":
                        default_cover = "file://%s/hclips.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
+               elif self.portal == "VoyeurHit.com":
+                       default_cover = "file://%s/voyeurhit.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
 
                MPScreen.__init__(self, session, skin='MP_Plugin', default_cover=default_cover)
                ThumbsHelper.__init__(self)
@@ -1,4 +1,4 @@
-# -*- coding: utf-8 -*-
+# -*- coding: utf-8 -*-
 #######################################################################################################
 #
 #    MediaPortal for Dreambox OS
 
 from Plugins.Extensions.MediaPortal.plugin import _
 from Plugins.Extensions.MediaPortal.resources.imports import *
-import base64
-
-agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36'
+from Plugins.Extensions.MediaPortal.resources.twagenthelper import TwAgentHelper
+import requests
+agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'
 json_headers = {
-       'Accept':'*/*',
-       'Accept-Encoding':'deflate',
-       'Accept-Language':'de,en-US;q=0.7,en;q=0.3',
+       'Accept':'application/json',
+       'Accept-Language':'en-US;q=0.7,en;q=0.3',
        'X-Requested-With':'XMLHttpRequest',
-       'Content-Type':'application/x-www-form-urlencoded'
+       'Content-Type':'application/x-www-form-urlencoded',
        }
-default_cover = "file://%s/voyeurhit.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
-cookies = CookieJar()
-ctarget = None
+default_cover = "file://%s/xfreehd.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
 
-class voyeurhitGenreScreen(MPScreen):
+class xfreehdGenreScreen(MPScreen):
 
        def __init__(self, session):
                MPScreen.__init__(self, session, skin='MP_Plugin', default_cover=default_cover)
@@ -65,7 +62,7 @@ class voyeurhitGenreScreen(MPScreen):
                        "left" : self.keyLeft
                }, -1)
 
-               self['title'] = Label("VoyeurHit.com")
+               self['title'] = Label("XFreeHD.com")
                self['ContentTitle'] = Label("Genre:")
 
                self.keyLocked = True
@@ -79,50 +76,55 @@ class voyeurhitGenreScreen(MPScreen):
 
        def layoutFinished(self):
                self.keyLocked = True
-               url = 'https://voyeurhit.com/categories/'
-               twAgentGetPage(url, agent=agent, cookieJar=cookies).addCallback(self.genreData).addErrback(self.dataError)
+               url = "https://www.xfreehd.com/categories"
+               twAgentGetPage(url, agent=agent).addCallback(self.genreData).addErrback(self.dataError)
 
        def genreData(self, data):
-               kats = re.findall('<a class="tooltip".*?href="(.*?)".*?id="(.*?)">.*?<strong>(.*?)</strong>.*?<span>.*?<img src="(.*?)".*?height=".*?".*?width=".*?">',data, re.S)
-               if kats:
-                       for (url, id, title, img) in kats:
-                               Title = title.replace(' ','').replace('\n','')
-                               self.genreliste.append((Title, url, img))
+               parse = re.search('<h4>Categories</h4>(.*?)$', data, re.S)
+               if parse:
+                       Cats = re.findall('class="col-xs-6.*?href="(.*?)".*?data-src="(.*?)"\stitle="(.*?)"', parse.group(1), re.S)
+                       if Cats:
+                               for (Url, Image, Title) in Cats:
+                                       Url = "https://www.xfreehd.com" + Url + "?type=public&page="
+                                       Title = Title.strip()
+                                       self.genreliste.append((decodeHtml(Title), Url, Image))
                self.genreliste.sort()
-               self.genreliste.insert(0, ("Most Popular", "https://voyeurhit.com/most-popular/", default_cover))
-               self.genreliste.insert(0, ("Top Rated", "https://voyeurhit.com/top-rated/", default_cover))
-               self.genreliste.insert(0, ("Most Recent", "https://voyeurhit.com/latest-updates/", default_cover))
+               self.genreliste.insert(0, ("Longest", "https://www.xfreehd.com/videos?type=public&o=lg&page=", default_cover))
+               self.genreliste.insert(0, ("Most Commented", "https://www.xfreehd.com/videos?type=public&o=md&page=", default_cover))
+               self.genreliste.insert(0, ("Top Favorites", "https://www.xfreehd.com/videos?type=public&o=tf&page=", default_cover))
+               self.genreliste.insert(0, ("Top Rated", "https://www.xfreehd.com/videos?type=public&o=tr&page=", default_cover))
+               self.genreliste.insert(0, ("Most Viewed", "https://www.xfreehd.com/videos?type=public&o=mv&page=", default_cover))
+               self.genreliste.insert(0, ("Most Recent", "https://www.xfreehd.com/videos?type=public&o=mr&page=", default_cover))
                self.genreliste.insert(0, ("--- Search ---", "callSuchen", default_cover))
                self.ml.setList(map(self._defaultlistcenter, self.genreliste))
-               self.ml.moveToIndex(0)
                self.keyLocked = False
                self.showInfos()
 
        def showInfos(self):
                Image = self['liste'].getCurrent()[0][2]
-               CoverHelper(self['coverArt']).getCover(Image)
+               CoverHelper(self['coverArt']).getCover(Image, agent=agent)
 
        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)
                else:
                        Link = self['liste'].getCurrent()[0][1]
-                       self.session.open(voyeurhitFilmScreen, Link, Name)
+                       self.session.open(xfreehdFilmScreen, 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(voyeurhitFilmScreen, Link, Name)
+                       Link = urllib.quote(callback).replace(' ', '+')
+                       self.session.open(xfreehdFilmScreen, Link, Name)
 
        def getSuggestions(self, text, max_res):
-               url = "https://voyeurhit.com/suggesters.php?char=%s" % urllib.quote_plus(text)
-               d = twAgentGetPage(url, agent=agent, headers=json_headers, timeout=5)
+               url = "https://www.xfreehd.com/ajax/search_suggest"
+               postdata = {'search_query':text, 'search_type':'videos'}
+               d = twAgentGetPage(url, method='POST', postdata=urlencode(postdata), agent=agent, headers=json_headers, timeout=5)
                d.addCallback(self.gotSuggestions, max_res)
                d.addErrback(self.gotSuggestions, max_res, err=True)
                return d
@@ -130,7 +132,7 @@ class voyeurhitGenreScreen(MPScreen):
        def gotSuggestions(self, suggestions, max_res, err=False):
                list = []
                if not err and type(suggestions) in (str, buffer):
-                       suggestions = json.loads(suggestions)
+                       suggestions = re.findall('<li id="sugg_0">(.*?)</li>', suggestions.replace('\\"','"').replace('\/','/'), re.S)
                        for item in suggestions:
                                li = item
                                list.append(str(li))
@@ -140,7 +142,7 @@ class voyeurhitGenreScreen(MPScreen):
                        printl(str(suggestions),self,'E')
                return list
 
-class voyeurhitFilmScreen(MPScreen, ThumbsHelper):
+class xfreehdFilmScreen(MPScreen, ThumbsHelper):
 
        def __init__(self, session, Link, Name):
                self.Link = Link
@@ -162,7 +164,7 @@ class voyeurhitFilmScreen(MPScreen, ThumbsHelper):
                        "green" : self.keyPageNumber
                }, -1)
 
-               self['title'] = Label("VoyeurHit.com")
+               self['title'] = Label("XFreeHD.com")
                self['ContentTitle'] = Label("Genre: %s" % self.Name)
                self['F2'] = Label(_("Page"))
 
@@ -181,24 +183,25 @@ class voyeurhitFilmScreen(MPScreen, ThumbsHelper):
                self.keyLocked = True
                self['name'].setText(_('Please wait...'))
                self.filmliste = []
-               cat = self.Link
-               if re.match(".*Search", self.Name):
-                       url = "https://voyeurhit.com/search/%s/?q=%s" % (str(self.page), self.Link)
+               if re.match(".*?Search", self.Name):
+                       url = "https://www.xfreehd.com/search?search_query=%s&search_type=videos&type=public&page=%s" % (self.Link, str(self.page))
                else:
-                       url = "%s%s/" % (self.Link, str(self.page))
-               twAgentGetPage(url, agent=agent, cookieJar=cookies).addCallback(self.loadData).addErrback(self.dataError)
+                       url = "%s%s" % (self.Link, str(self.page))
+               twAgentGetPage(url, agent=agent).addCallback(self.loadData).addErrback(self.dataError)
 
        def loadData(self, data):
-               self.getLastPage(data, 'lass="pagination">(.*?)</ul>')
-               parse = re.search('<div class="block-thumb">(.*?)<div class="pagination">', data, re.S)
-               videos = re.findall('<a href="(.*?)" class="thumb">.*?<span class="image"><img.*?src="(.*?)"\s{0,1}alt="(.*?)".*?class="dur_ovimg">(.*?)</span.*?fa-calendar">(.*?)</span.*?fa-thumbs-up.*?>(.*?)</span.*?fa-eye">(.*?)</span', parse.group(0), re.S)
-               for (url, img, desc, runtime, age, rating, views) in videos:
-                       age = stripAllTags(age).replace('Added:','').strip()
-                       rating = stripAllTags(rating).strip()
-                       views = stripAllTags(views).replace('Views:','').strip()
-                       self.filmliste.append((decodeHtml(desc), url, img, runtime, age, rating, views))
+               self.getLastPage(data, 'class="pagination(.*?)</div>')
+               parse = re.search('class="well-sm"(.*?)$', data, re.S)
+               if parse:
+                       Movies = re.findall('class="col-xs-6.*?href="(.*?)".*?data-src="(.*?)"\stitle="(.*?)".*?class="duration-new">(.*?)</div.*?class="video-views.*?>(.*?)</div', parse.group(1), re.S)
+                       if Movies:
+                               for (Url, Image, Title, Runtime, Views) in Movies:
+                                       Url = "https://www.xfreehd.com" + Url
+                                       Runtime = Runtime.strip()
+                                       Views = stripAllTags(Views).strip()
+                                       self.filmliste.append((decodeHtml(Title), Url, Image, Runtime, Views))
                if len(self.filmliste) == 0:
-                       self.filmliste.append((_('No videos found!'), None, None, '', '', '', ''))
+                       self.filmliste.append((_('No movies found!'), None, None, None, None))
                self.ml.setList(map(self._defaultlistleft, self.filmliste))
                self.ml.moveToIndex(0)
                self.keyLocked = False
@@ -206,15 +209,16 @@ class voyeurhitFilmScreen(MPScreen, ThumbsHelper):
                self.showInfos()
 
        def showInfos(self):
-               Title = self['liste'].getCurrent()[0][0]
-               Image = self['liste'].getCurrent()[0][2]
+               Url = self['liste'].getCurrent()[0][1]
+               if Url == None:
+                       return
+               title = self['liste'].getCurrent()[0][0]
+               pic = self['liste'].getCurrent()[0][2]
                runtime = self['liste'].getCurrent()[0][3]
-               age = self['liste'].getCurrent()[0][4]
-               rating = self['liste'].getCurrent()[0][5]
-               views = self['liste'].getCurrent()[0][6]
-               self['handlung'].setText("Runtime: %s\nViews: %s\nAdded: %s\nRating: %s" % (runtime, views, age, rating))
-               self['name'].setText(Title)
-               CoverHelper(self['coverArt']).getCover(Image)
+               views = self['liste'].getCurrent()[0][4]
+               self['name'].setText(title)
+               self['handlung'].setText("Runtime: %s\nViews: %s" % (runtime, views))
+               CoverHelper(self['coverArt']).getCover(pic, agent=agent)
 
        def keyOK(self):
                if self.keyLocked:
@@ -223,36 +227,13 @@ class voyeurhitFilmScreen(MPScreen, ThumbsHelper):
                if Link == None:
                        return
                self.keyLocked = True
-               twAgentGetPage(Link, agent=agent, cookieJar=cookies).addCallback(self.getVideoPage, Link).addErrback(self.dataError)
+               twAgentGetPage(Link, agent=agent).addCallback(self.getVideoPage).addErrback(self.dataError)
 
-       def getVideoPage(self, data, Link):
-               global ctarget
-               if not ctarget:
-                       playerlib = re.findall('<script src="(/assets/playerlib.*?\.js)"', data, re.S)
-                       url =