import enigma2-plugin-extensions-mediaportal 2019122402 v2019122402
authorChristian Weiske <cweiske@cweiske.de>
Wed, 25 Dec 2019 00:15:25 +0000 (01:15 +0100)
committerChristian Weiske <cweiske@cweiske.de>
Wed, 25 Dec 2019 00:15:25 +0000 (01:15 +0100)
36 files changed:
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/additions.xml
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/fun/germanytv.py [deleted file]
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/mediatheken/netflix.py
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/mediatheken/netzkino.py
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/mediatheken/primevideo.py [new file with mode: 0644]
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/mediatheken/servustv.py
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/mediatheken/youtube.py
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/newsdoku/focus.py
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/porn/chaturbate.py
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/porn/cumlouder.py
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/porn/porncom.py
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/porn/porndoe.py
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/porn/porngo.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/pornoxo.py
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/porn/spankbang.py
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/porn/tube8.py
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/porn/xnxx.py
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/porn/xvideos.py
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/images/default_cover.png
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/MPYoutubeUriResolver.py
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/resources/coverhelper.py
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/resources/simpleplayer.py
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/resources/streams.py
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/resources/youtubelink.py
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/resources/yt_url.py
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins_1080/clean_fhd/MP_skin.xml
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins_1080/clean_fhd/simpleplayer/SimplePlayer.xml
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins_1080/clean_fhd/simpleplayer/infobar_bg.png [new file with mode: 0644]
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins_720/clean_hd/MP_skin.xml
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins_720/clean_hd/simpleplayer/SimplePlayer.xml
usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins_720/clean_hd/simpleplayer/infobar_bg.png [new file with mode: 0644]

index 82e0a5f..edac6a2 100644 (file)
@@ -30,9 +30,9 @@
                <plugin type="mod" modfile="fun.lachschon_de" confopt="showLachschon" default="True" confcat="fun" gz="0" name="LACHSCHON.DE" icon="lachschon_de" filter="Fun" screen="show_LSDE_Genre" param1="" param2=""/>
                <plugin type="mod" modfile="fun.twitch" confopt="showTwitch" default="True" confcat="fun" gz="0" name="Twitch" icon="twitch" filter="Mediathek/Fun" screen="twitchMainScreen" param1="" param2=""/>
                <plugin type="mod" modfile="fun.chefkoch" confopt="showChefkoch" default="True" confcat="fun" gz="0" name="Chefkoch.de" icon="chefkoch" filter="Fun" screen="chefkochGenreScreen" param1="" param2=""/>
-               <plugin type="mod" modfile="fun.germanytv" confopt="showgermanytv" default="True" confcat="fun" gz="0" name="Germany-TV" icon="germanytv" filter="Fun" screen="germanytvChannelScreen" param1="" param2=""/>
                <!--mediatheken section-->
                <plugin type="mod" modfile="mediatheken.netflix" confopt="shownetflix" default="True" confcat="mediatheken" gz="0" name="Netflix" icon="netflix" filter="Mediathek" screen="netflixScreen" param1="" param2=""/>
+               <plugin type="mod" modfile="mediatheken.primevideo" confopt="showprimevideo" default="True" confcat="mediatheken" gz="0" name="Prime Video" icon="primevideo" filter="Mediathek" screen="AmazonScreen" param1="" param2=""/>
                <plugin type="mod" modfile="mediatheken.dreisat" confopt="showDreisat" default="True" confcat="mediatheken" gz="0" name="3sat Mediathek" icon="3sat" filter="Mediathek" screen="dreisatGenreScreen" param1="" param2=""/>
                <plugin type="mod" modfile="mediatheken.ard" confopt="showARD" default="True" confcat="mediatheken" gz="0" name="ARD Mediathek" icon="ard" filter="Mediathek" screen="ARDGenreScreen" param1="" param2=""/>
                <plugin type="mod" modfile="mediatheken.arte" confopt="showArte" default="True" confcat="mediatheken" gz="0" name="arte Mediathek" icon="arte" filter="Mediathek" screen="arteFirstScreen" param1="" param2=""/>
                <plugin type="mod" modfile="porn.pornicom" confopt="showpervclips" default="False" confcat="porn" gz="0" name="PervClips" icon="pervclips" filter="Porn" screen="pornicomGenreScreen" param1="pervclips" param2="" search="1" delim="+" searchurl="%s" searchscreen="pornicomFilmScreen" searchparam=", &quot;PervClips.com&quot;, &quot;https://www.pervclips.com/tube&quot;"/>
                <plugin type="mod" modfile="porn.pornicom" confopt="showwankoz" default="False" confcat="porn" gz="0" name="Wankoz" icon="wankoz" filter="Porn" screen="pornicomGenreScreen" param1="wankoz" param2="" search="1" delim="+" searchurl="%s" searchscreen="pornicomFilmScreen" searchparam=", &quot;Wankoz.com&quot;, &quot;https://www.wankoz.com&quot;"/>
                <plugin type="mod" modfile="porn.pornicom" confopt="showpornwhite" default="False" confcat="porn" gz="0" name="PornWhite" icon="pornwhite" filter="Porn" screen="pornicomGenreScreen" param1="pornwhite" param2="" search="1" delim="+" searchurl="%s" searchscreen="pornicomFilmScreen" searchparam=", &quot;PornWhite.com&quot;, &quot;https://www.pornwhite.com&quot;"/>
+               <plugin type="mod" modfile="porn.pornicom" confopt="showsheshaft" default="False" confcat="porn" gz="0" name="Sheshaft" icon="sheshaft" filter="Porn" screen="pornicomGenreScreen" param1="sheshaft" param2="" search="1" delim="+" searchurl="%s" searchscreen="pornicomFilmScreen" searchparam=", &quot;Sheshaft.com&quot;, &quot;https://www.sheshaft.com&quot;"/>
                <plugin type="mod" modfile="porn.pornid" confopt="showpornid" default="False" confcat="porn" gz="0" name="PornID" icon="pornid" filter="Porn" screen="pornidGenreScreen" param1="pornid" param2="" search="1" delim="+" searchurl="%s" searchscreen="pornidFilmScreen" searchparam=", &quot;PornID.xxx&quot;, &quot;https://www.pornid.xxx&quot;"/>
                <plugin type="mod" modfile="porn.pornid" confopt="showsexvid" default="False" confcat="porn" gz="0" name="SexVid" icon="sexvid" filter="Porn" screen="pornidGenreScreen" param1="sexvid" param2="" search="1" delim="+" searchurl="%s" searchscreen="pornidFilmScreen" searchparam=", &quot;SexVid.xxx&quot;, &quot;https://www.sexvid.xxx&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;"/>
diff --git a/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/fun/germanytv.py b/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/fun/germanytv.py
deleted file mode 100644 (file)
index 59d804c..0000000
+++ /dev/null
@@ -1,261 +0,0 @@
-# -*- coding: utf-8 -*-
-#######################################################################################################
-#
-#    MediaPortal for Dreambox OS
-#
-#    Coded by MediaPortal Team (c) 2013-2019
-#
-#  This plugin is open source but it is NOT free software.
-#
-#  This plugin may only be distributed to and executed on hardware which
-#  is licensed by Dream Property GmbH. This includes commercial distribution.
-#  In other words:
-#  It's NOT allowed to distribute any parts of this plugin or its source code in ANY way
-#  to hardware which is NOT licensed by Dream Property GmbH.
-#  It's NOT allowed to execute this plugin and its source code or even parts of it in ANY way
-#  on hardware which is NOT licensed by Dream Property GmbH.
-#
-#  This applies to the source code as a whole as well as to parts of it, unless explicitely
-#  stated otherwise.
-#
-#  If you want to use or modify the code or parts of it, permission from the authors is necessary.
-#  You have to keep OUR license and inform us about any modification, but it may NOT be distributed
-#  other than under the conditions noted above.
-#
-#  As an exception regarding modifcations, you are NOT permitted to remove
-#  any copy protections implemented in this plugin or change them for means of disabling
-#  or working around the copy protections, unless the change has been explicitly permitted
-#  by the original authors. Also decompiling and modification of the closed source
-#  parts is NOT permitted.
-#
-#  Advertising with this plugin is NOT allowed.
-#
-#  For other uses, permission from the authors is necessary.
-#
-#######################################################################################################
-
-from Plugins.Extensions.MediaPortal.plugin import _
-from Plugins.Extensions.MediaPortal.resources.imports import *
-from Plugins.Extensions.MediaPortal.resources.simpleplayer import SimplePlayer, SimplePlaylist
-from Plugins.Extensions.MediaPortal.resources.twagenthelper import twAgentGetPage
-
-default_cover = "file://%s/germanytv.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
-
-class germanytvChannelScreen(MPScreen):
-
-       def __init__(self, session):
-               MPScreen.__init__(self, session, skin='MP_Plugin', default_cover=default_cover)
-
-               self["actions"] = ActionMap(["MP_Actions"], {
-                       "0"             : self.closeAll,
-                       "ok"    : self.keyOK,
-                       "cancel": self.keyCancel
-               }, -1)
-
-               self['title'] = Label("Germany-TV")
-               self['ContentTitle'] = Label(_("Menu"))
-               self['name'] = Label(_("Selection:"))
-
-               self.genreliste = []
-               self.ml = MenuList([], enableWrapAround=True, content=eListboxPythonMultiContent)
-               self['liste'] = self.ml
-
-               self.onLayoutFinish.append(self.layoutFinished)
-
-       def layoutFinished(self):
-               self.genreliste.append(('Science-TV', 'http://www.science-tv.com'))
-               #self.genreliste.append(('Medizin-TV', 'http://www.medizin-tv.tv.grid-tv.com'))
-               #self.genreliste.append(('Opera-TV', 'http://www.opera-tv.tv.grid-tv.com'))
-               #self.genreliste.append(('Worldnews-TV', 'http://www.worldnews-tv.tv.grid-tv.com'))
-               #self.genreliste.append(('Lasershow-TV', 'http://www.lasershow-tv.germany-tv.com'))
-               self.genreliste.append(('Fashionguide-TV', 'http://www.fashionguide-tv.tv.grid-tv.com'))
-               #self.genreliste.append(('Fly-HDTV', 'http://www.fly-hdtv.tv.grid-tv.com'))
-               #self.genreliste.append(('Auto-TV', 'http://www.auto-tv.tv.grid-tv.com'))
-               #self.genreliste.append(('FineArts-TV', 'http://www.finearts-hdtv.tv.grid-tv.com'))
-               #self.genreliste.append(('Rechtsberater-TV', 'http://www.rechtsberater-tv.tv.grid-tv.com'))
-               self.genreliste.sort()
-               self.ml.setList(map(self._defaultlistcenter, self.genreliste))
-
-       def keyOK(self):
-               name = self['liste'].getCurrent()[0][0]
-               url = self['liste'].getCurrent()[0][1]
-               self.session.open(germanytvGenreScreen, url, name)
-
-class germanytvGenreScreen(MPScreen):
-
-       def __init__(self, session, baseurl, name):
-               self.baseurl = baseurl
-               self.name = name
-               MPScreen.__init__(self, session, skin='MP_Plugin', default_cover=default_cover)
-
-               self["actions"] = ActionMap(["MP_Actions"], {
-                       "0"             : self.closeAll,
-                       "ok"    : self.keyOK,
-                       "cancel": self.keyCancel
-               }, -1)
-
-               self['title'] = Label(self.name)
-               self['ContentTitle'] = Label(_("Menu"))
-               self['name'] = Label(_("Selection:"))
-               self['F1'] = Label(_("Exit"))
-
-               self.genreliste = []
-               self.ml = MenuList([], enableWrapAround=True, content=eListboxPythonMultiContent)
-               self['liste'] = self.ml
-
-
-               self.onLayoutFinish.append(self.layoutFinished)
-
-       def layoutFinished(self):
-               self.keyLocked = True
-               twAgentGetPage(self.baseurl).addCallback(self.genreData).addErrback(self.dataError)
-
-       def genreData(self, data):
-               aktuell = re.findall('href="([a-zA-Z0-9\/\,\_]+)"><span>(?:Sender|aktuelles Programm|Auto-TV|Hauptsender)</span>', data, re.S)
-               if aktuell:
-                       self.genreliste.append(('Aktuelles Programm', 1, '%s%s?contentpart=prog_video' % (self.baseurl, aktuell[0])))
-               abruf = re.findall('href="([a-zA-Z0-9\/\,\_]+)"><span>(?:Filme auf Abruf|OnDemand)</span>', data, re.S)
-               if abruf:
-                       self.genreliste.append(('Filme auf Abruf', 2, '%s%s' % (self.baseurl, abruf[0])))
-               vorschau = re.findall('href="([a-zA-Z0-9\/\,\_\-]+)"><span>(?:TV-Programmvorschau|Programmhinweis)</span>', data, re.S)
-               if vorschau:
-                       self.genreliste.append(('TV-Programmvorschau', 3, '%s%s' % (self.baseurl, vorschau[0])))
-               self.ml.setList(map(self._defaultlistcenter, self.genreliste))
-
-       def keyOK(self):
-               genreID = self['liste'].getCurrent()[0][1]
-               genre = self['liste'].getCurrent()[0][0]
-               tvLink = self['liste'].getCurrent()[0][2]
-               if genreID == 1:
-                       self.session.open(
-                               GermanyTVPlayer2,
-                               [(genre, tvLink)],
-                               '%s - aktuelles Programm' % self.name
-                               )
-               else:
-                       self.session.open(germanytvListScreen, genreID, tvLink, genre, self.name, self.baseurl)
-
-class germanytvListScreen(MPScreen):
-
-       def __init__(self, session, genreID, tvLink, stvGenre, name, baseurl):
-               self.genreID = genreID
-               self.tvLink = tvLink
-               self.genreName = stvGenre
-               self.name = name
-               self.baseurl = baseurl
-               MPScreen.__init__(self, session, skin='MP_Plugin', default_cover=default_cover)
-
-               self["actions"] = ActionMap(["MP_Actions"], {
-                       "0"     : self.closeAll,
-                       "ok" : self.keyOK,
-                       "cancel" : self.keyCancel,
-                       "up" : self.keyUp,
-                       "down" : self.keyDown,
-                       "right" : self.keyRight,
-                       "left" : self.keyLeft
-               }, -1)
-
-               self['title'] = Label(self.name)
-               self['ContentTitle'] = Label("Genre: %s" % self.genreName)
-               self['F1'] = Label(_("Exit"))
-               self.keyLocked = True
-
-               self.filmliste = []
-               self.ml = MenuList([], enableWrapAround=True, content=eListboxPythonMultiContent)
-               self['liste'] = self.ml
-
-               self.onLayoutFinish.append(self.layoutFinished)
-
-       def layoutFinished(self):
-               self.keyLocked = True
-               twAgentGetPage(self.tvLink).addCallback(self.genreData).addErrback(self.dataError)
-
-       def genreData(self, data):
-               if self.genreID == 2:
-                       stvDaten = re.findall('<a href="\?v=(.*?)" title="(.*?)".*?<img src="(.*?)".*?_time">(.*?)<', data)
-                       if stvDaten:
-                               for (href,title,img,dura) in stvDaten:
-                                       self.filmliste.append(('',title.replace(' - ','\n',1).replace('&amp;','&')+' ['+dura+']',href,img))
-                               self.keyLocked = False
-                       else:
-                               self.filmliste.append((_('No videos found!'),'','',''))
-                       self.ml.setList(map(self.TvListEntry, self.filmliste))
-               elif self.genreID == 3:
-                       m = re.search('<div id="bx_main_c">(.*?)</table>', data, re.S)
-                       if m:
-                               stvDaten = re.findall('<td .*?<strong>(.*?)</strong></td>.*?title="(.*?)"><img src="(.*?)".*?onclick=', m.group(1), re.S)
-                       if stvDaten:
-                               for (ptime,title,img) in stvDaten:
-                                       title = title.replace(' - ','\n\t',1).replace('&amp;','&')
-                                       self.filmliste.append((ptime+'\t',title,'',img))
-                               self.keyLocked = False
-                       else:
-                               self.filmliste.append((_('No program data found!'),'','',''))
-                       self.ml.setList(map(self.TvListEntry, self.filmliste))
-               height = self['liste'].l.getItemSize().height()
-               self.ml.l.setItemHeight(height*2)
-
-       def keyOK(self):
-               if self.keyLocked:
-                       return
-               if self.genreID == 2:
-                       self.session.open(
-                               GermanyTVPlayer,
-                               self.filmliste,
-                               self.baseurl + "/inc/mod/video/play.php/vid,%s/q,mp4/hq,1/typ,ondemand/file.mp4",
-                               playIdx = self['liste'].getSelectedIndex(),
-                               playAll = True,
-                               listTitle = self.genreName
-                               )
-
-class GermanyTVPlaylist(SimplePlaylist):
-
-       def playListEntry(self, entry):
-               width = self['liste'].instance.size().width()
-               height = self['liste'].l.getItemSize().height()
-               self.ml.l.setFont(0, gFont(mp_globals.font, height - 2 * mp_globals.sizefactor))
-               res = [entry]
-               res.append((eListboxPythonMultiContent.TYPE_TEXT, 0, 0, width, height, 0, RT_HALIGN_LEFT | RT_VALIGN_CENTER, entry[1].replace('\n',' - ')))
-               return res
-
-class GermanyTVPlayer(SimplePlayer):
-
-       def __init__(self, session, playList, tvLink, playIdx=0, playAll=False, listTitle=None):
-               self.tvLink = tvLink
-               SimplePlayer.__init__(self, session, playList, playIdx, playAll, listTitle, useResume=False)
-
-       def getVideo(self):
-               tvLink = self.tvLink % self.playList[self.playIdx][2]
-               tvTitle = self.playList[self.playIdx][1]
-               self.playStream(tvTitle, tvLink)
-
-       def openPlaylist(self, pl_class=GermanyTVPlaylist):
-               SimplePlayer.openPlaylist(self, pl_class)
-
-class GermanyTVPlayer2(SimplePlayer):
-
-       def __init__(self, session, playList, tvTitle, playIdx=0, playAll=False, listTitle=None):
-               self.tvLink = None
-               self.tryCount = 7
-               self.tvTitle = tvTitle
-
-               SimplePlayer.__init__(self, session, playList, playIdx, playAll, listTitle, showPlaylist=False, useResume=False)
-
-       def getVideo(self):
-               url = self.playList[self.playIdx][1]
-               twAgentGetPage(url).addCallback(self.genreData).addErrback(self.dataError)
-
-       def genreData(self, data):
-               tvStream = re.findall('video src=&quot;(.*?)&quot;', data)
-               if tvStream:
-                       if self.tvLink != tvStream[0]:
-                               self.tvLink = tvStream[0].replace('q,mp4/','q,mp4/hq,1/')
-                               self.playStream(self.tvTitle, self.tvLink)
-                       elif self.tryCount:
-                               self.tryCount -= 1
-                               self.getVideo()
-
-       def doEofInternal(self, playing):
-               if playing == True:
-                       self.tryCount = 7
-                       reactor.callLater(1, self.getVideo)
\ No newline at end of file
index 20d8e21..ac26c80 100644 (file)
@@ -73,20 +73,10 @@ class netflixScreen(MPScreen):
                                self.player_org = config.vod.netflix.player.value
                        except:
                                pass
