def shut(self,play=False,noblock=0): self.terminate=True prefs.set("cfagents",self.cfagents) if hasattr(self,"tm"): self.tm.stop() if hasattr(self,"dialogpg"): self.dialogpg.close() del(self.dialogpg) if self.backwards.abortRequested(): return if hasattr(self,"window"): self.window.close() try: self.cj.save() except: try: os.remove(defs.addon_cookfile) except: pass if play: self.player.xplay() self.stats.markseen(self.info) cnt=0 else: cnt="all" if hasattr(self,"iwindow"): self.iwindow.close() if int(self.handle)==-1: self.tm.join(noblock=noblock,cnt=cnt) if hasattr(self,"dialogpg"): self.dialogpg.close()
def get_page(*args, **kwargs): last = prefs.get("anidb", "lasttime") if "cachetime" in kwargs: ulhttp = kwargs.pop("cachetime") if last == {}: last = time.time() comid = md5.md5("http" + str(kwargs.get("query", {}))).hexdigest() cf = os.path.join(ump.defs.addon_ddir, cd, comid + ".html") if os.path.exists(cf) and (time.time() - os.path.getmtime(cf) < ulhttp): f = open(cf) res = unicode(f.read().decode(encoding)) f.close() else: while True: since = time.time() - last if since > lthttp: res = ump.get_page(*args, **kwargs) f = open(cf, "w") f.write(res.encode(encoding)) f.close() prefs.set("anidb", "lasttime", time.time()) break else: xbmc.sleep(100) percent = int(since / lthttp * 100) ump.dialogpg.update( percent, "Waiting to Cache from Anidb Server for %s" % args[0]) return res
def get_page(*args,**kwargs): last=prefs.get("anidb","lasttime") if "cachetime" in kwargs: ulhttp=kwargs.pop("cachetime") if last == {}:last=time.time() comid=md5.md5("http"+str(kwargs.get("query",{}))).hexdigest() cf=os.path.join(ump.defs.addon_ddir,cd,comid+".html") if os.path.exists(cf) and (time.time()-os.path.getmtime(cf)<ulhttp): f=open(cf) res=unicode(f.read().decode(encoding)) f.close() else: while True: since=time.time()-last if since>lthttp: res=ump.get_page(*args,**kwargs) f=open(cf,"w") f.write(res.encode(encoding)) f.close() prefs.set("anidb","lasttime",time.time()) break else: xbmc.sleep(100) percent=int(since/lthttp*100) ump.dialogpg.update(percent,"Waiting to Cache from Anidb Server for %s"%args[0]) return res
def command(request,args={}): last=prefs.get("anidb","lasttime") if last == {}:last=time.time() comid=request for arg in args: comid+="_"+arg+"_"+args[arg] cf=os.path.join(ump.defs.addon_ddir,cd,comid) if (os.path.exists(cf+".xml") and time.time()-os.path.getmtime(cf+".xml")<ul): xml=dom.read(cf+".xml") elif os.path.exists(cf+"_perm.xml"): xml=dom.read(cf+"_perm.xml") else: while True: since=time.time()-last if since>lt: query={"request":request,"client":cid,"clientver":cver,"protover":pver} query.update(args) res=ump.get_page(apiu,encoding,query=query,throttle=False) prefs.set("anidb","lasttime",time.time()) xmlstr=minidom.parseString(res.encode(encoding)) #check if anime ended, if ended store permanently sd=re.findall("<startdate>(.*?)</startdate>",res) ed=re.findall("<enddate>(.*?)</enddate>",res) if len(ed) and len(sd) and parser.parse(ed[0])<datetime.datetime.now() and parser.parse(sd[0])<parser.parse(ed[0]): cf=cf+"_perm.xml" else: cf=cf+".xml" dom.write(cf,xmlstr) xml=dom.read(cf) break else: xbmc.sleep(100) percent=int(since/lt*100) ump.dialogpg.update(percent,"Waiting to Cache from Anidb Server for %s:%s"%(request,str(args)[1:-1])) return xml
def get_keyboard(self,*args): if self.refreshing: return True,prefs.get("play","keyboard") kb = xbmc.Keyboard(*args) kb.setDefault("") kb.setHiddenInput(False) if not self.backwards.abortRequested(): kb.doModal() if self.backwards.abortRequested(): self.dialogpg.close() sys.exit() text=kb.getText() prefs.set("play","keyboard",json.dumps(text)) if kb.isConfirmed(): self.stat.query(search=text) return kb.isConfirmed(),text
def command(request, args={}): last = prefs.get("anidb", "lasttime") if last == {}: last = time.time() comid = request for arg in args: comid += "_" + arg + "_" + args[arg] cf = os.path.join(ump.defs.addon_ddir, cd, comid) if (os.path.exists(cf + ".xml") and time.time() - os.path.getmtime(cf + ".xml") < ul): xml = dom.read(cf + ".xml") elif os.path.exists(cf + "_perm.xml"): xml = dom.read(cf + "_perm.xml") else: while True: since = time.time() - last if since > lt: query = { "request": request, "client": cid, "clientver": cver, "protover": pver } query.update(args) res = ump.get_page(apiu, encoding, query=query, throttle=False) prefs.set("anidb", "lasttime", time.time()) xmlstr = minidom.parseString(res.encode(encoding)) #check if anime ended, if ended store permanently sd = re.findall("<startdate>(.*?)</startdate>", res) ed = re.findall("<enddate>(.*?)</enddate>", res) if len(ed) and len(sd) and parser.parse( ed[0]) < datetime.datetime.now() and parser.parse( sd[0]) < parser.parse(ed[0]): cf = cf + "_perm.xml" else: cf = cf + ".xml" dom.write(cf, xmlstr) xml = dom.read(cf) break else: xbmc.sleep(100) percent = int(since / lt * 100) ump.dialogpg.update( percent, "Waiting to Cache from Anidb Server for %s:%s" % (request, str(args)[1:-1])) return xml
def __init__(self,pt=False): if not os.path.exists(defs.addon_ddir): os.makedirs(defs.addon_ddir) self.pub=[] self.index_items=[] self.backwards=teamkodi.backwards() self.settings={} self.buffermode=buffering.get() self.log="" self.handle = int(sys.argv[1]) self.ws_limit=False #web search limit self.defs=defs if self.backwards.abortRequested():sys.exit() self.window = ui.listwindow('select.xml', defs.addon_dir,'Default', '720p',ump=self) self.iwindow = ui.imagewindow('picture.xml', defs.addon_dir,"Default","720p") self.urlval_en=True self.urlval_tout=30 self.urlval_d_size={self.defs.CT_VIDEO:1000000,self.defs.CT_AUDIO:10000,self.defs.CT_IMAGE:200} self.urlval_d_tout=1.5 try:self.tm_conc=int(float(addon.getSetting("conc"))) except:self.tm_conc=10 self.player=None self.cfagents=prefs.get("cfagents") self.cflocks={} self.mirrors=[] self.terminate=False self.loaded_uprv={} self.checked_uids={"video":{},"audio":{},"image":{}} self.pt=pt socket.socket = proxy.getsocket() policy=cookielib.DefaultCookiePolicy(rfc2965=True, rfc2109_as_netscape=True, strict_rfc2965_unverifiable=False) self.cj=cookielib.LWPCookieJar(os.path.join(defs.addon_ddir, "cookie")) self.cj.set_policy(policy) self.dialog=xbmcgui.Dialog() if os.path.exists(defs.addon_cookfile): try: self.cj.load() except cookielib.LoadError: pass except IOError: pass if addon.getSetting("verifyssl").lower()=="false": self.opener = urllib2.build_opener(http.HTTPErrorProcessor,urllib2.HTTPCookieProcessor(self.cj),http.HTTPSHandler) else: self.opener = urllib2.build_opener(http.HTTPErrorProcessor,urllib2.HTTPCookieProcessor(self.cj)) if addon.getSetting("overrideua")=="true": self.ua=addon.getSetting("useragent") else: from ump import useragents self.ua=choice(useragents.all) self.opener.addheaders = [('User-agent', self.ua)] self.tunnel=webtunnel.tunnel(self.opener) query=sys.argv[2][1:] result=parse_qs(query) [self.module]= result.get('module', ["ump"]) [self.page]= result.get('page', ["root"]) [args]= result.get('args', ["e30="]) try: self.args=json.loads(args.decode("base64")) except: try: self.args=json.loads(args) # old url formatting except: self._wronguri() for keep in ["info","art","pub"]: if keep in ["pub"]:default="W10=" else: default= "e30=" [lst]=result.get(keep, [default]) try: setattr(self,keep,json.loads(lst.decode("base64"))) except: try: setattr(self,keep,json.loads(lst)) except: self._wronguri() [self.content_type]= result.get('content_type', ["ump"]) self.loadable_uprv=providers.find(self.content_type,"url") self.stats=stats.stats() self.throttle=throttle.throttle(self.defs.addon_tdir) if prefs.get("play","flag"): self.refreshing=True prefs.set("play","flag",False) else: self.refreshing=False self.dialogpg=teamkodi.backwards.DialogProgressBG() self.dialogpg.create("UMP") self.tm=task.manager(self.dialogpg,self.tm_conc) self.stat=clicky.clicky(self) if not self.page=="urlselect": self.stat.query() self.identifier=identifier.identifier() self.container_mediatype=defs.MT_NONE self.dialogpg.update(100,"UMP %s:%s:%s"%(self.content_type,self.module,self.page))