def __init__(self, session, streamFilmLink, streamName): self.session = session self.streamFilmLink = streamFilmLink self.streamName = streamName path = "/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins/%s/XXXGenreScreen.xml" % config.mediaportal.skin.value if not fileExists(path): path = "/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins/original/XXXGenreScreen.xml" print path with open(path, "r") as f: self.skin = f.read() f.close() Screen.__init__(self, session) self["actions"] = ActionMap(["OkCancelActions", "ShortcutActions", "WizardActions", "ColorActions", "SetupActions", "NumberActions", "MenuActions", "EPGSelectActions"], { "ok" : self.keyOK, "cancel": self.keyCancel }, -1) self['title'] = Label("G-Stream.in") self['name'] = Label('Bitte warten...') self['coverArt'] = Pixmap() self.tw_agent_hlp = TwAgentHelper() self.keyLocked = True self.filmliste = [] self.chooseMenuList = MenuList([], enableWrapAround=True, content=eListboxPythonMultiContent) self.chooseMenuList.l.setFont(0, gFont('mediaportal', 23)) self.chooseMenuList.l.setItemHeight(25) self['genreList'] = self.chooseMenuList self.onLayoutFinish.append(self.loadPage)
def __init__(self, session, title, episode, url): self.serieUrl = url self.Title = title self.episode = episode MPScreen.__init__(self, session, skin='MP_PluginDescr') self["actions"] = ActionMap(["MP_Actions"], { "0": self.closeAll, "ok": self.keyOK, "cancel": self.keyCancel }, -1) self['title'] = Label("watchseries-online") self['leftContentTitle'] = Label(_("Stream Selection")) self['ContentTitle'] = Label(_("Stream Selection")) self['name'] = Label(self.Title) self.streamList = [] self.ml = MenuList([], enableWrapAround=True, content=eListboxPythonMultiContent) self['liste'] = self.ml self.keyLocked = True self.onLayoutFinish.append(self.loadPage) self.tw_agent_hlp = TwAgentHelper()
def getRedirectedUrl(): def getUrl(result, err=False): if not err: global redirected_url redirected_url = result tw_agent_hlp = TwAgentHelper(redir_agent=False) tw_agent_hlp.getRedirectedUrl(BASE_URL).addCallback(getUrl).addErrback(getUrl, True)
def __init__(self, session, filmUrl, filmName, imageLink): self.session = session self.filmUrl = filmUrl self.filmName = filmName self.imageUrl = imageLink self.plugin_path = mp_globals.pluginPath self.skin_path = mp_globals.pluginPath + "/skins" path = "%s/%s/defaultListScreen.xml" % (self.skin_path, config.mediaportal.skin.value) if not fileExists(path): path = self.skin_path + "/original/defaultListScreen.xml" print path with open(path, "r") as f: self.skin = f.read() f.close() Screen.__init__(self, session) self["actions"] = ActionMap( [ "OkCancelActions", "ShortcutActions", "EPGSelectActions", "WizardActions", "ColorActions", "NumberActions", "MenuActions", "MoviePlayerActions", "InfobarSeekActions" ], { "red": self.keyTxtPageUp, "blue": self.keyTxtPageDown, "green": self.keyTrailer, "ok": self.keyOK, "info": self.keyTMDbInfo, "cancel": self.keyCancel }, -1) self['title'] = Label(IS_Version) self['ContentTitle'] = Label("Stream Auswahl") self['coverArt'] = Pixmap() self['handlung'] = ScrollLabel("") self['name'] = Label(filmName) self['Page'] = Label("") self['page'] = Label("") self['F1'] = Label("Text-") self['F2'] = Label("") self['F3'] = Label("") self['F4'] = Label("Text+") self.trailerId = None self.tw_agent_hlp = TwAgentHelper() self.streamListe = [] self.streamMenuList = MenuList([], enableWrapAround=True, content=eListboxPythonMultiContent) self.streamMenuList.l.setFont(0, gFont('mediaportal', 24)) self.streamMenuList.l.setItemHeight(25) self['liste'] = self.streamMenuList self.keyLocked = True self.onLayoutFinish.append(self.loadPage)
def getRealdebrid(self, loop=False): self.agent = TwAgentHelper( headers={ 'User-Agent': 'E2 MediaPortal/%s' % self.mpversion, 'Content-Type': 'application/x-www-form-urlencoded', 'Authorization': 'Bearer %s' % self.raccesstoken }) if self.calltype == 'link': self.getLink(loop) elif self.calltype == 'user': self.getUserInfo(loop) else: self.closeall()
def __init__(self, session, phCatLink): self.session = session self.phCatLink = phCatLink path = "/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins/%s/XXXFilmScreen.xml" % config.mediaportal.skin.value if not fileExists(path): path = "/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins/original/XXXFilmScreen.xml" print path with open(path, "r") as f: self.skin = f.read() f.close() Screen.__init__(self, session) self["actions"] = ActionMap( [ "OkCancelActions", "ShortcutActions", "WizardActions", "ColorActions", "SetupActions", "NumberActions", "MenuActions", "EPGSelectActions" ], { "ok": self.keyOK, "cancel": self.keyCancel, "up": self.keyUp, "down": self.keyDown, "right": self.keyRight, "left": self.keyLeft, "nextBouquet": self.keyPageUp, "prevBouquet": self.keyPageDown, "green": self.keyPageNumber }, -1) self['title'] = Label("YouPorn.com") self['name'] = Label("Film Auswahl") self['views'] = Label("") self['runtime'] = Label("") self['page'] = Label("") self['coverArt'] = Pixmap() self.keyLocked = True self.page = 1 self.lastpage = 1 self.tw_agent_hlp = TwAgentHelper() self.tw_agent_hlp.headers.addRawHeader('Cookie', 'age_verified=1') self.filmliste = [] self.chooseMenuList = MenuList([], enableWrapAround=True, content=eListboxPythonMultiContent) self.chooseMenuList.l.setFont(0, gFont('mediaportal', 23)) self.chooseMenuList.l.setItemHeight(25) self['genreList'] = self.chooseMenuList self.onLayoutFinish.append(self.loadpage)
def __init__(self, session, Title, Hoster, Data): self.Title = Title self.Hoster = Hoster self.Data = Data self.plugin_path = mp_globals.pluginPath self.skin_path = mp_globals.pluginPath + mp_globals.skinsPath path = "%s/%s/defaultListScreen.xml" % (self.skin_path, config.mediaportal.skin.value) if not fileExists(path): path = self.skin_path + mp_globals.skinFallback + "/defaultListScreen.xml" with open(path, "r") as f: self.skin = f.read() f.close() MPScreen.__init__(self, session) self["actions"] = ActionMap(["MP_Actions"], { "ok" : self.keyOK, "0" : self.closeAll, "cancel": self.keyCancel }, -1) self['title'] = Label("alluc.to / Filter: %s" % config.mediaportal.alluc_country.value) self['ContentTitle'] = Label("Streamlist %s" %self.Title) self.keyLocked = True self.tw_agent_hlp = TwAgentHelper() self.filmliste = [] self.ml = MenuList([], enableWrapAround=True, content=eListboxPythonMultiContent) self['liste'] = self.ml self.onLayoutFinish.append(self.loadPage)
def __init__(self, session, streamFilmLink, streamName): self.streamFilmLink = streamFilmLink self.streamName = streamName self.plugin_path = mp_globals.pluginPath self.skin_path = mp_globals.pluginPath + mp_globals.skinsPath path = "%s/%s/defaultGenreScreen.xml" % (self.skin_path, config.mediaportal.skin.value) if not fileExists(path): path = self.skin_path + mp_globals.skinFallback + "/defaultGenreScreen.xml" with open(path, "r") as f: self.skin = f.read() f.close() MPScreen.__init__(self, session) self["actions"] = ActionMap(["MP_Actions"], { "ok" : self.keyOK, "0" : self.closeAll, "cancel": self.keyCancel }, -1) self['title'] = Label("MegaSkanks.com") self['name'] = Label(self.streamName) self['ContentTitle'] = Label("Streams:") self.tw_agent_hlp = TwAgentHelper(redir_agent=True) self.keyLocked = True self.filmliste = [] self.ml = MenuList([], enableWrapAround=True, content=eListboxPythonMultiContent) self['liste'] = self.ml self.onLayoutFinish.append(self.loadPage)
def __init__(self, session): self.plugin_path = mp_globals.pluginPath self.skin_path = mp_globals.pluginPath + mp_globals.skinsPath path = "%s/%s/defaultGenreScreen.xml" % (self.skin_path, config.mediaportal.skin.value) if not fileExists(path): path = self.skin_path + mp_globals.skinFallback + "/defaultGenreScreen.xml" with open(path, "r") as f: self.skin = f.read() f.close() MPScreen.__init__(self, session) self["actions"] = ActionMap( ["MP_Actions"], {"ok": self.keyOK, "0": self.closeAll, "cancel": self.keyCancel}, -1 ) self["title"] = Label(BASE_NAME) self["ContentTitle"] = Label("Genre:") self.keyLocked = True self.suchString = "" self.tw_agent_hlp = TwAgentHelper(followRedirect=True) self.filmliste = [] self.ml = MenuList([], enableWrapAround=True, content=eListboxPythonMultiContent) self["liste"] = self.ml self.onLayoutFinish.append(self.layoutFinished)
def __init__(self, session, url, name, which): self.url = url self.name = name self.which = which self.plugin_path = mp_globals.pluginPath self.skin_path = mp_globals.pluginPath + mp_globals.skinsPath path = "%s/%s/defaultGenreScreenCover.xml" % (self.skin_path, config.mediaportal.skin.value) if not fileExists(path): path = self.skin_path + mp_globals.skinFallback + "/defaultGenreScreenCover.xml" with open(path, "r") as f: self.skin = f.read() f.close() MPScreen.__init__(self, session) self["actions"] = ActionMap(["MP_Actions"], { "ok" : self.keyOK, "0" : self.closeAll, "cancel": self.keyCancel }, -1) self['title'] = Label(m4k) self['ContentTitle'] = Label(_("Stream Selection")) self.coverUrl = None self.base_url = m4k_url self.tw_agent_hlp = TwAgentHelper(redir_agent=True) self.keyLocked = True self.list = [] self.keckse = {} self.ml = MenuList([], enableWrapAround=True, content=eListboxPythonMultiContent) self['liste'] = self.ml self.onLayoutFinish.append(self.loadPage)
def __init__(self, session, title, episode, url): self.serieUrl = url self.Title = title self.episode = episode self.plugin_path = mp_globals.pluginPath self.skin_path = mp_globals.pluginPath + mp_globals.skinsPath path = "%s/%s/defaultListScreen.xml" % (self.skin_path, config.mediaportal.skin.value) if not fileExists(path): path = self.skin_path + mp_globals.skinFallback + "/defaultListScreen.xml" with open(path, "r") as f: self.skin = f.read() f.close() MPScreen.__init__(self, session) self["actions"] = ActionMap(["MP_Actions"], { "0" : self.closeAll, "ok" : self.keyOK, "cancel": self.keyCancel }, -1) self['title'] = Label("watchseries-online") self['leftContentTitle'] = Label(_("Stream Selection")) self['ContentTitle'] = Label(_("Stream Selection")) self['name'] = Label(self.Title) self.streamList = [] self.ml = MenuList([], enableWrapAround=True, content=eListboxPythonMultiContent) self['liste'] = self.ml self.keyLocked = True self.onLayoutFinish.append(self.loadPage) self.tw_agent_hlp = TwAgentHelper()
else: get_stream_link(self.session).check_link(url, self.got_link) def wtfisthis(self, data): url = re.search('<a href="(http://wtf-is-this.xyz/\?r=.*?)"', data, re.S) if url: url = url.group(1) self.tw_agent_hlp = TwAgentHelper()
def wtfisthis(self, data): url = re.search('<a href="(http://wtf-is-this.xyz/\?r=.*?)"', data, re.S) if url: url = url.group(1) self.tw_agent_hlp = TwAgentHelper() self.tw_agent_hlp.getRedirectedUrl(url).addCallback(self.wtfisthisdata).addErrback(self.dataError) else: self.adfly(data)
def keyOK(self): if self.keyLocked: return streamid = self['liste'].getCurrent()[0][1] if streamid == None: return url = "%s/en/out/%s" % (BASE_URL, streamid) self.tw_agent_hlp = TwAgentHelper() self.tw_agent_hlp.getRedirectedUrl(url).addCallback(self.test_streamLink).addErrback(self.dataError)
class MTVdeLink: tw_agent_hlp = TwAgentHelper() def __init__(self, session): print "MTVdeLink:" self.session = session self._callback = None def getLink(self, cb_play, cb_err, title, artist, token, imgurl): self._callback = cb_play self._errback = cb_err self.title = title self.artist = artist self.imgurl = imgurl #data = '' url = "http://api.mtvnn.com/v2/mrss?uri=mgid:sensei:video:mtvnn.com:music_video-%s-DE" % token """ try: data = urlopen2(url).read() except (URLError, HTTPException, socket.error), err: printl(err,self,"E") cb_err('MTVdeLink: Cannot get link!') """ self.tw_agent_hlp.getWebPage(self._parseData, cb_err, url, False) def _parseData(self, data): print "_parseData:" rtmpurl = re.search("<media:content.*?url='(.*?)'>", data) if rtmpurl: """ try: data = urlopen2(rtmpurl.group(1)).read() except (URLError, HTTPException, socket.error), err: printl(err,self,"E") """ self.tw_agent_hlp.getWebPage(self._parseData2, self._errback, rtmpurl.group(1), False) else: self._errback('MTVdeLink: Cannot get link!') def _parseData2(self, data): print "_parseData2:" rtmplink = re.findall('<src>(rtmp.*?)</src>', data) if rtmplink: videourl = rtmplink[ -1] + ' swfUrl=http://player.mtvnn.com/g2/g2player_2.1.4.swf swfVfy=1' else: #videourl = None self._errback('MTVdeLink: Cannot get link!') self._callback(self.title, videourl, imgurl=self.imgurl, artist=self.artist)
def getRealdebrid(self, loop=False): self.agent = TwAgentHelper(headers={'User-Agent': 'E2 MediaPortal/%s' % self.mpversion, 'Content-Type': 'application/x-www-form-urlencoded', 'Authorization': 'Bearer %s' % self.raccesstoken }) if self.calltype == 'link': self.getLink(loop) elif self.calltype == 'user': self.getUserInfo(loop) else: self.closeall()
def __init__(self, session, Link, Name): self.Link = Link self.Name = Name MPScreen.__init__(self, session, skin='MP_Plugin', default_cover=default_cover) ThumbsHelper.__init__(self) self["actions"] = ActionMap( ["MP_Actions"], { "ok": self.keyOK, "0": self.closeAll, "cancel": self.keyCancel, "5": self.keyShowThumb, "up": self.keyUp, "down": self.keyDown, "right": self.keyRight, "left": self.keyLeft, "nextBouquet": self.keyPageUp, "prevBouquet": self.keyPageDown, "green": self.keyPageNumber }, -1) self['title'] = Label("xpaja.net") self['ContentTitle'] = Label("Genre: %s" % self.Name) self['F2'] = Label(_("Page")) self['Page'] = Label(_("Page:")) self.keyLocked = True self.page = 1 self.lastpage = 1 self.tw_agent_hlp = TwAgentHelper() self.filmliste = [] self.ml = MenuList([], enableWrapAround=True, content=eListboxPythonMultiContent) self['liste'] = self.ml self.onLayoutFinish.append(self.loadPage)
def __init__(self, session, Link, Name): self.session = session self.Link = Link self.Name = Name self.plugin_path = mp_globals.pluginPath self.skin_path = mp_globals.pluginPath + "/skins" path = "%s/%s/defaultListScreen.xml" % (self.skin_path, config.mediaportal.skin.value) if not fileExists(path): path = self.skin_path + "/original/defaultListScreen.xml" with open(path, "r") as f: self.skin = f.read() f.close() Screen.__init__(self, session) self["actions"] = ActionMap(["OkCancelActions", "ShortcutActions", "WizardActions", "ColorActions", "SetupActions", "NumberActions", "MenuActions", "EPGSelectActions"], { "ok" : self.keyOK, "cancel": self.keyCancel, "up" : self.keyUp, "down" : self.keyDown, "right" : self.keyRight, "left" : self.keyLeft, "nextBouquet" : self.keyPageUp, "prevBouquet" : self.keyPageDown }, -1) self['title'] = Label("Arte Mediathek") self['ContentTitle'] = Label("Auswahl: %s" % self.Name) self['name'] = Label("") self['F1'] = Label("Exit") self['F2'] = Label("") self['F3'] = Label("") self['F4'] = Label("") self['F2'].hide() self['F3'].hide() self['F4'].hide() self['coverArt'] = Pixmap() self['Page'] = Label("Page: ") self['page'] = Label("") self['handlung'] = Label("") self.keyLocked = True self.filmliste = [] self.tw_agent_hlp = TwAgentHelper() self.chooseMenuList = MenuList([], enableWrapAround=True, content=eListboxPythonMultiContent) self.chooseMenuList.l.setFont(0, gFont('mediaportal', 23)) self.chooseMenuList.l.setItemHeight(25) self['liste'] = self.chooseMenuList self.page = 0 self.onLayoutFinish.append(self.loadPage)
def __init__(self, session, filmUrl, filmName, imageLink): self.session = session self.filmUrl = filmUrl self.filmName = filmName self.imageUrl = imageLink self.plugin_path = mp_globals.pluginPath self.skin_path = mp_globals.pluginPath + "/skins" path = "%s/%s/defaultListScreen.xml" % (self.skin_path, config.mediaportal.skin.value) if not fileExists(path): path = self.skin_path + "/original/defaultListScreen.xml" print path with open(path, "r") as f: self.skin = f.read() f.close() Screen.__init__(self, session) self["actions"] = ActionMap(["OkCancelActions", "ShortcutActions", "EPGSelectActions", "WizardActions", "ColorActions", "NumberActions", "MenuActions", "MoviePlayerActions", "InfobarSeekActions"], { "red" : self.keyTxtPageUp, "blue" : self.keyTxtPageDown, "green" : self.keyTrailer, "ok" : self.keyOK, "info" : self.keyTMDbInfo, "cancel" : self.keyCancel }, -1) self['title'] = Label(IS_Version) self['ContentTitle'] = Label("Stream Auswahl") self['coverArt'] = Pixmap() self['handlung'] = ScrollLabel("") self['name'] = Label(filmName) self['Page'] = Label("") self['page'] = Label("") self['F1'] = Label("Text-") self['F2'] = Label("") self['F3'] = Label("") self['F4'] = Label("Text+") self.trailerId = None self.tw_agent_hlp = TwAgentHelper() self.streamListe = [] self.streamMenuList = MenuList([], enableWrapAround=True, content=eListboxPythonMultiContent) self.streamMenuList.l.setFont(0, gFont('mediaportal', 24)) self.streamMenuList.l.setItemHeight(25) self['liste'] = self.streamMenuList self.keyLocked = True self.onLayoutFinish.append(self.loadPage)
def __init__(self, session, Link, Name, mode): self.mode = mode self.Link = Link self.Name = Name self.plugin_path = mp_globals.pluginPath self.skin_path = mp_globals.pluginPath + mp_globals.skinsPath path = "%s/%s/defaultListScreen.xml" % (self.skin_path, config.mediaportal.skin.value) if not fileExists(path): path = self.skin_path + mp_globals.skinFallback + "/defaultListScreen.xml" with open(path, "r") as f: self.skin = f.read() f.close() MPScreen.__init__(self, session) ThumbsHelper.__init__(self) self["actions"] = ActionMap(["MP_Actions"], { "ok" : self.keyOK, "0" : self.closeAll, "cancel" : self.keyCancel, "5" : self.keyShowThumb, "up" : self.keyUp, "down" : self.keyDown, "right" : self.keyRight, "left" : self.keyLeft, "nextBouquet" : self.keyPageUp, "prevBouquet" : self.keyPageDown, "green" : self.keyPageNumber }, -1) self['title'] = Label("GStream.to") self['ContentTitle'] = Label(self.Name) self['F2'] = Label(_("Page")) self['Page'] = Label(_("Page:")) self.keyLocked = True self.page = 1 self.lastpage = 1 self.tw_agent_hlp = TwAgentHelper(redir_agent=True) self.urlRedirected = '' self.filmliste = [] self.ml = MenuList([], enableWrapAround=True, content=eListboxPythonMultiContent) self['liste'] = self.ml self.onLayoutFinish.append(self.loadPage)
def __init__(self, session, Link, Name, Image, Handlung): self.Link = Link self.Name = Name self.image = Image self.handlung = Handlung MPScreen.__init__(self, session, skin='MP_PluginDescr') self["actions"] = ActionMap(["MP_Actions"], { "ok" : self.keyOK, "0": self.closeAll, "cancel": self.keyCancel, }, -1) self['title'] = Label("PrimeWire.ag") self['ContentTitle'] = Label("Streams: %s" % self.Name) self.tw_agent_hlp = TwAgentHelper() self.streamList = [] self.ml = MenuList([], enableWrapAround=True, content=eListboxPythonMultiContent) self['liste'] = self.ml self.keyLocked = True self.onLayoutFinish.append(self.loadPage)
class pornhiveStreamListeScreen(MPScreen): def __init__(self, session, streamFilmLink, streamName, streamImage): self.streamFilmLink = streamFilmLink self.streamName = streamName self.streamImage = streamImage self.plugin_path = mp_globals.pluginPath self.skin_path = mp_globals.pluginPath + mp_globals.skinsPath path = "%s/%s/defaultListWideScreen.xml" % (self.skin_path, config.mediaportal.skin.value) if not fileExists(path): path = self.skin_path + mp_globals.skinFallback + "/defaultListWideScreen.xml" with open(path, "r") as f: self.skin = f.read() f.close() MPScreen.__init__(self, session) self["actions"] = ActionMap(["MP_Actions"], { "ok" : self.keyOK, "0" : self.closeAll, "cancel": self.keyCancel }, -1) self['title'] = Label(BASE_NAME) self['ContentTitle'] = Label("Streams:") self['name'] = Label(_("Please wait...")) self.captchainfo = {} self.filmliste = [] self.ml = MenuList([], enableWrapAround=True, content=eListboxPythonMultiContent) self['liste'] = self.ml self.onLayoutFinish.append(self.loadPage) def loadPage(self): CoverHelper(self['coverArt']).getCover(self.streamImage) self.keyLocked = True self.filmliste = [] getPage(self.streamFilmLink).addCallback(self.loadPageData).addErrback(self.dataError) def loadPageData(self, data): streams = re.findall('data-id="(.*?)".*?Watch\sit\son\s+(.*?)"', data, re.S) if streams: for (streamid, hostername) in streams: if isSupportedHoster(hostername, True): self.filmliste.append((hostername, streamid)) if len(self.filmliste) == 0: self.filmliste.append((_("No supported streams found!"), None)) self.ml.setList(map(self._defaultlisthoster, self.filmliste)) self.keyLocked = False self['name'].setText(self.streamName) def keyOK(self): if self.keyLocked: return streamid = self['liste'].getCurrent()[0][1] if streamid == None: return url = "%s/en/out/%s" % (BASE_URL, streamid) self.tw_agent_hlp = TwAgentHelper() self.tw_agent_hlp.getRedirectedUrl(url).addCallback(self.test_streamLink).addErrback(self.dataError) def test_streamLink(self, url): if re.match(BASE_URL, url): getPage(url).addCallback(self.get_streamLink).addErrback(self.dataError) else: get_stream_link(self.session).check_link(url, self.got_link) def get_streamLink(self, data): streams = re.search('<iframe\ssrc="(.*?)"', data, re.S|re.I) if streams: get_stream_link(self.session).check_link(streams.group(1), self.got_link) else: message = self.session.open(MessageBoxExt, _("Broken URL parsing, please report to the developers."), MessageBoxExt.TYPE_INFO, timeout=3) def got_link(self, stream_url): self.session.open(SimplePlayer, [(self.streamName, stream_url, self.streamImage)], showPlaylist=False, ltype='pornhive', cover=True)
class rlstoGenreScreen(MPScreen): def __init__(self, session): self.plugin_path = mp_globals.pluginPath self.skin_path = mp_globals.pluginPath + mp_globals.skinsPath path = "%s/%s/defaultGenreScreen.xml" % (self.skin_path, config.mediaportal.skin.value) if not fileExists(path): path = self.skin_path + mp_globals.skinFallback + "/defaultGenreScreen.xml" with open(path, "r") as f: self.skin = f.read() f.close() MPScreen.__init__(self, session) self["actions"] = ActionMap( ["MP_Actions"], {"ok": self.keyOK, "0": self.closeAll, "cancel": self.keyCancel}, -1 ) self["title"] = Label(BASE_NAME) self["ContentTitle"] = Label("Genre:") self.keyLocked = True self.suchString = "" self.tw_agent_hlp = TwAgentHelper(followRedirect=True) self.filmliste = [] self.ml = MenuList([], enableWrapAround=True, content=eListboxPythonMultiContent) self["liste"] = self.ml self.onLayoutFinish.append(self.layoutFinished) def layoutFinished(self): url = "http://rls.to/a" self.tw_agent_hlp.getWebPage(url).addCallback(self.parseData).addErrback(self.dataError) def parseData(self, data): parse = re.search('class="right">(.*?)</ul>', data, re.S) raw = re.findall('class="menu-item.*?href="(.*?)">(.*?)</a>', parse.group(1), re.S) if raw: for (Url, Title) in raw: self.filmliste.append((decodeHtml(Title), Url)) self.filmliste.insert(0, ("--- Search ---", None)) self.ml.setList(map(self._defaultlistcenter, self.filmliste)) self.keyLocked = False def SuchenCallback(self, callback=None, entry=None): if callback is not None and len(callback): self.suchString = callback.replace(" ", "+") Name = "--- Search ---" Link = self.suchString self.session.open(rlstoListScreen, Link, Name) def keyOK(self): if self.keyLocked: return if not config.mediaportal.premiumize_use.value and not config.mediaportal.realdebrid_use.value: message = self.session.open( MessageBoxExt, _("%s only works with enabled MP premiumize.me or Real-Debrid.com option (MP Setup)!" % BASE_NAME), MessageBoxExt.TYPE_INFO, timeout=10, ) return Name = self["liste"].getCurrent()[0][0] Link = self["liste"].getCurrent()[0][1] if Name == "--- Search ---": self.suchen() else: self.session.open(rlstoListScreen, Link, Name)
class gstreaminxxxStreamListeScreen(MPScreen): def __init__(self, session, streamFilmLink, streamName, cover): self.streamFilmLink = streamFilmLink self.streamName = streamName self.cover = cover self.plugin_path = mp_globals.pluginPath self.skin_path = mp_globals.pluginPath + mp_globals.skinsPath path = "%s/%s/defaultListScreen.xml" % (self.skin_path, config.mediaportal.skin.value) if not fileExists(path): path = self.skin_path + mp_globals.skinFallback + "/defaultListScreen.xml" with open(path, "r") as f: self.skin = f.read() f.close() MPScreen.__init__(self, session) self["actions"] = ActionMap(["MP_Actions"], { "ok" : self.keyOK, "0" : self.closeAll, "cancel": self.keyCancel }, -1) self['title'] = Label("GStream.to") self['ContentTitle'] = Label(_("Stream Selection")) self['name'] = Label(self.streamName) self.tw_agent_hlp = TwAgentHelper() self.keyLocked = True self.filmliste = [] self.ml = MenuList([], enableWrapAround=True, content=eListboxPythonMultiContent) self['liste'] = self.ml self.onLayoutFinish.append(self.loadPage) def loadPage(self): CoverHelper(self['coverArt']).getCover(self.cover) self['name'].setText(_('Please wait...')) twAgentGetPage(self.streamFilmLink, agent=special_headers, headers={'Cookie': 'sitechrx='+sitechrx+'; overkill_in='+str(time())}).addCallback(self.loadPageData).addErrback(self.dataError) def loadPageData(self, data): raw = re.search('<table\sid="post[0-9]+"(.*?)id="post_thanks_box', data, re.S) raw = re.sub(r'<!-- 1<script type="text/javascript">jwplayer.key.*?</script>1 -->', "", raw.group(1)) streams = re.findall('href="(http://(?!gstream\.to/(mirror|img|images)/)(?!www.youtube.com)(?!www.filefactory)(gstream\.to/secure/|)(.*?)\/.*?)[\'|"|\&|<]', raw, re.S) if streams: for (stream, dummy, dummy2, hostername) in streams: if isSupportedHoster(hostername, True): hostername = hostername.replace('www.','').replace('embed.','') self.filmliste.append((hostername, stream)) # remove duplicates self.filmliste = list(set(self.filmliste)) if len(self.filmliste) == 0: self.filmliste.append((_('No supported streams found!'), None)) self.ml.setList(map(self._defaultlisthoster, self.filmliste)) self['name'].setText(self.streamName) self.keyLocked = False def keyOK(self): if self.keyLocked: return url = self['liste'].getCurrent()[0][1] if url == None: return url = url.replace('&','&') self['name'].setText(_('Please wait...')) if re.match('.*?gstream.to/secure/', url, re.S|re.I): print 'Secured Play' self.tw_agent_hlp.headers.addRawHeader('Referer','http://gstream.to/') self.tw_agent_hlp.getRedirectedUrl(url).addCallback(self.get_stream).addErrback(self.dataError) else: print 'Direct Play' self.get_stream(url) def get_stream(self,url): get_stream_link(self.session).check_link(url, self.got_link) def got_link(self, stream_url): self['name'].setText(self.streamName) if stream_url == None: message = self.session.open(MessageBoxExt, _("Stream not found, try another Stream Hoster."), MessageBoxExt.TYPE_INFO, timeout=3) else: self.session.open(SimplePlayer, [(self.streamName, stream_url)], showPlaylist=False, ltype='gstreaminxxx')
class realdebrid_oauth2(Screen): def __init__(self, session, link, calltype='link'): self.link = link self.calltype = calltype self.raccesstoken = config_mp.mediaportal.realdebrid_accesstoken.value self.rrefreshtoken = config_mp.mediaportal.realdebrid_refreshtoken.value self.rclient_id = config_mp.mediaportal.realdebrid_rclient_id.value self.rclient_secret = config_mp.mediaportal.realdebrid_rclient_secret.value self.rAPPid = "2BKDBPNPA4D3U" self.rdevicecode = '' self.mpversion = config_mp.mediaportal.version.value self.agent = None Screen.__init__(self, session) self.onLayoutFinish.append(self.getRealdebrid) def getRealdebrid(self, loop=False): self.agent = TwAgentHelper( headers={ 'User-Agent': 'E2 MediaPortal/%s' % self.mpversion, 'Content-Type': 'application/x-www-form-urlencoded', 'Authorization': 'Bearer %s' % self.raccesstoken }) if self.calltype == 'link': self.getLink(loop) elif self.calltype == 'user': self.getUserInfo(loop) else: self.closeall() def getUserInfo(self, loop=False): if self.raccesstoken: url = "https://api.real-debrid.com/rest/1.0/user" self.agent.getWebPage(url).addCallback( self.getUserInfoData, loop).addErrback(self.getTokenError, loop).addErrback(self.noerrorload) else: url = 'https://api.real-debrid.com/oauth/v2/device/code?client_id=%s&new_credentials=yes' % self.rAPPid self.agent.getWebPage(url).addCallback(self.getAuth).addErrback( self.codeerror, 'getAuth code error') def getUserInfoData(self, data, loop): try: result = json.loads(data) except: self.session.open(MessageBoxExt, _("Real-Debrid: Error getting Userdata!"), MessageBoxExt.TYPE_INFO, timeout=5) self.closeall() else: if not 'error' in result: pmsg = "Real-Debrid.com" if 'username' in result: pmsg += "\nUser:\t%s" % str(result['username']) if 'type' in result: pmsg += "\nType:\t%s" % str(result['type']) if 'expiration' in result: pmsg += "\nExpires: \t%s" % str( result['expiration']).replace('T', ' ').replace( '.000Z', '') url = "https://api.real-debrid.com/rest/1.0/traffic" self.agent.getWebPage(url).addCallback( self.getUserTrafficData, pmsg).addErrback(self.noerrorload) else: if not loop and result['error_code'] == 8: self.getRefreshToken() else: self.errorResult(result) def getUserTrafficData(self, data, pmsg=None): try: result = json.loads(data) except: self.session.open(MessageBoxExt, _("Real-Debrid: Error getting Userdata!"), MessageBoxExt.TYPE_INFO, timeout=3) self.closeall() else: if not 'error' in result: pmsg += "\nLimits:" for item in result: if 'type' in result[item] and item != 'remote': limittype = str(result[item]['type']) pmsg += "\n%s\t" % str(item) if limittype == 'links': if 'links' in result[item]: pmsg += "Used: %s links" % str( result[item]['links']) if 'limit' in result[item]: pmsg += "\tLimit: %s links" % str( result[item]['limit']) if 'reset' in result[item]: pmsg += "/%s" % str(result[item]['reset']) if limittype == 'gigabytes': if 'bytes' in result[item]: pmsg += "Used: %s MB" % str( result[item]['bytes'] / 1024 / 1024) if 'left' in result[item]: pmsg += " \tLimit: %s GB" % str( result[item]['left'] / 1024 / 1024 / 1024) if 'reset' in result[item]: pmsg += "/%s" % str(result[item]['reset']) self.session.open(MessageBoxExt, pmsg, MessageBoxExt.TYPE_INFO) self.closeall() else: self.session.open(MessageBoxExt, pmsg, MessageBoxExt.TYPE_INFO, timeout=10) self.errorResult(result) def errorResult(self, result): if 'error_code' in result: if result['error_code'] == 8: self.session.openWithCallback( self.removetokens, MessageBoxExt, _("Real-Debrid: Error %s. Do you want to remove AuthToken and AccessToken?" % str(result['error'])), MessageBoxExt.TYPE_YESNO) else: self.session.open( MessageBoxExt, _("Real-Debrid: Error %s" % str(result['error'])), MessageBoxExt.TYPE_INFO) self.closeall() else: self.closeall() def removetokens(self, answer): if answer is True: self.session.open( MessageBoxExt, _("Real-Debrid: AuthToken and AccessToken removed!"), MessageBoxExt.TYPE_INFO, timeout=5) config_mp.mediaportal.realdebrid_accesstoken.value = '' config_mp.mediaportal.realdebrid_accesstoken.save() self.raccesstoken = '' config_mp.mediaportal.realdebrid_refreshtoken.value = '' config_mp.mediaportal.realdebrid_refreshtoken.save() self.closeall() def getLink(self, loop=False): if self.raccesstoken: url = "https://api.real-debrid.com/rest/1.0/unrestrict/link" post = {'link': self.link} self.agent.getWebPage(url, method='POST', postdata=urlencode(post)).addCallback( self.getLinkData, loop).addErrback( self.getTokenError, loop).addErrback(self.noerrorload) else: url = 'https://api.real-debrid.com/oauth/v2/device/code?client_id=%s&new_credentials=yes' % self.rAPPid self.agent.getWebPage(url).addCallback(self.getAuth).addErrback( self.codeerror, 'getAuth code error') def getAuth(self, data): result = json.loads(data) self.rdevicecode = str(result['device_code']) verification_url = str(result['verification_url']) user_code = str(result['user_code']) self.session.openWithCallback( self.getAuthId, MessageBoxExt, _("Real-Debrid Authentication:\nTake a Browser and go to %(verification_url)s\nand enter the following code %(user_code)s.\nWhen done, press YES" % { 'verification_url': verification_url, 'user_code': user_code }), MessageBoxExt.TYPE_YESNO, timeout=600) def getAuthId(self, answer, loopcount=0): if answer is True: url = 'https://api.real-debrid.com/oauth/v2/device/credentials?client_id=%s&code=%s' % ( self.rAPPid, self.rdevicecode) self.agent.getWebPage(url).addCallback( self.getAuthIdData, loopcount).addErrback(self.getAuthIdDataError, loopcount).addErrback(self.codeerror) else: self.session.open(MessageBoxExt, _("Real-Debrid: Authentication aborted!"), MessageBoxExt.TYPE_INFO, timeout=3) self.closeall() def getAuthIdDataError(self, error, loopcount=0): loopcount += 1 self.session.open(MessageBoxExt, _("Real-Debrid: Retry %s/6 to get authentication" % str(loopcount)), MessageBoxExt.TYPE_INFO, timeout=5) reactor.callLater(5, self.getAuthId, True, loopcount) raise error def getAuthIdData(self, data, loopcount=0): try: result = json.loads(data) except: result['error'] self.closeall() else: if not 'error' in result: url = 'https://api.real-debrid.com/oauth/v2/token' self.rclient_id = str(result['client_id']) self.rclient_secret = str(result['client_secret']) config_mp.mediaportal.realdebrid_rclient_id.value = self.rclient_id config_mp.mediaportal.realdebrid_rclient_id.save() config_mp.mediaportal.realdebrid_rclient_secret.value = self.rclient_secret config_mp.mediaportal.realdebrid_rclient_secret.save() post = { 'client_id': self.rclient_id, 'client_secret': self.rclient_secret, 'code': self.rdevicecode, 'grant_type': 'http://oauth.net/grant_type/device/1.0' } self.agent.getWebPage(url, method='POST', postdata=urlencode(post)).addCallback( self.getAuthIdDataToken).addErrback( self.noerrorload ) #.addErrback(self.rapiaccesstoken) else: if loopcount < 6: loopcount += 1 reactor.callLater(5, self.getAuthIdm, True, loopcount) else: self.session.open(MessageBoxExt, _("Real-Debrid: Error %s" % str(result['error'])), MessageBoxExt.TYPE_INFO, timeout=5) self.closeall() def getAuthIdDataToken(self, data): try: result = json.loads(data) except: self.session.open( MessageBoxExt, _("Real-Debrid: Error getting AuthIdDataToken! Please try again." ), MessageBoxExt.TYPE_INFO, timeout=3) else: self.raccesstoken = str(result['access_token']) self.rrefreshtoken = str(result['refresh_token']) config_mp.mediaportal.realdebrid_accesstoken.value = self.raccesstoken config_mp.mediaportal.realdebrid_accesstoken.save() config_mp.mediaportal.realdebrid_refreshtoken.value = self.rrefreshtoken config_mp.mediaportal.realdebrid_refreshtoken.save() self.getRealdebrid(True) def getLinkData(self, data, loop): try: result = json.loads(data) except: self.session.open(MessageBoxExt, _("Real-Debrid: Error getting token!"), MessageBoxExt.TYPE_INFO, timeout=3) self.closeall() else: if not 'error' in result: if 'download' in result: downloadlink = str(result['download']) else: downloadlink = self.link self.closeall(downloadlink) else: if not loop and result['error_code'] == 8: self.getRefreshToken() else: self.errorResult(result) def getTokenError(self, error, loop): if not loop and error.value.status == '401': self.getRefreshToken() else: if error.value.status == '503': self.session.open( MessageBoxExt, _("Real-Debrid: Generation failed (dead link, limit reached, too many downloads, hoster not supported, ip not allowed)." ), MessageBoxExt.TYPE_INFO, timeout=5) self.closeall() elif error.value.status == '401': self.session.open( MessageBoxExt, _("Real-Debrid: Bad token (expired, invalid)."), MessageBoxExt.TYPE_INFO, timeout=5) config_mp.mediaportal.realdebrid_accesstoken.value = '' config_mp.mediaportal.realdebrid_accesstoken.save() self.closeall() elif error.value.status == '403': self.session.open( MessageBoxExt, _("Real-Debrid: Permission denied (or account locked). Check the account status!" ), MessageBoxExt.TYPE_INFO, timeout=5) self.closeall() else: self.codeerror(error) def getRefreshToken(self): url = 'https://api.real-debrid.com/oauth/v2/token' post = { 'client_id': self.rclient_id, 'client_secret': self.rclient_secret, 'code': self.rrefreshtoken, 'grant_type': 'http://oauth.net/grant_type/device/1.0' } self.agent.getWebPage( url, method='POST', postdata=urlencode(post)).addCallback( self.getRefreshTokenData).addErrback(self.codeerror) def getRefreshTokenData(self, data): try: result = json.loads(data) except: config_mp.mediaportal.realdebrid_accesstoken.value = '' config_mp.mediaportal.realdebrid_accesstoken.save() self.codeerror('Realdebrid broken RefreshToken') if result.has_key('error_code') and result['error_code'] == 9: config_mp.mediaportal.realdebrid_accesstoken.value = '' config_mp.mediaportal.realdebrid_accesstoken.save() self.codeerror('Realdebrid broken RefreshToken') else: self.raccesstoken = str(result['access_token']) self.rrefreshtoken = str(result['refresh_token']) config_mp.mediaportal.realdebrid_accesstoken.value = self.raccesstoken config_mp.mediaportal.realdebrid_accesstoken.save() config_mp.mediaportal.realdebrid_refreshtoken.value = self.rrefreshtoken config_mp.mediaportal.realdebrid_refreshtoken.save() self.getRealdebrid(True) def closeall(self, downloadlink=None): self.close(downloadlink, self.link) def noerrorload(self, error): printl('[streams]: ' + str(error), '', 'E') def codeerror(self, error): printl('[streams]: ' + str(error), '', 'E') message = self.session.open( MessageBoxExt, _("Real-Debrid: Broken authentication, please report to the developers." ), MessageBoxExt.TYPE_INFO, timeout=5) self.closeall()
Link = self['liste'].getCurrent()[0][1] self.session.open(youpornFilmScreen, Link, Name) class youpornFilmScreen(MPScreen, ThumbsHelper): def __init__(self, session, Link, Name): self.Link = Link self.Name = Name self.plugin_path = mp_globals.pluginPath self.skin_path = mp_globals.pluginPath + mp_globals.skinsPath path = "%s/%s/defaultListWideScreen.xml" % (self.skin_path, config.mediaportal.skin.value) if not fileExists(path): path = self.skin_path + mp_globals.skinFallback + "/defaultListWideScreen.xml" with open(path, "r") as f: self.skin = f.read() f.close() MPScreen.__init__(self, session) ThumbsHelper.__init__(self) self["actions"] = ActionMap(["MP_Actions"], { "ok" : self.keyOK, "0" : self.closeAll, "cancel" : self.keyCancel, "5" : self.keyShowThumb, "up" : self.keyUp, "down" : self.keyDown, "right" : self.keyRight, "left" : self.keyLeft, "nextBouquet" : self.keyPageUp, "prevBouquet" : self.keyPageDown, "green" : self.keyPageNumber }, -1) self['title'] = Label("YouPorn.com") self['ContentTitle'] = Label("Genre: %s" % self.Name) self['F2'] = Label(_("Page")) self['Page'] = Label(_("Page:")) self.keyLocked = True self.page = 1 self.lastpage = 1 self.tw_agent_hlp = TwAgentHelper(redir_agent=True) self.tw_agent_hlp.headers.addRawHeader('Cookie','age_verified=1') self.filmliste = [] self.ml = MenuList([], enableWrapAround=True, content=eListboxPythonMultiContent) self['liste'] = self.ml self.onLayoutFinish.append(self.loadPage) def loadPage(self): self.keyLocked = True self['name'].setText(_('Please wait...')) self.filmliste = [] url = "%s%s" % (self.Link, str(self.page)) self.tw_agent_hlp.getWebPage(url).addCallback(self.loadData).addErrback(self.dataError) def loadData(self, data): self.getLastPage(data, 'id="pagination">(.*?)</nav>') parse = re.search('Sub menu dropdown.*?/Sub menu dropdown(.*?)Our Friends', data, re.S) if not parse: parse = re.search('Sub menu dropdown.*?/Sub menu dropdown(.*?)pagination', data, re.S) if parse: Movies = re.findall('class="videoBox.*?<a\shref="(.*?)">.*?<img\ssrc=".*?"\salt="(.*?)".*?data-thumbnail="(.*?)".*?class="duration">(.*?)</span>.*?class="rating\sup"><i>(.*?)</i>', parse.group(1), re.S) if Movies: for (Url, Title, Image, Runtime, Rating) in Movies: Url = Url.replace("&","&") self.filmliste.append((decodeHtml(Title), Url, Image, Runtime, Rating)) if len(self.filmliste) == 0: self.filmliste.append(('Keine Filme gefunden.', '', None, '', '')) self.ml.setList(map(self._defaultlistleft, self.filmliste)) self.ml.moveToIndex(0) self.keyLocked = False self.th_ThumbsQuery(self.filmliste, 0, 1, 2, None, None, self.page, self.lastpage, mode=1) self.showInfos() def showInfos(self): title = self['liste'].getCurrent()[0][0] pic = self['liste'].getCurrent()[0][2] runtime = self['liste'].getCurrent()[0][3] rating = self['liste'].getCurrent()[0][4] self['name'].setText(title) self['handlung'].setText("Runtime: %s\nRating: %s" % (runtime, rating)) CoverHelper(self['coverArt']).getCover(pic) def keyOK(self): if self.keyLocked: return Link = 'http://www.youporn.com' + self['liste'].getCurrent()[0][1] self.keyLocked = True getPage(Link, headers={'Cookie': 'age_verified=1', 'Content-Type':'application/x-www-form-urlencoded'}).addCallback(self.getVideoPage).addErrback(self.dataError) def getVideoPage(self, data): videoPage = None Title = self['liste'].getCurrent()[0][0] encrypted_links = re.findall(r'encryptedQuality720URL\s=\s\'([a-zA-Z0-9+/]+={0,2})\',', data) for encrypted_link in encrypted_links: videoPage = aes_decrypt_text(encrypted_link, Title, 32) if videoPage: Title = '%s_720p' % Title else: videoPage = re.findall('videoSrc\s=\s\'(.*?)\',', data, re.S) if videoPage:
def __init__(self, session, genreLink, genreName): self.session = session self.genreLink = genreLink self.genreName = genreName self.plugin_path = mp_globals.pluginPath self.skin_path = mp_globals.pluginPath + "/skins" path = "%s/%s/defaultListScreen.xml" % (self.skin_path, config.mediaportal.skin.value) if not fileExists(path): path = self.skin_path + "/original/defaultListScreen.xml" print path with open(path, "r") as f: self.skin = f.read() f.close() Screen.__init__(self, session) self["actions"] = ActionMap( [ "OkCancelActions", "ShortcutActions", "ColorActions", "SetupActions", "NumberActions", "MenuActions", "EPGSelectActions", "DirectionActions", ], { "ok": self.keyOK, "cancel": self.keyCancel, "up": self.keyUp, "down": self.keyDown, "right": self.keyRight, "left": self.keyLeft, "upUp": self.key_repeatedUp, "rightUp": self.key_repeatedUp, "leftUp": self.key_repeatedUp, "downUp": self.key_repeatedUp, "upRepeated": self.keyUpRepeated, "downRepeated": self.keyDownRepeated, "rightRepeated": self.keyRightRepeated, "leftRepeated": self.keyLeftRepeated, "nextBouquet": self.keyPageUp, "prevBouquet": self.keyPageDown, "1": self.key_1, "3": self.key_3, "4": self.key_4, "6": self.key_6, "7": self.key_7, "9": self.key_9, "yellow": self.keySort, "red": self.keyTxtPageUp, "blue": self.keyTxtPageDown, "info": self.keyTMDbInfo, }, -1, ) self.sortOrder = 0 self.sortParStr = ["", "?orderby=title&order=ASC", "?imdb_rating=desc"] self.genreTitle = "Filme in Genre " self.sortOrderStr = [" - Sortierung neuste", " - Sortierung A-Z", " - Sortierung IMDb"] self.sortOrderStrGenre = "" self["title"] = Label(IS_Version) self["ContentTitle"] = Label("") self["name"] = Label("") self["handlung"] = ScrollLabel("") self["coverArt"] = Pixmap() self["Page"] = Label("Page") self["page"] = Label("") self["F1"] = Label("Text-") self["F2"] = Label("") self["F3"] = Label("Sortierung") self["F4"] = Label("Text+") self.tw_agent_hlp = TwAgentHelper() self.timerStart = False self.seekTimerRun = False self.eventL = threading.Event() self.eventH = threading.Event() self.eventP = threading.Event() self.filmQ = Queue.Queue(0) self.hanQ = Queue.Queue(0) self.picQ = Queue.Queue(0) self.updateP = 0 self.keyLocked = True self.filmListe = [] self.keckse = {} self.page = 0 self.pages = 0 self.neueFilme = re.match(".*?Neue Filme", self.genreName) self.sucheFilme = re.match(".*?Videosuche", self.genreName) self.setGenreStrTitle() self.chooseMenuList = MenuList([], enableWrapAround=True, content=eListboxPythonMultiContent) self.chooseMenuList.l.setFont(0, gFont("mediaportal", 23)) self.chooseMenuList.l.setItemHeight(25) self["liste"] = self.chooseMenuList self.onLayoutFinish.append(self.loadPage)
class youpornFilmScreen(Screen): def __init__(self, session, phCatLink): self.session = session self.phCatLink = phCatLink path = "/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins/%s/XXXFilmScreen.xml" % config.mediaportal.skin.value if not fileExists(path): path = "/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins/original/XXXFilmScreen.xml" print path with open(path, "r") as f: self.skin = f.read() f.close() Screen.__init__(self, session) self["actions"] = ActionMap( [ "OkCancelActions", "ShortcutActions", "WizardActions", "ColorActions", "SetupActions", "NumberActions", "MenuActions", "EPGSelectActions" ], { "ok": self.keyOK, "cancel": self.keyCancel, "up": self.keyUp, "down": self.keyDown, "right": self.keyRight, "left": self.keyLeft, "nextBouquet": self.keyPageUp, "prevBouquet": self.keyPageDown, "green": self.keyPageNumber }, -1) self['title'] = Label("YouPorn.com") self['name'] = Label("Film Auswahl") self['views'] = Label("") self['runtime'] = Label("") self['page'] = Label("") self['coverArt'] = Pixmap() self.keyLocked = True self.page = 1 self.lastpage = 1 self.tw_agent_hlp = TwAgentHelper() self.tw_agent_hlp.headers.addRawHeader('Cookie', 'age_verified=1') self.filmliste = [] self.chooseMenuList = MenuList([], enableWrapAround=True, content=eListboxPythonMultiContent) self.chooseMenuList.l.setFont(0, gFont('mediaportal', 23)) self.chooseMenuList.l.setItemHeight(25) self['genreList'] = self.chooseMenuList self.onLayoutFinish.append(self.loadpage) def loadpage(self): self.keyLocked = True self['name'].setText('Bitte warten...') self.filmliste = [] url = "%s%s" % (self.phCatLink, str(self.page)) print url #getPage(url, headers={'Cookie': 'age_verified=1', 'Content-Type':'application/x-www-form-urlencoded'}).addCallback(self.loadData).addErrback(self.dataError) self.tw_agent_hlp.getWebPage(self.loadData, self.dataError, url, False) def loadData(self, data): lastpparse = re.search('id="pagination">(.*)</nav>', data, re.S) lastp = re.search('<li>.*">(.*?[0-9])<.*/li>', lastpparse.group(1), re.S) if lastp: lastp = lastp.group(1) print lastp self.lastpage = int(lastp) else: self.lastpage = 1 self['page'].setText(str(self.page) + ' / ' + str(self.lastpage)) parse = re.search( 'Sub menu dropdown.*?/Sub menu dropdown(.*?)Our Friends', data, re.S) if not parse: parse = re.search( 'Sub menu dropdown.*?/Sub menu dropdown(.*?)pagination', data, re.S) phMovies = re.findall( 'class="wrapping-video-box">.*?<a\shref="(.*?)">.*?<img\ssrc="(.*?)\?.*?"\salt="(.*?)".*?class="duration">(.*?)<span>length.*?class="views">(.*?)\s<span>views', parse.group(1), re.S) if phMovies: for (phUrl, phImage, phTitle, phRuntime, phViews) in phMovies: phUrl = phUrl.replace("&", "&") self.filmliste.append( (decodeHtml(phTitle), phUrl, phImage, phRuntime, phViews)) self.chooseMenuList.setList( map(youpornFilmListEntry, self.filmliste)) self.chooseMenuList.moveToIndex(0) self.keyLocked = False self.showInfos() def dataError(self, error): printl(error, self, "E") def showInfos(self): phTitle = self['genreList'].getCurrent()[0][0] phImage = self['genreList'].getCurrent()[0][2] phRuntime = self['genreList'].getCurrent()[0][3] phViews = self['genreList'].getCurrent()[0][4] self['name'].setText(phTitle) self['runtime'].setText(phRuntime) self['views'].setText(phViews) CoverHelper(self['coverArt']).getCover(phImage) def keyPageNumber(self): self.session.openWithCallback(self.callbackkeyPageNumber, VirtualKeyBoard, title=(_("Seitennummer eingeben")), text=str(self.page)) def callbackkeyPageNumber(self, answer): if answer is not None: answer = re.findall('\d+', answer) else: return if answer: if int(answer[0]) < self.lastpage + 1: self.page = int(answer[0]) self.loadpage() else: self.page = self.lastpage self.loadpage() def keyPageDown(self): print "PageDown" if self.keyLocked: return if not self.page < 2: self.page -= 1 self.loadpage() def keyPageUp(self): print "PageUP" if self.keyLocked: return if self.page < self.lastpage: self.page += 1 self.loadpage() def keyLeft(self): if self.keyLocked: return self['genreList'].pageUp() self.showInfos() def keyRight(self): if self.keyLocked: return self['genreList'].pageDown() self.showInfos() def keyUp(self): if self.keyLocked: return self['genreList'].up() self.showInfos() def keyDown(self): if self.keyLocked: return self['genreList'].down() self.showInfos() def keyOK(self): if self.keyLocked: return phTitle = self['genreList'].getCurrent()[0][0] phLink = 'http://www.youporn.com' + self['genreList'].getCurrent( )[0][1] self.keyLocked = True getPage(phLink, headers={ 'Cookie': 'age_verified=1', 'Content-Type': 'application/x-www-form-urlencoded' }).addCallback(self.getVideoPage).addErrback(self.dataError) def getVideoPage(self, data): videoPage = re.findall('video.src\s=\s\'(.*?)\';', data, re.S) if videoPage: for (phurl) in videoPage: url = '%s' % (phurl) videos = urllib.unquote(url) videos = videos.replace('&', '&') self.keyLocked = False self.play(videos) def play(self, file): xxxtitle = self['genreList'].getCurrent()[0][0] self.session.open(SimplePlayer, [(xxxtitle, file)], showPlaylist=False, ltype='youporn') def keyCancel(self): self.close()
class arteSecondScreen(Screen): def __init__(self, session, Link, Name): self.session = session self.Link = Link self.Name = Name self.plugin_path = mp_globals.pluginPath self.skin_path = mp_globals.pluginPath + "/skins" path = "%s/%s/defaultListScreen.xml" % (self.skin_path, config.mediaportal.skin.value) if not fileExists(path): path = self.skin_path + "/original/defaultListScreen.xml" with open(path, "r") as f: self.skin = f.read() f.close() Screen.__init__(self, session) self["actions"] = ActionMap(["OkCancelActions", "ShortcutActions", "WizardActions", "ColorActions", "SetupActions", "NumberActions", "MenuActions", "EPGSelectActions"], { "ok" : self.keyOK, "cancel": self.keyCancel, "up" : self.keyUp, "down" : self.keyDown, "right" : self.keyRight, "left" : self.keyLeft, "nextBouquet" : self.keyPageUp, "prevBouquet" : self.keyPageDown }, -1) self['title'] = Label("Arte Mediathek") self['ContentTitle'] = Label("Auswahl: %s" % self.Name) self['name'] = Label("") self['F1'] = Label("Exit") self['F2'] = Label("") self['F3'] = Label("") self['F4'] = Label("") self['F2'].hide() self['F3'].hide() self['F4'].hide() self['coverArt'] = Pixmap() self['Page'] = Label("Page: ") self['page'] = Label("") self['handlung'] = Label("") self.keyLocked = True self.filmliste = [] self.tw_agent_hlp = TwAgentHelper() self.chooseMenuList = MenuList([], enableWrapAround=True, content=eListboxPythonMultiContent) self.chooseMenuList.l.setFont(0, gFont('mediaportal', 23)) self.chooseMenuList.l.setItemHeight(25) self['liste'] = self.chooseMenuList self.page = 0 self.onLayoutFinish.append(self.loadPage) def loadPage(self): getPage(self.Link, headers={'Content-Type':'application/x-www-form-urlencoded'}).addCallback(self.parseData).addErrback(self.dataError) def parseData(self, data): videos = re.findall('<div class="video">.*?<a href="(.*?)"><img alt=.*?" class=.*?" width=.*?" height=.*?" src="(.*?)".*?<p class="teaserText">(.*?)</p>.*?<h2><a href=".*?">(.*?)</a></h2>.*?<p>(.*?)</p>', data, re.S) if videos: self.filmliste = [] for (link, image, handlung, title, datum) in videos: title = "%s - %s" % (datum ,decodeHtml(title)) link = "http://videos.arte.tv%s" % link image = "http://videos.arte.tv%s" % image self.filmliste.append((title, link, image, handlung)) self.chooseMenuList.setList(map(arteEntry1, self.filmliste)) self.keyLocked = False self.showInfos() def dataError(self, error): printl(error,self,"E") def showInfos(self): self.ImageUrl = self['liste'].getCurrent()[0][2] handlung = self['liste'].getCurrent()[0][3] self['handlung'].setText(decodeHtml(handlung)) CoverHelper(self['coverArt']).getCover(self.ImageUrl) def keyPageDown(self): print "PageDown" if self.keyLocked: return if not self.page < 1: self.page -= 1 self.loadPage() def keyPageUp(self): print "PageUP" if self.keyLocked: return self.page += 1 self.loadPage() def keyLeft(self): if self.keyLocked: return self['liste'].pageUp() self.showInfos() def keyRight(self): if self.keyLocked: return self['liste'].pageDown() self.showInfos() def keyUp(self): if self.keyLocked: return self['liste'].up() self.showInfos() def keyDown(self): if self.keyLocked: return self['liste'].down() self.showInfos() def keyOK(self): if self.keyLocked: return self.title = self['liste'].getCurrent()[0][0] link = self['liste'].getCurrent()[0][1].replace('&','&') print self.title, link api_url = "http://www.arte.tv/player/v2//index.php?json_url=http://arte.tv/papi/tvguide/videos/stream/player/D/049880-014_PLUS7-D/ALL/ALL.json&lang=de_DE&config=arte_tvguide&rendering_place=" + str(link) print api_url getPage(api_url, headers={'Content-Type':'application/x-www-form-urlencoded'}).addCallback(self.getDataStream).addErrback(self.dataError) def getDataStream(self, data): guide_url = '<link rel="alternate" hreflang="de" href="(.*?)" />' if guide_url: print guide_url getPage(guide_url[0], headers={'Content-Type':'application/x-www-form-urlencoded'}).addCallback(self.getStream).addErrback(self.dataError) def getDataStream(self, data): stream_url = re.findall('<meta name="twitter:player:stream" content="(.*?)">', data) if stream_url: self.tw_agent_hlp.getRedirectedUrl(self.playStream, self.dataError, stream_url[0]) def playStream(self, url): print url self.session.open(SimplePlayer, [(self.title, url, self.ImageUrl)], showPlaylist=False, ltype='Arte') def keyCancel(self): self.close()
class IStreamFilmListeScreen(Screen): def __init__(self, session, genreLink, genreName): self.session = session self.genreLink = genreLink self.genreName = genreName self.plugin_path = mp_globals.pluginPath self.skin_path = mp_globals.pluginPath + "/skins" path = "%s/%s/defaultListScreen.xml" % (self.skin_path, config.mediaportal.skin.value) if not fileExists(path): path = self.skin_path + "/original/defaultListScreen.xml" print path with open(path, "r") as f: self.skin = f.read() f.close() Screen.__init__(self, session) self["actions"] = ActionMap( [ "OkCancelActions", "ShortcutActions", "ColorActions", "SetupActions", "NumberActions", "MenuActions", "EPGSelectActions", "DirectionActions" ], { "ok": self.keyOK, "cancel": self.keyCancel, "up": self.keyUp, "down": self.keyDown, "right": self.keyRight, "left": self.keyLeft, "upUp": self.key_repeatedUp, "rightUp": self.key_repeatedUp, "leftUp": self.key_repeatedUp, "downUp": self.key_repeatedUp, "upRepeated": self.keyUpRepeated, "downRepeated": self.keyDownRepeated, "rightRepeated": self.keyRightRepeated, "leftRepeated": self.keyLeftRepeated, "nextBouquet": self.keyPageUp, "prevBouquet": self.keyPageDown, "1": self.key_1, "3": self.key_3, "4": self.key_4, "6": self.key_6, "7": self.key_7, "9": self.key_9, "green": self.keySortAZ, "yellow": self.keySortIMDB, "red": self.keyTxtPageUp, "blue": self.keyTxtPageDown, "info": self.keyTMDbInfo }, -1) self.sortOrder = 0 self.sortParIMDB = "?imdb_rating=desc" self.sortParAZ = "?orderby=title&order=ASC" self.genreTitle = "Filme in Genre " self.sortOrderStrAZ = " - Sortierung A-Z" self.sortOrderStrIMDB = " - Sortierung IMDb" self.sortOrderStrGenre = "" self['title'] = Label(IS_Version) self['ContentTitle'] = Label("") self['name'] = Label("") self['handlung'] = ScrollLabel("") self['coverArt'] = Pixmap() self['Page'] = Label("Page") self['page'] = Label("") self['F1'] = Label("Text-") self['F2'] = Label("SortA-Z") self['F3'] = Label("SortIMDb") self['F4'] = Label("Text+") self.tw_agent_hlp = TwAgentHelper() self.timerStart = False self.seekTimerRun = False self.eventL = threading.Event() self.eventH = threading.Event() self.eventP = threading.Event() self.filmQ = Queue.Queue(0) self.hanQ = Queue.Queue(0) self.picQ = Queue.Queue(0) self.updateP = 0 self.keyLocked = True self.filmListe = [] self.keckse = {} self.page = 0 self.pages = 0 self.neueFilme = re.match('.*?Neue Filme', self.genreName) self.sucheFilme = re.match('.*?Videosuche', self.genreName) self.setGenreStrTitle() self.chooseMenuList = MenuList([], enableWrapAround=True, content=eListboxPythonMultiContent) self.chooseMenuList.l.setFont(0, gFont('mediaportal', 23)) self.chooseMenuList.l.setItemHeight(25) self['liste'] = self.chooseMenuList self.onLayoutFinish.append(self.loadPage) def setGenreStrTitle(self): if not self.neueFilme and not self.sucheFilme: if not self.sortOrder: self.sortOrderStrGenre = self.sortOrderStrAZ else: self.sortOrderStrGenre = self.sortOrderStrIMDB else: self.sortOrderStrGenre = "" self['ContentTitle'].setText( "%s%s%s" % (self.genreTitle, self.genreName, self.sortOrderStrGenre)) def loadPage(self): print "loadPage:" if not self.sucheFilme: if not self.sortOrder: url = "%s%d%s" % (self.genreLink, self.page, self.sortParAZ) else: url = "%s%d%s" % (self.genreLink, self.page, self.sortParIMDB) else: url = self.genreLink if self.page: self['page'].setText("%d / %d" % (self.page, self.pages)) #if self.seekTimerRun: # return self.filmQ.put(url) print "eventL ", self.eventL.is_set() if not self.eventL.is_set(): self.eventL.set() self.loadPageQueued() print "eventL ", self.eventL.is_set() def loadPageQueued(self): print "loadPageQueued:" self['name'].setText('Bitte warten...') while not self.filmQ.empty(): url = self.filmQ.get_nowait() #self.eventL.clear() print url #getPage(url, cookies=self.keckse, agent=std_headers, headers={'Content-Type':'application/x-www-form-urlencoded'}).addCallback(self.loadPageData).addErrback(self.dataError) self.tw_agent_hlp.getWebPage(self.loadPageData, self.dataError, url, False) def dataError(self, error): self.eventL.clear() print "dataError:" printl(error, self, "E") self.filmListe.append(("No movies found !", "")) self.chooseMenuList.setList(map(IStreamFilmListEntry, self.filmListe)) def loadPageData(self, data): print "loadPageData:", len(data) if not self.neueFilme: filme = re.findall( '<div class="cover">.*?<a href="(.*?)" rel=.*?title="(.*?)">.*?data-original="(.*?)"', data, re.S) else: print "Parse new movies" filme = re.findall( '<div class="voting".*?<a href="(.*?)".*?title="(.*?)">.*?data-original="(.*?)"', data) if filme: print "Movies found !" if not self.pages: m = re.findall('<span class=\'pages\'>Seite 1 von (.*?)</', data) if m: self.pages = int(m[0]) else: self.pages = 1 self.page = 1 print "Page: %d / %d" % (self.page, self.pages) self['page'].setText("%d / %d" % (self.page, self.pages)) self.filmListe = [] for (url, name, imageurl) in filme: #print "Url: ", url, "Name: ", name, "ImgUrl: ", imageurl self.filmListe.append((decodeHtml(name), url, imageurl)) self.chooseMenuList.setList( map(IStreamFilmListEntry, self.filmListe)) self.loadPicQueued() else: print "No movies found !" self.filmListe.append(("No movies found !", "")) self.chooseMenuList.setList( map(IStreamFilmListEntry, self.filmListe)) if self.filmQ.empty(): self.eventL.clear() else: self.loadPageQueued() def loadPicQueued(self): print "loadPicQueued:" self.picQ.put(None) if not self.eventP.is_set(): self.eventP.set() self.loadPic() print "eventP: ", self.eventP.is_set() def loadPic(self): print "loadPic:" if self.picQ.empty(): self.eventP.clear() print "picQ is empty" return if self.eventH.is_set() or self.updateP: print "Pict. or descr. update in progress" print "eventH: ", self.eventH.is_set() print "eventP: ", self.eventP.is_set() print "updateP: ", self.updateP return while not self.picQ.empty(): self.picQ.get_nowait() streamName = self['liste'].getCurrent()[0][0] self['name'].setText(streamName) streamPic = self['liste'].getCurrent()[0][2] streamUrl = self['liste'].getCurrent()[0][1] self.getHandlung(streamUrl) self.updateP = 1 if streamPic == None: print "ImageUrl is None !" self.ShowCoverNone() else: print "Download pict." downloadPage(streamPic, "/tmp/Icon.jpg").addCallback( self.ShowCover).addErrback(self.dataErrorP) def dataErrorP(self, error): print "dataError:" printl(error, self, "E") self.ShowCoverNone() def getHandlung(self, url): print "getHandlung:" if url == None: print "No Infos found !" self['handlung'].setText("Keine Infos gefunden.") return self.hanQ.put(url) if not self.eventH.is_set(): self.eventH.set() self.getHandlungQeued() print "eventH: ", self.eventH.is_set() def getHandlungQeued(self): while not self.hanQ.empty(): url = self.hanQ.get_nowait() #print url #getPage(url, cookies=self.keckse, agent=std_headers, headers={'Content-Type':'application/x-www-form-urlencoded'}).addCallback(self.setHandlung).addErrback(self.dataErrorH) self.tw_agent_hlp.getWebPage(self.setHandlung, self.dataErrorH, url, False) def dataErrorH(self, error): self.eventH.clear() print "dataErrorH:" printl(error, self, "E") self['handlung'].setText("Keine Infos gefunden.") def setHandlung(self, data): print "setHandlung:" m = re.findall('meta property="og:description".*?=\'(.*?)\' />', data) if m: self['handlung'].setText(decodeHtml(re.sub(r"\s+", " ", m[0]))) else: print "No Infos found !" self['handlung'].setText("Keine Infos gefunden.") if not self.hanQ.empty(): self.getHandlungQeued() else: self.eventH.clear() self.loadPic() print "eventH: ", self.eventH.is_set() print "eventL: ", self.eventL.is_set() def ShowCover(self, picData): print "ShowCover:" picPath = "/tmp/Icon.jpg" self.ShowCoverFile(picPath) def ShowCoverNone(self): print "ShowCoverNone:" picPath = "/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins/%s/images/no_coverArt.png" % config.mediaportal.skin.value self.ShowCoverFile(picPath) def ShowCoverFile(self, picPath): if fileExists(picPath): self['coverArt'].instance.setPixmap(gPixmapPtr()) self.scale = AVSwitch().getFramebufferScale() self.picload = ePicLoad() size = self['coverArt'].instance.size() self.picload.setPara((size.width(), size.height(), self.scale[0], self.scale[1], False, 1, "#FF000000")) if self.picload.startDecode(picPath, 0, 0, False) == 0: ptr = self.picload.getData() if ptr != None: self['coverArt'].instance.setPixmap(ptr) self['coverArt'].show() del self.picload self.updateP = 0 self.keyLocked = False if not self.filmQ.empty(): self.loadPageQueued() else: self.eventL.clear() self.loadPic() def keyOK(self): if (self.keyLocked | self.eventL.is_set() | self.eventH.is_set()): return streamLink = self['liste'].getCurrent()[0][1] streamName = self['liste'].getCurrent()[0][0] imageLink = self['liste'].getCurrent()[0][2] self.session.open(IStreamStreams, streamLink, streamName, imageLink) def keyUp(self): if self.keyLocked: return self['liste'].up() def keyDown(self): if self.keyLocked: return self['liste'].down() def keyUpRepeated(self): #print "keyUpRepeated" if self.keyLocked: return self['liste'].up() def keyDownRepeated(self): #print "keyDownRepeated" if self.keyLocked: return self['liste'].down() def key_repeatedUp(self): #print "key_repeatedUp" if self.keyLocked: return self.loadPicQueued() def keyLeft(self): if self.keyLocked: return self['liste'].pageUp() def keyRight(self): if self.keyLocked: return self['liste'].pageDown() def keyLeftRepeated(self): if self.keyLocked: return self['liste'].pageUp() def keyRightRepeated(self): if self.keyLocked: return self['liste'].pageDown() def keyPageDown(self): #print "keyPageDown()" if self.seekTimerRun: self.seekTimerRun = False self.keyPageDownFast(1) def keyPageUp(self): #print "keyPageUp()" if self.seekTimerRun: self.seekTimerRun = False self.keyPageUpFast(1) def keyPageUpFast(self, step): if self.keyLocked: return #print "keyPageUpFast: ",step oldpage = self.page if (self.page + step) <= self.pages: self.page += step else: self.page = 1 #print "Page %d/%d" % (self.page,self.pages) if oldpage != self.page: self.loadPage() def keyPageDownFast(self, step): if self.keyLocked: return print "keyPageDownFast: ", step oldpage = self.page if (self.page - step) >= 1: self.page -= step else: self.page = self.pages #print "Page %d/%d" % (self.page,self.pages) if oldpage != self.page: self.loadPage() #def keyPageDownMan(self): # self.keyPageDownUp = 0; # self.seekTimerRun = True #def keyPageUpMan(self): # self.keyPageDownUp = 1; # self.seekTimerRun = True #def seekTimer(self): # print "seekTimer:" # if self.seekTimerRun: # if not self.keyPageDownUp: # self.keyPageDown() # else: # self.keyPageUp() def key_1(self): #print "keyPageDownFast(2)" self.keyPageDownFast(2) def key_4(self): #print "keyPageDownFast(5)" self.keyPageDownFast(5) def key_7(self): #print "keyPageDownFast(10)" self.keyPageDownFast(10) def key_3(self): #print "keyPageUpFast(2)" self.keyPageUpFast(2) def key_6(self): #print "keyPageUpFast(5)" self.keyPageUpFast(5) def key_9(self): #print "keyPageUpFast(10)" self.keyPageUpFast(10) def keySortAZ(self): if (self.keyLocked): return if self.sortOrder and not self.neueFilme: self.sortOrder = 0 self.setGenreStrTitle() self.loadPage() def keySortIMDB(self): if (self.keyLocked): return if not (self.sortOrder or self.neueFilme): self.sortOrder = 1 self.setGenreStrTitle() self.loadPage() # teilweise von movie2k geliehen def keyTMDbInfo(self): if not self.keyLocked and TMDbPresent: title = self['liste'].getCurrent()[0][0] self.session.open(TMDbMain, title) elif not self.keyLocked and IMDbPresent: title = self['liste'].getCurrent()[0][0] self.session.open(IMDB, title) def keyTxtPageUp(self): self['handlung'].pageUp() def keyTxtPageDown(self): self['handlung'].pageDown() def keyCancel(self): self.close()
class streamitStreams(Screen, ConfigListScreen): def __init__(self, session, filmUrl, filmName, imageLink): self.session = session self.filmUrl = filmUrl self.filmName = filmName self.imageUrl = imageLink self.plugin_path = mp_globals.pluginPath self.skin_path = mp_globals.pluginPath + "/skins" path = "%s/%s/defaultListScreen.xml" % (self.skin_path, config.mediaportal.skin.value) if not fileExists(path): path = self.skin_path + "/original/defaultListScreen.xml" print path with open(path, "r") as f: self.skin = f.read() f.close() Screen.__init__(self, session) self["actions"] = ActionMap(["OkCancelActions", "ShortcutActions", "EPGSelectActions", "WizardActions", "ColorActions", "NumberActions", "MenuActions", "MoviePlayerActions", "InfobarSeekActions"], { "red" : self.keyTxtPageUp, "blue" : self.keyTxtPageDown, "green" : self.keyTrailer, "ok" : self.keyOK, "info" : self.keyTMDbInfo, "cancel" : self.keyCancel }, -1) self['title'] = Label(IS_Version) self['ContentTitle'] = Label("Stream Auswahl") self['coverArt'] = Pixmap() self['handlung'] = ScrollLabel("") self['name'] = Label(filmName) self['Page'] = Label("") self['page'] = Label("") self['F1'] = Label("Text-") self['F2'] = Label("") self['F3'] = Label("") self['F4'] = Label("Text+") self.trailerId = None self.tw_agent_hlp = TwAgentHelper() self.streamListe = [] self.streamMenuList = MenuList([], enableWrapAround=True, content=eListboxPythonMultiContent) self.streamMenuList.l.setFont(0, gFont('mediaportal', 24)) self.streamMenuList.l.setItemHeight(25) self['liste'] = self.streamMenuList self.keyLocked = True self.onLayoutFinish.append(self.loadPage) def loadPage(self): print "loadPage:" streamUrl = self.filmUrl #print "FilmUrl: %s" % self.filmUrl #print "FilmName: %s" % self.filmName self.tw_agent_hlp.getWebPage(self.parseData, self.dataError, streamUrl, False) def parseData(self, data): print "parseData:" m = re.search('<div id="stream">(.*?)</div>',data, re.S) if not m: m = re.search('<strong><h2>Hoster:</h2></strong>(.*?)</div>',data, re.S) if m: streams = re.findall('\s\s<a href="(.*?)".*?value="(.*?)"', m.group(1), re.S) else: streams = None m = re.search('href="http://www.youtube.com/(.*?)\?', data) if m: s = m.group(1).split('/') try: self.trailerId = m.group(1).split('/')[-1] except: pass else: self['F2'].setText('Trailer') mdesc = re.search('\s{4}(.*?…)',data) if mdesc: print "Descr. found" desc = mdesc.group(1).strip() else: desc = "Keine weiteren Info's !" #print desc self.streamListe = [] if streams: print "Streams found" for (isUrl,isStream) in streams: if re.search('(putlocker|sockshare|streamclou|xvidstage|filenuke|movreel|nowvideo|xvidstream|uploadc|vreer|MonsterUploads|Novamov|Videoweed|Divxstage|Ginbig|Flashstrea|Movshare|yesload|faststream|Vidstream|PrimeShare|flashx|Divxmov|Putme|Click.*?Play|BitShare)', isStream, re.S|re.I): streamPart = '' isUrl = isUrl.replace('\n','') isUrl = isUrl.replace('\r','') print isUrl print isStream,streamPart self.streamListe.append((isStream,isUrl,streamPart)) else: print "No supported hoster:" print isStream print isUrl else: print "No Streams found" self.streamListe.append(("No streams found!","","")) self.streamMenuList.setList(map(streamitStreamListEntry, self.streamListe)) self['handlung'].setText(decodeHtml(desc)) self.keyLocked = False print "imageUrl: ",self.imageUrl CoverHelper(self['coverArt']).getCover(self.imageUrl) def dataError(self, error): print "dataError:" printl(error,self,"E") self.streamListe.append(("Read error !","")) self.streamMenuList.setList(map(streamitStreamListEntry, self.streamListe)) def got_link(self, stream_url): print "got_link:" if stream_url == None: message = self.session.open(MessageBox, _("Stream not found, try another Stream Hoster."), MessageBox.TYPE_INFO, timeout=3) else: title = self.filmName + self['liste'].getCurrent()[0][2] if config.mediaportal.useHttpDump.value: movieinfo = [stream_url,self.filmName,""] self.session.open(PlayHttpMovie, movieinfo, title) else: self.session.open(SimplePlayer, [(title, stream_url, self.imageUrl)], cover=True, showPlaylist=False, ltype='streamit') def keyTrailer(self): if self.trailerId: self.session.open( YoutubePlayer, [(self.filmName, '', self.trailerId, self.imageUrl)], playAll = False, showPlaylist=False, showCover=True ) def keyTMDbInfo(self): if TMDbPresent: self.session.open(TMDbMain, self.filmName) elif IMDbPresent: self.session.open(IMDB, self.filmName) def keyOK(self): if self.keyLocked: return streamLink = self['liste'].getCurrent()[0][1] self.tw_agent_hlp.getRedirectedUrl(self.keyOK2, self.dataError, streamLink) #get_stream_link(self.session).check_link(streamLink, self.got_link) def keyOK2(self, streamLink): saveads = re.search('.*?saveads.org', streamLink, re.S) if saveads: id = re.search('url=(.*?)%3D', streamLink, re.S) url = "http://streamit.ws/go.php?url=" + id.group(1) self.tw_agent_hlp.getRedirectedUrl(self.keyOK3, self.dataError, url) else: get_stream_link(self.session).check_link(streamLink, self.got_link) def keyOK3(self, streamLink): get_stream_link(self.session).check_link(streamLink, self.got_link) def keyTxtPageUp(self): self['handlung'].pageUp() def keyTxtPageDown(self): self['handlung'].pageDown() def keyCancel(self): self.close()
class wsoStreams(MPScreen): def __init__(self, session, title, episode, url): self.serieUrl = url self.Title = title self.episode = episode 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("watchseries-online") self['leftContentTitle'] = Label(_("Stream Selection")) self['ContentTitle'] = Label(_("Stream Selection")) self['name'] = Label(self.Title) self.streamList = [] self.ml = MenuList([], enableWrapAround=True, content=eListboxPythonMultiContent) self['liste'] = self.ml self.keyLocked = True self.onLayoutFinish.append(self.loadPage) self.tw_agent_hlp = TwAgentHelper() def loadPage(self): twAgentGetPage(self.serieUrl).addCallback(self.parseData).addErrback(self.dataError) def parseData(self, data): streams = re.findall('<a\starget="_blank"\srel="nofollow"\shref="(.*?)">(.*?)</a>', data, re.S) if streams: for (url, hoster) in streams: if isSupportedHoster(hoster, True): self.streamList.append((hoster, url)) if len(self.streamList) == 0: self.streamList.append((_('No supported streams found!'), None)) self.ml.setList(map(self._defaultlisthoster, self.streamList)) self.keyLocked = False def keyOK(self): current = self['liste'].getCurrent() if self.keyLocked or current == None: return url = current[0][1] if url: if "linkOut?id=" in url: import base64 url = url.split('id=')[-1] url = base64.b64decode(url) get_stream_link(self.session).check_link(url, self.playfile) else: self.tw_agent_hlp.getRedirectedUrl(url).addCallback(self.getStream).addErrback(self.dataError) def getStream(self, url): get_stream_link(self.session).check_link(url, self.playfile) def playfile(self, stream_url): if not re.search('\S[0-9][0-9]E[0-9][0-9]', self.Title, re.I): self.streamname = self.Title + " - " + self.episode else: self.streamname = self.Title if not fileExists(config_mp.mediaportal.watchlistpath.value+"mp_wso_watched"): open(config_mp.mediaportal.watchlistpath.value+"mp_wso_watched","w").close() self.update_list = [] empty = os.path.getsize(config_mp.mediaportal.watchlistpath.value+"mp_wso_watched") if not empty == 0: self.updates_read = open(config_mp.mediaportal.watchlistpath.value+"mp_wso_watched" , "r") for lines in sorted(self.updates_read.readlines()): line = re.findall('"(.*?)"', lines) if line: self.update_list.append("%s" % (line[0])) self.updates_read.close() updates_read2 = open(config_mp.mediaportal.watchlistpath.value+"mp_wso_watched" , "a") check = ("%s" % self.streamname) if not check in self.update_list: print "update add: %s" % (self.streamname) updates_read2.write('"%s"\n' % (self.streamname)) updates_read2.close() else: print "dupe %s" % (self.streamname) else: updates_read3 = open(config_mp.mediaportal.watchlistpath.value+"mp_wso_watched" , "a") print "update add: %s" % (self.streamname) updates_read3.write('"%s"\n' % (self.streamname)) updates_read3.close() self.session.open(SimplePlayer, [(self.streamname, stream_url)], showPlaylist=False, ltype='watchseriesonline')
class gstreaminxxxStreamListeScreen(Screen): def __init__(self, session, streamFilmLink, streamName): self.session = session self.streamFilmLink = streamFilmLink self.streamName = streamName path = "/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins/%s/XXXGenreScreen.xml" % config.mediaportal.skin.value if not fileExists(path): path = "/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins/original/XXXGenreScreen.xml" print path with open(path, "r") as f: self.skin = f.read() f.close() Screen.__init__(self, session) self["actions"] = ActionMap([ "OkCancelActions", "ShortcutActions", "WizardActions", "ColorActions", "SetupActions", "NumberActions", "MenuActions", "EPGSelectActions" ], { "ok": self.keyOK, "cancel": self.keyCancel }, -1) self['title'] = Label("G-Stream.in") self['name'] = Label('Bitte warten...') self['coverArt'] = Pixmap() self.tw_agent_hlp = TwAgentHelper() self.keyLocked = True self.filmliste = [] self.chooseMenuList = MenuList([], enableWrapAround=True, content=eListboxPythonMultiContent) self.chooseMenuList.l.setFont(0, gFont('mediaportal', 23)) self.chooseMenuList.l.setItemHeight(25) self['genreList'] = self.chooseMenuList self.onLayoutFinish.append(self.loadPage) def loadPage(self): getPage(self.streamFilmLink, agent=special_headers, headers={ 'Cookie': 'sitechrx=' + sitechrx + '; overkill_in=' + str(time()) }).addCallback(self.loadPageData).addErrback(self.dataError) def dataError(self, error): printl(error, self, "E") def loadPageData(self, data): print "daten bekommen" raw = re.findall('<table\sid="post[0-9]+"(.*?)id="post_thanks_box', data, re.S) streams = re.findall( '"(http://.*?(g-stream.in\/secure\/.*?\/|flashx|[w]+.putlocker|[w]+.sockshare|.).*?)"', raw[0], re.S) if streams: for (stream, hostername) in streams: if re.match( '.*?(putlocker|sockshare|streamclou|xvidstage|filenuke|movreel|nowvideo|xvidstream|uploadc|vreer|MonsterUploads|Novamov|Videoweed|Divxstage|Ginbig|Flashstrea|Movshare|yesload|faststream|Vidstream|PrimeShare|flashx|Divxmov|Putme|Zooupload|Wupfile|BitShare)', hostername.strip(' '), re.S | re.I): print hostername, stream if hostername == 'flashx': hostername = 'Flashx' if hostername == 'www.putlocker': hostername = 'Putlocker' if hostername == 'www.sockshare': hostername = 'Sockshare' hostername = hostername.replace( 'g-stream.in/secure/streamcloud.eu/', 'Streamcloud (Secure)') hostername = hostername.replace( 'g-stream.in/secure/flashx.tv/', 'Flashx (Secure)') hostername = hostername.replace( 'g-stream.in/secure/www.putlocker.com/', 'Putlocker (Secure)') hostername = hostername.replace( 'g-stream.in/secure/www.sockshare.com/', 'Sockshare (Secure)') self.filmliste.append((hostername, stream)) if len(self.filmliste) < 1: self.filmliste.append(('Keine Streams gefunden.', None)) self.filmliste = list(set(self.filmliste)) self.filmliste.sort() self.chooseMenuList.setList( map(gstreaminxxxHosterListEntry, self.filmliste)) self['name'].setText(self.streamName) self.keyLocked = False def keyOK(self): if self.keyLocked: return streamLink = self['genreList'].getCurrent()[0][1] streamHoster = self['genreList'].getCurrent()[0][0] if streamLink == None: return url = streamLink url = url.replace('&', '&') print 'Hoster: ' + streamHoster print 'URL: ' + url self['name'].setText('Bitte warten...') if streamHoster == 'Flashx': print 'Direct Play' self.get_stream(url) elif streamHoster == 'Putlocker': print 'Direct Play' self.get_stream(url) elif streamHoster == 'Sockshare': print 'Direct Play' self.get_stream(url) else: print 'Secured Play' self.tw_agent_hlp.getRedirectedUrl(self.get_stream, self.dataError, streamLink) def get_stream(self, url): get_stream_link(self.session).check_link(url, self.got_link) def got_link(self, stream_url): self['name'].setText(self.streamName) if stream_url == None: message = self.session.open( MessageBox, _("Stream not found, try another Stream Hoster."), MessageBox.TYPE_INFO, timeout=3) else: #fx = re.match('.*?flashx', stream_url) fx = None if config.mediaportal.useHttpDump.value or fx: if fx: movieinfo = [ stream_url, self.streamName, "http://play.flashx.tv/" ] else: movieinfo = [stream_url, self.streamName, ""] self.session.open(PlayHttpMovie, movieinfo, self.streamName) else: sref = eServiceReference(0x1001, 0, stream_url) sref.setName(self.streamName) self.session.open(MoviePlayer, sref) def keyCancel(self): self.close()
class IStreamStreams(Screen, ConfigListScreen): def __init__(self, session, filmUrl, filmName, imageLink): self.session = session self.filmUrl = filmUrl self.filmName = filmName self.imageUrl = imageLink self.plugin_path = mp_globals.pluginPath self.skin_path = mp_globals.pluginPath + "/skins" path = "%s/%s/defaultListScreen.xml" % (self.skin_path, config.mediaportal.skin.value) if not fileExists(path): path = self.skin_path + "/original/defaultListScreen.xml" print path with open(path, "r") as f: self.skin = f.read() f.close() Screen.__init__(self, session) self["actions"] = ActionMap(["OkCancelActions", "ShortcutActions", "EPGSelectActions", "WizardActions", "ColorActions", "NumberActions", "MenuActions", "MoviePlayerActions", "InfobarSeekActions"], { "red" : self.keyTxtPageUp, "blue" : self.keyTxtPageDown, "ok" : self.keyOK, "cancel" : self.keyCancel }, -1) self['title'] = Label(IS_Version) self['ContentTitle'] = Label("Stream Auswahl") self['coverArt'] = Pixmap() self['handlung'] = ScrollLabel("") self['name'] = Label(filmName) self['Page'] = Label("") self['page'] = Label("") self['F1'] = Label("Text-") self['F2'] = Label("") self['F3'] = Label("") self['F4'] = Label("Text+") self.tw_agent_hlp = TwAgentHelper() self.streamListe = [] self.streamMenuList = MenuList([], enableWrapAround=True, content=eListboxPythonMultiContent) self.streamMenuList.l.setFont(0, gFont('mediaportal', 24)) self.streamMenuList.l.setItemHeight(25) self['liste'] = self.streamMenuList self.keyLocked = True self.onLayoutFinish.append(self.loadPage) def loadPage(self): print "loadPage:" streamUrl = self.filmUrl #print "FilmUrl: %s" % self.filmUrl #print "FilmName: %s" % self.filmName #getPage(streamUrl, headers={'Content-Type':'application/x-www-form-urlencoded'}).addCallback(self.parseData).addErrback(self.dataError) self.tw_agent_hlp.getWebPage(self.parseData, self.dataError, streamUrl, False) def parseData(self, data): print "parseData:" streams = re.findall('a class="hoster-button.*?href="(.*?)".*?title=".*?\[(.*?)\](.*?)"', data) mdesc = re.search('class="desc">(.*?)<br />',data, re.S) if mdesc: print "Descr. found" desc = mdesc.group(1).strip() else: desc = "Keine weiteren Info's !" self.streamListe = [] if streams: print "Streams found" for (isUrl,isStream,streamPart) in streams: if re.match('.*?(putlocker|sockshare|flash strea|streamclou|xvidstage|filenuke|movreel|nowvideo|xvidstream|uploadc|vreer|MonsterUploads|Novamov|Videoweed|Divxstage|Ginbig|Flashstrea|Movshare|yesload|faststream|Vidstream|PrimeShare|flashx|Divxmov|Putme|Zooupload|Click.*?Play|BitShare)', isStream, re.S|re.I): #print isUrl #print isStream,streamPart self.streamListe.append((isStream,isUrl,streamPart)) else: print "No supported hoster:" print isStream print isUrl else: print "No Streams found" self.streamListe.append(("No streams found !","","")) self.streamMenuList.setList(map(IStreamStreamListEntry, self.streamListe)) self['handlung'].setText(decodeHtml(desc)) self.keyLocked = False print "imageUrl: ",self.imageUrl if self.imageUrl: downloadPage(self.imageUrl, "/tmp/Icon.jpg").addCallback(self.ShowCover) def ShowCover(self, picData): print "ShowCover:" if fileExists("/tmp/Icon.jpg"): self['coverArt'].instance.setPixmap(gPixmapPtr()) self.scale = AVSwitch().getFramebufferScale() self.picload = ePicLoad() size = self['coverArt'].instance.size() self.picload.setPara((size.width(), size.height(), self.scale[0], self.scale[1], False, 1, "#FF000000")) if self.picload.startDecode("/tmp/Icon.jpg", 0, 0, False) == 0: ptr = self.picload.getData() if ptr != None: self['coverArt'].instance.setPixmap(ptr) self['coverArt'].show() del self.picload def dataError(self, error): print "dataError:" print error self.streamListe.append(("Read error !","")) self.streamMenuList.setList(map(IStreamStreamListEntry, self.streamListe)) def got_link(self, stream_url): print "got_link:" if stream_url == None: message = self.session.open(MessageBox, _("Stream not found, try another Stream Hoster."), MessageBox.TYPE_INFO, timeout=3) else: title = self.filmName + self['liste'].getCurrent()[0][2] if config.mediaportal.useHttpDump.value: movieinfo = [stream_url,self.filmName,""] self.session.open(PlayHttpMovie, movieinfo, title) else: self.session.open(iStreamPlayer, [(title, stream_url, self.imageUrl)], showCover=True) def keyOK(self): if self.keyLocked: return streamLink = self['liste'].getCurrent()[0][1] self.tw_agent_hlp.getRedirectedUrl(self.keyOK2, self.dataError, streamLink) def keyOK2(self, streamLink): get_stream_link(self.session).check_link(streamLink, self.got_link) def keyTxtPageUp(self): self['handlung'].pageUp() def keyTxtPageDown(self): self['handlung'].pageDown() def keyCancel(self): self.close()
class gstreaminxxxFilmScreen(MPScreen, ThumbsHelper): def __init__(self, session, Link, Name, mode): self.mode = mode self.Link = Link self.Name = Name self.plugin_path = mp_globals.pluginPath self.skin_path = mp_globals.pluginPath + mp_globals.skinsPath path = "%s/%s/defaultListScreen.xml" % (self.skin_path, config.mediaportal.skin.value) if not fileExists(path): path = self.skin_path + mp_globals.skinFallback + "/defaultListScreen.xml" with open(path, "r") as f: self.skin = f.read() f.close() MPScreen.__init__(self, session) ThumbsHelper.__init__(self) self["actions"] = ActionMap(["MP_Actions"], { "ok" : self.keyOK, "0" : self.closeAll, "cancel" : self.keyCancel, "5" : self.keyShowThumb, "up" : self.keyUp, "down" : self.keyDown, "right" : self.keyRight, "left" : self.keyLeft, "nextBouquet" : self.keyPageUp, "prevBouquet" : self.keyPageDown, "green" : self.keyPageNumber }, -1) self['title'] = Label("GStream.to") self['ContentTitle'] = Label(self.Name) self['F2'] = Label(_("Page")) self['Page'] = Label(_("Page:")) self.keyLocked = True self.page = 1 self.lastpage = 1 self.tw_agent_hlp = TwAgentHelper(redir_agent=True) self.urlRedirected = '' self.filmliste = [] self.ml = MenuList([], enableWrapAround=True, content=eListboxPythonMultiContent) self['liste'] = self.ml self.onLayoutFinish.append(self.loadPage) def loadPage(self): self.keyLocked = True self['name'].setText(_('Please wait...')) self.filmliste = [] if re.search('Search', self.Name) or self.Name == 'HD Filme': if self.urlRedirected =='': if self.Name == 'HD Filme': baseurl = 'http://gstream.to/search.php?do=process&prefixchoice[]=hd' else: if re.search('Entire Post', self.Name): titleonly = 0 else: titleonly = 1 if self.mode == "p**n": searchType = '661' else: searchType = '528' baseurl = 'http://gstream.to/search.php?do=process&childforums=1&do=process&exactname=1&forumchoice[]=%s&query=%s&s=&securitytoken=guest&titleonly=%s' % (searchType,self.Link,titleonly) self.tw_agent_hlp.headers.addRawHeader('Cookie', 'sitechrx='+sitechrx+'; overkill_in='+str(time())) self.tw_agent_hlp.headers.addRawHeader('User-Agent','Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.43 Safari/537.31') self.tw_agent_hlp.headers.addRawHeader('Accept-Charset','ISO-8859-1,utf-8;q=0.7,*;q=0.3') self.tw_agent_hlp.headers.addRawHeader('Accept','text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8') self.tw_agent_hlp.headers.addRawHeader('Accept-Language','de-DE,de;q=0.8,en-US;q=0.6,en;q=0.4') self.tw_agent_hlp.headers.addRawHeader('Referer','http://gstream.to/') self.tw_agent_hlp.getRedirectedUrl(baseurl).addCallback(self.getRedirectedData).addErrback(self.dataError) else: self.getRedirectedData(self.urlRedirected) else: if self.mode == "p**n": baseurl = 'http://gstream.to/forumdisplay.php?s=&f=661&pp=20&sort=lastpost&order=desc&daysprune=-1&prefixid=' url = baseurl + "%s&page=%s" % (self.Link, str(self.page)) else: url = 'http://gstream.to/forumdisplay.php?f=%s&pp=20&sort=lastpost&order=desc&page=%s' % (self.Link, str(self.page)) twAgentGetPage(url, agent=special_headers, followRedirect=False, headers={'Cookie': 'sitechrx='+sitechrx+'; overkill_in='+str(time())}).addCallback(self.loadData).addErrback(self.dataError) def getRedirectedData(self, urlRedirected): self.urlRedirected = urlRedirected url = self.urlRedirected + "&page=%s" % str(self.page) twAgentGetPage(url, agent=special_headers, headers={'Cookie': 'sitechrx='+sitechrx+'; overkill_in='+str(time())}).addCallback(self.loadData).addErrback(self.dataError) def loadData(self, data): self.getLastPage(data, '', 'normal">Seite.*?von\s(.*?)</td>') Movies = re.findall('class="p1"\shref="(.*?)".*?class="large"\ssrc="(.*?)".*?thread_title_[0-9]+".*?>(.*?)</a>', data, re.S) if Movies: for (Url, Image, Title) in Movies: if Title != "DE. MILFs brauchen anonymen Sex!": Url = Url.replace('&','&') Url = 'http://gstream.to/' + Url if re.search('images-box.com|rapidimg.org|your-imag.es|pics-traderz.org|imgload.biz|lulzimg.com|shareimage.me|pic.ms', str(Image), re.S): Image = None self.filmliste.append((decodeHtml(Title), Url, Image)) if len(self.filmliste) < 1: self.filmliste.append(("No streams found!", None,"")) self.ml.setList(map(self._defaultlistleft, self.filmliste)) self.ml.moveToIndex(0) self.keyLocked = False self.th_ThumbsQuery(self.filmliste, 0, 1, 2, None, None, self.page, self.lastpage) self.showInfos() def showInfos(self): title = self['liste'].getCurrent()[0][0] pic = self['liste'].getCurrent()[0][2] self['name'].setText(title) CoverHelper(self['coverArt']).getCover(pic) def keyOK(self): if self.keyLocked: return Title = self['liste'].getCurrent()[0][0] Link = self['liste'].getCurrent()[0][1] Cover = self['liste'].getCurrent()[0][2] self.session.open(gstreaminxxxStreamListeScreen, Link, Title, Cover)
class megaskanksStreamListeScreen(MPScreen): def __init__(self, session, streamFilmLink, streamName): self.streamFilmLink = streamFilmLink self.streamName = streamName self.plugin_path = mp_globals.pluginPath self.skin_path = mp_globals.pluginPath + mp_globals.skinsPath path = "%s/%s/defaultGenreScreen.xml" % (self.skin_path, config.mediaportal.skin.value) if not fileExists(path): path = self.skin_path + mp_globals.skinFallback + "/defaultGenreScreen.xml" with open(path, "r") as f: self.skin = f.read() f.close() MPScreen.__init__(self, session) self["actions"] = ActionMap(["MP_Actions"], { "ok" : self.keyOK, "0" : self.closeAll, "cancel": self.keyCancel }, -1) self['title'] = Label("MegaSkanks.com") self['name'] = Label(self.streamName) self['ContentTitle'] = Label("Streams:") self.tw_agent_hlp = TwAgentHelper(redir_agent=True) self.keyLocked = True self.filmliste = [] self.ml = MenuList([], enableWrapAround=True, content=eListboxPythonMultiContent) self['liste'] = self.ml self.onLayoutFinish.append(self.loadPage) def loadPage(self): getPage(self.streamFilmLink, headers={'Content-Type':'application/x-www-form-urlencoded'}).addCallback(self.loadPageData).addErrback(self.dataError) def loadPageData(self, data): self.filmliste = [] parse = re.search('PostHeaderIcon.png(.*?)PostMetadataFooter', data, re.S) streams = re.findall('(<p>(\w+):\s)?<a\shref="(http.*?//(.*?)/.*?)"', parse.group(1), re.S|re.I) if streams: for (x, hoster, stream, hostername) in streams: stream = stream.split('"')[0].replace("putlocker","firedrive").replace('https', 'http') if isSupportedHoster(stream, True): self.filmliste.append((hostername, stream)) if re.match('(.*?\.allanalpass.com|sh.st|linkshrink.net|adfoc.us|adf.ly|www\.amy\.gs)', hostername, re.S|re.I): hostername = hostername.replace('www.allanalpass.com', 'Allanalpass redirect') hostername = hostername.replace('sh.st', 'Sh redirect %s' % hoster.capitalize()) hostername = hostername.replace('linkshrink.net', 'Linkshrink redirect') hostername = hostername.replace('adfoc.us', 'Adfoc redirect') hostername = hostername.replace('adf.ly', 'ADF redirect %s' % hoster.capitalize()) hostername = hostername.replace('www.amy.gs', 'AMY redirect %s' % hoster.capitalize()) disc = re.search('.*?(CD1|CD2).*?', stream, re.S|re.I) if disc: discno = disc.group(1) discno = discno.replace('CD1','Teil 1').replace('CD2','Teil 2') hostername = hostername + ' (' + discno + ')' self.filmliste.append((hostername, stream)) if len(self.filmliste) == 0: self.filmliste.append(("No Hoster found.", "")) self.ml.setList(map(self._defaultlisthoster, self.filmliste)) self['name'].setText(self.streamName) self.keyLocked = False def keyOK(self): if self.keyLocked: return streamLink = self['liste'].getCurrent()[0][1] streamHoster = self['liste'].getCurrent()[0][0] if streamLink == None: return url = streamLink self['name'].setText(_('Please wait...')) if re.search('redirect', streamHoster): self.checkStreamLink(url) else: self.get_stream(url) def checkStreamLink(self, url): if re.search('http.*?sh\.st', url): # and allanal sh.st getPage(url, agent=spezialagent).addCallback(self.shst, url).addErrback(self.dataError) elif re.search('http.*?allanalpass\.com', url): # and allanal sh.st getPage(url, agent=spezialagent).addCallback(self.allanal, url).addErrback(self.dataError) elif re.search('http.*?linkshrink\.net', url): # and allanal sh.st getPage(url, agent=spezialagent).addCallback(self.linkshrink, url).addErrback(self.dataError) elif re.search('http.*?adfoc\.us', url): # and allanal sh.st getPage(url, headers={'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'}).addCallback(self.adfoc).addErrback(self.dataError) elif re.search('http.*?adf\.ly', url): getPage(url, agent=spezialagent, headers={'Content-Type':'application/x-www-form-urlencoded'}).addCallback(self.adfly).addErrback(self.dataError) elif re.search('http.*?amy\.gs', url): getPage(url, agent=spezialagent).addCallback(self.allanal, url).addErrback(self.dataError) def adfly(self, data): ysmm = re.search("var\sysmm\s=\s'(.*?)'", data) if ysmm: ysmm = ysmm.group(1) left = '' right = '' for c in [ysmm[i:i+2] for i in range(0, len(ysmm), 2)]: left += c[0] right = c[1] + right url = base64.b64decode(left.encode() + right.encode())[2:].decode() if re.search(r'go\.php\?u\=', url): url = base64.b64decode(re.sub(r'(.*?)u=', '', url)).decode() self.get_stream(str(url)) else: message = self.session.open(MessageBoxExt, _("Stream not found, try another Stream Hoster."), MessageBoxExt.TYPE_INFO, timeout=3) def adfoc(self, data): link = re.findall('var\sclick_url\s=\s"(.*?)"', data, re.S) if link: self.get_stream(link[0]) else: message = self.session.open(MessageBoxExt, _("Stream not found, try another Stream Hoster."), MessageBoxExt.TYPE_INFO, timeout=3) def linkshrink(self, data, baseurl): link = re.findall('<a\sclass="bt"\shref="(.*?)"', data) if link: url = link[0] user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)' self.tw_agent_hlp.headers.addRawHeader('User-Agent', user_agent) self.tw_agent_hlp.headers.addRawHeader('Referer', baseurl) self.tw_agent_hlp.getRedirectedUrl(url).addCallback(self.linkshrinkLink).addErrback(self.dataError) def linkshrinkLink(self, url): if url: if re.search('(www.allanalpass.com|linkbucks.com|adfoc.us)', url): self.checkStreamLink(url) else: self.get_stream(url) else: message = self.session.open(MessageBoxExt, _("Stream not found, try another Stream Hoster."), MessageBoxExt.TYPE_INFO, timeout=3) def shst(self, data, baseurl): session_id = re.findall('sessionId:\s"(.*?)"', data) if session_id: url = 'http://sh.st/shortest-url/end-adsession?adSessionId=%s' % (session_id[0]) reactor.callLater(6, self.shstData, url, baseurl) message = self.session.open(MessageBoxExt, _("Stream starts in 6 sec."), MessageBoxExt.TYPE_INFO, timeout=6) else: self.stream_not_found() def shstData(self, url, baseurl): http_header = { "Accept": "*/*", "Accept-Encoding": "gzip,deflate", "Accept-Language": "en-US,en;,q=0.8", "Host": "sh.st", "Referer": baseurl, "Origin": "http://sh.st", "X-Requested-With": "XMLHttpRequest" } getPage(url, agent=spezialagent, headers=http_header).addCallback(self.shstLink).addErrback(self.dataError) def shstLink(self, data): VideoUrl = re.findall('destinationUrl":"(.*?)"', data, re.S) if VideoUrl: url = VideoUrl[0].replace('\/','/') if re.search('(www.allanalpass.com|linkbucks.com|adfoc.us)', url): self.checkStreamLink(url) else: self.get_stream(url) else: message = self.session.open(MessageBoxExt, _("Stream not found, try another Stream Hoster."), MessageBoxExt.TYPE_INFO, timeout=3) def allanal(self, data, baseurl): Tokens = re.findall("Token:\s'(.*?)',.*?'thKey']\s=\s(.*?);", data, re.S) if Tokens: addToken = re.findall("\s\s\sparams\['Au' \+ 'th' \+ 'Key'\] = params\['AuthK' \+ 'ey'\] \+ (.*?);", data) if addToken: Token2 = int(Tokens[-1][1]) + int(addToken[-1]) if Token2 == int(Tokens[0][1]): Token2 = int(Tokens[1][1]) + int(addToken[-1]) if Token2 == int(Tokens[1][1]): Token2 = int(Tokens[1][1]) + int(addToken[-1]) if Token2 == int(Tokens[0][1]): Token2 = int(Tokens[0][1]) + int(addToken[-1]) rand = random.randrange(10000000,99999999) url = "http://www.allanalpass.com/scripts/generated/key.js?t=%s&%s" % (Tokens[-1][0],rand) getPage(url, headers={'Content-Type':'application/x-www-form-urlencoded'}).addCallback(self.allanalVideoLink2, Tokens[-1][0], Token2).addErrback(self.dataError) else: message = self.session.open(MessageBoxExt, _("Stream not found, try another Stream Hoster."), MessageBoxExt.TYPE_INFO, timeout=3) def allanalVideoLink2(self, data, token1, token2): url = "http://www.linkbucksmedia.com/director/?t=%s" % token1 getPage(url, headers={'Content-Type':'application/x-www-form-urlencoded'}).addCallback(self.allanalVideoLink3, token1, token2).addErrback(self.dataError) def allanalVideoLink3(self, data, token1, token2): url = "http://www.allanalpass.com/intermission/loadTargetUrl?t=%s&aK=%s" % (token1, token2) reactor.callLater(6, self.allanalVideoLink4, url) message = self.session.open(MessageBoxExt, _("Stream starts in 6 sec."), MessageBoxExt.TYPE_INFO, timeout=6) def allanalVideoLink4(self, url): getPage(url, headers={'Content-Type':'application/x-www-form-urlencoded','Referer':'http://www.allanalpass.com/ZRv2'}).addCallback(self.allanalVideoLink5).addErrback(self.dataError) def allanalVideoLink5(self, data): VideoUrl = re.findall('Url":"(.*?)"', data, re.S) if VideoUrl: url = VideoUrl[0] self.get_stream(url) else: message = self.session.open(MessageBoxExt, _("Stream not found, try another Stream Hoster."), MessageBoxExt.TYPE_INFO, timeout=3) def get_stream(self,url): self['name'].setText(self.streamName) get_stream_link(self.session).check_link(url, self.got_link) def got_link(self, stream_url): self['name'].setText(self.streamName) if stream_url == None: message = self.session.open(MessageBoxExt, _("Stream not found, try another Stream Hoster."), MessageBoxExt.TYPE_INFO, timeout=3) else: self.session.open(SimplePlayer, [(self.streamName, stream_url)], showPlaylist=False, ltype='megaskanks')
class SubStreamAuswahl(MPScreen): def __init__(self, session, Title, Hoster, Data): self.Title = Title self.Hoster = Hoster self.Data = Data self.plugin_path = mp_globals.pluginPath self.skin_path = mp_globals.pluginPath + mp_globals.skinsPath path = "%s/%s/defaultListScreen.xml" % (self.skin_path, config.mediaportal.skin.value) if not fileExists(path): path = self.skin_path + mp_globals.skinFallback + "/defaultListScreen.xml" with open(path, "r") as f: self.skin = f.read() f.close() MPScreen.__init__(self, session) self["actions"] = ActionMap(["MP_Actions"], { "ok" : self.keyOK, "0" : self.closeAll, "cancel": self.keyCancel }, -1) self['title'] = Label("alluc.to / Filter: %s" % config.mediaportal.alluc_country.value) self['ContentTitle'] = Label("Streamlist %s" %self.Title) self.keyLocked = True self.tw_agent_hlp = TwAgentHelper() self.filmliste = [] self.ml = MenuList([], enableWrapAround=True, content=eListboxPythonMultiContent) self['liste'] = self.ml self.onLayoutFinish.append(self.loadPage) def loadPage(self): streamparts = re.split('collinkname', self.Data ) for streampart in streamparts[1:]: hits = re.findall('class="openlink.*?>(.*?)<.*?openlink.*?href="(.*?)".*?ratingscore.*?>(.*?)<.*?Hits">(.*?)<', streampart, re.S) if hits: url = "http://dir.alluc.to/%s" % hits[0][1] self.filmliste.append((self.Hoster, hits[0][0].strip(), url, hits[0][2].strip(), hits[0][3].strip())) if len(self.filmliste) == 0: self.filmliste.append((None, _('No supported streams found!'), '', '', '')) self.ml.setList(map(self.allucSubHostersEntry, self.filmliste)) self.keyLocked = False def keyOK(self): if self.keyLocked: return url = self['liste'].getCurrent()[0][2] self['name'].setText(_("Please wait...")) if url == None: return user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)' self.tw_agent_hlp.headers.addRawHeader('User-Agent', user_agent) self.tw_agent_hlp.getRedirectedUrl(url).addCallback(self.get_redirect).addErrback(self.dataError) self['name'].setText("%s" % self.Title) def get_redirect(self, url): get_stream_link(self.session).check_link(url, self.got_link) def got_link(self, stream_url): if stream_url == None: message = self.session.open(MessageBoxExt, _("Stream not found, try another Stream Hoster."), MessageBoxExt.TYPE_INFO, timeout=3) else: self.session.open(SimplePlayer, [(self.Title, stream_url)], showPlaylist=False, ltype='alluc')
class xpajaFilmScreen(MPScreen, ThumbsHelper): def __init__(self, session, Link, Name): self.Link = Link self.Name = Name MPScreen.__init__(self, session, skin='MP_Plugin', default_cover=default_cover) ThumbsHelper.__init__(self) self["actions"] = ActionMap( ["MP_Actions"], { "ok": self.keyOK, "0": self.closeAll, "cancel": self.keyCancel, "5": self.keyShowThumb, "up": self.keyUp, "down": self.keyDown, "right": self.keyRight, "left": self.keyLeft, "nextBouquet": self.keyPageUp, "prevBouquet": self.keyPageDown, "green": self.keyPageNumber }, -1) self['title'] = Label("xpaja.net") self['ContentTitle'] = Label("Genre: %s" % self.Name) self['F2'] = Label(_("Page")) self['Page'] = Label(_("Page:")) self.keyLocked = True self.page = 1 self.lastpage = 1 self.tw_agent_hlp = TwAgentHelper() self.filmliste = [] self.ml = MenuList([], enableWrapAround=True, content=eListboxPythonMultiContent) self['liste'] = self.ml self.onLayoutFinish.append(self.loadPage) def loadPage(self): self.keyLocked = True self['name'].setText(_('Please wait...')) self.filmliste = [] if re.match(".*?Search", self.Name): url = "https://www.xpaja.net/search/videos/%s/page/%s" % ( self.Link, str(self.page)) else: url = "%s/page/%s" % (self.Link, str(self.page)) self.tw_agent_hlp.getWebPage(url).addCallback( self.loadData).addErrback(self.dataError) def loadData(self, data): self.getLastPage(data, 'class="pagination">(.*?)</ul>', '.*[\/|>](\d+)[\"|<]') Movies = re.findall( 'class="preload".*?thumb-post"\ssrc="(.*?)"\salt="(.*?)".*?amount">(.*?)</div.*?href="(.*?)".*?post-inf">(.*?)\sVisi', data, re.S) if Movies: for (Image, Title, Runtime, Url, Views) in Movies: Url = "https://www.xpaja.net/" + Url Image = "https://www.xpaja.net" + Image Views = Views.replace(',', '') self.filmliste.append( (decodeHtml(Title), Url, Image, Runtime, Views)) if len(self.filmliste) == 0: self.filmliste.append( (_('No movies found!'), None, None, None, None)) self.ml.setList(map(self._defaultlistleft, self.filmliste)) self.ml.moveToIndex(0) self.keyLocked = False self.th_ThumbsQuery(self.filmliste, 0, 1, 2, None, None, self.page, self.lastpage, mode=1) self.showInfos() def showInfos(self): Url = self['liste'].getCurrent()[0][1] if Url == None: return title = self['liste'].getCurrent()[0][0] pic = self['liste'].getCurrent()[0][2] runtime = self['liste'].getCurrent()[0][3] views = self['liste'].getCurrent()[0][4] self['name'].setText(title) self['handlung'].setText("Runtime: %s\nViews: %s" % (runtime, views)) CoverHelper(self['coverArt']).getCover(pic) def keyOK(self): if self.keyLocked: return Link = self['liste'].getCurrent()[0][1] if Link == None: return self.keyLocked = True getPage(Link).addCallback(self.getVideoPage).addErrback(self.dataError) def getVideoPage(self, data): videoPage = re.findall("<source src=\"(.*?)\" type='video/mp4'", data, re.S) if videoPage: self.keyLocked = False Title = self['liste'].getCurrent()[0][0] url = "https://www.xpaja.net/" + videoPage[0] self.session.open(SimplePlayer, [(Title, url)], showPlaylist=False, ltype='xpaja')
class IStreamFilmListeScreen(Screen): def __init__(self, session, genreLink, genreName): self.session = session self.genreLink = genreLink self.genreName = genreName self.plugin_path = mp_globals.pluginPath self.skin_path = mp_globals.pluginPath + "/skins" path = "%s/%s/defaultListScreen.xml" % (self.skin_path, config.mediaportal.skin.value) if not fileExists(path): path = self.skin_path + "/original/defaultListScreen.xml" print path with open(path, "r") as f: self.skin = f.read() f.close() Screen.__init__(self, session) self["actions"] = ActionMap( [ "OkCancelActions", "ShortcutActions", "ColorActions", "SetupActions", "NumberActions", "MenuActions", "EPGSelectActions", "DirectionActions" ], { "ok": self.keyOK, "cancel": self.keyCancel, "up": self.keyUp, "down": self.keyDown, "right": self.keyRight, "left": self.keyLeft, "upUp": self.key_repeatedUp, "rightUp": self.key_repeatedUp, "leftUp": self.key_repeatedUp, "downUp": self.key_repeatedUp, "upRepeated": self.keyUpRepeated, "downRepeated": self.keyDownRepeated, "rightRepeated": self.keyRightRepeated, "leftRepeated": self.keyLeftRepeated, "nextBouquet": self.keyPageUp, "prevBouquet": self.keyPageDown, "1": self.key_1, "3": self.key_3, "4": self.key_4, "6": self.key_6, "7": self.key_7, "9": self.key_9, "yellow": self.keySort, "red": self.keyTxtPageUp, "blue": self.keyTxtPageDown, "info": self.keyTMDbInfo }, -1) self.sortOrder = 0 self.sortParStr = ["", "?orderby=title&order=ASC", "?imdb_rating=desc"] self.genreTitle = "Filme in Genre " self.sortOrderStr = [ " - Sortierung neuste", " - Sortierung A-Z", " - Sortierung IMDb" ] self.sortOrderStrGenre = "" self['title'] = Label(IS_Version) self['ContentTitle'] = Label("") self['name'] = Label("") self['handlung'] = ScrollLabel("") self['coverArt'] = Pixmap() self['Page'] = Label("Page") self['page'] = Label("") self['F1'] = Label("Text-") self['F2'] = Label("") self['F3'] = Label("Sortierung") self['F4'] = Label("Text+") self.tw_agent_hlp = TwAgentHelper() self.timerStart = False self.seekTimerRun = False self.eventL = threading.Event() self.eventH = threading.Event() self.eventP = threading.Event() self.filmQ = Queue.Queue(0) self.hanQ = Queue.Queue(0) self.picQ = Queue.Queue(0) self.updateP = 0 self.keyLocked = True self.filmListe = [] self.keckse = {} self.page = 0 self.pages = 0 self.neueFilme = re.match('.*?Neue Filme', self.genreName) self.sucheFilme = re.match('.*?Videosuche', self.genreName) self.setGenreStrTitle() self.chooseMenuList = MenuList([], enableWrapAround=True, content=eListboxPythonMultiContent) self.chooseMenuList.l.setFont(0, gFont('mediaportal', 23)) self.chooseMenuList.l.setItemHeight(25) self['liste'] = self.chooseMenuList self.onLayoutFinish.append(self.loadPage) def setGenreStrTitle(self): if not self.neueFilme and not self.sucheFilme: self.sortOrderStrGenre = self.sortOrderStr[self.sortOrder] else: self.sortOrderStrGenre = "" self['ContentTitle'].setText( "%s%s%s" % (self.genreTitle, self.genreName, self.sortOrderStrGenre)) def loadPage(self): print "loadPage:" if not self.sucheFilme: url = "%s%d%s" % (self.genreLink, self.page, self.sortParStr[self.sortOrder]) else: url = self.genreLink if self.page: self['page'].setText("%d / %d" % (self.page, self.pages)) self.filmQ.put(url) print "eventL ", self.eventL.is_set() if not self.eventL.is_set(): self.eventL.set() self.loadPageQueued() else: self['name'].setText('Bitte warten...') self['handlung'].setText("") self['coverArt'].hide() print "eventL ", self.eventL.is_set() def loadPageQueued(self): print "loadPageQueued:" self['name'].setText('Bitte warten...') self['handlung'].setText("") self['coverArt'].hide() while not self.filmQ.empty(): url = self.filmQ.get_nowait() print url self.tw_agent_hlp.getWebPage(self.loadPageData, self.dataError, url, False) def dataError(self, error): self.eventL.clear() print "dataError:" printl(error, self, "E") self.filmListe.append(("No movies found !", "")) self.chooseMenuList.setList(map(IStreamFilmListEntry, self.filmListe)) def loadPageData(self, data): print "loadPageData:", len(data) self.filmListe = [] if not self.neueFilme: filme = re.findall( '<div class="cover">.*?<a href="(.*?)" rel=.*?title="(.*?)">.*?data-original="(.*?)"', data, re.S) else: print "Parse new movies" filme = re.findall( '<div class="voting".*?<a href="(.*?)".*?title="(.*?)">.*?data-original="(.*?)"', data) if filme: print "Movies found !" if not self.pages: m = re.findall('<span class=\'pages\'>Seite 1 von (.*?)</', data) if m: self.pages = int(m[0]) else: self.pages = 1 self.page = 1 print "Page: %d / %d" % (self.page, self.pages) self['page'].setText("%d / %d" % (self.page, self.pages)) for (url, name, imageurl) in filme: #print "Url: ", url, "Name: ", name, "ImgUrl: ", imageurl self.filmListe.append((decodeHtml(name), url, imageurl)) self.chooseMenuList.setList( map(IStreamFilmListEntry, self.filmListe)) self.keyLocked = False self.loadPicQueued() else: print "No movies found !" self.filmListe.append(("No movies found !", "")) self.chooseMenuList.setList( map(IStreamFilmListEntry, self.filmListe)) if self.filmQ.empty(): self.eventL.clear() else: self.loadPageQueued() def loadPicQueued(self): print "loadPicQueued:" self.picQ.put(None) if not self.eventP.is_set(): self.eventP.set() self.loadPic() print "eventP: ", self.eventP.is_set() def loadPic(self): print "loadPic:" if self.picQ.empty(): self.eventP.clear() print "picQ is empty" return if self.eventH.is_set() or self.updateP: print "Pict. or descr. update in progress" print "eventH: ", self.eventH.is_set() print "eventP: ", self.eventP.is_set() print "updateP: ", self.updateP return while not self.picQ.empty(): self.picQ.get_nowait() streamName = self['liste'].getCurrent()[0][0] self['name'].setText(streamName) streamPic = self['liste'].getCurrent()[0][2] streamUrl = self['liste'].getCurrent()[0][1] self.getHandlung(streamUrl) self.updateP = 1 CoverHelper(self['coverArt'], self.showCoverExit).getCover(streamPic) def dataErrorP(self, error): print "dataError:" printl(error, self, "E") self.ShowCoverNone() def getHandlung(self, url): print "getHandlung:" if url == None: print "No Infos found !" self['handlung'].setText("Keine Infos gefunden.") return self.hanQ.put(url) if not self.eventH.is_set(): self.eventH.set() self.getHandlungQeued() print "eventH: ", self.eventH.is_set() def getHandlungQeued(self): while not self.hanQ.empty(): url = self.hanQ.get_nowait() #print url self.tw_agent_hlp.getWebPage(self.setHandlung, self.dataErrorH, url, False) def dataErrorH(self, error): self.eventH.clear() print "dataErrorH:" printl(error, self, "E") self['handlung'].setText("Keine Infos gefunden.") def setHandlung(self, data): print "setHandlung:" m = re.findall('meta property="og:description".*?=\'(.*?)\' />', data) if m: self['handlung'].setText(decodeHtml(re.sub(r"\s+", " ", m[0]))) else: print "No Infos found !" self['handlung'].setText("Keine Infos gefunden.") if not self.hanQ.empty(): self.getHandlungQeued() else: self.eventH.clear() self.loadPic() print "eventH: ", self.eventH.is_set() print "eventL: ", self.eventL.is_set() def showCoverExit(self): self.updateP = 0 if not self.filmQ.empty(): self.loadPageQueued() else: self.eventL.clear() self.loadPic() def keyOK(self): if self.keyLocked or self.eventL.is_set(): return streamLink = self['liste'].getCurrent()[0][1] streamName = self['liste'].getCurrent()[0][0] imageLink = self['liste'].getCurrent()[0][2] self.session.open(IStreamStreams, streamLink, streamName, imageLink) def keyUp(self): if self.keyLocked: return self['liste'].up() def keyDown(self): if self.keyLocked: return self['liste'].down() def keyUpRepeated(self): #print "keyUpRepeated" if self.keyLocked: return self['coverArt'].hide() self['liste'].up() def keyDownRepeated(self): #print "keyDownRepeated" if self.keyLocked: return self['coverArt'].hide() self['liste'].down() def key_repeatedUp(self): #print "key_repeatedUp" if self.keyLocked: return self.loadPicQueued() def keyLeft(self): if self.keyLocked: return self['liste'].pageUp() def keyRight(self): if self.keyLocked: return self['liste'].pageDown() def keyLeftRepeated(self): if self.keyLocked: return self['coverArt'].hide() self['liste'].pageUp() def keyRightRepeated(self): if self.keyLocked: return self['coverArt'].hide() self['liste'].pageDown() def keyPageDown(self): #print "keyPageDown()" if self.seekTimerRun: self.seekTimerRun = False self.keyPageDownFast(1) def keyPageUp(self): #print "keyPageUp()" if self.seekTimerRun: self.seekTimerRun = False self.keyPageUpFast(1) def keyPageUpFast(self, step): if self.keyLocked: return #print "keyPageUpFast: ",step oldpage = self.page if (self.page + step) <= self.pages: self.page += step else: self.page = 1 #print "Page %d/%d" % (self.page,self.pages) if oldpage != self.page: self.loadPage() def keyPageDownFast(self, step): if self.keyLocked: return print "keyPageDownFast: ", step oldpage = self.page if (self.page - step) >= 1: self.page -= step else: self.page = self.pages #print "Page %d/%d" % (self.page,self.pages) if oldpage != self.page: self.loadPage() def key_1(self): #print "keyPageDownFast(2)" self.keyPageDownFast(2) def key_4(self): #print "keyPageDownFast(5)" self.keyPageDownFast(5) def key_7(self): #print "keyPageDownFast(10)" self.keyPageDownFast(10) def key_3(self): #print "keyPageUpFast(2)" self.keyPageUpFast(2) def key_6(self): #print "keyPageUpFast(5)" self.keyPageUpFast(5) def key_9(self): #print "keyPageUpFast(10)" self.keyPageUpFast(10) def keySort(self): if (self.keyLocked): return if not self.neueFilme: if self.sortOrder < 2: self.sortOrder += 1 else: self.sortOrder = 0 self.setGenreStrTitle() self.loadPage() def keyTMDbInfo(self): if not self.keyLocked and TMDbPresent: title = self['liste'].getCurrent()[0][0] self.session.open(TMDbMain, title) elif not self.keyLocked and IMDbPresent: title = self['liste'].getCurrent()[0][0] self.session.open(IMDB, title) def keyTxtPageUp(self): self['handlung'].pageUp() def keyTxtPageDown(self): self['handlung'].pageDown() def keyCancel(self): self.close()
Title = self['liste'].getCurrent()[0][1] self.session.open(StreamAuswahl, Link, Title) class StreamAuswahl(MPScreen): def __init__(self, session, Title, Link): self.Link = Link self.Title = Title self.plugin_path = mp_globals.pluginPath self.skin_path = mp_globals.pluginPath + mp_globals.skinsPath path = "%s/%s/defaultListWideScreen.xml" % (self.skin_path, config.mediaportal.skin.value) if not fileExists(path): path = self.skin_path + mp_globals.skinFallback + "/defaultListWideScreen.xml" with open(path, "r") as f: self.skin = f.read() f.close() MPScreen.__init__(self, session) self["actions"] = ActionMap(["MP_Actions"], { "ok" : self.keyOK, "0" : self.closeAll, "cancel": self.keyCancel }, -1) self['title'] = Label(basename) self['ContentTitle'] = Label("%s" %self.Title) self.filmliste = [] self.keyLocked = True self.ml = MenuList([], enableWrapAround=True, content=eListboxPythonMultiContent) self['liste'] = self.ml self.onLayoutFinish.append(self.loadPage) def loadPage(self): self.keyLocked = True url = self.Link getPage(url, headers={'Content-Type':'application/x-www-form-urlencoded'}).addCallback(self.loadPageData).addErrback(self.dataError) def loadPageData(self, data): parse = re.search('class="wordpress-post-tabs(.*?)class="wpts_cr', data, re.S) if parse: streamsids = re.findall('#tabs-(.*?)".*?(><a href="(http[s]?://(.*?)\/.*?)" target="_blank"|)>((?!<s).*?)<', parse.group(1), re.S) if streamsids: for (id, x, link, hoster, quality) in streamsids: if not link: stream = re.findall('id="tabs-'+id+'.*?="(http[s]?://(.*?)\/.*?)"', parse.group(1), re.S) if stream: if isSupportedHoster(stream[0][1], True): hoster = '%s - %s' % (quality, stream[0][1].replace('wtf-is-this.xyz', 'WTFISTHIS redirect')) self.filmliste.append((hoster, stream[0][0])) else: hoster = '%s - %s' % (quality, hoster.replace('wtf-is-this.xyz', 'WTFISTHIS redirect')) self.filmliste.append((hoster, link)) else: streamsids = re.findall('center;">.*?<strong>(\w.*?)<.*?<iframe\ssrc="(http[s]?://(.*?)\/.*?)"', data, re.S) if streamsids: for (quality, link, hoster) in streamsids: if isSupportedHoster(hoster, True) or hoster == 'wtf-is-this.xyz': hoster = '%s - %s' % (quality, hoster.replace('wtf-is-this.xyz', 'WTFISTHIS redirect')) self.filmliste.append((hoster, link)) if len(self.filmliste) == 0: self.filmliste.append((_('No supported streams found!'), None)) self.ml.setList(map(self._defaultlisthoster, self.filmliste)) self.keyLocked = False def keyOK(self): if self.keyLocked: return streamHoster = self['liste'].getCurrent()[0][0] url = self['liste'].getCurrent()[0][1] if url == None: return if re.search('redirect', streamHoster): getPage(url).addCallback(self.wtfisthis).addErrback(self.dataError) else: get_stream_link(self.session).check_link(url, self.got_link) def wtfisthis(self, data): url = re.search('<a href="(http://wtf-is-this.xyz/\?r=.*?)"', data, re.S) if url: url = url.group(1) self.tw_agent_hlp = TwAgentHelper() self.tw_agent_hlp.getRedirectedUrl(url).addCallback(self.wtfisthisdata).addErrback(self.dataError) else: message = self.session.open(MessageBoxExt, _("Stream not found, try another Stream Hoster."), MessageBoxExt.TYPE_INFO, timeout=3) def wtfisthisdata(self, data): getPage(data, headers={'Content-Type':'application/x-www-form-urlencoded'}).addCallback(self.adfly).addErrback(self.dataError) def adfly(self, data): ysmm = re.search("var\sysmm\s=\s'(.*?)'", data) if ysmm: ysmm = ysmm.group(1) left = '' right = '' for c in [ysmm[i:i+2] for i in range(0, len(ysmm), 2)]: left += c[0] right = c[1] + right url = base64.b64decode(left.encode() + right.encode())[2:].decode() if re.search(r'go\.php\?u\=', url): url = base64.b64decode(re.sub(r'(.*?)u=', '', url)).decode() if re.search('wtf-zone\.xyz', url, re.S): self.wtfzone(str(url)) else: get_stream_link(self.session).check_link(str(url), self.got_link) else: message = self.session.open(MessageBoxExt, _("Stream not found, try another Stream Hoster."), MessageBoxExt.TYPE_INFO, timeout=3) def wtfzone(self, url): if re.search('wtf-zone\.xyz/embed', url, re.S): link = url else: id = re.search('wtf-zone\.xyz/view/.*?/(.*?)$', url) if id: link = "http://wtf-zone.xyz/embed/%s" % str(id.group(1)) getPage(link, headers={'Content-Type':'application/x-www-form-urlencoded'}).addCallback(self.wtfzonedata).addErrback(self.dataError) def wtfzonedata(self, data): stream_url = re.search('\'player\'><iframe.*?src="(http.*?)"', data, re.S) if stream_url: stream_url = stream_url.group(1) get_stream_link(self.session).check_link(str(stream_url), self.got_link) else: message = self.session.open(MessageBoxExt, _("Stream not found, try another Stream Hoster."), MessageBoxExt.TYPE_INFO, timeout=3) def got_link(self, stream_url): if stream_url == None: message = self.session.open(MessageBoxExt, _("Stream not found, try another Stream Hoster."), MessageBoxExt.TYPE_INFO, timeout=3)
def __init__(self, session, genreLink, genreName): self.session = session self.genreLink = genreLink self.genreName = genreName self.plugin_path = mp_globals.pluginPath self.skin_path = mp_globals.pluginPath + "/skins" path = "%s/%s/defaultListScreen.xml" % (self.skin_path, config.mediaportal.skin.value) if not fileExists(path): path = self.skin_path + "/original/defaultListScreen.xml" print path with open(path, "r") as f: self.skin = f.read() f.close() Screen.__init__(self, session) self["actions"] = ActionMap( [ "OkCancelActions", "ShortcutActions", "ColorActions", "SetupActions", "NumberActions", "MenuActions", "EPGSelectActions", "DirectionActions" ], { "ok": self.keyOK, "cancel": self.keyCancel, "up": self.keyUp, "down": self.keyDown, "right": self.keyRight, "left": self.keyLeft, "upUp": self.key_repeatedUp, "rightUp": self.key_repeatedUp, "leftUp": self.key_repeatedUp, "downUp": self.key_repeatedUp, "upRepeated": self.keyUpRepeated, "downRepeated": self.keyDownRepeated, "rightRepeated": self.keyRightRepeated, "leftRepeated": self.keyLeftRepeated, "nextBouquet": self.keyPageUp, "prevBouquet": self.keyPageDown, "1": self.key_1, "3": self.key_3, "4": self.key_4, "6": self.key_6, "7": self.key_7, "9": self.key_9, "yellow": self.keySort, "red": self.keyTxtPageUp, "blue": self.keyTxtPageDown, "info": self.keyTMDbInfo }, -1) self.sortOrder = 0 self.sortParStr = ["", "?orderby=title&order=ASC", "?imdb_rating=desc"] self.genreTitle = "Filme in Genre " self.sortOrderStr = [ " - Sortierung neuste", " - Sortierung A-Z", " - Sortierung IMDb" ] self.sortOrderStrGenre = "" self['title'] = Label(IS_Version) self['ContentTitle'] = Label("") self['name'] = Label("") self['handlung'] = ScrollLabel("") self['coverArt'] = Pixmap() self['Page'] = Label("Page") self['page'] = Label("") self['F1'] = Label("Text-") self['F2'] = Label("") self['F3'] = Label("Sortierung") self['F4'] = Label("Text+") self.tw_agent_hlp = TwAgentHelper() self.timerStart = False self.seekTimerRun = False self.eventL = threading.Event() self.eventH = threading.Event() self.eventP = threading.Event() self.filmQ = Queue.Queue(0) self.hanQ = Queue.Queue(0) self.picQ = Queue.Queue(0) self.updateP = 0 self.keyLocked = True self.filmListe = [] self.keckse = {} self.page = 0 self.pages = 0 self.neueFilme = re.match('.*?Neue Filme', self.genreName) self.sucheFilme = re.match('.*?Videosuche', self.genreName) self.setGenreStrTitle() self.chooseMenuList = MenuList([], enableWrapAround=True, content=eListboxPythonMultiContent) self.chooseMenuList.l.setFont(0, gFont('mediaportal', 23)) self.chooseMenuList.l.setItemHeight(25) self['liste'] = self.chooseMenuList self.onLayoutFinish.append(self.loadPage)
class gstreaminxxxStreamListeScreen(Screen): def __init__(self, session, streamFilmLink, streamName): self.session = session self.streamFilmLink = streamFilmLink self.streamName = streamName path = "/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins/%s/XXXGenreScreen.xml" % config.mediaportal.skin.value if not fileExists(path): path = "/usr/lib/enigma2/python/Plugins/Extensions/MediaPortal/skins/original/XXXGenreScreen.xml" print path with open(path, "r") as f: self.skin = f.read() f.close() Screen.__init__(self, session) self["actions"] = ActionMap(["OkCancelActions", "ShortcutActions", "WizardActions", "ColorActions", "SetupActions", "NumberActions", "MenuActions", "EPGSelectActions"], { "ok" : self.keyOK, "cancel": self.keyCancel }, -1) self['title'] = Label("G-Stream.in") self['name'] = Label('Bitte warten...') self['coverArt'] = Pixmap() self.tw_agent_hlp = TwAgentHelper() self.keyLocked = True self.filmliste = [] self.chooseMenuList = MenuList([], enableWrapAround=True, content=eListboxPythonMultiContent) self.chooseMenuList.l.setFont(0, gFont('mediaportal', 23)) self.chooseMenuList.l.setItemHeight(25) self['genreList'] = self.chooseMenuList self.onLayoutFinish.append(self.loadPage) def loadPage(self): getPage(self.streamFilmLink, agent=special_headers, headers={'Cookie': 'sitechrx='+sitechrx+'; overkill_in='+str(time())}).addCallback(self.loadPageData).addErrback(self.dataError) def dataError(self, error): printl(error,self,"E") def loadPageData(self, data): print "daten bekommen" raw = re.findall('<table\sid="post[0-9]+"(.*?)id="post_thanks_box', data, re.S) streams = re.findall('"(http://.*?(g-stream.in\/secure\/.*?\/|flashx|[w]+.putlocker|[w]+.sockshare|vidx.to|.).*?)"', raw[0], re.S) if streams: for (stream, hostername) in streams: if re.match('.*?(vidx|putlocker|sockshare|streamclou|xvidstage|filenuke|movreel|nowvideo|xvidstream|uploadc|vreer|MonsterUploads|Novamov|Videoweed|Divxstage|Ginbig|Flashstrea|Movshare|yesload|faststream|Vidstream|PrimeShare|flashx|Divxmov|Putme|BitShare)', hostername.strip(' '), re.S|re.I): print hostername, stream if hostername == 'flashx': hostername = 'Flashx' if hostername == 'www.putlocker': hostername = 'Putlocker' if hostername == 'www.sockshare': hostername = 'Sockshare' hostername = hostername.replace('g-stream.in/secure/streamcloud.eu/', 'Streamcloud (Secure)') hostername = hostername.replace('g-stream.in/secure/flashx.tv/', 'Flashx (Secure)') hostername = hostername.replace('g-stream.in/secure/www.putlocker.com/', 'Putlocker (Secure)') hostername = hostername.replace('g-stream.in/secure/www.sockshare.com/', 'Sockshare (Secure)') self.filmliste.append((hostername, stream)) if len(self.filmliste) < 1: self.filmliste.append(('Keine Streams gefunden.', None)) self.filmliste = list(set(self.filmliste)) self.filmliste.sort() self.chooseMenuList.setList(map(gstreaminxxxHosterListEntry, self.filmliste)) self['name'].setText(self.streamName) self.keyLocked = False def keyOK(self): if self.keyLocked: return streamLink = self['genreList'].getCurrent()[0][1] streamHoster = self['genreList'].getCurrent()[0][0] if streamLink == None: return url = streamLink url = url.replace('&','&') print 'Hoster: ' + streamHoster print 'URL: ' + url self['name'].setText('Bitte warten...') if streamHoster == 'Flashx': print 'Direct Play' self.get_stream(url) elif streamHoster == 'Putlocker': print 'Direct Play' self.get_stream(url) elif streamHoster == 'Sockshare': print 'Direct Play' self.get_stream(url) else: print 'Secured Play' self.tw_agent_hlp.headers.addRawHeader('Referer','http://g-stream.in') self.tw_agent_hlp.getRedirectedUrl(self.get_stream, self.dataError, streamLink) def get_stream(self,url): get_stream_link(self.session).check_link(url, self.got_link) def got_link(self, stream_url): self['name'].setText(self.streamName) if stream_url == None: message = self.session.open(MessageBox, _("Stream not found, try another Stream Hoster."), MessageBox.TYPE_INFO, timeout=3) else: #fx = re.match('.*?flashx', stream_url) fx = None if config.mediaportal.useHttpDump.value or fx: if fx: movieinfo = [stream_url,self.streamName,"http://play.flashx.tv/"] else: movieinfo = [stream_url,self.streamName,""] self.session.open(PlayHttpMovie, movieinfo, self.streamName) else: self.session.open(SimplePlayer, [(self.streamName, stream_url)], showPlaylist=False, ltype='gstreaminxxx') def keyCancel(self): self.close()
class IStreamStreams(Screen, ConfigListScreen): def __init__(self, session, filmUrl, filmName, imageLink): self.session = session self.filmUrl = filmUrl self.filmName = filmName self.imageUrl = imageLink self.plugin_path = mp_globals.pluginPath self.skin_path = mp_globals.pluginPath + "/skins" path = "%s/%s/defaultListScreen.xml" % (self.skin_path, config.mediaportal.skin.value) if not fileExists(path): path = self.skin_path + "/original/defaultListScreen.xml" print path with open(path, "r") as f: self.skin = f.read() f.close() Screen.__init__(self, session) self["actions"] = ActionMap( [ "OkCancelActions", "ShortcutActions", "EPGSelectActions", "WizardActions", "ColorActions", "NumberActions", "MenuActions", "MoviePlayerActions", "InfobarSeekActions" ], { "red": self.keyTxtPageUp, "blue": self.keyTxtPageDown, "ok": self.keyOK, "info": self.keyTMDbInfo, "cancel": self.keyCancel }, -1) self['title'] = Label(IS_Version) self['ContentTitle'] = Label("Stream Auswahl") self['coverArt'] = Pixmap() self['handlung'] = ScrollLabel("") self['name'] = Label(filmName) self['Page'] = Label("") self['page'] = Label("") self['F1'] = Label("Text-") self['F2'] = Label("") self['F3'] = Label("") self['F4'] = Label("Text+") self.tw_agent_hlp = TwAgentHelper() self.streamListe = [] self.streamMenuList = MenuList([], enableWrapAround=True, content=eListboxPythonMultiContent) self.streamMenuList.l.setFont(0, gFont('mediaportal', 24)) self.streamMenuList.l.setItemHeight(25) self['liste'] = self.streamMenuList self.keyLocked = True self.onLayoutFinish.append(self.loadPage) def loadPage(self): print "loadPage:" streamUrl = self.filmUrl #print "FilmUrl: %s" % self.filmUrl #print "FilmName: %s" % self.filmName self.tw_agent_hlp.getWebPage(self.parseData, self.dataError, streamUrl, False) def parseData(self, data): print "parseData:" streams = re.findall( 'a class="hoster-button.*?href="(.*?)".*?title=".*?\[(.*?)\](.*?)"', data) mdesc = re.search('class="desc">(.*?)<br />', data, re.S) if mdesc: print "Descr. found" desc = mdesc.group(1).strip() else: desc = "Keine weiteren Info's !" self.streamListe = [] if streams: print "Streams found" for (isUrl, isStream, streamPart) in streams: if re.match( '.*?(putlocker|sockshare|streamclou|xvidstage|filenuke|movreel|nowvideo|xvidstream|uploadc|vreer|MonsterUploads|Novamov|Videoweed|Divxstage|Ginbig|Flashstrea|Movshare|yesload|faststream|Vidstream|PrimeShare|flashx|Divxmov|Putme|Click.*?Play|BitShare)', isStream, re.S | re.I): #print isUrl #print isStream,streamPart self.streamListe.append((isStream, isUrl, streamPart)) else: print "No supported hoster:" print isStream print isUrl else: print "No Streams found" self.streamListe.append(("No streams found!", "", "")) self.streamMenuList.setList( map(IStreamStreamListEntry, self.streamListe)) self['handlung'].setText(decodeHtml(desc)) self.keyLocked = False print "imageUrl: ", self.imageUrl CoverHelper(self['coverArt']).getCover(self.imageUrl) def dataError(self, error): print "dataError:" printl(error, self, "E") self.streamListe.append(("Read error !", "")) self.streamMenuList.setList( map(IStreamStreamListEntry, self.streamListe)) def got_link(self, stream_url): print "got_link:" if stream_url == None: message = self.session.open( MessageBox, _("Stream not found, try another Stream Hoster."), MessageBox.TYPE_INFO, timeout=3) else: title = self.filmName + self['liste'].getCurrent()[0][2] if config.mediaportal.useHttpDump.value: movieinfo = [stream_url, self.filmName, ""] self.session.open(PlayHttpMovie, movieinfo, title) else: self.session.open(SimplePlayer, [(title, stream_url, self.imageUrl)], cover=True, showPlaylist=False, ltype='istream.ws') def keyTMDbInfo(self): if TMDbPresent: self.session.open(TMDbMain, self.filmName) elif IMDbPresent: self.session.open(IMDB, self.filmName) def keyOK(self): if self.keyLocked: return streamLink = self['liste'].getCurrent()[0][1] self.tw_agent_hlp.getRedirectedUrl(self.keyOK2, self.dataError, streamLink) def keyOK2(self, streamLink): saveads = re.search('.*?saveads.org', streamLink, re.S) if saveads: id = re.search('url=(.*?)%3D', streamLink, re.S) url = "http://istream.ws/go.php?url=" + id.group(1) self.tw_agent_hlp.getRedirectedUrl(self.keyOK3, self.dataError, url) else: get_stream_link(self.session).check_link(streamLink, self.got_link) def keyOK3(self, streamLink): get_stream_link(self.session).check_link(streamLink, self.got_link) def keyTxtPageUp(self): self['handlung'].pageUp() def keyTxtPageDown(self): self['handlung'].pageDown() def keyCancel(self): self.close()
class IStreamFilmListeScreen(Screen): def __init__(self, session, genreLink, genreName): self.session = session self.genreLink = genreLink self.genreName = genreName self.plugin_path = mp_globals.pluginPath self.skin_path = mp_globals.pluginPath + "/skins" path = "%s/%s/defaultListScreen.xml" % (self.skin_path, config.mediaportal.skin.value) if not fileExists(path): path = self.skin_path + "/original/defaultListScreen.xml" print path with open(path, "r") as f: self.skin = f.read() f.close() Screen.__init__(self, session) self["actions"] = ActionMap( [ "OkCancelActions", "ShortcutActions", "ColorActions", "SetupActions", "NumberActions", "MenuActions", "EPGSelectActions", "DirectionActions", ], { "ok": self.keyOK, "cancel": self.keyCancel, "up": self.keyUp, "down": self.keyDown, "right": self.keyRight, "left": self.keyLeft, "upUp": self.key_repeatedUp, "rightUp": self.key_repeatedUp, "leftUp": self.key_repeatedUp, "downUp": self.key_repeatedUp, "upRepeated": self.keyUpRepeated, "downRepeated": self.keyDownRepeated, "rightRepeated": self.keyRightRepeated, "leftRepeated": self.keyLeftRepeated, "nextBouquet": self.keyPageUp, "prevBouquet": self.keyPageDown, "1": self.key_1, "3": self.key_3, "4": self.key_4, "6": self.key_6, "7": self.key_7, "9": self.key_9, "yellow": self.keySort, "red": self.keyTxtPageUp, "blue": self.keyTxtPageDown, "info": self.keyTMDbInfo, }, -1, ) self.sortOrder = 0 self.sortParStr = ["", "?orderby=title&order=ASC", "?imdb_rating=desc"] self.genreTitle = "Filme in Genre " self.sortOrderStr = [" - Sortierung neuste", " - Sortierung A-Z", " - Sortierung IMDb"] self.sortOrderStrGenre = "" self["title"] = Label(IS_Version) self["ContentTitle"] = Label("") self["name"] = Label("") self["handlung"] = ScrollLabel("") self["coverArt"] = Pixmap() self["Page"] = Label("Page") self["page"] = Label("") self["F1"] = Label("Text-") self["F2"] = Label("") self["F3"] = Label("Sortierung") self["F4"] = Label("Text+") self.tw_agent_hlp = TwAgentHelper() self.timerStart = False self.seekTimerRun = False self.eventL = threading.Event() self.eventH = threading.Event() self.eventP = threading.Event() self.filmQ = Queue.Queue(0) self.hanQ = Queue.Queue(0) self.picQ = Queue.Queue(0) self.updateP = 0 self.keyLocked = True self.filmListe = [] self.keckse = {} self.page = 0 self.pages = 0 self.neueFilme = re.match(".*?Neue Filme", self.genreName) self.sucheFilme = re.match(".*?Videosuche", self.genreName) self.setGenreStrTitle() self.chooseMenuList = MenuList([], enableWrapAround=True, content=eListboxPythonMultiContent) self.chooseMenuList.l.setFont(0, gFont("mediaportal", 23)) self.chooseMenuList.l.setItemHeight(25) self["liste"] = self.chooseMenuList self.onLayoutFinish.append(self.loadPage) def setGenreStrTitle(self): if not self.neueFilme and not self.sucheFilme: self.sortOrderStrGenre = self.sortOrderStr[self.sortOrder] else: self.sortOrderStrGenre = "" self["ContentTitle"].setText("%s%s%s" % (self.genreTitle, self.genreName, self.sortOrderStrGenre)) def loadPage(self): print "loadPage:" if not self.sucheFilme: url = "%s%d%s" % (self.genreLink, self.page, self.sortParStr[self.sortOrder]) else: url = self.genreLink if self.page: self["page"].setText("%d / %d" % (self.page, self.pages)) self.filmQ.put(url) print "eventL ", self.eventL.is_set() if not self.eventL.is_set(): self.eventL.set() self.loadPageQueued() else: self["name"].setText("Bitte warten...") self["handlung"].setText("") self["coverArt"].hide() print "eventL ", self.eventL.is_set() def loadPageQueued(self): print "loadPageQueued:" self["name"].setText("Bitte warten...") self["handlung"].setText("") self["coverArt"].hide() while not self.filmQ.empty(): url = self.filmQ.get_nowait() print url self.tw_agent_hlp.getWebPage(self.loadPageData, self.dataError, url, False) def dataError(self, error): self.eventL.clear() print "dataError:" printl(error, self, "E") self.filmListe.append(("No movies found !", "")) self.chooseMenuList.setList(map(IStreamFilmListEntry, self.filmListe)) def loadPageData(self, data): print "loadPageData:", len(data) self.filmListe = [] if not self.neueFilme: filme = re.findall( '<div class="cover">.*?<a href="(.*?)" rel=.*?title="(.*?)">.*?data-original="(.*?)"', data, re.S ) else: print "Parse new movies" filme = re.findall('<div class="voting".*?<a href="(.*?)".*?title="(.*?)">.*?data-original="(.*?)"', data) if filme: print "Movies found !" if not self.pages: m = re.findall("<span class='pages'>Seite 1 von (.*?)</", data) if m: self.pages = int(m[0]) else: self.pages = 1 self.page = 1 print "Page: %d / %d" % (self.page, self.pages) self["page"].setText("%d / %d" % (self.page, self.pages)) for (url, name, imageurl) in filme: # print "Url: ", url, "Name: ", name, "ImgUrl: ", imageurl self.filmListe.append((decodeHtml(name), url, imageurl)) self.chooseMenuList.setList(map(IStreamFilmListEntry, self.filmListe)) self.keyLocked = False self.loadPicQueued() else: print "No movies found !" self.filmListe.append(("No movies found !", "")) self.chooseMenuList.setList(map(IStreamFilmListEntry, self.filmListe)) if self.filmQ.empty(): self.eventL.clear() else: self.loadPageQueued() def loadPicQueued(self): print "loadPicQueued:" self.picQ.put(None) if not self.eventP.is_set(): self.eventP.set() self.loadPic() print "eventP: ", self.eventP.is_set() def loadPic(self): print "loadPic:" if self.picQ.empty(): self.eventP.clear() print "picQ is empty" return if self.eventH.is_set() or self.updateP: print "Pict. or descr. update in progress" print "eventH: ", self.eventH.is_set() print "eventP: ", self.eventP.is_set() print "updateP: ", self.updateP return while not self.picQ.empty(): self.picQ.get_nowait() streamName = self["liste"].getCurrent()[0][0] self["name"].setText(streamName) streamPic = self["liste"].getCurrent()[0][2] streamUrl = self["liste"].getCurrent()[0][1] self.getHandlung(streamUrl) self.updateP = 1 CoverHelper(self["coverArt"], self.showCoverExit).getCover(streamPic) def dataErrorP(self, error): print "dataError:" printl(error, self, "E") self.ShowCoverNone() def getHandlung(self, url): print "getHandlung:" if url == None: print "No Infos found !" self["handlung"].setText("Keine Infos gefunden.") return self.hanQ.put(url) if not self.eventH.is_set(): self.eventH.set() self.getHandlungQeued() print "eventH: ", self.eventH.is_set() def getHandlungQeued(self): while not self.hanQ.empty(): url = self.hanQ.get_nowait() # print url self.tw_agent_hlp.getWebPage(self.setHandlung, self.dataErrorH, url, False) def dataErrorH(self, error): self.eventH.clear() print "dataErrorH:" printl(error, self, "E") self["handlung"].setText("Keine Infos gefunden.") def setHandlung(self, data): print "setHandlung:" m = re.findall("meta property=\"og:description\".*?='(.*?)' />", data) if m: self["handlung"].setText(decodeHtml(re.sub(r"\s+", " ", m[0]))) else: print "No Infos found !" self["handlung"].setText("Keine Infos gefunden.") if not self.hanQ.empty(): self.getHandlungQeued() else: self.eventH.clear() self.loadPic() print "eventH: ", self.eventH.is_set() print "eventL: ", self.eventL.is_set() def showCoverExit(self): self.updateP = 0 if not self.filmQ.empty(): self.loadPageQueued() else: self.eventL.clear() self.loadPic() def keyOK(self): if self.keyLocked or self.eventL.is_set(): return streamLink = self["liste"].getCurrent()[0][1] streamName = self["liste"].getCurrent()[0][0] imageLink = self["liste"].getCurrent()[0][2] self.session.open(IStreamStreams, streamLink, streamName, imageLink) def keyUp(self): if self.keyLocked: return self["liste"].up() def keyDown(self): if self.keyLocked: return self["liste"].down() def keyUpRepeated(self): # print "keyUpRepeated" if self.keyLocked: return self["coverArt"].hide() self["liste"].up() def keyDownRepeated(self): # print "keyDownRepeated" if self.keyLocked: return self["coverArt"].hide() self["liste"].down() def key_repeatedUp(self): # print "key_repeatedUp" if self.keyLocked: return self.loadPicQueued() def keyLeft(self): if self.keyLocked: return self["liste"].pageUp() def keyRight(self): if self.keyLocked: return self["liste"].pageDown() def keyLeftRepeated(self): if self.keyLocked: return self["coverArt"].hide() self["liste"].pageUp() def keyRightRepeated(self): if self.keyLocked: return self["coverArt"].hide() self["liste"].pageDown() def keyPageDown(self): # print "keyPageDown()" if self.seekTimerRun: self.seekTimerRun = False self.keyPageDownFast(1) def keyPageUp(self): # print "keyPageUp()" if self.seekTimerRun: self.seekTimerRun = False self.keyPageUpFast(1) def keyPageUpFast(self, step): if self.keyLocked: return # print "keyPageUpFast: ",step oldpage = self.page if (self.page + step) <= self.pages: self.page += step else: self.page = 1 # print "Page %d/%d" % (self.page,self.pages) if oldpage != self.page: self.loadPage() def keyPageDownFast(self, step): if self.keyLocked: return print "keyPageDownFast: ", step oldpage = self.page if (self.page - step) >= 1: self.page -= step else: self.page = self.pages # print "Page %d/%d" % (self.page,self.pages) if oldpage != self.page: self.loadPage() def key_1(self): # print "keyPageDownFast(2)" self.keyPageDownFast(2) def key_4(self): # print "keyPageDownFast(5)" self.keyPageDownFast(5) def key_7(self): # print "keyPageDownFast(10)" self.keyPageDownFast(10) def key_3(self): # print "keyPageUpFast(2)" self.keyPageUpFast(2) def key_6(self): # print "keyPageUpFast(5)" self.keyPageUpFast(5) def key_9(self): # print "keyPageUpFast(10)" self.keyPageUpFast(10) def keySort(self): if self.keyLocked: return if not self.neueFilme: if self.sortOrder < 2: self.sortOrder += 1 else: self.sortOrder = 0 self.setGenreStrTitle() self.loadPage() def keyTMDbInfo(self): if not self.keyLocked and TMDbPresent: title = self["liste"].getCurrent()[0][0] self.session.open(TMDbMain, title) elif not self.keyLocked and IMDbPresent: title = self["liste"].getCurrent()[0][0] self.session.open(IMDB, title) def keyTxtPageUp(self): self["handlung"].pageUp() def keyTxtPageDown(self): self["handlung"].pageDown() def keyCancel(self): self.close()
def __init__(self, session, host, hash, playList, playIdx, listTitle,cover): SimplePlayer.__init__(self, session, playList, playIdx=playIdx, playAll=True, listTitle=listTitle, ltype='myfreemp3', autoScrSaver=True, cover=cover, playerMode='MP3', googleCoverSupp=True, embeddedCoverArt=True) self.mfmp3_playIdx = 0 self._host = host self._hash = hash self.tw_agent_hlp = TwAgentHelper(followRedirect=True)
class IStreamStreams(Screen, ConfigListScreen): def __init__(self, session, filmUrl, filmName, imageLink): self.session = session self.filmUrl = filmUrl self.filmName = filmName self.imageUrl = imageLink self.plugin_path = mp_globals.pluginPath self.skin_path = mp_globals.pluginPath + "/skins" path = "%s/%s/defaultListScreen.xml" % (self.skin_path, config.mediaportal.skin.value) if not fileExists(path): path = self.skin_path + "/original/defaultListScreen.xml" print path with open(path, "r") as f: self.skin = f.read() f.close() Screen.__init__(self, session) self["actions"] = ActionMap( [ "OkCancelActions", "ShortcutActions", "EPGSelectActions", "WizardActions", "ColorActions", "NumberActions", "MenuActions", "MoviePlayerActions", "InfobarSeekActions", ], { "red": self.keyTxtPageUp, "blue": self.keyTxtPageDown, "ok": self.keyOK, "info": self.keyTMDbInfo, "cancel": self.keyCancel, }, -1, ) self["title"] = Label(IS_Version) self["ContentTitle"] = Label("Stream Auswahl") self["coverArt"] = Pixmap() self["handlung"] = ScrollLabel("") self["name"] = Label(filmName) self["Page"] = Label("") self["page"] = Label("") self["F1"] = Label("Text-") self["F2"] = Label("") self["F3"] = Label("") self["F4"] = Label("Text+") self.tw_agent_hlp = TwAgentHelper() self.streamListe = [] self.streamMenuList = MenuList([], enableWrapAround=True, content=eListboxPythonMultiContent) self.streamMenuList.l.setFont(0, gFont("mediaportal", 24)) self.streamMenuList.l.setItemHeight(25) self["liste"] = self.streamMenuList self.keyLocked = True self.onLayoutFinish.append(self.loadPage) def loadPage(self): print "loadPage:" streamUrl = self.filmUrl # print "FilmUrl: %s" % self.filmUrl # print "FilmName: %s" % self.filmName self.tw_agent_hlp.getWebPage(self.parseData, self.dataError, streamUrl, False) def parseData(self, data): print "parseData:" streams = re.findall('a class="hoster-button.*?href="(.*?)".*?title=".*?\[(.*?)\](.*?)"', data) mdesc = re.search('class="desc">(.*?)<br />', data, re.S) if mdesc: print "Descr. found" desc = mdesc.group(1).strip() else: desc = "Keine weiteren Info's !" self.streamListe = [] if streams: print "Streams found" for (isUrl, isStream, streamPart) in streams: if re.match( ".*?(putlocker|sockshare|streamclou|xvidstage|filenuke|movreel|nowvideo|xvidstream|uploadc|vreer|MonsterUploads|Novamov|Videoweed|Divxstage|Ginbig|Flashstrea|Movshare|yesload|faststream|Vidstream|PrimeShare|flashx|Divxmov|Putme|Click.*?Play|BitShare)", isStream, re.S | re.I, ): # print isUrl # print isStream,streamPart self.streamListe.append((isStream, isUrl, streamPart)) else: print "No supported hoster:" print isStream print isUrl else: print "No Streams found" self.streamListe.append(("No streams found!", "", "")) self.streamMenuList.setList(map(IStreamStreamListEntry, self.streamListe)) self["handlung"].setText(decodeHtml(desc)) self.keyLocked = False print "imageUrl: ", self.imageUrl CoverHelper(self["coverArt"]).getCover(self.imageUrl) def dataError(self, error): print "dataError:" printl(error, self, "E") self.streamListe.append(("Read error !", "")) self.streamMenuList.setList(map(IStreamStreamListEntry, self.streamListe)) def got_link(self, stream_url): print "got_link:" if stream_url == None: message = self.session.open( MessageBox, _("Stream not found, try another Stream Hoster."), MessageBox.TYPE_INFO, timeout=3 ) else: title = self.filmName + self["liste"].getCurrent()[0][2] if config.mediaportal.useHttpDump.value: movieinfo = [stream_url, self.filmName, ""] self.session.open(PlayHttpMovie, movieinfo, title) else: self.session.open( SimplePlayer, [(title, stream_url, self.imageUrl)], cover=True, showPlaylist=False, ltype="istream.ws", ) def keyTMDbInfo(self): if TMDbPresent: self.session.open(TMDbMain, self.filmName) elif IMDbPresent: self.session.open(IMDB, self.filmName) def keyOK(self): if self.keyLocked: return streamLink = self["liste"].getCurrent()[0][1] self.tw_agent_hlp.getRedirectedUrl(self.keyOK2, self.dataError, streamLink) def keyOK2(self, streamLink): saveads = re.search(".*?saveads.org", streamLink, re.S) if saveads: id = re.search("url=(.*?)%3D", streamLink, re.S) url = "http://istream.ws/go.php?url=" + id.group(1) self.tw_agent_hlp.getRedirectedUrl(self.keyOK3, self.dataError, url) else: get_stream_link(self.session).check_link(streamLink, self.got_link) def keyOK3(self, streamLink): get_stream_link(self.session).check_link(streamLink, self.got_link) def keyTxtPageUp(self): self["handlung"].pageUp() def keyTxtPageDown(self): self["handlung"].pageDown() def keyCancel(self): self.close()
class StreamAuswahl(MPScreen): def __init__(self, session, Title, Link): self.Link = Link self.Title = Title self.plugin_path = mp_globals.pluginPath self.skin_path = mp_globals.pluginPath + mp_globals.skinsPath path = "%s/%s/defaultListWideScreen.xml" % (self.skin_path, config.mediaportal.skin.value) if not fileExists(path): path = self.skin_path + mp_globals.skinFallback + "/defaultListWideScreen.xml" with open(path, "r") as f: self.skin = f.read() f.close() MPScreen.__init__(self, session) self["actions"] = ActionMap(["MP_Actions"], { "ok" : self.keyOK, "0" : self.closeAll, "cancel": self.keyCancel }, -1) self['title'] = Label(basename) self['ContentTitle'] = Label("%s" %self.Title) self.filmliste = [] self.keyLocked = True self.ml = MenuList([], enableWrapAround=True, content=eListboxPythonMultiContent) self['liste'] = self.ml self.onLayoutFinish.append(self.loadPage) def loadPage(self): self.keyLocked = True url = self.Link getPage(url).addCallback(self.loadPageData).addErrback(self.dataError) def loadPageData(self, data): parse = re.search('class="wordpress-post-tabs(.*?)class="wpts_cr', data, re.S) if parse: streamsids = re.findall('#tabs-(.*?)".*?(><a href="\s*(http[s]?://(.*?)\/.*?)" target="_blank"|)>((?!<s).*?)<', parse.group(1), re.S) if streamsids: for (id, x, link, hoster, quality) in streamsids: if not link: stream = re.findall('id="tabs-'+id+'.*?="\s*(http[s]?://(.*?)\/.*?)"', parse.group(1), re.S) if stream: if "streamdefence" in stream[0][1]: hoster = '%s - %s' % (quality, 'WTFCrypt') self.filmliste.append((hoster, stream[0][0])) elif "wtf-zone.xyz" in stream[0][1]: hoster = '%s - %s' % (quality, 'WTFZONE') self.filmliste.append((hoster, stream[0][0])) elif isSupportedHoster(stream[0][1], True): hoster = '%s - %s' % (quality, stream[0][1].replace('wtf-is-this.xyz', 'WTFISTHIS')) self.filmliste.append((hoster, stream[0][0])) else: if hoster != 'wtf-videos.xyz': hoster = '%s - %s' % (quality, hoster.replace('wtf-is-this.xyz', 'WTFISTHIS').replace('wtf-zone.xyz', 'WTFZONE')) self.filmliste.append((hoster, link.split(' ')[0])) if len(self.filmliste) == 0: self.filmliste.append((_('No supported streams found!'), None)) self.ml.setList(map(self._defaultlisthoster, self.filmliste)) self.keyLocked = False def keyOK(self): if self.keyLocked: return streamHoster = self['liste'].getCurrent()[0][0] url = self['liste'].getCurrent()[0][1] if url == None: return if re.search('WTFZONE', streamHoster): getPage(url).addCallback(self.wtfzoneembed).addErrback(self.dataError) elif re.search('WTFISTHIS', streamHoster): getPage(url).addCallback(self.wtfisthis).addErrback(self.dataError) elif re.search('WTFCrypt', streamHoster): getPage(url, headers={'Referer': self.Link}).addCallback(self.wtfcrypt).addErrback(self.dataError) else: get_stream_link(self.session).check_link(url, self.got_link) def wtfcrypt(self, data): key = re.search('document.write.*?\("(.*?)"', data) if key: wtfcode = re.sub('[^A-Za-z0-9\+\/\=]', '', key.group(1)) mycode = base64.b64decode(base64.b64decode(wtfcode)) key = re.search('document.write.*?\("(.*?)"', mycode) if key: wtfcode = re.sub('[^A-Za-z0-9\+\/\=]', '', key.group(1)) mycode2 = base64.b64decode(base64.b64decode(wtfcode)) stream_url = re.search('src="(http.*?)"', mycode2) if stream_url: stream_url = stream_url.group(1) get_stream_link(self.session).check_link(str(stream_url), self.got_link) return message = self.session.open(MessageBoxExt, _("Broken URL parsing, please report to the developers."), MessageBoxExt.TYPE_INFO, timeout=3) def wtfisthis(self, data): url = re.search('<a href="(http://wtf-is-this.xyz/\?r=.*?)"', data, re.S) if url: url = url.group(1) self.tw_agent_hlp = TwAgentHelper() self.tw_agent_hlp.getRedirectedUrl(url).addCallback(self.wtfisthisdata).addErrback(self.dataError) else: self.adfly(data) def wtfisthisdata(self, data): getPage(data).addCallback(self.adfly).addErrback(self.dataError) def wtfisthisembed(self, data): getPage(data).addCallback(self.adfly).addErrback(self.dataError) def adfly(self, data): ysmm = re.search("var\sysmm\s=\s'(.*?)'", data) if ysmm: ysmm = ysmm.group(1) left = '' right = '' for c in [ysmm[i:i+2] for i in range(0, len(ysmm), 2)]: left += c[0] right = c[1] + right url = base64.b64decode(left.encode() + right.encode())[2:].decode() if re.search(r'go\.php\?u\=', url): url = base64.b64decode(re.sub(r'(.*?)u=', '', url)).decode() if re.search('wtf-zone\.xyz', url, re.S): self.wtfzone(str(url)) return else: get_stream_link(self.session).check_link(str(url), self.got_link) return else: link = re.findall('="(http://wtf-zone\.xyz/view.*?)"', data, re.S) if link: self.wtfzone(link[0]) return message = self.session.open(MessageBoxExt, _("Broken URL parsing, please report to the developers."), MessageBoxExt.TYPE_INFO, timeout=3) def wtfzone(self, url): if re.search('wtf-zone\.xyz/embed', url, re.S): link = url else: id = re.search('wtf-zone\.xyz/view/.*?/(.*?)$', url) if id: link = "http://wtf-zone.xyz/embed/%s" % str(id.group(1)) getPage(link).addCallback(self.wtfzonelink).addErrback(self.dataError) def wtfzoneembed(self, data): link = re.search('embedURL"\scontent="(.*?)"', data) if link: getPage(link.group(1)).addCallback(self.wtfzonelink).addErrback(self.dataError) def wtfzonelink(self, data): stream_url = re.findall('\s+src="(http://[^wtf\-zone\.xyz].*?)"', data) if stream_url: stream_url = stream_url[-1] get_stream_link(self.session).check_link(str(stream_url), self.got_link) else: message = self.session.open(MessageBoxExt, _("Broken URL parsing, please report to the developers."), MessageBoxExt.TYPE_INFO, timeout=3) def got_link(self, stream_url): title = self.Title self.session.open(SimplePlayer, [(self.Title, stream_url)], showPlaylist=False, ltype='wtfvideofree')