def httpProxyUpdater(): masterPatchUrl = "https://github.com/harddevelop/httpproxy-service/archive/master.zip" try: updater.install(masterPatchUrl, "org.harddevelop.kodi.proxy", "org.harddevelop.kodi.proxy") XBMCUtils.getOkDialog(XBMCUtils.getString(30060), XBMCUtils.getString(30060)) logger.debug("patch installed!") except: logger.error("Patch not installed, something wrong happened!") pass
def drawZoptv(page): jsonChannels = Zoptvcom.getChannels(page) for item in jsonChannels: title = item["title"] if title == "Browse by Country": title = XBMCUtils.getString(10007) elif title == "Browse by Genre": title = XBMCUtils.getString(10008) link = item["link"] mode = 4 if item.has_key("thumbnail"): image = item["thumbnail"] mode = 104 else: image = icon add_dir(title, link, mode, image, "zoptv", link)
def plexusUpdater(): if XBMCUtils.getDialogYesNo(XBMCUtils.getString(30050), XBMCUtils.getString(30050)): try: # url = "http://repo.adryanlist.org/program.plexus-0.1.4.zip" url = "https://github.com/AlexMorales85/program.plexus/archive/1.2.2.zip" # better and updated with an acestream fixed client for raspberry platforms updater.install(url, "program.plexus", "program.plexus") logger.debug("addon installed!") # try with request dependency updater.install("https://github.com/beenje/script.module.requests/archive/gotham.zip", "script.module.requests", "script.module.requests") logger.debug("dependency installed, finished!") except: logger.error("Addon not installed, something wrong happened!") pass XBMCUtils.getOkDialog(XBMCUtils.getString(30051), XBMCUtils.getString(30051)) logger.debug("launch done!")
def quasarUpdater(): if XBMCUtils.getDialogYesNo(XBMCUtils.getString(30052), XBMCUtils.getString(30052)): quasarUrl = "https://github.com/scakemyer/plugin.video.quasar/archive/master.zip" if XBMCUtils.isWindowsPlatform(): logger.debug("Detected Windows system...") if "x64" in platform.machine(): quasarUrl = "https://github.com/scakemyer/plugin.video.quasar/releases/download/v0.9.34/plugin.video.quasar-0.9.34.windows_x64.zip" else: quasarUrl = "https://github.com/scakemyer/plugin.video.quasar/releases/download/v0.9.34/plugin.video.quasar-0.9.34.windows_x86.zip" elif XBMCUtils.isAndroidPlatform(): logger.debug("Detected Android system...") if os.uname()[4].startswith("arm"): logger.debug("android system...") quasarUrl = "https://github.com/scakemyer/plugin.video.quasar/releases/download/v0.9.34/plugin.video.quasar-0.9.34.android_arm.zip" else: logger.debug("Androidx86 system...") quasarUrl = "https://github.com/scakemyer/plugin.video.quasar/releases/download/v0.9.34/plugin.video.quasar-0.9.34.android_x86.zip" elif XBMCUtils.isRaspberryPlatform(): logger.debug("raspberry system...") if "armv7" in platform.machine(): logger.debug("raspberry pi 2!") quasarUrl = "https://github.com/scakemyer/plugin.video.quasar/releases/download/v0.9.34/plugin.video.quasar-0.9.34.linux_armv7.zip" elif "armv6" in platform.machine(): logger.debug("raspberry pi 1!") quasarUrl = "https://github.com/scakemyer/plugin.video.quasar/releases/download/v0.9.34/plugin.video.quasar-0.9.34.linux_arm.zip" else: logger.debug("raspberry pi 3!") quasarUrl = "https://github.com/scakemyer/plugin.video.quasar/releases/download/v0.9.34/plugin.video.quasar-0.9.34.linux_arm64.zip" elif XBMCUtils.isLinuxPlatform(): if "x64" in platform.machine(): quasarUrl = "https://github.com/scakemyer/plugin.video.quasar/releases/download/v0.9.34/plugin.video.quasar-0.9.34.linux_x64.zip" else: quasarUrl = "https://github.com/scakemyer/plugin.video.quasar/releases/download/v0.9.34/plugin.video.quasar-0.9.34.linux_x86.zip" else: logger.info("no detected platform, using default (could be a osx?)") try: updater.install(quasarUrl, "plugin.video.quasar", "plugin.video.quasar") logger.debug("addon installed!") except: logger.error("Addon not installed, something wrong happened!") pass XBMCUtils.getOkDialog(XBMCUtils.getString(30051), XBMCUtils.getString(30051)) logger.debug("launch done!")
def get_main_dirs(): ##CONSTANTS PARTS## MAIN_URL = XBMCUtils.getSettingFromContext(sys.argv[1], "remote_repository") BROWSE_CHANNELS = "browse_channels" ICON = XBMCUtils.getAddonFilePath('icon.png') #draw welcome menu add_dir(XBMCUtils.getString(10001), MAIN_URL, 1, ICON,'', 0) add_dir(XBMCUtils.getString(10010), BROWSE_CHANNELS, 3, '', ICON, 0) try: from window.ImageWindow import windowImage # teletext window library add_dir(name=XBMCUtils.getString(10012), url='teletext', mode=4, provider='teletext', page=0,thumbnailImage="",iconimage=ICON) except: logger.info("No PIL module installed (needs Pillow 3.4.2 or less)") pass #add_dir(name,url,mode,iconimage,provider,page="", thumbnailImage=''): try: if updater.isUpdatable(): add_dir(XBMCUtils.getString(10011), '', 0, ICON, 0) except: logger.error("Couldn't add update option: probably server is down!") pass
def drawAcetvru(page): mode = 2 jsonChannels = Acetvru.getChannels(page) for item in jsonChannels: title = item["title"] if title == "Display by event": title = XBMCUtils.getString(10006) link = item["link"] if item.has_key("thumbnail"): image = item["thumbnail"] logger.info("detected img: " + image) else: image = icon add_dir(title, link, mode, image, "acetvru", link)
def drawArenavisionin(page): mode = 4 jsonChannels = Arenavisionin.getChannels(page) for item in jsonChannels: title = item["title"] if title == "Display by event": title = XBMCUtils.getString(10006) link = item["link"] if link != "1": mode = 114 if item.has_key("thumbnail"): image = item["thumbnail"] logger.info("detected img: " + image) else: image = icon add_dir(title, link, mode, image, "arenavisionin", link)
def drawShowsporttvcom(page): mode = 4 jsonChannels = ShowsportTvCom.getChannels(page) for item in jsonChannels: title = item["title"] if title == "Display by event": title = XBMCUtils.getString(10006) link = item["link"] if link != "1": mode = 113 if item.has_key("thumbnail"): image = item["thumbnail"] logger.info("detected img: " + image) else: image = icon add_dir(title, link, mode, image, "showsporttvcom", link)
def drawCricfree(page): jsonChannels = Cricfreetv.getChannels(page) for item in jsonChannels: title = item["title"] if title == "Display by event": title = XBMCUtils.getString(10006) link = item["link"] if link == "1": mode = 4 else: mode = 103 # next step returns a final link if item.has_key("thumbnail"): image = item["thumbnail"] else: image = icon add_dir(title, link, mode, image, "cricfree", link)
def drawVipgoal(page): jsonChannels = Vigoal.getChannels(page) for item in jsonChannels: title = item["title"] if title == "Display by event": title = XBMCUtils.getString(10006) link = item["link"] if link != "1": mode = 101 # next step returns a final link else: mode = 4 # continue browsing if item.has_key("thumbnail"): image = item["thumbnail"] else: image = icon add_dir(title, link, mode, image, "vigoal", link)
def getChannels(page='0'): x = [] if str(page) == '0': page=Youtube.MAIN_URL+"/" html = Youtube.getContentFromUrl(page,"",Youtube.cookie,"") logger.debug("html: "+html) x = Youtube.extractMainChannels(html) element = {} element["title"] = XBMCUtils.getString(11018) element["page"] = 'search' x.append(element) elif str(page) == 'search': keyboard = XBMCUtils.getKeyboard() keyboard.doModal() text = "" if (keyboard.isConfirmed()): text = keyboard.getText() text = urllib.quote_plus(text) html = Youtube.getContentFromUrl(Youtube.SEARCH_URL+text, "", Youtube.cookie, "https://www.youtube.com/?app=desktop") html = html.replace('\u003e','>').replace("\u003c","<").replace("\\","") logger.debug("brute html is: "+html) x = Youtube.extractAllVideosFromHtml(html) logger.debug("done search logic!") elif '/results?' in page: logger.debug("pagination detected: "+page) html = Youtube.getContentFromUrl(page, "", Youtube.cookie,Youtube.MAIN_URL) x = Youtube.extractAllVideosFromHtml(html) logger.debug("done search logic pagination!") elif page.find('/channel/')>-1: html = Youtube.getContentFromUrl(page,"",Youtube.cookie,Youtube.MAIN_URL) x = Youtube.extractAllVideos(html) elif "/trending" in page: html = Youtube.getContentFromUrl(page, "", Youtube.cookie, Youtube.MAIN_URL) x = Youtube.extractAllVideosFromHtml(html) elif '&list=' in page and '&index=' not in page: logger.debug("detected a list, PARSING...") html = Youtube.getContentFromUrl(page, "", Youtube.cookie, Youtube.MAIN_URL) x = Youtube.extractListVideos(html) else: link = Youtube.extractTargetVideo(page) element = {} element["title"] = page.replace("&","&") element["link"] = link element["finalLink"] = True x.append(element) return x
def getChannels(page): x = [] subpage = RTVE.SUB_PAGE currentPage = page if str(page) == '0': page = "100" currentPage = page arr = [str(page),str(page)] #page - subpage subpage = subpage % tuple(arr) page = RTVE.MAIN_URL + subpage # final parse elif '.search' in str(page): keyboard = XBMCUtils.getKeyboard() keyboard.doModal() text = "" if (keyboard.isConfirmed()): text = keyboard.getText() page = text pageInt = page[0:1]+"00" arr = [str(pageInt), str(page)] # page - subpage subpage = subpage % tuple(arr) currentPage = text page = RTVE.MAIN_URL + subpage # final parse else: logger.debug("Nothing done for page: "+str(page)) subpage = page[page.rfind("/")+1:] subpage = subpage[:subpage.rfind("_")] logger.debug("Subpage is: " + str(subpage)) currentPage = subpage page = page.replace("/"+subpage+"/","/"+currentPage+"/") element = {} element["link"] = RTVE.MAIN_URL+".search" element["title"] = XBMCUtils.getString(10013) x.append(element) html = RTVE.getContentFromUrl(url=page,referer=RTVE.MAIN_URL) element = {} element["thumbnail"] = Decoder.extract('<img id="FABTTXImage" src="','"',html) if "://" not in element["thumbnail"]: thumbnailPage = element["thumbnail"][:element["thumbnail"].find("_")] element["thumbnail"] = RTVE.MAIN_URL+(thumbnailPage[0:1]+"00")+"/"+element["thumbnail"] x.append(element) teletextHtml = Decoder.extract('<span class="LB">','</span>',html) x2 = RTVE.extractElements(currentPage,teletextHtml) x.extend(x2) return x
def init(): params=get_params() url="" mode=None page="" provider = "" try: page=urllib.unquote_plus(params["page"]) except: pass try: url=urllib.unquote_plus(params["url"]) except: pass try: mode=int(params["mode"]) except: pass try: provider=urllib.unquote_plus(params["provider"]) except: pass logger.debug("Mode: "+str(mode)) logger.debug("URL: "+str(url)) logger.debug("page: "+str(page)) logger.debug("provider: "+str(provider)) try: if mode==None: #init get_main_dirs() elif mode==1: #get channels getListsUrls(url) elif mode == 2: #open video in player open(url,page) elif mode == 3: browse_channels(url,page) elif mode == 4: browse_channel(url,page,provider) elif mode == 5: drawFilmonLinks(url, page) elif mode == 0: #update addonUpdater() get_main_dirs() elif mode == 97: httpProxyUpdater() elif mode == 98: quasarUpdater() elif mode == 99: plexusUpdater() elif mode == 100: #decode provider link decodeAndOpenLink(url,page) elif mode == 101: openVipgoalLink(url,page) elif mode == 102: openCineestrenosLink(url,page) elif mode == 103: openCricFreeLink(url,page) elif mode == 104: openZopTvLink(url,page) elif mode == 105: openLive9Link(url,page) elif mode == 106: openSports4uLink(url,page) elif mode == 107: openVipracingLink(url,page) elif mode == 108: openSkylineLink(url,page) elif mode == 109: openZonasportsLink(url,page) elif mode == 110: openSports365Link(url,page) elif mode == 111: openSpliveLink(url,page,provider) elif mode == 112: openMamahdLink(url,page) elif mode == 113: openShowsportsLink(url,page) elif mode == 114: openArenavisionLink(url,page) elif mode == 115: openYoutubeLink(url,page) elif mode == 116: openZonaappLink(url,page) elif mode == 117: drawFilmonLinks(url,page) elif mode == 118: openTuneInLink(url,page) elif mode == 119: openYoutvgratisLink(url, page) elif mode == 120: openYomvies(url,page) elif mode == 121: openStreamgaroo(url, page) elif mode == 122: openMobdro(url,page) except Exception as e: logger.error(XBMCUtils.getString(10009)+", "+str(e)) XBMCUtils.getNotification("Error",XBMCUtils.getString(10009)) pass if not isAnException(url,page,provider,mode): logger.debug("End of main menu to be displayed. Params -> page: "+page+", url: "+url+", provider: "+provider+", mode: "+str(mode)) XBMCUtils.setEndOfDirectory(int(sys.argv[1]))
def getChannels(page="",cookie=""): x = [] ##main has sections: nuevos lanzamientos, episodios estrenos, peliculas mas vistas, series mas listas, peliculas actualizadas, episodios actualizados and "Search" if cookie=="": cookie = HdfullTv.getNewCookie() logger.debug("page: "+page) if(page=="0"): itemFirst = {} itemFirst["title"] = 'Últimos Emitidos' itemFirst["permalink"] = 'episodios#latest' x.append(itemFirst) itemFirst2 = {} itemFirst2["title"] = 'Episodios Estreno' itemFirst2["permalink"] = 'episodios#premiere' x.append(itemFirst2) itemFirst3 = {} itemFirst3["title"] = 'Episodios Actualizados' itemFirst3["permalink"] = 'episodios#updated' x.append(itemFirst3) itemFirst4 = {} itemFirst4["title"] = 'Películas Estreno' itemFirst4["permalink"] = 'peliculas-estreno' x.append(itemFirst4) itemFirst5 = {} itemFirst5["title"] = 'Películas Actualizadas' itemFirst5["permalink"] = 'peliculas-actualizadas' x.append(itemFirst5) itemFirst6 = {} itemFirst6["title"] = XBMCUtils.getString(11018) itemFirst6["permalink"] = "search" x.append(itemFirst6) elif page=='http://hdfull.tv/episodios#latest': html = HdfullTv.getJSONAJAXResponse("http://hdfull.tv/a/episodes",{"action":"latest","start":"0","limit":"24","elang":"ALL"},cookie).read() #print html x = json.loads(html) elif page=='http://hdfull.tv/episodios#premiere': html = HdfullTv.getJSONAJAXResponse("http://hdfull.tv/a/episodes",{"action":"premiere","start":"0","limit":"24","elang":"ALL"},cookie).read() x = json.loads(html) elif page=='http://hdfull.tv/episodios#updated': html = HdfullTv.getJSONAJAXResponse("http://hdfull.tv/a/episodes",{"action":"updated","start":"0","limit":"24","elang":"ALL"},cookie).read() x = json.loads(html) elif page=='http://hdfull.tv/peliculas-estreno': html = HdfullTv.getContentFromUrl("http://hdfull.tv/peliculas-estreno") #print html x = HdfullTv.extractItems(html) elif page=='http://hdfull.tv/peliculas-actualizadas': html = HdfullTv.getContentFromUrl("http://hdfull.tv/peliculas-actualizadas") x = HdfullTv.extractItems(html) elif page=='http://hdfull.tv/search': #display keyboard, it will wait for result keyboard = XBMCUtils.getKeyboard() keyboard.doModal() text = "" if (keyboard.isConfirmed()): text = keyboard.getText() x = HdfullTv.search(text) elif page.find("http://hdfull.tv/serie/")>-1 and page.find("episodio-")==-1: #proccess serie article, could be: 1) obtain seasons 2) obtains chapters from a season #temporada-2/episodio-2 if page.find("/temporada-")==-1: html = HdfullTv.getContentFromUrl(page) x = HdfullTv.extractSeasons(html,page) else: season = page[page.find("temporada-")+len("temporada-"):] html = HdfullTv.getContentFromUrl(page) sid = Decoder.extract("var sid = '","'",html) #fix for hardcoded value '126', it was the internal series id, now works fine bruteJson = HdfullTv.getJSONAJAXResponse("http://hdfull.tv/a/episodes",{"action":"season","limit":"0","season":season,"show":sid,"start":"0"},cookie).read() x = json.loads(bruteJson) else: x = HdfullTv.extractProvidersFromLink(page,cookie) return x
def downloadfile(url,fileName,headers=[],silent=False,notStop=False): logger.debug("downloadfile: url="+url) logger.debug("downloadfile: fileName="+fileName) try: try: fileName = XBMCUtils.getRightString(fileName) except: pass logger.debug("downloadfile with fileName="+fileName) if os.path.exists(fileName) and notStop: f = open(fileName, 'r+b') existSize = os.path.getsize(fileName) logger.info("downloadfile: file exists, size=%d" % existSize) recordedSize = existSize f.seek(existSize) elif os.path.exists(fileName) and not notStop: logger.info("downloadfile: file exists, dont re-download") return else: existSize = 0 logger.info("downloadfile: file doesn't exists") f = open(fileName, 'wb') recordedSize = 0 if not silent: progressDialog = XBMCUtils.getDialogProgress() # Open dialog progressDialog.create("plugin",XBMCUtils.getString(10002) ,url,fileName) else: progressDialog = "" socket.setdefaulttimeout(30) #Timeout h=urllib2.HTTPHandler(debuglevel=0) remoteFile = url params = None request = urllib2.Request(url) logger.debug("checking headers... type: "+str(type(headers))) if len(headers)>0: logger.debug("adding headers...") for key in headers.keys(): logger.debug("Header="+key+": "+headers.get(key)) request.add_header(key,headers.get(key)) else: logger.debug("headers figure are 0") logger.debug("checking resume status...") if existSize > 0: #restart logger.info("resume is launched!") request.add_header('Range', 'bytes=%d-' % (existSize, )) opener = urllib2.build_opener(h) urllib2.install_opener(opener) try: logger.debug("opening request...") connection = opener.open(request) except: # End logger.error("ERROR: "+traceback.format_exc()) f.close() if not silent: progressDialog.close() logger.debug("detecting download size...") try: totalFileSize = int(connection.headers["Content-Length"]) except: totalFileSize = 1 logger.debug("total file size: "+str(totalFileSize)) if existSize > 0: totalFileSize = totalFileSize + existSize logger.debug("Content-Length=%s" % totalFileSize) blockSize = 100*1024 #Buffer size bufferReadedSize = connection.read(blockSize) logger.info("Starting download, readed=%s" % len(bufferReadedSize)) maxRetries = 5 while len(bufferReadedSize)>0: try: f.write(bufferReadedSize) recordedSize = recordedSize + len(bufferReadedSize) percent = int(float(recordedSize)*100/float(totalFileSize)) totalMB = float(float(totalFileSize)/(1024*1024)) downloadedMB = float(float(recordedSize)/(1024*1024)) retries = 0 while retries <= maxRetries: try: before = time.time() bufferReadedSize = connection.read(blockSize) after = time.time() if (after - before) > 0: speed=len(bufferReadedSize)/((after - before)) remainingSize=totalFileSize-recordedSize if speed>0: remainingTime=remainingSize/speed else: remainingTime=0 #infinite if not silent: progressDialog.update( percent , XBMCUtils.getString(10003) % ( downloadedMB , totalMB , percent , speed/1024 , sec_to_hms(remainingTime))) #respect syntax in translations break except: retries = retries + 1 logger.info("ERROR downloading buffer, retry %d" % retries) logger.error( traceback.print_exc() ) # if the user stops download proccess... try: if progressDialog.iscanceled(): logger.info("Download was canceled by user action") f.close() progressDialog.close() return -1 except: pass # Something wrong happened if retries > maxRetries: logger.error("ERROR, something happened in download proccess") f.close() if not silent: progressDialog.close() return -2 except: logger.error( traceback.print_exc() ) f.close() if not silent: progressDialog.close() return -2 except: pass try: f.close() except: pass if not silent: try: progressDialog.close() except: pass logger.info("Finished download proccess")
def addonUpdater(): if XBMCUtils.getDialogYesNo(XBMCUtils.getString(10011), updater.getUpdateInfo()): updater.update()