-                       try:
-                               username = config.vod.netflix.username.value
-                               password = config.vod.netflix.password.value
-                       except:
-                               username = ''
-                               password = ''
-                       if username != '' and password != '':
-                               self.StartTimer_conn = self.StartTimer.timeout.connect(self.keyOK)
-                               self.StartTimer.start(1000, False)
-                               self.filmliste.append((_("Please wait while we launch Netflix..."),))
-                               self.keyLocked = False
-                       else:
-                               self.filmliste.append((_("Please configure your login data first!"),))
-                               self['handlung'].setText(_("Please configure your login data first via VideoOnDemand plugin in extensions menu.")+"\n\n"+_("Note: Your login data has to be stored else this plugin will not work."))
+                       self.StartTimer_conn = self.StartTimer.timeout.connect(self.keyOK)
+                       self.StartTimer.start(1000, False)
+                       self.filmliste.append((_("Please wait while Netflix is started..."),))
+                       self.keyLocked = False
                else:
                        self.filmliste.append((_("This plugin is only available for Dreambox One and Two!"),))
                        self['handlung'].setText('')
@@ -100,10 +90,9 @@ class netflixScreen(MPScreen):
                self.StartTimer.stop()
                try:
                        from Plugins.Extensions.VOD.plugin import Plugins
-                       config.vod.netflix.tmpdir = ConfigDirectory('/tmp')
-                       config.vod.netflix.lastsearch = ConfigText(default='', fixed_size=False)
-                       config.vod.netflix.remove_tmpdir = ConfigOnOff(default=True)
                        config.vod.netflix.player = ConfigSelection(default='SIMPLE_PL', choices=[('SIMPLE_PL', 'MediaPortal')])
+                       config.vod.netflix.player.save()
+                       configfile.save()
                        from Plugins.Extensions.NetflixVod.netflixmain import NetflixMain
                        from Plugins.Extensions.MediaPortal.plugin import _stylemanager
                        _stylemanager(0)
@@ -111,7 +100,7 @@ class netflixScreen(MPScreen):
                except:
                        self.session.openWithCallback(self.netflixClose, MessageBoxExt, _("Launching Netflix failed!"), MessageBoxExt.TYPE_ERROR, timeout=5)
 
-       def netflixClose(self):
+       def netflixClose(self, answer=''):
                from Plugins.Extensions.MediaPortal.plugin import _stylemanager
                _stylemanager(1)
                menu = [('DREAMOS_PL', 'Dreamos'), ('SIMPLE_PL', 'Mediaportal')]
@@ -120,6 +109,8 @@ class netflixScreen(MPScreen):
                config.vod.netflix.player = ConfigSelection(default='DREAMOS_PL', choices=menu)
                try:
                        config.vod.netflix.player.value = self.player_org
+                       config.vod.netflix.player.save()
+                       configfile.save()
                except:
                        pass
                self.keyCancel()
\ No newline at end of file
index a4e7bc5..75c1435 100644 (file)
@@ -195,5 +195,6 @@ class netzKinoFilmeScreen(MPScreen, ThumbsHelper):
                        return
                Link = self['liste'].getCurrent()[0][2]
                Title = self['liste'].getCurrent()[0][0]
+               Image = self['liste'].getCurrent()[0][1]
                if Link:
-                       self.session.open(SimplePlayer, [(Title, Link)], showPlaylist=False, ltype='netzkino')
\ No newline at end of file
+                       self.session.open(SimplePlayer, [(Title, Link, Image)], showPlaylist=False, ltype='netzkino', cover=True)
\ No newline at end of file
diff --git a/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/mediatheken/primevideo.py b/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/additions/mediatheken/primevideo.py
new file mode 100644 (file)
index 0000000..5ce60f8
--- /dev/null
@@ -0,0 +1,126 @@
+# -*- coding: utf-8 -*-
+#######################################################################################################
+#
+#    MediaPortal for Dreambox OS
+#
+#    Coded by MediaPortal Team (c) 2013-2019
+#
+#  This plugin is open source but it is NOT free software.
+#
+#  This plugin may only be distributed to and executed on hardware which
+#  is licensed by Dream Property GmbH. This includes commercial distribution.
+#  In other words:
+#  It's NOT allowed to distribute any parts of this plugin or its source code in ANY way
+#  to hardware which is NOT licensed by Dream Property GmbH.
+#  It's NOT allowed to execute this plugin and its source code or even parts of it in ANY way
+#  on hardware which is NOT licensed by Dream Property GmbH.
+#
+#  This applies to the source code as a whole as well as to parts of it, unless explicitely
+#  stated otherwise.
+#
+#  If you want to use or modify the code or parts of it, permission from the authors is necessary.
+#  You have to keep OUR license and inform us about any modification, but it may NOT be distributed
+#  other than under the conditions noted above.
+#
+#  As an exception regarding modifcations, you are NOT permitted to remove
+#  any copy protections implemented in this plugin or change them for means of disabling
+#  or working around the copy protections, unless the change has been explicitly permitted
+#  by the original authors. Also decompiling and modification of the closed source
+#  parts is NOT permitted.
+#
+#  Advertising with this plugin is NOT allowed.
+#
+#  For other uses, permission from the authors is necessary.
+#
+#######################################################################################################
+
+from Plugins.Extensions.MediaPortal.plugin import _
+from Plugins.Extensions.MediaPortal.resources.imports import *
+
+try:
+    from Plugins.GP4.geminibrowser.gbrowserWidget import gMoviePlayer
+    GeminiPlayerFound = True
+except:
+    GeminiPlayerFound = False
+
+default_cover = "file://%s/primevideo.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
+
+class AmazonScreen(MPScreen):
+
+       def __init__(self, session):
+               MPScreen.__init__(self, session, skin='MP_Plugin', default_cover=default_cover)
+
+               self["actions"] = ActionMap(["MP_Actions"], {
+                       "0"             : self.closeAll,
+                       "ok"    : self.keyOK,
+                       "cancel": self.keyCancel
+               }, -1)
+
+               self['title'] = Label("Prime Video")
+
+               self.filmliste = []
+               self.ml = MenuList([], enableWrapAround=True, content=eListboxPythonMultiContent)
+               self['liste'] = self.ml
+               self.StartTimer = eTimer()
+               self.keyLocked = True
+
+               self.onLayoutFinish.append(self.start)
+
+       def start(self):
+               self.filmliste.append(("",))
+               if mp_globals.model in ["one","two"]:
+                       try:
+                               self.player_org = config.vod.amazon.player.value
+                       except:
+                               pass
+                       try:
+                               username = config.vod.amazon.username.value
+                               password = config.vod.amazon.password.value
+                       except:
+                               username = ''
+                               password = ''
+                       if (username != '' and password != '') or fileExists("/var/lib/widevine/amazon.cookie"):
+                               self.StartTimer_conn = self.StartTimer.timeout.connect(self.keyOK)
+                               self.StartTimer.start(1000, False)
+                               self.filmliste.append((_("Please wait while Prime Video is started..."),))
+                               self.keyLocked = False
+                       else:
+                               self.filmliste.append((_("Please configure your login data first!"),))
+                               self['handlung'].setText(_("Please configure your login data first via VideoOnDemand plugin in extensions menu."))
+               else:
+                       self.filmliste.append((_("This plugin is only available for Dreambox One and Two!"),))
+                       self['handlung'].setText('')
+               self.ml.setList(map(self._defaultlistcenter, self.filmliste))
+               self.ml.moveToIndex(0)
+               self.ml.selectionEnabled(False)
+
+       def keyOK(self):
+               if self.keyLocked:
+                       return
+               self.StartTimer.stop()
+               try:
+                       from Plugins.Extensions.VOD.plugin import Plugins
+                       config.vod.amazon.player = ConfigSelection(default='SIMPLE_PL', choices=[('SIMPLE_PL', 'MediaPortal')])
+                       config.vod.amazon.player.save()
+                       configfile.save()
+                       from Plugins.Extensions.AmazonVod.amazonmain import AmazonMain
+                       from Plugins.Extensions.MediaPortal.plugin import _stylemanager
+                       _stylemanager(0)
+                       self.session.openWithCallback(self.AmazonClose, AmazonMain)
+               except:
+                       self.session.openWithCallback(self.AmazonClose, MessageBoxExt, _("Launching Prime Video failed!"), MessageBoxExt.TYPE_ERROR, timeout=5)
+
+       def AmazonClose(self, answer=''):
+               from Plugins.Extensions.MediaPortal.plugin import _stylemanager
+               _stylemanager(1)
+               menu = [('DREAMOS_PL', 'Dreamos'), ('SIMPLE_PL', 'Mediaportal')]
+               if GeminiPlayerFound:
+                       menu.append(('GEMINI_PL', 'Gemini'))
+               config.vod.amazon.player = ConfigSelection(default='DREAMOS_PL', choices=menu)
+               try:
+                       config.vod.amazon.player.value = self.player_org
+                       config.vod.amazon.player.save()
+                       configfile.save()
+               except:
+                       pass
+               self.keyCancel()
\ No newline at end of file
index 7e24354..029d024 100644 (file)
@@ -37,7 +37,7 @@
 from Plugins.Extensions.MediaPortal.plugin import _
 from Plugins.Extensions.MediaPortal.resources.imports import *
 
-baseurl = "https://www.servus.com"
+baseurl = "https://www.servustv.com"
 stvAgent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36'
 default_cover = "file://%s/servustv.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
 
@@ -91,14 +91,14 @@ class sTVGenreScreen(MPScreen):
                CoverHelper(self['coverArt']).getCover(Image)
 
        def layoutFinished(self):
-               self.genreliste.append(("Sendungen A-Z", "/tv/sendungen-a-z/", default_cover))
-               self.genreliste.append(("Aktuelles", "/tv/rubrik/aktuelles/", default_cover))
-               self.genreliste.append(("Kultur", "/tv/rubrik/kultur/", default_cover))
-               self.genreliste.append(("Natur", "/tv/rubrik/natur/", default_cover))
-               self.genreliste.append(("Sport", "/tv/rubrik/sport/", default_cover))
-               self.genreliste.append(("Unterhaltung", "/tv/rubrik/unterhaltung/", default_cover))
-               self.genreliste.append(("Volkskultur", "/tv/rubrik/volkskultur/", default_cover))
-               self.genreliste.append(("Wissen", "/tv/rubrik/wissen/", default_cover))
+               self.genreliste.append(("Sendungen A-Z", "/sendungen-a-z/", default_cover))
+               self.genreliste.append(("Aktuelles", "/rubrik/aktuelles/", default_cover))
+               self.genreliste.append(("Kultur", "/rubrik/kultur/", default_cover))
+               self.genreliste.append(("Natur", "/rubrik/natur/", default_cover))
+               self.genreliste.append(("Sport", "/rubrik/sport/", default_cover))
+               self.genreliste.append(("Unterhaltung", "/rubrik/unterhaltung/", default_cover))
+               self.genreliste.append(("Volkskultur", "/rubrik/volkskultur/", default_cover))
+               self.genreliste.append(("Wissen", "/rubrik/wissen/", default_cover))
                self.ml.setList(map(self._defaultlistcenter, self.genreliste))
 
        def keyOK(self):
@@ -148,11 +148,12 @@ class sTVids(MPScreen):
                self.filmliste = []
                self.keyLocked = True
                url = self.Link + "page/" + str(self.page) + "/?video_type=full-episodes"
+               print url
                twAgentGetPage(url, agent=stvAgent).addCallback(self.loadPageData).addErrback(self.dataError)
 
        def loadPageData(self, data):
                self.getLastPage(data, 'class="pagination">(.*?)</ul>')
-               shows = re.findall('class="component__card media_asset.*?href="(https://www.servus.com/tv/videos/(.*?)/)".*?class="card__image-container">.*?img\ssrc="(.*?\.(?:jpg|png)).*?".*?card__label">(.*?)</div.*?heading--two">(.*?)</.*?card__date">(.*?)</div', data, re.S)
+               shows = re.findall('class="component__card media_asset.*?href="(https://www.servustv.com/videos/(.*?)/)".*?class="card__image-container">.*?img\ssrc="(.*?\.(?:jpg|png)).*?".*?card__label">(.*?)</div.*?heading--two">(.*?)</.*?card__date">(.*?)</div', data, re.S)
                if shows:
                        for (url,id,image,title,subtitle,date) in shows:
                                id = id.upper()
index a9dd663..8cb6366 100644 (file)
@@ -1906,7 +1906,7 @@ class YT_Oauth2:
        OAUTH2_URL = 'https://accounts.google.com/o/oauth2'
        CLIENT_ID = mp_globals.yt_i
        CLIENT_SECRET = mp_globals.yt_s
-       SCOPE = '&scope=https://www.googleapis.com/auth/youtube'
+       SCOPE = '&scope=https://www.googleapis.com/auth/youtube.readonly'
        GRANT_TYPE = '&grant_type=http://oauth.net/grant_type/device/1.0'
        TOKEN_PATH = '/etc/enigma2/mp_yt-access-tokens.json'
        accessToken = None
index 0e2e913..48f8e7a 100644 (file)
@@ -81,7 +81,7 @@ class focusGenre(MPScreen):
 
        def keyOK(self):
                Name = self['liste'].getCurrent()[0][0]
-               Url = 'http://www.focus.de/ajax/video/videoplaylist/?playlist_name=' + self['liste'].getCurrent()[0][1]
+               Url = 'https://www.focus.de/ajax/video/videoplaylist/?playlist_name=' + self['liste'].getCurrent()[0][1]
                self.session.open(focus, Url, Name)
 
 class focus(MPScreen, ThumbsHelper):
@@ -117,14 +117,14 @@ class focus(MPScreen, ThumbsHelper):
                self.keyLocked = True
                self.streamList = []
                self['name'].setText(_('Please wait...'))
-               getPage(self.streamGenreLink).addCallback(self.pageData).addErrback(self.dataError)
+               twAgentGetPage(self.streamGenreLink).addCallback(self.pageData).addErrback(self.dataError)
 
        def pageData(self, data):
-               focusVideos = re.findall('<img.*?[rel|src]="(.*?[jpg|png])".*?<a\shref="(.*?)"\stitle="(.*?)"', data, re.S|re.I)
+               focusVideos = re.findall('<img.*?[rel|src]="(.*?[jpg|png])".*?<a\shref="(.*?)"\stitle="(.*?)".*?>(.*?)</a', data, re.S|re.I)
                if focusVideos:
-                       for (Image, Link, Name) in focusVideos:
+                       for (Image, Link, Name, Desc) in focusVideos:
                                Image = Image.replace('" src="','')
-                               self.streamList.append((decodeHtml(Name), Image, Link))
+                               self.streamList.append((decodeHtml(Name), Image, Link, Desc))
                        self.ml.setList(map(self._defaultlistleft, self.streamList))
                        self.keyLocked = False
                        self.th_ThumbsQuery(self.streamList, 0, 2, 1, None, None, 1, 1, mode=1)
@@ -134,7 +134,9 @@ class focus(MPScreen, ThumbsHelper):
                Title = self['liste'].getCurrent()[0][0]
                Image = self['liste'].getCurrent()[0][1]
                Link = self['liste'].getCurrent()[0][2]
+               Desc = self['liste'].getCurrent()[0][3]
                self['name'].setText(Title)
+               self['handlung'].setText(Desc)
                CoverHelper(self['coverArt']).getCover(Image)
 
        def handlungData(self, data):
@@ -148,11 +150,11 @@ class focus(MPScreen, ThumbsHelper):
                if self.keyLocked:
                        return
                Link = self['liste'].getCurrent()[0][2]
-               getPage(Link).addCallback(self.searchStream).addErrback(self.dataError)
+               twAgentGetPage(Link).addCallback(self.searchStream).addErrback(self.dataError)
 
        def searchStream(self, data):
                Title = self['liste'].getCurrent()[0][0]
-               streamUrl = re.findall('videourl\s=\s"(.*?)"', data, re.S)
+               streamUrl = re.findall('"videoUrl":\s"(.*?)"', data, re.S)
                if streamUrl:
-                       streamUrl = streamUrl[-1]
+                       streamUrl = streamUrl[0]
                        self.session.open(SimplePlayer, [(Title, streamUrl)], showPlaylist=False, ltype='focus')
\ No newline at end of file
index f67f7ba..7659aaa 100644 (file)
@@ -217,7 +217,8 @@ class chaturbateFilmScreen(MPScreen, ThumbsHelper):
                                if not Description:
                                        Description = ""
                                Title = Url.strip('\/')
-                               Image = "https://cbjpeg.stream.highwebmedia.com/stream?room=" + Url.strip('\/') + "&f=" + str(random.random())
+                               import time
+                               Image = "https://roomimg.stream.highwebmedia.com/ri/" + Url.strip('\/') + ".jpg?" + str(int(time.time()))
                                self.filmliste.append((Title, Url, Image, decodeHtml(Description), Gender, Age, decodeHtml(Location), Viewers))
                if len(self.filmliste):
                        self.th_ThumbsQuery(self.filmliste, 0, 1, 2, None, None, self.page, self.lastpage, mode=1)
index f111542..385e03f 100644 (file)
@@ -473,7 +473,7 @@ class cumlouderFilmScreen(MPScreen):
                twAgentGetPage(url, agent=myagent).addCallback(self.loadData).addErrback(self.dataError)
 
        def loadData(self, data):
-               self.getLastPage(data, 'class="paginador"(.*?)</ul>')
+               self.getLastPage(data, 'class="pagination"(.*?)</ul>')
                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:
index d3b746e..e85c1a6 100644 (file)
@@ -770,7 +770,7 @@ class porncomFilmScreen(MPScreen, ThumbsHelper):
                else:
                        match = re.findall('"\d+p",url:"(http.*?)"', data)
                if match:
