def executeItem(self, item): url = item['url'] if '(' in url: xbmcCommand = parseText(url,'([^\(]*).*') if xbmcCommand.lower() in ['activatewindow', 'runscript', 'runplugin', 'playmedia']: if xbmcCommand.lower() == 'activatewindow': params = parseText(url, '.*\(\s*(.+?)\s*\).*').split(',') for i in range(len(params)-1,-1,-1): p = params[i] if p == 'return': params.remove(p) path = params[len(params)-1] xbmc.executebuiltin('Container.Update(' + path + ')') return xbmc.executebuiltin(url)
def executeItem(self, item): url = item['url'] if '(' in url: xbmcCommand = parseText(url,'([^\(]*).*') if xbmcCommand.lower() in ['activatewindow', 'runscript', 'runplugin', 'playmedia']: if xbmcCommand.lower() == 'activatewindow': params = parseText(url, '.*\(\s*(.+?)\s*\).*').split(',') for i in range(len(params)-1,-1,-1): p = params[i] if p == 'return': params.remove(p) path = enc.unescape(params[len(params)-1]) xbmc.executebuiltin('Container.Update(' + path + ')') return xbmc.executebuiltin(enc.unescape(url))
def executeItem(self, item): url = item["url"] if "(" in url: xbmcCommand = parseText(url, "([^\(]*).*") if xbmcCommand.lower() in ["activatewindow", "runscript", "runplugin", "playmedia"]: if xbmcCommand.lower() == "activatewindow": params = parseText(url, ".*\(\s*(.+?)\s*\).*").split(",") for i in range(len(params) - 1, -1, -1): p = params[i] if p == "return": params.remove(p) path = enc.unescape(params[len(params) - 1]) xbmc.executebuiltin("Container.Update(" + path + ")") return xbmc.executebuiltin(enc.unescape(url))
def getInfo(item, params, src): src = enc.smart_unicode(src).encode('utf-8') paramArr = __parseParams(params) paramPage = paramArr[0].replace('%s', src) paramPage = urllib.unquote(paramPage) if paramPage.startswith('@') and paramPage.endswith('@'): paramPage = item.getInfo(paramPage.strip('@')) paramRegex = paramArr[1].replace('%s', src) if paramRegex.startswith('@') and paramRegex.endswith('@'): paramRegex = item.getInfo(paramRegex.strip('@')) referer = '' variables=[] if len(paramArr) > 2: referer = paramArr[2] referer = referer.replace('%s', src) if referer.startswith('@') and referer.endswith('@'): referer = item.getInfo(referer.strip('@')) if len(paramArr) > 3: variables = paramArr[3].strip("'").split('|') common.log('Get Info from: "'+ paramPage + '" from "' + referer + '"') data = common.getHTML(paramPage, referer, referer!='') return reg.parseText(data, paramRegex, variables)
def getInfo(item, params, src): src = enc.smart_unicode(src).encode('utf-8') paramArr = __parseParams(params) paramPage = paramArr[0].replace('%s', src) if paramPage.startswith('@') and paramPage.endswith('@'): paramPage = item.getInfo(paramPage.strip('@')) paramRegex = paramArr[1].replace('%s', src) if paramRegex.startswith('@') and paramRegex.endswith('@'): paramRegex = item.getInfo(paramRegex.strip('@')) referer = '' form_data = '' variables=[] if len(paramArr) > 2: referer = paramArr[2] referer = referer.replace('%s', src) if referer.startswith('@') and referer.endswith('@'): referer = item.getInfo(referer.strip('@')) if len(paramArr) > 3: variables = paramArr[3].strip("'").split('|') common.log('Get Info from: "'+ paramPage + '" from "' + referer + '"') try: parts = (paramPage.split('|', 1) + [None] * 2)[:2] paramPage, form_data = parts form_data = urlparse.parse_qsl(form_data) except: pass data = common.getHTML(paramPage, form_data, referer, referer!='',demystify=True) return reg.parseText(data, paramRegex, variables)
def getInfo(item, params, src): src = enc.smart_unicode(src).encode('utf-8') paramArr = __parseParams(params) paramPage = paramArr[0].replace('%s', src) paramPage = urllib.unquote(paramPage) if paramPage.startswith('@') and paramPage.endswith('@'): paramPage = item.getInfo(paramPage.strip('@')) paramRegex = paramArr[1].replace('%s', src) if paramRegex.startswith('@') and paramRegex.endswith('@'): paramRegex = item.getInfo(paramRegex.strip('@')) referer = '' form_data = '' variables=[] if len(paramArr) > 2: referer = paramArr[2] referer = referer.replace('%s', src) if referer.startswith('@') and referer.endswith('@'): referer = item.getInfo(referer.strip('@')) if len(paramArr) > 3: variables = paramArr[3].strip("'").split('|') common.log('Get Info from: "'+ paramPage + '" from "' + referer + '"') try: parts = (paramPage.split('|', 1) + [None] * 2)[:2] paramPage, form_data = parts form_data = urlparse.parse_qsl(form_data) except: pass data = common.getHTML(paramPage, form_data, referer, referer!='',demystify=True) return reg.parseText(data, paramRegex, variables)
def parseText(params, src): src = enc.smart_unicode(src) paramArr = __parseParams(params) text = paramArr[0].replace('%s',src) regex = paramArr[1].replace('%s', src) variables = [] if len(paramArr) > 2: variables = paramArr[2].split('|') return reg.parseText(text, regex, variables)
def parseText(item, params, src): paramArr = __parseParams(params) text = paramArr[0].replace('%s', src) if text.startswith('@') and text.endswith('@'): text = item.getInfo(text.strip('@')) regex = paramArr[1].replace('%s', src) if regex.startswith('@') and regex.endswith('@'): regex = item.getInfo(regex.strip('@')) variables = [] if len(paramArr) > 2: variables = paramArr[2].split('|') return reg.parseText(text, regex, variables)
def parseText(item, params, src): paramArr = __parseParams(params) text = paramArr[0].replace('%s',src) if text.startswith('@') and text.endswith('@'): text = item.getInfo(text.strip('@')) regex = paramArr[1].replace('%s', src) if regex.startswith('@') and regex.endswith('@'): regex = item.getInfo(regex.strip('@')) variables = [] if len(paramArr) > 2: variables = paramArr[2].split('|') return reg.parseText(text, regex, variables)
def getInfo(item, params, src, xml=False, mobile=False): paramArr = __parseParams(params) paramPage = paramArr[0].replace('%s', src) if paramPage.startswith('@') and paramPage.endswith('@'): paramPage = item.getInfo(paramPage.strip('@')) paramRegex = paramArr[1].replace('%s', src) if paramRegex.startswith('@') and paramRegex.endswith('@'): paramRegex = item.getInfo(paramRegex.strip('@')) referer = '' form_data = '' variables = [] if len(paramArr) > 2: referer = paramArr[2] referer = referer.replace('%s', src) if referer.startswith('@') and referer.endswith('@'): referer = item.getInfo(referer.strip('@')) if len(paramArr) > 3: variables = paramArr[3].strip("'").split('|') parsed_link = urlparse.urlsplit(referer) parsed_link = parsed_link._replace( netloc=parsed_link.netloc.encode('idna'), path=urllib.quote(parsed_link.path.encode('utf-8'))) referer = parsed_link.geturl().encode('utf-8') try: parts = (paramPage.split('|', 1) + [None] * 2)[:2] paramPage, form_data = parts form_data = urlparse.parse_qsl(form_data) except: pass common.log('Get Info from: "' + paramPage + '" from "' + referer + '"') #common.log('JairoX_GETINFO1:' + paramRegex) data = common.getHTML(paramPage, form_data, referer, xml, mobile, ignoreCache=False, demystify=True) #common.log('JairoX_GETINFO2:' + data) #common.log('JairoX_GETINFO2:' + repr(data)) return reg.parseText(data, paramRegex, variables)
def getInfo(item, params, src, xml=False, mobile=False): paramArr = __parseParams(params) paramPage = paramArr[0].replace('%s', src) if paramPage.startswith('@') and paramPage.endswith('@'): paramPage = item.getInfo(paramPage.strip('@')) paramRegex = paramArr[1].replace('%s', src) if paramRegex.startswith('@') and paramRegex.endswith('@'): paramRegex = item.getInfo(paramRegex.strip('@')) referer = '' form_data = '' variables=[] if len(paramArr) > 2: referer = paramArr[2] referer = referer.replace('%s', src) if referer.startswith('@') and referer.endswith('@'): referer = item.getInfo(referer.strip('@')) if len(paramArr) > 3: variables = paramArr[3].strip("'").split('|') parsed_link = urlparse.urlsplit(referer) parsed_link = parsed_link._replace(netloc=parsed_link.netloc.encode('idna'),path=urllib.quote(parsed_link.path.encode('utf-8'))) referer = parsed_link.geturl().encode('utf-8') try: parts = (paramPage.split('|', 1) + [None] * 2)[:2] paramPage, form_data = parts form_data = urlparse.parse_qsl(form_data) except: pass common.log('Get Info from: "'+ paramPage + '" from "' + referer + '"') data = common.getHTML(paramPage, form_data, referer, xml, mobile, ignoreCache=False,demystify=True) #common.log('Get Info data: %s ' % reg.parseText(data, paramRegex, variables) ) #common.log('Get Info data: "' + data + '"') return reg.parseText(data, paramRegex, variables)
def run(self, paramstring): common.log('SportsDevil running') try: # Main Menu if len(paramstring) <= 2: # Set fanart xbmcplugin.setPluginFanart(self.handle, common.Paths.pluginFanart) # Clear cache self.clearCache() # Show Main Menu tmpList = self.parseView(self.MAIN_MENU_FILE) if tmpList: self.currentlist = tmpList self.curr_file = tmpList.cfg else: params = paramstring mode, codedItem = params.split('&',1) mode = int(mode.split('=')[1]) codedItem = codedItem[4:] item = decodeUrl(codedItem) # switch(mode) if mode == Mode.VIEW: tmpList = self.parseView(codedItem) if tmpList: self.currentlist = tmpList self.curr_file = tmpList.cfg count = len(self.currentlist.items) if count == 0: common.showInfo('No stream available') elif count == 1: # Autoplay single video autoplayEnabled = common.getSetting('autoplay') == 'true' if autoplayEnabled: videos = self.currentlist.getVideos() if len(videos) == 1: self.playVideo(videos[0], True) elif mode == Mode.ADDITEM: if self.favouritesManager.addItem(): xbmc.executebuiltin('Container.Refresh()') elif mode in [Mode.ADDTOFAVOURITES, Mode.REMOVEFROMFAVOURITES, Mode.EDITITEM]: if mode == Mode.ADDTOFAVOURITES: self.favouritesManager.addToFavourites(item) elif mode == Mode.REMOVEFROMFAVOURITES: self.favouritesManager.removeItem(item) xbmc.executebuiltin('Container.Refresh()') elif mode == Mode.EDITITEM: if self.favouritesManager.editItem(item): xbmc.executebuiltin('Container.Refresh()') elif mode == Mode.EXECUTE: url = item['url'] if url.find('(') > -1: xbmcCommand = parseText(url,'([^\(]*).*') if xbmcCommand.lower() in ['activatewindow', 'runscript', 'runplugin', 'playmedia']: if xbmcCommand.lower() == 'activatewindow': params = parseText(url, '.*\(\s*(.+?)\s*\).*').split(',') for i in range(len(params)-1,-1,-1): p = params[i] if p == 'return': params.remove(p) path = enc.unescape(params[len(params)-1]) xbmc.executebuiltin('Container.Update(' + path + ')') return xbmc.executebuiltin(enc.unescape(url)) elif mode == Mode.PLAY: self.playVideo(item) elif mode == Mode.QUEUE: dia = DialogProgress() dia.create('SportsDevil', 'Get videos...' + item['title']) dia.update(0) items = self.getVideos(item, dia) if items: for it in items: item = self.createXBMCListItem(it) uc = sys.argv[0] + '?mode=' + str(Mode.PLAY) + '&url=' + codeUrl(it) item.setProperty('IsPlayable', 'true') item.setProperty('IsFolder','false') xbmc.PlayList(1).add(uc, item) resultLen = len(items) msg = 'Queued ' + str(resultLen) + ' video' if resultLen > 1: msg += 's' dia.update(100, msg) xbmc.sleep(500) dia.update(100, msg,' ',' ') else: dia.update(0, 'No items found',' ') xbmc.sleep(700) dia.close() elif mode == Mode.DOWNLOAD: url = urllib.unquote(item['url']) title = item['title'] self.downloadVideo(url, title) except Exception, e: if common.enable_debug: traceback.print_exc(file = sys.stdout) common.showError('Error running SportsDevil.\n\nReason:\n' + str(e))