Exemple #1
0
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 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')
Exemple #3
0
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()
Exemple #4
0
		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("&amp;","&")
					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:
Exemple #5
0
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()
Exemple #6
0
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()
Exemple #7
0
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()
Exemple #8
0
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}(.*?&hellip;)',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()
Exemple #9
0
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("&amp;", "&")
                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('&amp;', '&')
                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 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)
Exemple #11
0
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()
Exemple #12
0
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()
Exemple #13
0
class m4kStreamListeScreen(MPScreen):
	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 loadPage(self):
		self['name'].setText(_("Please wait..."))
		self.tw_agent_hlp.getWebPage(self.url).addCallback(self.loadPageData).addErrback(self.dataError)

	def loadPageData(self, data):
		if re.match('.*?<img src="https://img.movie4k.*?/thumbs/', data, re.S):
			cover = re.findall('<img src="https://img.movie4k.*?/thumbs/(.*?)"', data, re.S)
			self.pic = cover[0]
			self.cover = "%s%s" %(t_url,self.pic)
			CoverHelper(self['coverArt']).getCover(self.cover)
		if self.which == "movie":
			streams = []
			dupe = []
			hosters = re.findall('<tr id=.*?tablemoviesindex2.*?>(.*?)</td></tr>', data, re.S)
			if hosters:
				self.list = []
				for hoster_raw in hosters:
					hoster_data = re.findall('href.*?"(.*?)">(.*?)<img.*?&nbsp;(.*?)<', hoster_raw)
					if hoster_data:
						(h_url, h_date, h_name) = hoster_data[0]
						hoster_url = "%s%s" % (m4k_url, h_url.replace('\\',''))
						if not hoster_url in dupe:
							dupe.append(hoster_url)
							if isSupportedHoster(h_name, True):
								self.list.append((h_name, hoster_url,h_date,'',''))
								self['name'].setText(self.name)
			else:
				hosters = re.findall('<a target="_blank" href="(http://(.*?)\..*?)"><img border=0', data, re.S)
				if hosters:
					(h_url, h_name) = hosters[0]
					print h_url, h_name.capitalize()
					if isSupportedHoster(h_name, True):
						self.list.append((h_name.capitalize(),h_url,'', '',''))
						self['name'].setText(self.name)
		else:
			hoster = re.findall('"tablemoviesindex2.*?<a href.*?"(.*?.html).*?style.*?src.*?"/img/.*?.[gif|png].*?> \&nbsp;(.*?)</a></td></tr>', data, re.S)
			if hoster:
				for url,hostername in hoster:
					url = "%s%s" % (m4k_url,url)
					if isSupportedHoster(hostername, True):
						self.list.append((hostername,url,'','',''))
						self['name'].setText(self.name)
		if len(self.list) == 0:
			self.list.append(("", "", "No supported streams found."))
			self.ml.setList(map(self.kxStreamListEntry, self.list))
			self.showInfosData(data)
		else:
			self.ml.setList(map(self.kxStreamListEntry, self.list))
			self.keyLocked = False
			self.showInfosData(data)
		self['name'].setText(self.name)

	def keyOK(self):
		exist = self['liste'].getCurrent()
		if self.keyLocked or exist == None:
			return
		streamLink = self['liste'].getCurrent()[0][1]
		self.tw_agent_hlp.getWebPage(streamLink).addCallback(self.get_streamlink, streamLink).addErrback(self.dataError)

	def get_streamlink(self, data, streamLink):
		if re.match('.*?(http://img.movie4k.*?/img/parts/teil1_aktiv.png|http://img.movie4k.*?/img/parts/teil1_inaktiv.png|http://img.movie4k.*?/img/parts/part1_active.png|http://img.movie4k.*?/img/parts/part1_inactive.png)', data, re.S):
			self.session.open(m4kPartListeScreen, streamLink, self.name)
		elif isSupportedHoster(streamLink, True):
			get_stream_link(self.session).check_link(streamLink, self.got_link, False)
			return
		else:
			link = re.search('<a\starget="_blank"\shref="(.*?)"><img\sborder=0\ssrc="http://img.movie4k.*?/img/click_link.jpg"', data, re.S|re.I)
			if link:
				get_stream_link(self.session).check_link(link.group(1), self.got_link, False)
				return
			link = re.search('<iframe\swidth=".*?"\sheight=".*?"\sframeborder="0"\ssrc="(.*?)"\sscrolling="no"></iframe>', data, re.S|re.I)
			if link:
				get_stream_link(self.session).check_link(link.group(1), self.got_link, False)
				return
			link = re.search('<iframe\ssrc="(.*?)"\sframeborder=0\smarginwidth=0\smarginheight=0\sscrolling=no\swidth=.*?height=.*?></iframe>', data, re.S|re.I)
			if link:
				get_stream_link(self.session).check_link(link.group(1), self.got_link, False)
				return
			link = re.search("<iframe\sstyle=.*?src='(.*?)'\sscrolling='no'></iframe>", data, re.S|re.I)
			if link:
				get_stream_link(self.session).check_link(link.group(1), self.got_link, False)
				return
			link = re.search('<div\sid="emptydiv"><iframe.*?src=["|\'](.*?)["|\']', data, re.S|re.I)
			if link:
				get_stream_link(self.session).check_link(link.group(1), self.got_link, False)
				return
			link = re.search('<div\sid="emptydiv"><script type="text/javascript"\ssrc=["|\'](.*?)["|\']>', data, re.S|re.I)
			if link:
				get_stream_link(self.session).check_link(link.group(1).replace('?embed',''), self.got_link, False)
				return
			link = re.search('<object\sid="vbbplayer".*?src=["|\'](.*?)["|\']', data, re.S|re.I)
			if link:
				get_stream_link(self.session).check_link(link.group(1), self.got_link, False)
				return
			link = re.search('<param\sname="movie"\svalue="(.*?)"', data, re.S|re.I)
			if link:
				get_stream_link(self.session).check_link(link.group(1), self.got_link, False)
				return
			link = re.search('<a target="_blank" href="(.*?)"><img border=0 src="/img/click_link.jpg"', data, re.S|re.I)
			if link:
				get_stream_link(self.session).check_link(link.group(1), self.got_link, False)
				return
			link = re.search('<iframe\ssrc="(.*?)"\swidth=".*?"\sheight=".*?"\sframeborder="0"\sscrolling="no"></iframe>', data, re.S|re.I)
			if link:
				get_stream_link(self.session).check_link(link.group(1), self.got_link, False)
				return
			message = self.session.open(MessageBoxExt, _("Stream not found, try another Stream Hoster."), MessageBoxExt.TYPE_INFO, timeout=5)

	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:
			if not fileExists(config.mediaportal.watchlistpath.value+"mp_m4k_watched"):
				open(config.mediaportal.watchlistpath.value+"mp_m4k_watched","w").close()
			self.update_liste = []
			leer = os.path.getsize(config.mediaportal.watchlistpath.value+"mp_m4k_watched")
			if not leer == 0:
				self.updates_read = open(config.mediaportal.watchlistpath.value+"mp_m4k_watched" , "r")
				for lines in sorted(self.updates_read.readlines()):
					line = re.findall('"(.*?)"', lines)
					if line:
						self.update_liste.append("%s" % (line[0]))
				self.updates_read.close()

				updates_read2 = open(config.mediaportal.watchlistpath.value+"mp_m4k_watched" , "a")
				check = ("%s" % self.name)
				if not check in self.update_liste:
					updates_read2.write('"%s"\n' % (self.name))
					updates_read2.close()
				else:
					print "dupe %s" % (self.name)
			else:
				updates_read3 = open(config.mediaportal.watchlistpath.value+"mp_m4k_watched" , "a")
				updates_read3.write('"%s"\n' % (self.name))
				updates_read3.close()

			self.session.open(SimplePlayer, [(self.name, stream_url, self.cover)], showPlaylist=False, ltype='movie4k', cover=True)