-                       url = match[-1].replace('\/','/')#.replace('%2F','%252F').replace('%3D','%253D').replace('%2B','%252B')
+                       url = match[-1].replace('\/','/')
                        self.session.open(SimplePlayer, [(Title, url)], showPlaylist=False, ltype='porncom')
                else:
                        message = self.session.open(MessageBoxExt, _("Stream not found"), MessageBoxExt.TYPE_INFO, timeout=5)
\ No newline at end of file
index cb9207d..d6a7ad7 100644 (file)
@@ -237,7 +237,6 @@ class porndoeFilmScreen(MPScreen, ThumbsHelper):
                                        url = vidurl
                        if url.startswith('//'):
                                url = 'http:' + url
-                       #url = url.replace('%2F','%252F').replace('%3D','%253D').replace('%2B','%252B')
                        self.keyLocked = False
                        Title = self['liste'].getCurrent()[0][0]
                        headers = '&Referer=' + self['liste'].getCurrent()[0][1]
index 643ed47..64d0068 100644 (file)
@@ -256,7 +256,7 @@ class porngoFilmScreen(MPScreen, ThumbsHelper):
 
        def parseVideo(self, data):
                url = None
-               streams = re.findall('class="video-links__link"\shref="(http[s]?://(?:www.|)porngo.com/get_file.*?)".*?>(\d+k{0,1})', data, re.S)
+               streams = re.findall('class="video-links__link"\shref="(http[s]?://(?:www.|)porngo.com/{0,1}/get_file.*?)".*?>(\d+k{0,1})', data, re.S)
                if streams:
                        import requests
                        max = 0
index 9924dca..9288809 100644 (file)
@@ -406,9 +406,10 @@ class pornhubPlayListScreen(MPScreen, ThumbsHelper):
                self['handlung'].setText("%s: %s" % (_("Sort order"), self.sortname) + submsg)
 
        def keyOK(self):
+               Count = self['liste'].getCurrent()[0][1]
                CatLink = self['liste'].getCurrent()[0][3]
                NameLink = self['liste'].getCurrent()[0][0]
-               self.session.open(pornhubFilmScreen, CatLink, NameLink)
+               self.session.open(pornhubFilmScreen, CatLink, NameLink, Count)
 
        def keySort(self):
                if self.keyLocked:
@@ -545,7 +546,10 @@ class pornhubSubscriptionsScreen(MPScreen, ThumbsHelper):
                if Cats:
                        for Url, Image, Title in Cats:
                                if self.Name == "Member Subscriptions":
-                                       Url = Url + '/videos/public?page='
+                                       if "/user/" in Url:
+                                               Url = Url + '/videos/public?page='
+                                       else:
+                                               Url = Url + '/videos?page='
                                elif self.Name == "Pornstar Subscriptions":
                                        Url = Url + '/videos?page='
                                else:
@@ -948,8 +952,10 @@ class pornhubFilmScreen(MPScreen, ThumbsHelper, LoginFunc):
                        else:
                                url = self.Link + str(self.page)
                elif re.match(".*\/playlist\/",self.Link):
-                       self.lastpage = 1
-                       url = "%s" % self.Link
+                       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))
                else:
                        url = "%s%s" % (self.Link, str(self.page))
                if re.match(".*Feed",self.Name):
@@ -978,35 +984,37 @@ class pornhubFilmScreen(MPScreen, ThumbsHelper, LoginFunc):
                                        self.lastpage = int(round((float(self.Count) / 36) + 0.5))
                                        self['page'].setText(str(self.page) + ' / ' + str(self.lastpage))
                                else:
-                                       if self.lastpage == 1:
-                                               self['page'].setText('1 / 1')
+                                       if self.Name == "Related":
+                                               self.lastpage = 6
+                                               self['page'].setText(str(self.page) + ' / ' + str(self.lastpage))
                                        else:
-                                               if self.Name == "Related":
-                                                       self.lastpage = 6
-                                                       self['page'].setText(str(self.page) + ' / ' + str(self.lastpage))
-                                               else:
-                                                       self.getLastPage(data, 'class="pagination3">(.*?)</div>')
-               parse = re.search('class="nf-videos(.*?)class="pagination3">', data, re.S)
+                                               self.getLastPage(data, 'class="pagination3">(.*?)</div>')
+               parse = re.search('FAN ONLY VIDEOS -->.*?<div class="videoSection(.*?)class="pagination3">', 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:
-                       Movies = re.findall('(class="(?:\s{0,1}js-pop |)videoblock.*?<var\sclass="added">.*?</var>)', parse.group(1), re.S)
+                       viddata = parse.group(1)
+               else:
+                       viddata = data
+               Movies = re.findall('(class="(?:\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):
-                                       Movie = 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="premiumIcon' in each or 'class="privateOverlay"' in each):
+                                       Movie = re.findall('class="(?:\s{0,1}notLoaded |)(?:\s{0,1}js-pop |)videoblock.*?<a\shref="(.*?)".*?title="(.*?)".*?data-(?:mediumthumb|image)="(.*?)".*?class="duration">(.*?)</var>.*?<span\sclass="views"><var>(.*?)<.*?<var\sclass="added">(.*?)</var>', each, re.S)
                                        for (Url, Title, Image, Runtime, Views, Added) in Movie:
                                                Url = base_url + Url
                                                Title = Title.replace('&amp;amp;','&')
@@ -1084,7 +1092,7 @@ class pornhubFilmScreen(MPScreen, ThumbsHelper, LoginFunc):
                        self.lock = True
                        self['F1'].setText('')
                        self['F4'].setText('')
-                       self.infoTimer.start(4000, True)
+                       self.infoTimer.start(1000, True)
 
        def getInfos2(self):
                twAgentGetPage(self.url, agent=phAgent, cookieJar=ph_cookies, headers={'Referer':base_url}).addCallback(self.showInfos2).addErrback(self.dataError)
index 92dd08f..ee7bd82 100644 (file)
@@ -74,6 +74,10 @@ class pornicomGenreScreen(MPScreen):
                        self.portal = "PornWhite.com"
                        self.baseurl = "https://www.pornwhite.com"
                        default_cover = "file://%s/pornwhite.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
+               elif self.mode == "sheshaft":
+                       self.portal = "Sheshaft.com"
+                       self.baseurl = "https://www.sheshaft.com"
+                       default_cover = "file://%s/sheshaft.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
 
                MPScreen.__init__(self, session, skin='MP_Plugin', default_cover=default_cover)
 
@@ -108,7 +112,7 @@ class pornicomGenreScreen(MPScreen):
        def genreData(self, data):
                parse = re.search('(?:class="thumbs-holder"|class="categories-thumbs"|class="thumbs-list")(.*?)(?:class="thumb_spots|class="bottom-banners")', data, re.S)
                if parse:
-                       Cats = re.findall('class="(?:item|thumb)">.*?href="(.*?)".*?(?:data-original|src)="([A-Za-z0-9_:.,-=\/\s]+)".*?alt="(.*?)"', parse.group(1), re.S)
+                       Cats = re.findall('class="(?:item|thumb)">.*?href="(.*?)".*?(?:data-original|src)=[\'\"]([A-Za-z0-9_:.,-=\/\?]+[^placeholder]\.(?:jpg|png))[\'\"\?].*?alt="(.*?)"', parse.group(1), re.S)
                        if Cats:
                                for (Url, Image, Title) in Cats:
                                        self.filmliste.append((upperString(Title), Url, Image.replace(' ','%20')))
@@ -165,6 +169,8 @@ class pornicomFilmScreen(MPScreen, ThumbsHelper):
                        default_cover = "file://%s/wankoz.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
                elif self.portal == "PornWhite.com":
                        default_cover = "file://%s/pornwhite.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
+               elif self.portal == "Sheshaft.com":
+                       default_cover = "file://%s/sheshaft.png" % (config_mp.mediaportal.iconcachepath.value + "logos")
 
                MPScreen.__init__(self, session, skin='MP_Plugin', default_cover=default_cover)
                ThumbsHelper.__init__(self)
index b0aa917..6dd081a 100644 (file)
@@ -204,15 +204,30 @@ class pornoxoFilmScreen(MPScreen, ThumbsHelper):
 
        def loadData(self, data):
                self.getLastPage(data, 'class="pagination(.*?)</div>')
-               parse = re.search('(.*?)class="top-tags-box"', data, re.S)
-               Movies = re.findall('vidItem"\sdata-video-id="\d+">.{1,10}(?:<div class="thumb-inner-wrapper">|).*?<a\shref="(.*?)"\s{0,1}>.{0,10}<img\ssrc="(.*?)"\salt="(.*?)"', parse.group(1), re.S)
-               if Movies:
-                       for (Url, Image, Title) in Movies:
-                               if Url.startswith('/'):
-                                       Url = self.baseurl + Url
-                               self.filmliste.append((decodeHtml(Title), Url, Image))
+               if 'class="top-tags-box"' in data:
+                       data = re.search('(.*?)class="top-tags-box"', data, re.S).group(1)
+               items = re.findall('(class="thumb vidItem".*?class="clear">)', data, re.S)
+               if items:
+                       for item in items:
+                               Url = re.findall("href=[\'\"]([^\"\']+?)[\'\"]", item, re.S)
+                               Url = Url[0] if Url else ''
+                               Title = re.findall("alt=[\'\"](.*?)[\'\"](?:\s|>)", item, re.S)
+                               Title = Title[0] if Title else ''
+                               Image = re.findall("<img.*?(?:src|data-original)=[\'\"]([A-Za-z0-9_:.,-=\/\?]+[^placeholder]\.(?:jpg|png))['\"\?]", item, re.S)
+                               Image = Image[0] if Image else ''
+                               Runtime = re.findall('time-label-wrapper".*?<span>([0-9:\t\s]+)</span', item, re.S)
+                               Runtime = stripAllTags(Runtime[0]).strip() if Runtime else ''
+                               Rating = re.findall('s-rating-text-percent.*?>(.*?)(?:</span|</div)', item, re.S)
+                               Rating = stripAllTags(Rating[0]).strip() if Rating else ''
+                               if Rating == "NEW":
+                                       Rating = ''
+                               if Url and Title and Image:
+                                       if not 'class="fa fa-lock' in item:
+                                               if Url.startswith('/'):
+                                                       Url = self.baseurl + Url
+                                               self.filmliste.append((decodeHtml(Title), Url, Image, Runtime, Rating))         
                if len(self.filmliste) == 0:
-                       self.filmliste.append((_('No movies found!'), None, None))
+                       self.filmliste.append((_('No movies found!'), None, None, '', ''))
                self.ml.setList(map(self._defaultlistleft, self.filmliste))
                self.ml.moveToIndex(0)
                self.keyLocked = False
@@ -224,6 +239,12 @@ class pornoxoFilmScreen(MPScreen, ThumbsHelper):
                self['name'].setText(title)
                Url = self['liste'].getCurrent()[0][1]
                pic = self['liste'].getCurrent()[0][2]
+               runtime = self['liste'].getCurrent()[0][3]
+               runtime = "Runtime: %s\n" % runtime if runtime else ''
+               rated = self['liste'].getCurrent()[0][4]
+               rated = "Rating: %s\n" % rated if rated else ''
+               self['name'].setText(title)
+               self['handlung'].setText("%s%s" % (runtime, rated))             
                CoverHelper(self['coverArt']).getCover(pic)
 
        def keyOK(self):
index 478f28d..48caea0 100644 (file)
@@ -305,7 +305,7 @@ class spankbangFilmScreen(MPScreen, ThumbsHelper):
                                resolutions = "720p|480p|320p|240p"
                        else:
                                resolutions = "1080p|720p|480p|320p|240p"
-               streams = re.findall('stream_url_(%s)":\["(.*?)"' % resolutions, data, re.S)
+               streams = re.findall('(%s)":\["(.*?)"' % resolutions, data, re.S)
                if streams:
                        vidres = 0
                        for (res, url) in streams:
index 465547b..558e3db 100644 (file)
@@ -342,7 +342,7 @@ class tube8FilmScreen(MPScreen, ThumbsHelper):
                Title = self['liste'].getCurrent()[0][0]
                match = re.findall('"quality_\d+p":"(http.*?)"', data)
                if match:
-                       url = match[-1].replace('\/','/')#.replace('%2F','%252F').replace('%3D','%253D').replace('%2B','%252B')
+                       url = match[-1].replace('\/','/')
                        self.session.open(SimplePlayer, [(Title, url)], showPlaylist=False, ltype='tube8')
                else:
                        message = self.session.open(MessageBoxExt, _("Stream not found"), MessageBoxExt.TYPE_INFO, timeout=5)
\ No newline at end of file
index 38d3d74..15f758e 100644 (file)
@@ -445,14 +445,14 @@ class xnxxFilmScreen(MPScreen, ThumbsHelper):
        def parseData(self, data):
                match = re.findall("setVideo(?:UrlLow|UrlHigh|HLS)\('(.*?)'\);", data)
                if match:
-                       url = match[-1].replace('\/','/')#.replace('%2F','%252F').replace('%3D','%253D').replace('%2B','%252B')
+                       url = match[-1].replace('\/','/')
                        if "/hls/" in url:
                                #if len(url.split('hls.m3u8')[1]) > 0:
                                baseurl = url.split('hls.m3u8')[0]
                                twAgentGetPage(url, agent=agent).addCallback(self.loadplaylist, baseurl).addErrback(self.dataError)
                                #else:
                                #       if len(match)>1:
-                               #               url = match[-2].replace('\/','/').replace('%2F','%252F').replace('%3D','%253D').replace('%2B','%252B')
+                               #               url = match[-2].replace('\/','/')
                                #               self.playVideo(url)
                                #       else:
                                #               message = self.session.open(MessageBoxExt, _("Stream not found"), MessageBoxExt.TYPE_INFO, timeout=5)
index 9058cd2..c13e633 100644 (file)
@@ -733,14 +733,14 @@ class xvideosFilmScreen(MPScreen, ThumbsHelper):
        def parseData(self, data):
                match = re.findall("setVideo(?:UrlLow|UrlHigh|HLS)\('(.*?)'\);", data)
                if match:
-                       url = match[-1].replace('\/','/')#.replace('%2F','%252F').replace('%3D','%253D').replace('%2B','%252B')
+                       url = match[-1].replace('\/','/')
                        if "/hls/" in url:
                                #if len(url.split('hls.m3u8')[1]) > 0:
                                baseurl = url.split('hls.m3u8')[0]
                                twAgentGetPage(url, agent=agent).addCallback(self.loadplaylist, baseurl).addErrback(self.dataError)
                                #else:
                                #       if len(match)>1:
-                               #               url = match[-2].replace('\/','/').replace('%2F','%252F').replace('%3D','%253D').replace('%2B','%252B')
+                               #               url = match[-2].replace('\/','/')
                                #               self.playVideo(url)
                                #       else:
                                #               message = self.session.open(MessageBoxExt, _("Stream not found"), MessageBoxExt.TYPE_INFO, timeout=5)
index f013227..fd5dc6e 100644 (file)
Binary files a/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/images/default_cover.png and b/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/images/default_cover.png differ
index 07fd818..c3adc20 100644 (file)
Binary files a/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/locale/de/LC_MESSAGES/MediaPortal.mo and b/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/locale/de/LC_MESSAGES/MediaPortal.mo differ
index 410c1c4..cf7ee3d 100644 (file)
@@ -1,8 +1,8 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: MediaPortal\n"
-"POT-Creation-Date: 2019-12-05 17:49+0100\n"
-"PO-Revision-Date: 2019-12-05 17:50+0100\n"
+"POT-Creation-Date: 2019-12-23 18:00+0100\n"
+"PO-Revision-Date: 2019-12-23 18:01+0100\n"
 "Last-Translator: dhwz <dhwz@gmx.net>\n"
 "Language-Team: MediaPortal Team\n"
 "Language: de_DE\n"
@@ -79,9 +79,9 @@ msgstr ""
 #: src/additions/porn/porncom.py:468 src/additions/porn/porncom.py:606
 #: src/additions/porn/porndoe.py:147 src/additions/porn/porngo.py:72
 #: src/additions/porn/porngo.py:202 src/additions/porn/pornhat.py:176
-#: src/additions/porn/pornhub.py:331 src/additions/porn/pornhub.py:487
-#: src/additions/porn/pornhub.py:645 src/additions/porn/pornhub.py:779
-#: src/additions/porn/pornhub.py:907 src/additions/porn/pornicom.py:188
+#: src/additions/porn/pornhub.py:331 src/additions/porn/pornhub.py:488
+#: src/additions/porn/pornhub.py:649 src/additions/porn/pornhub.py:783
+#: src/additions/porn/pornhub.py:911 src/additions/porn/pornicom.py:194
 #: src/additions/porn/pornid.py:197 src/additions/porn/pornoxo.py:182
 #: src/additions/porn/pornrabbit.py:176 src/additions/porn/porntv.py:292
 #: src/additions/porn/pornxio.py:202 src/additions/porn/realgfporn.py:160
@@ -103,8 +103,8 @@ msgstr ""
 #: src/additions/porn/xpaja.py:148 src/additions/porn/xvideos.py:291
 #: src/additions/porn/xvideos.py:487 src/additions/porn/xxxdan.py:166
 #: src/additions/porn/youjizz.py:171 src/additions/porn/youporn.py:316
-#: src/additions/porn/youporn.py:383 src/plugin.py:2142 src/plugin.py:2394
-#: src/plugin.py:3192 src/plugin.py:3211 src/resources/showAsThumb.py:247
+#: src/additions/porn/youporn.py:383 src/plugin.py:2137 src/plugin.py:2389
+#: src/plugin.py:3187 src/plugin.py:3206 src/resources/showAsThumb.py:247
 msgid "Page"
 msgstr "Seite"
 
@@ -191,9 +191,9 @@ msgstr "Seite"
 #: src/additions/porn/porncom.py:471 src/additions/porn/porncom.py:612
 #: src/additions/porn/porndoe.py:151 src/additions/porn/porngo.py:73
 #: src/additions/porn/porngo.py:204 src/additions/porn/pornhat.py:178
-#: src/additions/porn/pornhub.py:334 src/additions/porn/pornhub.py:490
-#: src/additions/porn/pornhub.py:648 src/additions/porn/pornhub.py:782
-#: src/additions/porn/pornhub.py:909 src/additions/porn/pornicom.py:190
+#: src/additions/porn/pornhub.py:334 src/additions/porn/pornhub.py:491
+#: src/additions/porn/pornhub.py:652 src/additions/porn/pornhub.py:786
+#: src/additions/porn/pornhub.py:913 src/additions/porn/pornicom.py:196
 #: src/additions/porn/pornid.py:199 src/additions/porn/pornoxo.py:184
 #: src/additions/porn/pornrabbit.py:178 src/additions/porn/porntv.py:294
 #: src/additions/porn/pornxio.py:204 src/additions/porn/realgfporn.py:162
@@ -314,7 +314,7 @@ msgstr "Seite:"
 #: src/additions/porn/cam4.py:186 src/additions/porn/cam4.py:249
 #: src/additions/porn/camhub.py:142 src/additions/porn/camhub.py:186
 #: src/additions/porn/camsoda.py:125 src/additions/porn/camsoda.py:205
-#: src/additions/porn/chaturbate.py:196 src/additions/porn/chaturbate.py:260
+#: src/additions/porn/chaturbate.py:196 src/additions/porn/chaturbate.py:261
 #: src/additions/porn/cliphunter.py:255 src/additions/porn/cumlouder.py:73
 #: src/additions/porn/cumlouder.py:162 src/additions/porn/cumlouder.py:229
 #: src/additions/porn/cumlouder.py:300 src/additions/porn/cumlouder.py:374
@@ -343,9 +343,9 @@ msgstr "Seite:"
 #: src/additions/porn/porncom.py:488 src/additions/porn/porncom.py:633
 #: src/additions/porn/porndoe.py:169 src/additions/porn/porngo.py:217
 #: src/additions/porn/pornhat.py:86 src/additions/porn/pornhat.py:191
-#: src/additions/porn/pornhat.py:227 src/additions/porn/pornhub.py:944
-#: src/additions/porn/pornhub.py:1147 src/additions/porn/pornicom.py:203
-#: src/additions/porn/pornicom.py:264 src/additions/porn/pornid.py:212
+#: src/additions/porn/pornhat.py:227 src/additions/porn/pornhub.py:948
+#: src/additions/porn/pornhub.py:1155 src/additions/porn/pornicom.py:209
+#: src/additions/porn/pornicom.py:270 src/additions/porn/pornid.py:212
 #: src/additions/porn/pornid.py:288 src/additions/porn/pornoxo.py:197
 #: src/additions/porn/pornrabbit.py:191 src/additions/porn/porntv.py:163
 #: src/additions/porn/porntv.py:307 src/additions/porn/pornxio.py:217
@@ -392,11 +392,10 @@ msgstr "Bitte warten..."
 #: src/additions/fun/funnyvideoclips_de.py:127
 #: src/additions/fun/funnyvideoclips_de.py:171
 #: src/additions/fun/gaskrank_tv.py:134 src/additions/fun/gaskrank_tv.py:158
-#: src/additions/fun/germanytv.py:181 src/additions/fun/lachschon_de.py:223
-#: src/additions/fun/liveleak.py:122 src/additions/fun/liveleak.py:154
-#: src/additions/fun/twitch.py:309 src/additions/fun/twitch.py:327
-#: src/additions/mediatheken/arte.py:368 src/additions/mediatheken/atv.py:150
-#: src/additions/mediatheken/brf.py:145
+#: src/additions/fun/lachschon_de.py:223 src/additions/fun/liveleak.py:122
+#: src/additions/fun/liveleak.py:154 src/additions/fun/twitch.py:309
+#: src/additions/fun/twitch.py:327 src/additions/mediatheken/arte.py:368
+#: src/additions/mediatheken/atv.py:150 src/additions/mediatheken/brf.py:145
 #: src/additions/mediatheken/dreisat.py:382
 #: src/additions/mediatheken/netzkino.py:179
 #: src/additions/mediatheken/spiegeltv.py:194
@@ -417,7 +416,7 @@ msgstr "Bitte warten..."
 #: src/additions/porn/naughtyamerica.py:186
 #: src/additions/porn/nubilefilms.py:242 src/additions/porn/porn7.py:264
 #: src/additions/porn/porndoe.py:193 src/additions/porn/porngo.py:233
-#: src/additions/porn/pornhat.py:208 src/additions/porn/pornicom.py:238
+#: src/additions/porn/pornhat.py:208 src/additions/porn/pornicom.py:244
 #: src/additions/porn/pornid.py:260 src/additions/porn/pornxio.py:237
 #: src/additions/porn/realitykings.py:190 src/additions/porn/redtube.py:252
 #: src/additions/porn/shemalez.py:202 src/additions/porn/slutload.py:217
@@ -470,8 +469,8 @@ msgstr ""
 #: mpgz/src/additions/useradditions/movie4k.py:825
 #: src/additions/porn/dachix.py:193 src/additions/porn/fetishshrine.py:180
 #: src/additions/porn/freeones.py:192 src/additions/porn/nudez.py:195
-#: src/additions/porn/porncom.py:699 src/additions/porn/pornhub.py:1026
-#: src/additions/porn/pornhub.py:1051 src/additions/porn/pornoxo.py:215
+#: src/additions/porn/porncom.py:699 src/additions/porn/pornhub.py:1034
+#: src/additions/porn/pornhub.py:1059 src/additions/porn/pornoxo.py:230
 #: src/additions/porn/pornrabbit.py:208 src/additions/porn/porntv.py:349
 #: src/additions/porn/sexu.py:165 src/additions/porn/shesfreaky.py:175
 #: src/additions/porn/spankbang.py:225 src/additions/porn/tube8.py:291
@@ -507,7 +506,7 @@ msgstr "Keine unterstützten Streams gefunden!"
 
 #: mpgz/src/additions/porn/amateuremdh.py:91
 #: mpgz/src/additions/porn/mydirtyhobby.py:92
-#: mpgz/src/additions/porn/streammdh.py:129 src/additions/porn/pornhub.py:1080
+#: mpgz/src/additions/porn/streammdh.py:129 src/additions/porn/pornhub.py:1088
 #: src/additions/porn/xhamster.py:496 src/additions/porn/xhamster.py:621
 #: src/additions/porn/xnxx.py:304 src/additions/porn/xvideos.py:494
 msgid "Show Related"
@@ -519,7 +518,7 @@ msgstr "Ähnliche anzeigen"
 #: src/additions/porn/badoinkvr.py:159 src/additions/porn/ddfnetwork.py:195
 #: src/additions/porn/julesjordan.py:172 src/additions/porn/mofos.py:168
 #: src/additions/porn/nubilefilms.py:162 src/additions/porn/porncom.py:243
-#: src/additions/porn/pornhub.py:677 src/additions/porn/wicked.py:159
+#: src/additions/porn/pornhub.py:681 src/additions/porn/wicked.py:159
 #: src/additions/porn/x4tube.py:295 src/additions/porn/xhamster.py:391
 #: src/additions/porn/xvideos.py:356
 msgid "No pornstars found!"
@@ -539,7 +538,7 @@ msgstr "Keine abspielbaren Filme gefunden, nächste Seite probieren!"
 #: mpgz/src/additions/porn/pornfromczech.py:212
 #: mpgz/src/additions/porn/pornfromczech.py:223
 #: mpgz/src/additions/porn/streammdh.py:67 src/additions/porn/hotscope.py:240
-#: src/additions/porn/pornhub.py:1246
+#: src/additions/porn/pornhub.py:1254
 msgid "This plugin requires package nodejs."
 msgstr "Dieses Plugin benötigt das Paket nodejs."
 
@@ -547,7 +546,7 @@ msgstr "Dieses Plugin benötigt das Paket nodejs."
 #: mpgz/src/additions/porn/pornfromczech.py:214
 #: mpgz/src/additions/porn/pornfromczech.py:225
 #: mpgz/src/additions/porn/streammdh.py:69 src/additions/porn/hotscope.py:242
-#: src/additions/porn/pornhub.py:1248
+#: src/additions/porn/pornhub.py:1256
 msgid "Error executing Javascript, please report to the developers."
 msgstr "Fehler beim Ausführen von Javascript, bitte an die Entwickler melden."
 
@@ -557,12 +556,12 @@ msgstr "Fehler beim Ausführen von Javascript, bitte an die Entwickler melden."
 #: src/additions/porn/pinflix.py:368 src/additions/porn/porncom.py:192
 #: src/additions/porn/porncom.py:331 src/additions/porn/porncom.py:469
 #: src/additions/porn/porncom.py:608 src/additions/porn/porndoe.py:149
-#: src/additions/porn/pornhub.py:332 src/additions/porn/pornhub.py:488
-#: src/additions/porn/pornhub.py:646 src/additions/porn/pornhub.py:780
+#: src/additions/porn/pornhub.py:332 src/additions/porn/pornhub.py:489
+#: src/additions/porn/pornhub.py:650 src/additions/porn/pornhub.py:784
 #: src/additions/porn/redtube.py:183 src/additions/porn/spankbang.py:169
 #: src/additions/porn/tube8.py:209 src/additions/porn/vporn.py:223
 #: src/additions/porn/x4tube.py:246 src/additions/porn/x4tube.py:374
-#: src/additions/porn/xvideos.py:489 src/plugin.py:1771 src/plugin.py:2796
+#: src/additions/porn/xvideos.py:489 src/plugin.py:1777 src/plugin.py:2791
 msgid "Sort"
 msgstr "Sortieren"
 
@@ -595,8 +594,8 @@ msgstr "Filter"
 #: src/additions/porn/porncom.py:414 src/additions/porn/porncom.py:532
 #: src/additions/porn/porncom.py:552 src/additions/porn/porncom.py:714
 #: src/additions/porn/porncom.py:739 src/additions/porn/porndoe.py:215
-#: src/additions/porn/pornhub.py:420 src/additions/porn/pornhub.py:588
-#: src/additions/porn/pornhub.py:715 src/additions/porn/pornhub.py:846
+#: src/additions/porn/pornhub.py:421 src/additions/porn/pornhub.py:592
+#: src/additions/porn/pornhub.py:719 src/additions/porn/pornhub.py:850
 #: src/additions/porn/redtube.py:277 src/additions/porn/spankbang.py:237
 #: src/additions/porn/spankbang.py:240 src/additions/porn/spankbang.py:254
 #: src/additions/porn/tube8.py:304 src/additions/porn/tube8.py:317
@@ -634,7 +633,7 @@ msgstr "Nichts gefunden!"
 #: src/additions/porn/pornhub.py:138 src/additions/porn/pornhub.py:280
 #: src/additions/porn/pornhub.py:282 src/additions/porn/youporn.py:77
 #: src/additions/porn/youporn.py:221 src/additions/porn/youporn.py:223
-#: src/plugin.py:525 src/resources/simpleplayer.py:2350
+#: src/plugin.py:525 src/resources/simpleplayer.py:2348
 msgid "Setup"
 msgstr "Einstellungen"
 
@@ -729,7 +728,6 @@ msgstr "Auswahl wurde zur Watchlist hinzugefügt."
 
 #: mpgz/src/additions/useradditions/kinoxto.py:462 src/additions/fun/ccc.py:26
 #: src/additions/fun/ccc.py:108 src/additions/fun/forplayers.py:25
-#: src/additions/fun/germanytv.py:57 src/additions/fun/germanytv.py:99
 #: src/additions/fun/itunestrailers.py:63 src/additions/mediatheken/ard.py:125
 #: src/additions/mediatheken/ard.py:291 src/additions/mediatheken/ard.py:351
 #: src/additions/mediatheken/ard.py:457 src/additions/mediatheken/arte.py:54
@@ -783,9 +781,9 @@ msgstr "Watchlist ist derzeit leer"
 msgid "Parts Selection"
 msgstr "Part Auswahl"
 
-#: mpgz/src/additions/useradditions/movie4k.py:125 src/plugin.py:1184
-#: src/plugin.py:1198 src/plugin.py:1328 src/plugin.py:2253 src/plugin.py:2431
-#: src/plugin.py:2499 src/plugin.py:3145 src/plugin.py:3291 src/plugin.py:3359
+#: mpgz/src/additions/useradditions/movie4k.py:125 src/plugin.py:1190
+#: src/plugin.py:1204 src/plugin.py:1334 src/plugin.py:2248 src/plugin.py:2426
+#: src/plugin.py:2494 src/plugin.py:3140 src/plugin.py:3286 src/plugin.py:3354
 msgid "Please enter the correct PIN"
 msgstr "Bitte die korrekte PIN eingeben"
 
@@ -885,22 +883,6 @@ msgstr "Ereignisse in %s"
 msgid "No events found!"
 msgstr "Keine Ereignisse gefunden!"
 
-#: src/additions/fun/germanytv.py:56 src/additions/fun/germanytv.py:98
-#: src/plugin.py:873 src/plugin.py:1777 src/plugin.py:2802
-msgid "Menu"
-msgstr "Menü"
-
-#: src/additions/fun/germanytv.py:100 src/additions/fun/germanytv.py:160
-#: src/plugin.py:871 src/plugin.py:1775 src/plugin.py:2800
-#: src/resources/showAsThumb.py:246 src/resources/simplelist.py:118
-#: src/resources/simplelist.py:637 src/resources/simpleplayer.py:718
-msgid "Exit"
-msgstr "Beenden"
-
-#: src/additions/fun/germanytv.py:193
-msgid "No program data found!"
-msgstr "Keine Programmdaten gefunden!"
-
 #: src/additions/fun/itunestrailers.py:192
 msgid "Movie Selection"
 msgstr "Film Auswahl"
@@ -949,7 +931,7 @@ msgstr "Keine Streams gefunden!"
 #: src/additions/mediatheken/youtube.py:970
 #: src/additions/mediatheken/youtube_user.py:76
 #: src/additions/porn/cumlouder.py:315 src/additions/porn/porncom.py:381
-#: src/additions/porn/pornhub.py:813 src/additions/porn/xvideos.py:353
+#: src/additions/porn/pornhub.py:817 src/additions/porn/xvideos.py:353
 msgid "No channels found!"
 msgstr "Keine Kanäle gefunden!"
 
@@ -1005,15 +987,28 @@ msgstr "Keine Inhalte / Ergebnisse gefunden!"
 msgid "Parsing error!"
 msgstr "Parsing error!"
 
-#: src/additions/mediatheken/netflix.py:75
-msgid "Please wait while we launch Netflix..."
-msgstr "Bitte warten Sie, während wir Netflix starten..."
-
 #: src/additions/mediatheken/netflix.py:78
+msgid "Please wait while Netflix is started..."
+msgstr "Bitte warten Sie, während Netflix gestartet wird..."
+
+#: src/additions/mediatheken/netflix.py:81
+#: src/additions/mediatheken/primevideo.py:91
+msgid "This plugin is only available for Dreambox One and Two!"
+msgstr "Dieses Plugin ist nur für Dreambox One und Two verfügbar!"
+
+#: src/additions/mediatheken/netflix.py:101
+msgid "Launching Netflix failed!"
+msgstr "Der Start von Netflix ist fehlgeschlagen!"
+
+#: src/additions/mediatheken/primevideo.py:85
+msgid "Please wait while Prime Video is started..."
+msgstr "Bitte warten Sie, während Prime Video gestartet wird..."
+
+#: src/additions/mediatheken/primevideo.py:88
 msgid "Please configure your login data first!"
 msgstr "Bitte konfigurieren Sie zuerst Ihre Zugangsdaten!"
 
-#: src/additions/mediatheken/netflix.py:79
+#: src/additions/mediatheken/primevideo.py:89
 msgid ""
 "Please configure your login data first via VideoOnDemand plugin in "
 "extensions menu."
@@ -1021,19 +1016,9 @@ msgstr ""
 "Bitte konfigurieren Sie Ihre Zugangsdaten zunächst über das VideoOnDemand "
 "Plugin im Erweiterungsmenü."
 
-#: src/additions/mediatheken/netflix.py:79
-msgid "Note: Your login data has to be stored else this plugin will not work."
-msgstr ""
-"Hinweis: Ihre Zugangsdaten müssen gespeichert werden, ansonsten funktioniert "
-"dieses Plugin nicht."
-
-#: src/additions/mediatheken/netflix.py:81
-msgid "This plugin is only available for Dreambox One and Two!"
-msgstr "Dieses Plugin ist nur für Dreambox One und Two verfügbar!"
-
-#: src/additions/mediatheken/netflix.py:102
-msgid "Launching Netflix failed!"
-msgstr "Der Start von Netflix ist fehlgeschlagen!"
+#: src/additions/mediatheken/primevideo.py:111
+msgid "Launching Prime Video failed!"
+msgstr "Der Start von Prime Video ist fehlgeschlagen!"
 
 #: src/additions/mediatheken/southpark.py:200
 #: src/additions/mediatheken/southpark.py:286 src/resources/mtvdelink.py:28
@@ -1394,9 +1379,9 @@ msgstr "Nachrichten"
 
 #: src/additions/mediatheken/youtube.py:206
 #: src/additions/mediatheken/youtube.py:476 src/plugin.py:848
-#: src/plugin.py:1037 src/plugin.py:1375 src/plugin.py:1749 src/plugin.py:1882
-#: src/plugin.py:1913 src/plugin.py:2533 src/plugin.py:2774 src/plugin.py:2889
-#: src/plugin.py:2920 src/plugin.py:3393
+#: src/plugin.py:1043 src/plugin.py:1381 src/plugin.py:1755 src/plugin.py:1888
+#: src/plugin.py:1919 src/plugin.py:2528 src/plugin.py:2769 src/plugin.py:2884
+#: src/plugin.py:2915 src/plugin.py:3388
 msgid "Music"
 msgstr "Musik"
 
@@ -1407,9 +1392,9 @@ msgstr "Gaming"
 
 #: src/additions/mediatheken/youtube.py:208
 #: src/additions/mediatheken/youtube.py:476 src/plugin.py:849
-#: src/plugin.py:1039 src/plugin.py:1375 src/plugin.py:1750 src/plugin.py:1884
-#: src/plugin.py:1915 src/plugin.py:2533 src/plugin.py:2775 src/plugin.py:2891
-#: src/plugin.py:2922 src/plugin.py:3393
+#: src/plugin.py:1045 src/plugin.py:1381 src/plugin.py:1756 src/plugin.py:1890
+#: src/plugin.py:1921 src/plugin.py:2528 src/plugin.py:2770 src/plugin.py:2886
+#: src/plugin.py:2917 src/plugin.py:3388
 msgid "Sports"
 msgstr "Sport"
 
@@ -1731,13 +1716,13 @@ msgid "Stream not found"
 msgstr "Stream nicht gefunden"
 
 #: src/additions/porn/bongacams.py:186 src/additions/porn/cam4.py:223
-#: src/additions/porn/camsoda.py:183 src/additions/porn/chaturbate.py:227
+#: src/additions/porn/camsoda.py:183 src/additions/porn/chaturbate.py:228
 msgid "No livestreams found!"
 msgstr "Keine Livestreams gefunden!"
 
 #: src/additions/porn/bongacams.py:226 src/additions/porn/bongacams.py:253
 #: src/additions/porn/cam4.py:259 src/additions/porn/camsoda.py:225
-#: src/additions/porn/chaturbate.py:269
+#: src/additions/porn/chaturbate.py:270
 msgid "Cam is currently offline."
 msgstr "Cam ist zur Zeit offline."
 
@@ -1761,9 +1746,9 @@ msgstr "Modus"
 #: src/additions/porn/porncom.py:293 src/additions/porn/porncom.py:431
 #: src/additions/porn/porncom.py:569 src/additions/porn/porncom.py:757
 #: src/additions/porn/porndoe.py:206 src/additions/porn/pornhub.py:394
-#: src/additions/porn/pornhub.py:406 src/additions/porn/pornhub.py:569
-#: src/additions/porn/pornhub.py:688 src/additions/porn/pornhub.py:703
-#: src/additions/porn/pornhub.py:833 src/additions/porn/redtube.py:265
+#: src/additions/porn/pornhub.py:406 src/additions/porn/pornhub.py:573
+#: src/additions/porn/pornhub.py:692 src/additions/porn/pornhub.py:707
+#: src/additions/porn/pornhub.py:837 src/additions/porn/redtube.py:265
 #: src/additions/porn/spankbang.py:274 src/additions/porn/tube8.py:332
 #: src/additions/porn/x4tube.py:322 src/additions/porn/x4tube.py:445
 #: src/additions/porn/xvideos.py:705
@@ -1779,45 +1764,45 @@ msgid "CDN fix (please don't use this option as default):"
 msgstr ""
 
 #: src/additions/porn/pornhub.py:388 src/additions/porn/pornhub.py:401
-#: src/additions/porn/pornhub.py:1132 src/additions/porn/xhamster.py:614
+#: src/additions/porn/pornhub.py:1140 src/additions/porn/xhamster.py:614
 #: src/additions/porn/xhamster.py:654
 msgid "Remove Favourite"
 msgstr "Favorit entfernen"
 
-#: src/additions/porn/pornhub.py:404 src/additions/porn/pornhub.py:1135
+#: src/additions/porn/pornhub.py:404 src/additions/porn/pornhub.py:1143
 #: src/additions/porn/xhamster.py:658
 msgid "Add Favourite"
 msgstr "Favorit hinzufügen"
 
-#: src/additions/porn/pornhub.py:454
+#: src/additions/porn/pornhub.py:455
 msgid ""
 "You have reached the maximum allowed number of favorite playlists. Please "
 "delete some of your current favorite playlists before adding new ones."
 msgstr ""
 
-#: src/additions/porn/pornhub.py:486 src/additions/porn/pornhub.py:699
-#: src/additions/porn/pornhub.py:829 src/additions/porn/pornhub.py:1120
+#: src/additions/porn/pornhub.py:487 src/additions/porn/pornhub.py:703
+#: src/additions/porn/pornhub.py:833 src/additions/porn/pornhub.py:1128
 #: src/additions/porn/xhamster.py:277 src/additions/porn/xhamster.py:302
 #: src/additions/porn/xhamster.py:419 src/additions/porn/xhamster.py:638
 msgid "Unsubscribe"
 msgstr "Abmelden"
 
-#: src/additions/porn/pornhub.py:558 src/additions/porn/xhamster.py:253
+#: src/additions/porn/pornhub.py:562 src/additions/porn/xhamster.py:253
 msgid "No subscriptions found!"
 msgstr "Keine Abonnements gefunden!"
 
-#: src/additions/porn/pornhub.py:617 src/additions/porn/pornhub.py:751
-#: src/additions/porn/pornhub.py:876 src/additions/porn/pornhub.py:1217
+#: src/additions/porn/pornhub.py:621 src/additions/porn/pornhub.py:755
+#: src/additions/porn/pornhub.py:880 src/additions/porn/pornhub.py:1225
 msgid "Unknown error."
 msgstr "Unbekannter Fehler."
 
-#: src/additions/porn/pornhub.py:702 src/additions/porn/pornhub.py:832
-#: src/additions/porn/pornhub.py:1123 src/additions/porn/xhamster.py:307
+#: src/additions/porn/pornhub.py:706 src/additions/porn/pornhub.py:836
+#: src/additions/porn/pornhub.py:1131 src/additions/porn/xhamster.py:307
 #: src/additions/porn/xhamster.py:426 src/additions/porn/xhamster.py:644
 msgid "Subscribe"
 msgstr "Abonnieren"
 
-#: src/additions/porn/pornhub.py:1277
+#: src/additions/porn/pornhub.py:1285
 msgid ""
 "You have reached the maximum allowed number of favorite videos. Please "
 "delete some of your current favorite videos before adding new ones."
@@ -1943,7 +1928,7 @@ msgstr "Film am Ende pausieren"
 
 #: src/plugin.py:261 src/plugin.py:280 src/resources/simplelist.py:508
 #: src/resources/simplelist.py:683 src/resources/simplelist.py:707
-#: src/resources/simpleplayer.py:1811 src/resources/simpleplayer.py:1817
+#: src/resources/simpleplayer.py:1810 src/resources/simpleplayer.py:1816
 msgid "No"
 msgstr "Nein"
 
@@ -2031,7 +2016,7 @@ msgstr "Hellgrün"
 msgid "premiumize.me is not activated."
 msgstr "premiumize.me ist nicht aktiviert."
 
-#: src/plugin.py:559 src/resources/simpleplayer.py:2278
+#: src/plugin.py:559 src/resources/simpleplayer.py:2276
 msgid "GENERAL"
 msgstr "ALLGEMEIN"
 
@@ -2143,7 +2128,7 @@ msgstr "Temporäres Cacheverzeichnis:"
 msgid "Icon Cachepath:"
 msgstr "Icon Cacheverzeichnis:"
 
-#: src/plugin.py:599 src/resources/simpleplayer.py:2281
+#: src/plugin.py:599 src/resources/simpleplayer.py:2279
 msgid "Videoquality:"
 msgstr "Videoqualität:"
 
@@ -2151,35 +2136,35 @@ msgstr "Videoqualität:"
 msgid "Watchlist/Playlist/Userchan path:"
 msgstr "Watchlist/Playlist/Userchan Verzeichnis:"
 
-#: src/plugin.py:602 src/resources/simpleplayer.py:2292
+#: src/plugin.py:602 src/resources/simpleplayer.py:2290
 msgid "YOUTUBE"
 msgstr "YOUTUBE"
 
-#: src/plugin.py:603 src/resources/simpleplayer.py:2293
+#: src/plugin.py:603 src/resources/simpleplayer.py:2291
 msgid "Highest resolution for playback:"
 msgstr "Höchste Auflösung für die Wiedergabe:"
 
-#: src/plugin.py:604 src/resources/simpleplayer.py:2294
+#: src/plugin.py:604 src/resources/simpleplayer.py:2292
 msgid "Enable DASH format (no seeking possible):"
 msgstr "DASH Format aktivieren (kein Spulen möglich):"
 
-#: src/plugin.py:606 src/resources/simpleplayer.py:2296
+#: src/plugin.py:606 src/resources/simpleplayer.py:2294
 msgid "Use DASH format for 480p:"
 msgstr "DASH Format verwenden für 480p:"
 
-#: src/plugin.py:607 src/resources/simpleplayer.py:2297
+#: src/plugin.py:607 src/resources/simpleplayer.py:2295
 msgid "Use DASH format for 720p:"
 msgstr "DASH Format verwenden für 720p:"
 
-#: src/plugin.py:608 src/resources/simpleplayer.py:2298
+#: src/plugin.py:608 src/resources/simpleplayer.py:2296
 msgid "Enable VP9 codec (required for resolutions >1080p):"
 msgstr "VP9 Codec aktivieren (erforderlich für Auflösungen >1080p):"
 
-#: src/plugin.py:610 src/resources/simpleplayer.py:2300
+#: src/plugin.py:610 src/resources/simpleplayer.py:2298
 msgid "Enable VP9 HDR (only for resolutions 720p and higher):"
 msgstr "VP9 HDR aktivieren (nur für Auflösungen ab 720p):"
 
-#: src/plugin.py:612 src/resources/simpleplayer.py:2302
+#: src/plugin.py:612 src/resources/simpleplayer.py:2300
 msgid "Enable Opus codec:"
 msgstr "Opus Codec aktivieren:"
 
@@ -2288,81 +2273,91 @@ msgstr "Bitte den korrekten Code eingeben"
 msgid "Enter code"
 msgstr "Code eingeben"
 
-#: src/plugin.py:845 src/plugin.py:1027 src/plugin.py:1375 src/plugin.py:1746
-#: src/plugin.py:1872 src/plugin.py:1903 src/plugin.py:2533 src/plugin.py:2771
-#: src/plugin.py:2879 src/plugin.py:2910 src/plugin.py:3393
+#: src/plugin.py:845 src/plugin.py:1033 src/plugin.py:1381 src/plugin.py:1752
+#: src/plugin.py:1878 src/plugin.py:1909 src/plugin.py:2528 src/plugin.py:2766
+#: src/plugin.py:2874 src/plugin.py:2905 src/plugin.py:3388
 msgid "ALL"
 msgstr "ALLE"
 
-#: src/plugin.py:846 src/plugin.py:1029 src/plugin.py:1375 src/plugin.py:1747
-#: src/plugin.py:1874 src/plugin.py:1905 src/plugin.py:2533 src/plugin.py:2772
-#: src/plugin.py:2881 src/plugin.py:2912 src/plugin.py:3393
+#: src/plugin.py:846 src/plugin.py:1035 src/plugin.py:1381 src/plugin.py:1753
+#: src/plugin.py:1880 src/plugin.py:1911 src/plugin.py:2528 src/plugin.py:2767
+#: src/plugin.py:2876 src/plugin.py:2907 src/plugin.py:3388
 msgid "Libraries"
 msgstr "Mediatheken"
 
-#: src/plugin.py:847 src/plugin.py:1033 src/plugin.py:1375 src/plugin.py:1748
-#: src/plugin.py:1878 src/plugin.py:1909 src/plugin.py:2533 src/plugin.py:2773
-#: src/plugin.py:2885 src/plugin.py:2916 src/plugin.py:3393
+#: src/plugin.py:847 src/plugin.py:1039 src/plugin.py:1381 src/plugin.py:1754
+#: src/plugin.py:1884 src/plugin.py:1915 src/plugin.py:2528 src/plugin.py:2768
+#: src/plugin.py:2880 src/plugin.py:2911 src/plugin.py:3388
 msgid "Tech & Fun"
 msgstr "Technik & Spaß"
 
-#: src/plugin.py:850 src/plugin.py:1035 src/plugin.py:1375 src/plugin.py:1751
-#: src/plugin.py:1880 src/plugin.py:1911 src/plugin.py:2533 src/plugin.py:2776
-#: src/plugin.py:2887 src/plugin.py:2918 src/plugin.py:3393
+#: src/plugin.py:850 src/plugin.py:1041 src/plugin.py:1381 src/plugin.py:1757
+#: src/plugin.py:1886 src/plugin.py:1917 src/plugin.py:2528 src/plugin.py:2771
+#: src/plugin.py:2882 src/plugin.py:2913 src/plugin.py:3388
 msgid "News & Documentary"
 msgstr "Nachrichten & Dokus"
 
-#: src/plugin.py:851 src/plugin.py:1041 src/plugin.py:1370 src/plugin.py:1752
-#: src/plugin.py:1886 src/plugin.py:1917 src/plugin.py:2528 src/plugin.py:2777
-#: src/plugin.py:2893 src/plugin.py:2924 src/plugin.py:3388
+#: src/plugin.py:851 src/plugin.py:1047 src/plugin.py:1376 src/plugin.py:1758
+#: src/plugin.py:1892 src/plugin.py:1923 src/plugin.py:2523 src/plugin.py:2772
+#: src/plugin.py:2888 src/plugin.py:2919 src/plugin.py:3383
 msgid "Porn"
 msgstr "Porno"
 
-#: src/plugin.py:852 src/plugin.py:1031 src/plugin.py:1374 src/plugin.py:1753
-#: src/plugin.py:1876 src/plugin.py:1907 src/plugin.py:2532 src/plugin.py:2778
-#: src/plugin.py:2883 src/plugin.py:2914 src/plugin.py:3392
+#: src/plugin.py:852 src/plugin.py:1037 src/plugin.py:1380 src/plugin.py:1759
+#: src/plugin.py:1882 src/plugin.py:1913 src/plugin.py:2527 src/plugin.py:2773
+#: src/plugin.py:2878 src/plugin.py:2909 src/plugin.py:3387
 msgid "User-additions"
 msgstr "User-Erweiterungen"
 
-#: src/plugin.py:855 src/plugin.py:1756 src/plugin.py:2781
+#: src/plugin.py:855 src/plugin.py:1762 src/plugin.py:2776
 msgid "Change filter"
 msgstr "Filter wechseln"
 
-#: src/plugin.py:856 src/plugin.py:1759 src/plugin.py:2784
+#: src/plugin.py:856 src/plugin.py:1765 src/plugin.py:2779
 msgid "Open SimpleList"
 msgstr "SimpleList öffnen"
 
-#: src/plugin.py:857 src/plugin.py:1760 src/plugin.py:2785
+#: src/plugin.py:857 src/plugin.py:1766 src/plugin.py:2780
 msgid "Open selected Plugin"
 msgstr "Ausgewähltes Plugin öffnen"
 
-#: src/plugin.py:858 src/plugin.py:1761 src/plugin.py:2786
+#: src/plugin.py:858 src/plugin.py:1767 src/plugin.py:2781
 msgid "Exit MediaPortal"
 msgstr "MediaPortal beenden"
 
-#: src/plugin.py:859 src/plugin.py:1764 src/plugin.py:2789
+#: src/plugin.py:859 src/plugin.py:1770 src/plugin.py:2784
 msgid "MediaPortal Setup"
 msgstr "MediaPortal Setup"
 
-#: src/plugin.py:872 src/plugin.py:1776 src/plugin.py:2801
+#: src/plugin.py:871 src/plugin.py:1781 src/plugin.py:2795
+#: src/resources/showAsThumb.py:246 src/resources/simplelist.py:118
+#: src/resources/simplelist.py:637 src/resources/simpleplayer.py:718
+msgid "Exit"
+msgstr "Beenden"
+
+#: src/plugin.py:872 src/plugin.py:1782 src/plugin.py:2796
 msgid "Help"
 msgstr "Hilfe"
 
-#: src/plugin.py:1184 src/plugin.py:1328 src/plugin.py:2253 src/plugin.py:2499
-#: src/plugin.py:3145 src/plugin.py:3359
+#: src/plugin.py:873 src/plugin.py:1783 src/plugin.py:2797
+msgid "Menu"
+msgstr "Menü"
+
+#: src/plugin.py:1190 src/plugin.py:1334 src/plugin.py:2248 src/plugin.py:2494
+#: src/plugin.py:3140 src/plugin.py:3354
 msgid "Enter adult PIN"
 msgstr "Erwachsenen-PIN eingeben"
 
-#: src/plugin.py:1198 src/plugin.py:2431 src/plugin.py:3291
+#: src/plugin.py:1204 src/plugin.py:2426 src/plugin.py:3286
 msgid "Enter setup PIN"
 msgstr "Setup-PIN eingeben"
 
-#: src/plugin.py:1238 src/plugin.py:2161 src/plugin.py:3050
+#: src/plugin.py:1244 src/plugin.py:2156 src/plugin.py:3045
 msgid "No connection to the Internet available."
 msgstr "Keine Verbindung zum Internet vorhanden."
 
-#: src/plugin.py:1265 src/plugin.py:1304 src/plugin.py:2190 src/plugin.py:2229
-#: src/plugin.py:3082 src/plugin.py:3121
+#: src/plugin.py:1271 src/plugin.py:1310 src/plugin.py:2185 src/plugin.py:2224
+#: src/plugin.py:3077 src/plugin.py:3116
 #, python-format
 msgid ""
 "This Plugin has been marked as \"not working\" by the developers.\n"
@@ -2381,8 +2376,8 @@ msgstr ""
 "Falls jemand anderes bereit ist einen Fix für dieses Plugin zur Verfügung zu "
 "stellen dann nehmt bitte Kontakt mit uns auf."
 
-#: src/plugin.py:1267 src/plugin.py:1306 src/plugin.py:2192 src/plugin.py:2231
-#: src/plugin.py:3084 src/plugin.py:3123
+#: src/plugin.py:1273 src/plugin.py:1312 src/plugin.py:2187 src/plugin.py:2226
+#: src/plugin.py:3079 src/plugin.py:3118
 #, python-format
 msgid ""
 "This Plugin has been marked as \"not working\" by the developers.\n"
@@ -2395,39 +2390,39 @@ msgstr ""
 "Aktueller Entwickler-Status dieses Plugins ist:\n"
 "\"%s\""
 
-#: src/plugin.py:1376 src/plugin.py:2534 src/plugin.py:3394
+#: src/plugin.py:1382 src/plugin.py:2529 src/plugin.py:3389
 msgid "Select Filter"
 msgstr "Wähle Filter"
 
-#: src/plugin.py:1428
+#: src/plugin.py:1434
 msgid "Userdefined Plugin sorting"
 msgstr "Benutzerdefinierte Plugin-Sortierung"
 
-#: src/plugin.py:1757 src/plugin.py:2782
+#: src/plugin.py:1763 src/plugin.py:2777
 msgid "Change sort order"
 msgstr "Sortierreihenfolge ändern"
 
-#: src/plugin.py:1758 src/plugin.py:2783
+#: src/plugin.py:1764 src/plugin.py:2778
 msgid "Manual sorting"
 msgstr "Manuelle Sortierung"
 
-#: src/plugin.py:1762 src/plugin.py:2787
+#: src/plugin.py:1768 src/plugin.py:2782
 msgid "Next page"
 msgstr "Nächste Seite"
 
-#: src/plugin.py:1763 src/plugin.py:2788
+#: src/plugin.py:1769 src/plugin.py:2783
 msgid "Previous page"
 msgstr "Vorherige Seite"
 
-#: src/plugin.py:1773 src/plugin.py:2798
+#: src/plugin.py:1779 src/plugin.py:2793
 msgid "CH+"
 msgstr "CH+"
 
-#: src/plugin.py:1774 src/plugin.py:2799
+#: src/plugin.py:1780 src/plugin.py:2794
 msgid "CH-"
 msgstr "CH-"
 
-#: src/plugin.py:1845 src/plugin.py:2851
+#: src/plugin.py:1851 src/plugin.py:2846
 msgid "Ordering is only possible with filter \"ALL\"."
 msgstr "Sortieren ist nur mit dem Filter \"ALLE\" möglich."
 
@@ -2721,8 +2716,8 @@ msgstr ""
 "aktiviert werden"
 
 #: src/resources/simplelist.py:507 src/resources/simplelist.py:682
-#: src/resources/simplelist.py:706 src/resources/simpleplayer.py:1809
-#: src/resources/simpleplayer.py:1816
+#: src/resources/simplelist.py:706 src/resources/simpleplayer.py:1808
+#: src/resources/simpleplayer.py:1815
 msgid "Yes"
 msgstr "Ja"
 
@@ -2847,138 +2842,138 @@ msgstr "Streaming Fehler: %s"
 msgid "Buffering..."
 msgstr "Puffern..."
 
-#: src/resources/simpleplayer.py:1810
+#: src/resources/simpleplayer.py:1809
 #, python-format
 msgid "Yes & Add Service to global Playlist-%02d"
 msgstr "Ja & Service zur globalen Playlist-%02d hinzufügen"
 
-#: src/resources/simpleplayer.py:1812 src/resources/simpleplayer.py:1818
+#: src/resources/simpleplayer.py:1811 src/resources/simpleplayer.py:1817
 msgid "No, but start over from the beginning"
 msgstr "Nein, aber von Anfang an neu beginnen"
 
-#: src/resources/simpleplayer.py:1821
+#: src/resources/simpleplayer.py:1820
 msgid "Stop playing this movie?"
 msgstr "Wiedergabe dieses Films stoppen?"
 
-#: src/resources/simpleplayer.py:1980
+#: src/resources/simpleplayer.py:1978
 msgid "No entries in the playlist available!"
 msgstr "Keine Einträge in der Playlist vorhanden!"
 
-#: src/resources/simpleplayer.py:2062
+#: src/resources/simpleplayer.py:2060
 msgid "Error: Service may be added only from the local playlist"
 msgstr "Fehler: Service darf nur von der lokalen Playlist hinzugefügt werden"
 
-#: src/resources/simpleplayer.py:2076
+#: src/resources/simpleplayer.py:2074
 msgid "Error: URL is not persistent!"
 msgstr "Fehler: URL ist nicht persistent!"
 
-#: src/resources/simpleplayer.py:2082
+#: src/resources/simpleplayer.py:2080
 msgid "Added entry"
 msgstr "Eintrag hinzugefügt"
 
-#: src/resources/simpleplayer.py:2084
+#: src/resources/simpleplayer.py:2082
 msgid "Entry already exists"
 msgstr "Eintrag schon vorhanden"
 
-#: src/resources/simpleplayer.py:2086
+#: src/resources/simpleplayer.py:2084
 msgid "Error!"
 msgstr "Fehler!"
 
-#: src/resources/simpleplayer.py:2260 src/resources/simpleplayer.py:2261
+#: src/resources/simpleplayer.py:2258 src/resources/simpleplayer.py:2259
 msgid "SimplePlayer Setup"
 msgstr "SimplePlayer Einstellungen"
 
-#: src/resources/simpleplayer.py:2279
+#: src/resources/simpleplayer.py:2277
 msgid "Global playlist number:"
 msgstr "Globale Playlist-Nummer:"
 
-#: src/resources/simpleplayer.py:2280
+#: src/resources/simpleplayer.py:2278
 msgid "Playmode:"
 msgstr "Abspielmodus:"
 
-#: src/resources/simpleplayer.py:2283
+#: src/resources/simpleplayer.py:2281
 msgid "Buffersize (in seconds):"
 msgstr "Puffergröße (in Sekunden):"
 
-#: src/resources/simpleplayer.py:2284
+#: src/resources/simpleplayer.py:2282
 msgid "Save resume cache in flash memory:"
 msgstr "Speichere Wiederaufnahme-Cache im Flashspeicher:"
 
-#: src/resources/simpleplayer.py:2285
+#: src/resources/simpleplayer.py:2283
 msgid "Behavior on movie start:"
 msgstr "Verhalten bei Filmstart:"
 
-#: src/resources/simpleplayer.py:2286
+#: src/resources/simpleplayer.py:2284
 msgid "Behavior on movie stop:"
 msgstr "Verhalten bei Filmstopp:"
 
-#: src/resources/simpleplayer.py:2287
+#: src/resources/simpleplayer.py:2285
 msgid "Behavior on movie end:"
 msgstr "Verhalten bei Filmende:"
 
-#: src/resources/simpleplayer.py:2288
+#: src/resources/simpleplayer.py:2286
 msgid "Seekbar sensibility:"
 msgstr "Suchleistenempfindlichkeit:"
 
-#: src/resources/simpleplayer.py:2289
+#: src/resources/simpleplayer.py:2287
 msgid "Infobar cover always off:"
 msgstr "Infobar-Coveranzeige immer aus:"
 
-#: src/resources/simpleplayer.py:2290
+#: src/resources/simpleplayer.py:2288
 msgid "Use SP number seek:"
 msgstr "Verwende SP Nummernsuche:"
 
-#: src/resources/simpleplayer.py:2304
+#: src/resources/simpleplayer.py:2302
 msgid "RADIO"
 msgstr "RADIO"
 
-#: src/resources/simpleplayer.py:2305
+#: src/resources/simpleplayer.py:2303
 msgid "Radio cover:"
 msgstr "Radio-Cover:"
 
-#: src/resources/simpleplayer.py:2306
+#: src/resources/simpleplayer.py:2304
 msgid "Radio visualization:"
 msgstr "Radio-Visualisierung:"
 
-#: src/resources/simpleplayer.py:2307
+#: src/resources/simpleplayer.py:2305
 msgid "Radio screensaver:"
 msgstr "Radio-Bildschirmschoner:"
 
-#: src/resources/simpleplayer.py:2308
+#: src/resources/simpleplayer.py:2306
 msgid "Radio screensaver keywords:"
 msgstr "Schlüsselwörter für den Radio-Bildschirmschoner:"
 
-#: src/resources/simpleplayer.py:2338 src/resources/simpleplayer.py:2339
+#: src/resources/simpleplayer.py:2336 src/resources/simpleplayer.py:2337
 msgid "SimplePlayer Menu"
 msgstr "SimplePlayer Menü"
 
-#: src/resources/simpleplayer.py:2353
+#: src/resources/simpleplayer.py:2351
 #, python-format
 msgid "Add service to global playlist-%02d"
 msgstr "Füge Service zu globaler Playlist-%02d hinzu"
 
-#: src/resources/simpleplayer.py:2355
+#: src/resources/simpleplayer.py:2353
 #, python-format
 msgid "Open global playlist-%02d"
 msgstr "Öffne globale Playlist-%02d"
 
-#: src/resources/simpleplayer.py:2357
+#: src/resources/simpleplayer.py:2355
 msgid "Open local playlist"
 msgstr "Öffne lokale Playlist"
 
-#: src/resources/simpleplayer.py:2359
+#: src/resources/simpleplayer.py:2357
 msgid "A/V Settings"
 msgstr "A/V Einstellungen"
 
-#: src/resources/simpleplayer.py:2361
+#: src/resources/simpleplayer.py:2359
 msgid "Advanced Audio Settings"
 msgstr "Erweiterte Audioeinstellungen"
 
-#: src/resources/simpleplayer.py:2362
+#: src/resources/simpleplayer.py:2360
 msgid "Mainmenu"
 msgstr "Hauptmenü"
 
-#: src/resources/simpleplayer.py:2430
+#: src/resources/simpleplayer.py:2428
 #, python-format
 msgid ""
 "The directory path does not end with '/':\n"
@@ -2987,7 +2982,7 @@ msgstr ""
 "Der Verzeichnispfad endet nicht mit '/':\n"
 "%s"
 
-#: src/resources/simpleplayer.py:2431
+#: src/resources/simpleplayer.py:2429
 #, python-format
 msgid ""
 "File with the same name exists in the directory path:\n"
@@ -2996,7 +2991,7 @@ msgstr ""
 "Datei mit gleichen Namen im Verzeichnispfad vorhanden:\n"
 "%s"
 
-#: src/resources/simpleplayer.py:2432
+#: src/resources/simpleplayer.py:2430
 #, python-format
 msgid ""
 "The missing directory:\n"
@@ -3005,7 +3000,7 @@ msgstr ""
 "Das fehlende Verzeichnis:\n"
 "%s konnte nicht angelegt werden!"
 
-#: src/resources/simpleplayer.py:2433
+#: src/resources/simpleplayer.py:2431
 #, python-format
 msgid ""
 "The directory path:\n"
@@ -3014,7 +3009,7 @@ msgstr ""
 "Der Verzeichnispfad:\n"
 "%s ist nicht vorhanden!"
 
-#: src/resources/simpleplayer.py:2434
+#: src/resources/simpleplayer.py:2432
 #, python-format
 msgid ""
 "There exists already a directory with this name:\n"
@@ -3023,7 +3018,7 @@ msgstr ""
 "Es existiert schon ein Verzeichnis mit diesem Namen:\n"
 "%s"
 
-#: src/resources/simpleplayer.py:2435
+#: src/resources/simpleplayer.py:2433
 #, python-format
 msgid ""
 "The path is OK, the file name was not specified:\n"
@@ -3032,7 +3027,7 @@ msgstr ""
 "Der Pfad ist i.O., der Dateiname wurde nicht angegeben:\n"
 "%s"
 
-#: src/resources/simpleplayer.py:2436
+#: src/resources/simpleplayer.py:2434
 #, python-format
 msgid ""
 "The directory path and file name is OK:\n"
@@ -3041,11 +3036,11 @@ msgstr ""
 "Der Verzeichnispfad & Dateiname ist i.O.:\n"
 "%s"
 
-#: src/resources/simpleplayer.py:2437
+#: src/resources/simpleplayer.py:2435
 msgid "The directory path is not specified!"
 msgstr "Der Verzeichnispfad wurde nicht angegeben!"
 
-#: src/resources/simpleplayer.py:2438
+#: src/resources/simpleplayer.py:2436
 #, python-format
 msgid ""
 "Symbolic link with the same name in the directory path:\n"
@@ -3054,7 +3049,7 @@ msgstr ""
 "Symbolischer Link mit gleichen Namen im Verzeichnispfad:\n"
 "%s vorhanden!"
 
-#: src/resources/simpleplayer.py:2439
+#: src/resources/simpleplayer.py:2437
 #, python-format
 msgid ""
 "The directory path does not begin with '/':\n"
@@ -3166,26 +3161,3 @@ msgstr ""
 #: src/resources/update.py:146
 msgid "MediaPortal update failed! Check the update log carefully!"
 msgstr "MediaPortal Update fehlgeschlagen! Überprüfe das Updatelog sorgfältig!"
-
-#~ msgid "Press OK to launch Netflix now!"
-#~ msgstr "Drücken Sie OK, um Netflix jetzt zu starten!"
-
-#~ msgid "Mandatory depends python-requests and/or nodejs are missing!"
-#~ msgstr ""
-#~ "Zwingend erforderliche Abhängigkeiten python-requests und/oder nodejs "
-#~ "fehlen!"
-
-#~ msgid "This event is not yet available."
-#~ msgstr "Dieses Event ist noch nicht verfügbar."
-
-#~ msgid "Clips:"
-#~ msgstr "Clips:"
-
-#~ msgid "Currently no episodes/clips available!"
-#~ msgstr "Momentan sind keine Folgen/Clips verfügbar!"
-
-#~ msgid "This episode/clip can't be played it's protected with DRM."
-#~ msgstr "Episode/Clip kann nicht abgespielt werden da DRM-geschützt."
-
-#~ msgid "Currently no streams available"
-#~ msgstr "Momentan sind keine Streams verfügbar"
index d9e0f8d..93db251 100644 (file)
@@ -155,8 +155,8 @@ config.mediaportal = ConfigSubsection()
 config_mp.mediaportal.fake_entry = NoSave(ConfigNothing())
 
 # Allgemein
-config_mp.mediaportal.version = NoSave(ConfigText(default="2019120501"))
-config.mediaportal.version = NoSave(ConfigText(default="2019120501"))
+config_mp.mediaportal.version = NoSave(ConfigText(default="2019122402"))
+config.mediaportal.version = NoSave(ConfigText(default="2019122402"))
 config_mp.mediaportal.autoupdate = ConfigYesNo(default = True)
 config.mediaportal.autoupdate = NoSave(ConfigYesNo(default = True))
 
@@ -963,7 +963,6 @@ class MPList(Screen, HelpableScreen):
                                                                                                exec("self."+xfilter+".append(self.hauptListEntry(\""+x.get("name").replace("&amp;","&")+"\", \""+x.get("icon")+"\", \""+x.get("modfile")+"\"))")
                                                                                else:
                                                                                        exec("self."+x.get("confcat")+".append(self.hauptListEntry(\""+x.get("name").replace("&amp;","&")+"\", \""+x.get("icon")+"\", \""+x.get("modfile")+"\"))")
-                                                                               exec("self.all.append(self.hauptListEntry(\""+x.get("name").replace("&amp;","&")+"\", \""+x.get("icon")+"\", \""+x.get("modfile")+"\"))")
 
                xmlpath = resolveFilename(SCOPE_PLUGINS, "Extensions/MediaPortal/additions/")
                for file in os.listdir(xmlpath):
@@ -1010,8 +1009,15 @@ class MPList(Screen, HelpableScreen):
                                                                                                                exec("self."+xfilter+".append(self.hauptListEntry(\""+x.get("name").replace("&amp;","&")+"\", \""+x.get("icon")+"\", \""+x.get("modfile")+"\"))")
                                                                                                else:
                                                                                                        exec("self."+x.get("confcat")+".append(self.hauptListEntry(\""+x.get("name").replace("&amp;","&")+"\", \""+x.get("icon")+"\", \""+x.get("modfile")+"\"))")
-                                                                                               exec("self.all.append(self.hauptListEntry(\""+x.get("name").replace("&amp;","&")+"\", \""+x.get("icon")+"\", \""+x.get("modfile")+"\"))")
 
+               self.all_tmp = self.mediatheken + self.fun + self.music + self.sport + self.newsdoku + self.porn + self.useradditions
+               lst = []
+               for i in self.all_tmp:
+                       if i[0][0] not in lst:
+                               self.all.append(i)
+                               lst.append(i[0][0])
+               del lst
+               del self.all_tmp
                self.all.sort(key=lambda t : t[0][0].lower())
                self.mediatheken.sort(key=lambda t : t[0][0].lower())
                self.fun.sort(key=lambda t : t[0][0].lower())
@@ -1949,6 +1955,7 @@ class MPWall(Screen, HelpableScreen):
                        logo_data = None
 
                for x in range(1,len(self.plugin_liste)+1):
+                       scale = AVSwitch().getFramebufferScale()
                        postername = self.plugin_liste[int(x)-1][1]
                        remote_hash = ""
                        ds = defer.DeferredSemaphore(tokens=5)
@@ -2005,7 +2012,6 @@ class MPWall(Screen, HelpableScreen):
                                                        if remote_hash != local_hash:
                                                                d = ds.run(downloadPage, url, logo_path)
 
-                       scale = AVSwitch().getFramebufferScale()
                        if mp_globals.videomode == 2:
                                self.picload.setPara((210, 112, scale[0], scale[1], False, 1, "#FF000000"))
                        else:
@@ -2015,10 +2021,7 @@ class MPWall(Screen, HelpableScreen):
                        else:
                                self.picload.startDecode(poster_path, 0, 0, False)
 
-                       if mp_globals.isDreamOS and mp_globals.model not in ["one","two"]:
-                               self["zeile"+str(x)].instance.setPixmap(gPixmapPtr())
-                       else:
-                               self["zeile"+str(x)].instance.setPixmap(gPixmapPtr())
+                       self["zeile"+str(x)].instance.setPixmap(gPixmapPtr())
                        self["zeile"+str(x)].hide()
                        pic = self.picload.getData()
                        if pic != None:
@@ -2045,7 +2048,6 @@ class MPWall(Screen, HelpableScreen):
                                                                        d = ds.run(downloadPage, url, poster_path)
                                                                        poster_path = "%s/images/comingsoon.png" % mp_globals.pluginPath
 
-                               scale = AVSwitch().getFramebufferScale()
                                if mp_globals.videomode == 2:
                                        self.picload.setPara((272, 146, scale[0], scale[1], False, 1, "#FF000000"))
                                else:
@@ -2055,10 +2057,7 @@ class MPWall(Screen, HelpableScreen):
                                else:
                                        self.picload.startDecode(poster_path, 0, 0, False)
 
-                               if mp_globals.isDreamOS and mp_globals.model not in ["one","two"]:
-                                       self["zeile_bw"+str(x)].instance.setPixmap(gPixmapPtr())
-                               else:
-                                       self["zeile_bw"+str(x)].instance.setPixmap(gPixmapPtr())
+                               self["zeile_bw"+str(x)].instance.setPixmap(gPixmapPtr())
                                self["zeile_bw"+str(x)].hide()
                                pic = self.picload.getData()
                                if pic != None:
@@ -2070,7 +2069,6 @@ class MPWall(Screen, HelpableScreen):
                                if not fileExists(poster_path):
                                        poster_path = "%s/images/comingsoon.png" % mp_globals.pluginPath
 
-                               scale = AVSwitch().getFramebufferScale()
                                if mp_globals.videomode == 2:
                                        self.picload.setPara((210, 112, scale[0], scale[1], False, 1, "#FF000000"))
                                else:
@@ -2080,10 +2078,7 @@ class MPWall(Screen, HelpableScreen):
                                else:
                                        self.picload.startDecode(poster_path, 0, 0, False)
 
-                               if mp_globals.isDreamOS and mp_globals.model not in ["one","two"]:
-                                       self["zeile_bw"+str(x)].instance.setPixmap(gPixmapPtr())
-                               else:
-                                       self["zeile_bw"+str(x)].instance.setPixmap(gPixmapPtr())
+                               self["zeile_bw"+str(x)].instance.setPixmap(gPixmapPtr())
                                self["zeile_bw"+str(x)].hide()
                                pic = self.picload.getData()
                                if pic != None:
index e37f92b..6ce9561 100644 (file)
@@ -74,7 +74,6 @@ try:
                                                        if "hls_variant" in uri:
                                                                getPage(uri).addCallback(self.parseData, service)
                                                        else:
-                                                               #uri = uri.replace('%252F','%2F').replace('%253D','%3D').replace('%252B','%2B').replace('%253B','%3B')
                                                                service.setResolvedUri(uri, eServiceReference.idDVB)
                                                else:
                                                        service.setResolvedUri(uri, eServiceReference.idGST)
@@ -86,7 +85,7 @@ try:
                        if video_id:
                                y = youtubeUrl(self)
                                y.addCallback(onUrlReady)
-                               y.getVideoUrl(video_id, 2, dash=None, fmt_map=None)
+                               y.getVideoUrl(video_id)
                        elif liveurl:
                                getPage(liveurl).addCallback(self.parseLive, service)
                        else:
@@ -107,7 +106,6 @@ try:
                                                if "hls_variant" in uri:
                                                        getPage(uri).addCallback(self.parseData, service)
                                                else:
-                                                       #uri = uri.replace('%252F','%2F').replace('%253D','%3D').replace('%252B','%2B').replace('%253B','%3B')
                                                        service.setResolvedUri(uri, eServiceReference.idDVB)
                                        else:
                                                service.failedToResolveUri()
@@ -125,7 +123,6 @@ try:
                                                Log.w("Service became invalid!")
                                                return
                                        if uri:
-                                               #uri = uri.replace('%252F','%2F').replace('%253D','%3D').replace('%252B','%2B').replace('%253B','%3B')
                                                service.setResolvedUri(uri, eServiceReference.idDVB)
                                        else:
                                                service.failedToResolveUri()
index 882fd74..9ef72f6 100644 (file)
@@ -33,9 +33,10 @@ class CoverHelper:
                else:
                        return data
 
-       def getCover(self, url, download_cb=None, agent=None, cookieJar=None, screensaver=False, bgcover=False, headers=None, default_cover=None):
+       def getCover(self, url, download_cb=None, agent=None, cookieJar=None, screensaver=False, bgcover=False, headers=None, default_cover=None, ltype=None):
                self.bgcover = bgcover
                self.screensaver = screensaver
+               self.ltype = ltype
                if "PixmapExt" in str(self._cover):
                        self.crossfade = True
                else:
@@ -80,7 +81,7 @@ class CoverHelper:
                                        d.addErrback(self.dataErrorP)
                        elif url.startswith('file://'):
                                logopath = (config_mp.mediaportal.iconcachepath.value + "logos")
-                               if logopath in url:
+                               if logopath in url or "/images/default_cover.png" in url:
                                        self.logofix = True
                                self.showCoverFile(url[7:])
                                if download_cb:
@@ -195,7 +196,9 @@ class CoverHelper:
                                w = ptr.size().width()
                                h = ptr.size().height()
                                ratio = float(w) / float(h)
-                               if self._nc_callback and ratio > 1.05:
+                               if mp_globals.isDreamOS and self._nc_callback and ratio > 1.35 and self.ltype == "amazon":
+                                       self.showCoverNone()
+                               elif mp_globals.isDreamOS and self._nc_callback and ratio > 1.05 and self.ltype != "amazon":
                                        self.showCoverNone()
                                else:
                                        self._cover.instance.setPixmap(ptr)
index f48d4e2..5fb4472 100644 (file)
@@ -1653,9 +1653,10 @@ class SimplePlayer(Screen, M3U8Player, CoverSearchHelper, SimpleSeekHelper, Simp
                                                #if not '/?url=' in url:
                                                #       url = unquote(url)
                                                if mp_globals.isDreamOS:
+                                                       mp_globals.nav_suburi = ""
                                                        if self.playerMode == 'RADIO' and config_mp.mediaportal.sp_radio_visualization.value != "0" and MerlinMusicPlayerPresent:
                                                                sref = eServiceReference(0x1019, 0, url)
-                                                       elif self.eServiceStream and ('.m3u8' in url or 'm3u8-aapl' in url or '.mpd' in url or 'http://127.0.0.1:1337/manifest?id=' in url) and mp_globals.model in ["one","two"]:
+                                                       elif self.eServiceStream and ('.m3u8' in url or 'm3u8-aapl' in url or '.mpd' in url or 'manifest/dash' in url or 'http://127.0.0.1:1337/manifest?id=' in url) and mp_globals.model in ["one","two"]:
                                                                sref = eServiceReference(0x2223, 0, url)
                                                                if suburi:
                                                                        sref.setSuburi(suburi)
@@ -1669,8 +1670,6 @@ class SimplePlayer(Screen, M3U8Player, CoverSearchHelper, SimpleSeekHelper, Simp
                                                                                self.dash = True
                                                                        except:
                                                                                pass
-                                                               else:
-                                                                       mp_globals.nav_suburi = ""
                                                else:
                                                        if suburi:
                                                                if suburi not in ["yt_dash_audio"]:
@@ -1900,8 +1899,8 @@ class SimplePlayer(Screen, M3U8Player, CoverSearchHelper, SimpleSeekHelper, Simp
                if self.downloader != None:
                        self.downloader.stop()
                reactor.callLater(1, clearTmpBuffer)
-               
-               if self.ltype == 'netflix':
+
+               if self.ltype in ['netflix', 'amazon']:
                        from Plugins.Extensions.MediaPortal.plugin import _stylemanager
                        _stylemanager(0)
 
@@ -1916,25 +1915,24 @@ class SimplePlayer(Screen, M3U8Player, CoverSearchHelper, SimpleSeekHelper, Simp
                title = entry[0]
                url = entry[1]
                l = len(entry)
-               if l >= 3:
-                       iurl = entry[2]
-               if l >= 4:
-                       if entry[3] == "drm":
-                               iurl = ''
-                               suburi = entry[2]
-                       else:
-                               iurl = ''
-                               suburi =''
+               iurl = ''
+               suburi =''
                if l >= 5:
                        if entry[4] == "drm":
                                iurl = entry[3]
                                suburi = entry[2]
                        else:
+                               iurl = entry[2]
+                               suburi =''
+               elif l >= 4:
+                       if entry[3] == "drm":
                                iurl = ''
+                               suburi = entry[2]
+                       else:
+                               iurl = entry[2]
                                suburi =''
-               else:
-                       iurl = ''
-                       suburi =''
+               elif l >= 3:
+                       iurl = entry[2]
                if suburi and iurl:
                        self.playStream(title, url, suburi=suburi, imgurl=iurl)
                elif suburi:
@@ -2131,7 +2129,7 @@ class SimplePlayer(Screen, M3U8Player, CoverSearchHelper, SimpleSeekHelper, Simp
                elif self.playerMode != 'RADIO':
                        if mp_globals.isDreamOS:
                                self['Cover'].hide()
-                       self._Cover.getCover(cover, download_cb=download_cb)
+                       self._Cover.getCover(cover, download_cb=download_cb, ltype=self.ltype)
 
        def showCover2(self, ret, cover=None):
                if mp_globals.model in ["dm7080","dm900","dm920"]:
index 2579d43..f026cc5 100644 (file)
@@ -159,10 +159,10 @@ class get_stream_link:
                                        filename = ''
                                        if "&f=" in stream_url:
                                                file = url[1].split('&f=')
-                                               sig = "&sig=" + file[0]#.replace('%2F','%252F').replace('%3D','%253D').replace('%2B','%252B')
+                                               sig = "&sig=" + file[0]
                                                filename = "&f=" + file[1]
                                        else:
-                                               sig = "&sig=" + url[1]#.replace('%2F','%252F').replace('%3D','%253D').replace('%2B','%252B')
+                                               sig = "&sig=" + url[1]
                                        url = url[0] + sig + filename
                                else:
                                        url = stream_url
index 7d26815..5851e25 100644 (file)
@@ -7,10 +7,8 @@ class YoutubeLink(object):
                self.session = session
                self._callback = None
                self.title = ''
-               self.videoPrio = int(config_mp.mediaportal.youtubeprio.value)
 
-       def getLink(self, cb_play, cb_err, title, url, imgurl, album='', artist='', dash=None, fmt_map=None):
-               dash = config_mp.mediaportal.youtubeenabledash.value
+       def getLink(self, cb_play, cb_err, title, url, imgurl, album='', artist=''):
                self._callback = cb_play
                self.title = title
                self.imgurl = imgurl
@@ -25,7 +23,7 @@ class YoutubeLink(object):
                        y = youtubeUrl(self.session)
                        y.addErrback(cb_err)
                        y.addCallback(self.cbYTLink)
-                       y.getVideoUrl(url, self.videoPrio, dash=dash, fmt_map=fmt_map)
+                       y.getVideoUrl(url)
 
        def cbYTLink(self, url, suburi=None, buffering=False, proxy=None):
                self._callback(self.title, url, suburi=suburi, imgurl=self.imgurl, album=self.album, artist=self.artist, buffering=buffering, proxy=proxy)
\ No newline at end of file
index 87120f7..1264f7d 100644 (file)
@@ -81,16 +81,15 @@ class youtubeUrl(object):
   def cbYTErr(self, res):
        return
 
-  def getVideoUrl(self, url, videoPrio=2, dash=None, fmt_map=None):
+  def getVideoUrl(self, url):
        dash = config_mp.mediaportal.youtubeenabledash.value
+       videoPrio = int(config_mp.mediaportal.youtubeprio.value)
 
        if not self.__callBack:
                self.error = '[YoutubeURL] Error: no callBack set'
                self.errReturn()
 
-       if fmt_map != None:
-               self.VIDEO_FMT_PRIORITY_MAP = fmt_map
-       elif videoPrio == 0: #360p
+       if videoPrio == 0: #360p
                self.VIDEO_FMT_PRIORITY_MAP = {
                        '18'  : 1, #MP4 360p
                        '34'  : 2, #FLV 360p
@@ -230,15 +229,22 @@ class youtubeUrl(object):
   def parseVInfo(self, videoinfo, watch_url):
        flashvars = self.extractFlashVars(videoinfo, 0)
        if not flashvars.has_key(u"url_encoded_fmt_stream_map"):
-               playerUrl = re.search('.*src="(.*?)"\s+(?:type="text/javascript"\s|)name="player(?:_ias|)/base"', videoinfo, re.S)
-               if playerUrl:
-                       playerUrl = playerUrl.group(1).replace('\/','/')
-               else:
-                       playerUrl = None
-               self.checkFlashvars(flashvars, videoinfo, True, playerUrl=playerUrl)
+               self.checkFlashvars(flashvars, videoinfo)
        else:
                links = {}
                audio = {}
+
+               # formats:
+               # default \\"itag\\":(\d+),\\"url\\":\\"(.*?)\\",\\"mimeType\\":\\"(video.*?)\\",\\"bitrate\\":(\d+),
+               # cipher \\"itag\\":(\d+),\\"mimeType\\":\\"(video.*?)\\",\\"bitrate\\":(\d+),.*?\\"cipher\\":\\"(.*?)\\"
+
+               # adaptiveformats:
+               # default video \\"itag\\":(\d+),\\"url\\":\\"(.*?)\\",\\"mimeType\\":\\"(video.*?)\\",\\"bitrate\\":(\d+),\\"width\\":(\d+),\\"height\\":(\d+),\\"initRange\\":{\\"start\\":\\"(\d+)\\",\\"end\\":\\"(\d+)\\"},\\"indexRange\\":{\\"start\\":\\"(\d+)\\",\\"end\\":\\"(\d+)\\"},.*?\\"fps\\":(\d+),
+               # cipher video \\"itag\\":(\d+),\\"mimeType\\":\\"(video.*?)\\",\\"bitrate\\":(\d+),\\"width\\":(\d+),\\"height\\":(\d+),\\"initRange\\":{\\"start\\":\\"(\d+)\\",\\"end\\":\\"(\d+)\\"},\\"indexRange\\":{\\"start\\":\\"(\d+)\\",\\"end\\":\\"(\d+)\\"},.*?\\"fps\\":(\d+),.*?\\"cipher\\":\\"(.*?)\\"(?:}|,)
+               # default audio \\"itag\\":(\d+),\\"url\\":\\"(.*?)\\",\\"mimeType\\":\\"(audio.*?)\\",\\"bitrate\\":(\d+),\\"initRange\\":{\\"start\\":\\"(\d+)\\",\\"end\\":\\"(\d+)\\"},\\"indexRange\\":{\\"start\\":\\"(\d+)\\",\\"end\\":\\"(\d+)\\"},
+               # cipher audio \\"itag\\":(\d+),\\"mimeType\\":\\"(audio.*?)\\",\\"bitrate\\":(\d+),\\"initRange\\":{\\"start\\":\\"(\d+)\\",\\"end\\":\\"(\d+)\\"},\\"indexRange\\":{\\"start\\":\\"(\d+)\\",\\"end\\":\\"(\d+)\\"},.*?\\"cipher\\":\\"(.*?)\\"(?:}|,)
+
+
                encoded_url_map = ""
                if self.dash and (self.videoPrio >= 3 or (config_mp.mediaportal.youtubeenabledash480p.value and self.videoPrio >= 1) or (config_mp.mediaportal.youtubeenabledash720p.value and self.videoPrio >= 2)):
                        try:
@@ -281,7 +287,10 @@ class youtubeUrl(object):
                                        url += u"&" + url_desc_map[u"sp"][0] + u"=" + signature
 
                        try:
-                               links[self.VIDEO_FMT_PRIORITY_MAP[str(key)]] = url
+                               if "dur=0.000" in url:
+                                       continue
+                               else:
+                                       links[self.VIDEO_FMT_PRIORITY_MAP[str(key)]] = url
                        except KeyError:
                                if self.dash and (self.videoPrio >= 3 or (config_mp.mediaportal.youtubeenabledash480p.value and self.videoPrio >= 1) or (config_mp.mediaportal.youtubeenabledash720p.value and self.videoPrio >= 2)):
                                        try:
@@ -292,6 +301,7 @@ class youtubeUrl(object):
                                        continue
 
                hlsdata = videoinfo.replace('\\/','/').replace('\\"','"')
+               #url = re.findall('dashManifestUrl":"(http.*?)"(?:}|,)', hlsdata, re.S)
                url = re.findall('hlsManifestUrl":"(http.*?\.m3u8)"(?:}|,)', hlsdata, re.S)
                if url:
                        links = {}
@@ -424,7 +434,8 @@ class youtubeUrl(object):
 
        for item in results.get('formats', []):
                try:
-                       links[self.VIDEO_FMT_PRIORITY_MAP[str(item["format_id"])]] = str(item["url"])
+                       if not 'manifest/dash' in str(item["url"]):
+                               links[self.VIDEO_FMT_PRIORITY_MAP[str(item["format_id"])]] = str(item["url"])
                except KeyError:
                        if self.dash and (self.videoPrio >= 3 or (config_mp.mediaportal.youtubeenabledash480p.value and self.videoPrio >= 1) or (config_mp.mediaportal.youtubeenabledash720p.value and self.videoPrio >= 2)):
                                try:
@@ -452,7 +463,7 @@ class youtubeUrl(object):
                self.error = "[YoutubeURL] Error: no video url found"
                self.errReturn(self.video_url)
 
-  def checkFlashvars(self, flashvars, videoinfo, get_info2=False, playerUrl=None):
+  def checkFlashvars(self, flashvars, videoinfo):
        # Attempt to see if YouTube has issued an error message
        if not flashvars.has_key(u"reason"):
                from imports import decodeHtml
@@ -484,8 +495,14 @@ class youtubeUrl(object):
                elif not pc:
                        self.error = '[YoutubeURL] Error: unable to extract "url_encoded_fmt_stream_map" parameter for unknown reason'
 
-               if not pc and get_info2 and 'og:restrictions:age' in videoinfo:
-                       if youtubedl:
+               if not pc:
+                       hlsdata = videoinfo.replace('\\/','/').replace('\\"','"')
+                       #url = re.findall('dashManifestUrl":"(http.*?)"(?:}|,)', hlsdata, re.S)
+                       url = re.findall('hlsManifestUrl":"(http.*?\.m3u8)"(?:}|,)', hlsdata, re.S)
+                       if url:
+                               self.callBack(url[-1], None)
+                               return
+                       if youtubedl: # fallback to youtubedl resolver
                                thread.start_new_thread(self.get_video,("GetVideo",))
                                return
                        else:
@@ -580,7 +597,6 @@ class youtubeUrl(object):
                bandwith_list.append((int(bandwith),url))
        _x, best = min((abs(int(x[0]) - bw), x) for x in bandwith_list)
        url = best[1]
-       #url = url.replace('%2F','%252F').replace('%3D','%253D').replace('%2B','%252B').replace('%3B','%253B')
        self.__callBack(url)
 
   def getRedirect(self, redir_url, url):
index 6fa2313..55e33b6 100644 (file)
@@ -57,7 +57,7 @@
                <color color="#00ffffff" name="ThumbViewTextForeground" />
                <color color="#20000000" name="ThumbViewTextBackground" />
                <pagebar_posy value="985" />
-               <sp_seekbar_factor value="12.57" />
+               <sp_seekbar_factor value="11.62" />
                <config_separation_width value="780" />
                <config_divider_height value="3" />
                <!--<overridefont font="Regular" />-->
index 62bae89..ee79129 100644 (file)
@@ -1,49 +1,48 @@
-  <screen backgroundColor="transparent" flags="wfNoBorder" name="SimplePlayer" position="10,820" size="1900,250">
-       <widget alphatest="on" name="Icon" position="185,65" scale="1" size="400,125" zPosition="1" />
-       <widget alphatest="on" name="Cover" position="5,5" size="160,240" zPosition="1" />
-       <widget backgroundColor="#00616161" font="mediaportal_clean;35" halign="center" name="seekbartime" position="1092,75" size="300,40" transparent="1" foregroundColor="#00ffffff" zPosition="1" />
-       <widget backgroundColor="#00616161" font="mediaportal_clean;35" foregroundColor="#00ffffff" halign="left" position="605,140" render="Label" size="160,40" source="session.CurrentService" transparent="1" zPosition="1">
+<screen backgroundColor="transparent" flags="wfNoBorder" name="SimplePlayer" position="center,780" size="1920,300">
+       <widget name="Icon" position="10,115" scale="1" size="380,125" zPosition="1" alphatest="on" />
+       <widget name="Cover" position="1590,15" size="320,275" zPosition="1" alphatest="on" />
+       <widget name="noCover" position="1590,15" size="320,275" zPosition="0" alphatest="on" />
+       <widget backgroundColor="#00616161" font="mediaportal_clean;35" halign="center" name="seekbartime" position="840,125" size="300,40" transparent="1" foregroundColor="#00ffffff" zPosition="1" />
+       <widget backgroundColor="#00616161" font="mediaportal_clean;35" foregroundColor="#00ffffff" halign="left" position="400,190" render="Label" size="160,40" source="session.CurrentService" transparent="1" zPosition="1">
                <convert type="MPServicePosition">Position,ShowHours</convert>
        </widget>
-       <eLabel backgroundColor="#00ffffff" position="605,126" size="1275,2" foregroundColor="#00000000" />
-       <widget name="seekbarcursor" position="605,119" size="16,16" zPosition="4" pixmap="/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins_1080/clean_fhd/simpleplayer/seekbutton.png" alphatest="on" />
-       <widget position="605,118" progress_pointer="/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins_1080/clean_fhd/images/pointer.png:18,4" render="PositionGauge" size="1275,18" source="session.CurrentService" transparent="1" zPosition="1">
+       <eLabel backgroundColor="#00ffffff" position="400,176" size="1180,2" foregroundColor="#00000000" />
+       <widget name="seekbarcursor" position="400,170" size="16,16" zPosition="4" pixmap="/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins_1080/clean_fhd/simpleplayer/seekbutton.png" alphatest="on" />
+       <widget position="400,169" progress_pointer="/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins_1080/clean_fhd/images/pointer.png:18,4" render="PositionGauge" size="1180,18" source="session.CurrentService" transparent="1" zPosition="1">
                <convert type="MPServicePosition">Gauge</convert>
        </widget>
-       <widget backgroundColor="#00616161" font="mediaportal_clean;35" foregroundColor="#00ffffff" halign="right" position="1720,140" render="Label" size="160,40" source="session.CurrentService" transparent="1" zPosition="1">
+       <widget backgroundColor="#00616161" font="mediaportal_clean;35" foregroundColor="#00ffffff" halign="right" position="1420,190" render="Label" size="160,40" source="session.CurrentService" transparent="1" zPosition="1">
                <convert type="MPServicePosition">Remaining,Negate,ShowHours</convert>
        </widget>
-       <widget backgroundColor="#00616161" font="mediaportal_clean;35" foregroundColor="#00ffffff" halign="center" position="1092,140" render="Label" size="300,40" source="session.CurrentService" transparent="1" zPosition="1">
+       <widget backgroundColor="#00616161" font="mediaportal_clean;35" foregroundColor="#00ffffff" halign="center" position="840,190" render="Label" size="300,40" source="session.CurrentService" transparent="1" zPosition="1">
                <convert type="MPServicePosition">Length,ShowHours</convert>
        </widget>
-       <widget backgroundColor="#20000000" font="mediaportal_clean;35" foregroundColor="#00ffffff" halign="center" position="185,10" render="Label" size="1705,45" source="session.CurrentService" transparent="1" zPosition="1">
+       <widget backgroundColor="#20000000" font="mediaportal_clean;35" foregroundColor="#00ffffff" halign="center" position="10,15" render="Label" size="1570,90" source="session.CurrentService" transparent="1" zPosition="1">
                <convert type="MPServiceName">Name</convert>
        </widget>
-       <eLabel name="bgbg bar" position="175,0" size="1725,250" zPosition="-2" backgroundColor="#20000000" />
-       <eLabel name="bg cover" position="0,0" size="170,250" zPosition="-1" backgroundColor="#20000000" />
-       <widget name="noCover" position="5,5" size="160,240" zPosition="0" alphatest="blend" />
-       <ePixmap pixmap="/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins_1080/clean_fhd/simpleplayer/clock.png" position="185,200" size="40,40" zPosition="1" alphatest="blend" />
-       <widget source="global.CurrentTime" render="Label" position="235,198" size="100,40" font="mediaportal_clean;35" transparent="1" backgroundColor="#00616161" halign="left" foregroundColor="#00ffffff" zPosition="1">
+       <ePixmap pixmap="/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins_1080/clean_fhd/simpleplayer/infobar_bg.png" position="0,0" size="1920,300" zPosition="-2" alphatest="on" />
+       <ePixmap pixmap="/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins_1080/clean_fhd/simpleplayer/clock.png" position="10,250" size="40,40" zPosition="1" alphatest="blend" />
+       <widget source="global.CurrentTime" render="Label" position="60,248" size="100,40" font="mediaportal_clean;35" transparent="1" backgroundColor="#00616161" halign="left" foregroundColor="#00ffffff" zPosition="1">
                <convert type="ClockToText">Default</convert>
        </widget>
-       <widget source="session.CurrentService" render="Pixmap" pixmap="/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins_1080/clean_fhd/simpleplayer/clockend.png" position="355,200" size="40,40" zPosition="1" alphatest="blend">
+       <widget source="session.CurrentService" render="Pixmap" pixmap="/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins_1080/clean_fhd/simpleplayer/clockend.png" position="180,250" size="40,40" zPosition="1" alphatest="blend">
                <convert type="MPServicePosition">EndTime</convert>
                <convert type="ConditionalShowHide" />
        </widget>
-       <widget source="session.CurrentService" render="Label" position="405,198" size="100,40" font="mediaportal_clean;35" halign="left" backgroundColor="#00616161" transparent="1" foregroundColor="#00ffffff" zPosition="1">
+       <widget source="session.CurrentService" render="Label" position="230,248" size="100,40" font="mediaportal_clean;35" halign="left" backgroundColor="#00616161" transparent="1" foregroundColor="#00ffffff" zPosition="1">
                <convert type="MPServicePosition">EndTime,ShowNoSeconds</convert>
        </widget>
-       <widget source="session.CurrentService" render="Pixmap" pixmap="/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins_1080/clean_fhd/simpleplayer/resicon.png" position="525,200" size="40,40" zPosition="1" alphatest="blend">
+       <widget source="session.CurrentService" render="Pixmap" pixmap="/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins_1080/clean_fhd/simpleplayer/resicon.png" position="350,250" size="40,40" zPosition="1" alphatest="blend">
                <convert type="MPServiceInfo">VideoInfo</convert>
                <convert type="ConditionalShowHide" />
        </widget>
-       <widget source="session.CurrentService" render="Label" position="575,198" size="480,40" backgroundColor="#00616161" transparent="1" font="mediaportal_clean;35" halign="left" foregroundColor="#00ffffff">
+       <widget source="session.CurrentService" render="Label" position="400,248" size="480,40" backgroundColor="#00616161" transparent="1" font="mediaportal_clean;35" halign="left" foregroundColor="#00ffffff">
                <convert type="MPServiceInfo">VideoInfoCodec</convert>
        </widget>
-       <widget source="session.CurrentService" render="mp_AudioIcon" position="1720,204" zPosition="1" path="/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins_1080/clean_fhd/simpleplayer" size="80,35" alphatest="blend">
+       <widget source="session.CurrentService" render="mp_AudioIcon" position="1410,254" zPosition="1" path="/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins_1080/clean_fhd/simpleplayer" size="80,35" alphatest="blend">
                <convert type="mp_audioinfo">AudioIcon</convert>
        </widget>
-       <widget name="premiumoff" pixmap="/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins_1080/clean_fhd/simpleplayer/premium_off.png" position="1810,204" size="80,35" zPosition="2" alphatest="blend" />
-       <widget name="premiumizemeon" pixmap="/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins_1080/clean_fhd/simpleplayer/premiumize_on.png" position="1810,204" size="80,35" zPosition="2" alphatest="blend" />
-       <widget name="realdebridon" pixmap="/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins_1080/clean_fhd/simpleplayer/realdebrid_on.png" position="1810,204" size="80,35" zPosition="2" alphatest="blend" />
+       <widget name="premiumoff" pixmap="/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins_1080/clean_fhd/simpleplayer/premium_off.png" position="1500,254" size="80,35" zPosition="2" alphatest="blend" />
+       <widget name="premiumizemeon" pixmap="/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins_1080/clean_fhd/simpleplayer/premiumize_on.png" position="1500,254" size="80,35" zPosition="2" alphatest="blend" />
+       <widget name="realdebridon" pixmap="/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins_1080/clean_fhd/simpleplayer/realdebrid_on.png" position="1500,254" size="80,35" zPosition="2" alphatest="blend" />
 </screen>
\ No newline at end of file
diff --git a/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins_1080/clean_fhd/simpleplayer/infobar_bg.png b/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins_1080/clean_fhd/simpleplayer/infobar_bg.png
new file mode 100644 (file)
index 0000000..968631d
Binary files /dev/null and b/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins_1080/clean_fhd/simpleplayer/infobar_bg.png differ
index c0ae657..b12c09e 100644 (file)
@@ -57,7 +57,7 @@
                <color color="#00ffffff" name="ThumbViewTextForeground" />
                <color color="#20000000" name="ThumbViewTextBackground" />
                <pagebar_posy value="655" />
-               <sp_seekbar_factor value="8.38" />
+               <sp_seekbar_factor value="7.74" />
                <config_separation_width value="520" />
                <config_divider_height value="2" />
                <!--<overridefont font="Regular" />-->
index fff7c61..8a37c06 100644 (file)
@@ -1,49 +1,48 @@
-  <screen backgroundColor="transparent" flags="wfNoBorder" name="SimplePlayer" position="6,546" size="1266,166">
-       <widget alphatest="on" name="Icon" position="123,43" scale="1" size="266,83" zPosition="1" />
-       <widget alphatest="on" name="Cover" position="3,3" size="106,160" zPosition="1" />
-       <widget backgroundColor="#00616161" font="mediaportal_clean;23" halign="center" name="seekbartime" position="728,50" size="200,26" transparent="1" foregroundColor="#00ffffff" zPosition="1" />
-       <widget backgroundColor="#00616161" font="mediaportal_clean;23" foregroundColor="#00ffffff" halign="left" position="403,93" render="Label" size="106,26" source="session.CurrentService" transparent="1" zPosition="1">
+<screen backgroundColor="transparent" flags="wfNoBorder" name="SimplePlayer" position="center,520" size="1280,200">
+       <widget name="Icon" position="6,76" scale="1" size="253,83" zPosition="1" alphatest="on" />
+       <widget name="Cover" position="1060,9" size="213,183" zPosition="1" alphatest="on" />
+       <widget name="noCover" position="1060,9" size="213,183" zPosition="0" alphatest="on" />
+       <widget backgroundColor="#00616161" font="mediaportal_clean;23" halign="center" name="seekbartime" position="560,83" size="200,26" transparent="1" foregroundColor="#00ffffff" zPosition="1" />
+       <widget backgroundColor="#00616161" font="mediaportal_clean;23" foregroundColor="#00ffffff" halign="left" position="266,126" render="Label" size="106,26" source="session.CurrentService" transparent="1" zPosition="1">
                <convert type="MPServicePosition">Position,ShowHours</convert>
        </widget>
-       <eLabel backgroundColor="#00ffffff" position="403,84" size="850,1" foregroundColor="#00000000" />
-       <widget name="seekbarcursor" position="403,79" size="10,10" zPosition="4" pixmap="/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins_720/clean_hd/simpleplayer/seekbutton.png" alphatest="on" />
-       <widget position="403,78" progress_pointer="/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins_720/clean_hd/images/pointer.png:18,1" render="PositionGauge" size="850,12" source="session.CurrentService" transparent="1" zPosition="1">
+       <eLabel backgroundColor="#00ffffff" position="266,117" size="786,1" foregroundColor="#00000000" />
+       <widget name="seekbarcursor" position="266,113" size="10,10" zPosition="4" pixmap="/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins_720/clean_hd/simpleplayer/seekbutton.png" alphatest="on" />
+       <widget position="266,112" progress_pointer="/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins_720/clean_hd/images/pointer.png:18,1" render="PositionGauge" size="786,12" source="session.CurrentService" transparent="1" zPosition="1">
                <convert type="MPServicePosition">Gauge</convert>
        </widget>
-       <widget backgroundColor="#00616161" font="mediaportal_clean;23" foregroundColor="#00ffffff" halign="right" position="1146,93" render="Label" size="106,26" source="session.CurrentService" transparent="1" zPosition="1">
+       <widget backgroundColor="#00616161" font="mediaportal_clean;23" foregroundColor="#00ffffff" halign="right" position="946,126" render="Label" size="106,26" source="session.CurrentService" transparent="1" zPosition="1">
                <convert type="MPServicePosition">Remaining,Negate,ShowHours</convert>
        </widget>
-       <widget backgroundColor="#00616161" font="mediaportal_clean;23" foregroundColor="#00ffffff" halign="center" position="728,93" render="Label" size="200,26" source="session.CurrentService" transparent="1" zPosition="1">
+       <widget backgroundColor="#00616161" font="mediaportal_clean;23" foregroundColor="#00ffffff" halign="center" position="560,126" render="Label" size="200,26" source="session.CurrentService" transparent="1" zPosition="1">
                <convert type="MPServicePosition">Length,ShowHours</convert>
        </widget>
-       <widget backgroundColor="#20000000" font="mediaportal_clean;23" foregroundColor="#00ffffff" halign="center" position="123,6" render="Label" size="1136,30" source="session.CurrentService" transparent="1" zPosition="1">
+       <widget backgroundColor="#20000000" font="mediaportal_clean;23" foregroundColor="#00ffffff" halign="center" position="6,9" render="Label" size="1046,60" source="session.CurrentService" transparent="1" zPosition="1">
                <convert type="MPServiceName">Name</convert>
        </widget>
-       <eLabel name="bgbg bar" position="116,0" size="1150,166" zPosition="-2" backgroundColor="#20000000" />
-       <eLabel name="bg cover" position="0,0" size="113,166" zPosition="-1" backgroundColor="#20000000" />
-       <widget name="noCover" position="3,3" size="106,160" zPosition="0" alphatest="blend" />
-       <ePixmap pixmap="/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins_720/clean_hd/simpleplayer/clock.png" position="123,133" size="26,26" zPosition="1" alphatest="blend" />
-       <widget source="global.CurrentTime" render="Label" position="156,132" size="66,26" font="mediaportal_clean;23" transparent="1" backgroundColor="#00616161" halign="left" foregroundColor="#00ffffff" zPosition="1">
+       <ePixmap pixmap="/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins_720/clean_hd/simpleplayer/infobar_bg.png" position="0,0" size="1280,200" zPosition="-2" alphatest="on" />
+       <ePixmap pixmap="/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins_720/clean_hd/simpleplayer/clock.png" position="6,166" size="26,26" zPosition="1" alphatest="blend" />
+       <widget source="global.CurrentTime" render="Label" position="40,165" size="66,26" font="mediaportal_clean;23" transparent="1" backgroundColor="#00616161" halign="left" foregroundColor="#00ffffff" zPosition="1">
                <convert type="ClockToText">Default</convert>
        </widget>
-       <widget source="session.CurrentService" render="Pixmap" pixmap="/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins_720/clean_hd/simpleplayer/clockend.png" position="236,133" size="26,26" zPosition="1" alphatest="blend">
+       <widget source="session.CurrentService" render="Pixmap" pixmap="/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins_720/clean_hd/simpleplayer/clockend.png" position="120,166" size="26,26" zPosition="1" alphatest="blend">
                <convert type="MPServicePosition">EndTime</convert>
                <convert type="ConditionalShowHide" />
        </widget>
-       <widget source="session.CurrentService" render="Label" position="270,132" size="66,26" font="mediaportal_clean;23" halign="left" backgroundColor="#00616161" transparent="1" foregroundColor="#00ffffff" zPosition="1">
+       <widget source="session.CurrentService" render="Label" position="153,165" size="66,26" font="mediaportal_clean;23" halign="left" backgroundColor="#00616161" transparent="1" foregroundColor="#00ffffff" zPosition="1">
                <convert type="MPServicePosition">EndTime,ShowNoSeconds</convert>
        </widget>
-       <widget source="session.CurrentService" render="Pixmap" pixmap="/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins_720/clean_hd/simpleplayer/resicon.png" position="350,133" size="26,26" zPosition="1" alphatest="blend">
+       <widget source="session.CurrentService" render="Pixmap" pixmap="/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins_720/clean_hd/simpleplayer/resicon.png" position="233,166" size="26,26" zPosition="1" alphatest="blend">
                <convert type="MPServiceInfo">VideoInfo</convert>
                <convert type="ConditionalShowHide" />
        </widget>
-       <widget source="session.CurrentService" render="Label" position="383,132" size="320,26" backgroundColor="#00616161" transparent="1" font="mediaportal_clean;23" halign="left" foregroundColor="#00ffffff">
+       <widget source="session.CurrentService" render="Label" position="266,165" size="320,26" backgroundColor="#00616161" transparent="1" font="mediaportal_clean;23" halign="left" foregroundColor="#00ffffff">
                <convert type="MPServiceInfo">VideoInfoCodec</convert>
        </widget>
-       <widget source="session.CurrentService" render="mp_AudioIcon" position="1146,136" zPosition="1" path="/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins_720/clean_hd/simpleplayer" size="53,23" alphatest="blend">
+       <widget source="session.CurrentService" render="mp_AudioIcon" position="940,169" zPosition="1" path="/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins_720/clean_hd/simpleplayer" size="53,23" alphatest="blend">
                <convert type="mp_audioinfo">AudioIcon</convert>
        </widget>
-       <widget name="premiumoff" pixmap="/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins_720/clean_hd/simpleplayer/premium_off.png" position="1206,136" size="53,23" zPosition="2" alphatest="blend" />
-       <widget name="premiumizemeon" pixmap="/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins_720/clean_hd/simpleplayer/premiumize_on.png" position="1206,136" size="53,23" zPosition="2" alphatest="blend" />
-       <widget name="realdebridon" pixmap="/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins_720/clean_hd/simpleplayer/realdebrid_on.png" position="1206,136" size="53,23" zPosition="2" alphatest="blend" />
+       <widget name="premiumoff" pixmap="/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins_720/clean_hd/simpleplayer/premium_off.png" position="1000,169" size="53,23" zPosition="2" alphatest="blend" />
+       <widget name="premiumizemeon" pixmap="/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins_720/clean_hd/simpleplayer/premiumize_on.png" position="1000,169" size="53,23" zPosition="2" alphatest="blend" />
+       <widget name="realdebridon" pixmap="/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins_720/clean_hd/simpleplayer/realdebrid_on.png" position="1000,169" size="53,23" zPosition="2" alphatest="blend" />
 </screen>
\ No newline at end of file
diff --git a/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins_720/clean_hd/simpleplayer/infobar_bg.png b/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins_720/clean_hd/simpleplayer/infobar_bg.png
new file mode 100644 (file)
index 0000000..e676dfb
Binary files /dev/null and b/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins_720/clean_hd/simpleplayer/infobar_bg.png differ