class realdebrid_oauth2(Screen):

	def __init__(self, session, link , calltype='link'):
		self.link = link
		self.calltype = calltype
		self.raccesstoken = config.mediaportal.realdebrid_accesstoken.value
		self.rrefreshtoken = config.mediaportal.realdebrid_refreshtoken.value
		self.rclient_id = config.mediaportal.realdebrid_rclient_id.value
		self.rclient_secret = config.mediaportal.realdebrid_rclient_secret.value
		self.rAPPid = "2BKDBPNPA4D3U"
		self.rdevicecode = ''
		self.mpversion = config.mediaportal.versiontext.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.mediaportal.realdebrid_accesstoken.value = ''
			config.mediaportal.realdebrid_accesstoken.save()
			self.raccesstoken = ''
			config.mediaportal.realdebrid_refreshtoken.value = ''
			config.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.mediaportal.realdebrid_rclient_id.value = self.rclient_id
				config.mediaportal.realdebrid_rclient_id.save()
				config.mediaportal.realdebrid_rclient_secret.value = self.rclient_secret
				config.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.mediaportal.realdebrid_accesstoken.value = self.raccesstoken
			config.mediaportal.realdebrid_accesstoken.save()
			config.mediaportal.realdebrid_refreshtoken.value = self.rrefreshtoken
			config.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.mediaportal.realdebrid_accesstoken.value = ''
				config.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.mediaportal.realdebrid_accesstoken.value = ''
			config.mediaportal.realdebrid_accesstoken.save()
			self.codeerror('Realdebrid broken RefreshToken')
		else:
			self.raccesstoken = str(result['access_token'])
			self.rrefreshtoken = str(result['refresh_token'])
			config.mediaportal.realdebrid_accesstoken.value = self.raccesstoken
			config.mediaportal.realdebrid_accesstoken.save()
			config.mediaportal.realdebrid_refreshtoken.value = self.rrefreshtoken
			config.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()