def getPicons(self): from Components.Sources.ServiceList import ServiceList from enigma import eServiceReference, eServiceCenter, iServiceInformation import shutil currentServiceRef = self.session.nav.getCurrentlyPlayingServiceReference() servicelist = ServiceList("") servicelist.setRoot(currentServiceRef) canais = servicelist.getServicesAsList() servicehandler = eServiceCenter.getInstance() try: os.makedirs("/tmp/piconsTmp") except OSError as exception: pass piconsDir=config.plugins.geradorpicon.pasta.value for item in canais: canal = eServiceReference(item[0]) if canal: nome = servicehandler.info(canal).getName(canal) picon=canal.toString()[:-1].replace(":","_")+".png" try: shutil.copy(piconsDir+"/"+picon,"/tmp/piconsTmp/"+nome+".png") except: pass
def escreveRefresh(self): from enigma import eServiceReference, eServiceCenter, iServiceInformation from Components.Sources.ServiceList import ServiceList import re currentServiceRef = self.session.nav.getCurrentlyPlayingServiceReference() servicelist = ServiceList("") servicelist.setRoot(currentServiceRef) canais = servicelist.getServicesAsList() servicehandler = eServiceCenter.getInstance() tmpCanais={} for item in canais: canal = eServiceReference(item[0]) if canal: nome = servicehandler.info(canal).getName(canal) tipo=item[0].split(":")[2] if tipo=="2": continue transponder_info = servicehandler.info(canal).getInfoObject(canal, iServiceInformation.sTransponderData) id=str(transponder_info["frequency"]) if transponder_info["tuner_type"]!="DVB-C": id=id+str(transponder_info["polarization"]) position=transponder_info["orbital_position"] else: position="DVB-C" id=id+str(transponder_info["symbol_rate"]) if(position==config.plugins.Easy.pref.value): if not tmpCanais.has_key(id): tmpCanais[id]="#SERVICE %s:%s"%(item[0],nome) arq_name="%s/bouquets.tv"%(utils.outdir) arq = open(arq_name, "r+") check=False for linha in arq.readlines(): if "userbouquet.refresh.tv" in linha: check=True if not check: arq.write("#SERVICE 1:7:1:0:0:0:0:0:0:0:FROM BOUQUET \"userbouquet.refresh.tv\" ORDER BY bouquet\n") arq.close() arq_name="%s/userbouquet.refresh.tv"%(utils.outdir) arq = open(arq_name, "w") arq.write("#NAME epgrefresh\n") for canal in tmpCanais: arq.write(tmpCanais[canal]+"\n") arq.close()
def escreveCanais(self): from enigma import eServiceReference, eServiceCenter, iServiceInformation from Components.Sources.ServiceList import ServiceList import re t=open("/tmp/canais.csv","w") currentServiceRef = self.session.nav.getCurrentlyPlayingServiceReference() servicelist = ServiceList("") servicelist.setRoot(currentServiceRef) canais = servicelist.getServicesAsList() servicehandler = eServiceCenter.getInstance() from sets import Set ctmp=Set() for item in canais: canal = eServiceReference(item[0]) if canal: nome = servicehandler.info(canal).getName(canal) if nome=="(...)" or re.match("\d+",nome): continue tipo=item[0].split(":")[2] if tipo=="2": continue transponder_info = servicehandler.info(canal).getInfoObject(canal, iServiceInformation.sTransponderData) if transponder_info["tuner_type"]=="DVB-C": continue position = int(transponder_info["orbital_position"]) if(position==config.plugins.Easy.pref.value): ctmp.add("%s,%s\n"%(nome.strip(),"True" if tipo in ["19","25"] else "False")) for c in ctmp: t.write(c)
class WAPfunctions(Source): LISTTIME = 0 REPEATED = 1 SERVICELIST = 2 OPTIONLIST = 3 FILLVALUE = 4 LOCATIONLIST = 5 TAGLIST = 6 DELETEOLD = 7 lut = { "Name":0, "Value":1, "Selected":2 } def __init__(self, session, func=LISTTIME): self.func = func Source.__init__(self) self.session = session self.result = ( "unknown command (%s)" % (self.func), ) def handleCommand(self, cmd): print "WAPfunctions: handleCommand", cmd if self.func is self.LISTTIME: self.result = self.fillListTime(cmd) elif self.func is self.REPEATED: self.result = self.fillRepeated(cmd) elif self.func is self.SERVICELIST: self.result = self.serviceList(cmd) elif self.func is self.OPTIONLIST: self.result = self.fillOptionList(cmd) elif self.func is self.FILLVALUE: self.result = self.fillValue(cmd) elif self.func is self.LOCATIONLIST: self.result = self.locationList(cmd) elif self.func is self.TAGLIST: self.result = self.tagList(cmd) elif self.func is self.DELETEOLD: self.result = self.deleteOldSaved(cmd) else: self.result = ( "unknown command cmd(%s) self.func(%s)" % (cmd, self.func), ) def fillListTime(self, param): print "fillListTime", param input = 0 start = 1 end = 1 timeNow = time() timePlusTwo = timeNow + 7200 if 'begin' in param: begin = param['begin'] or 0 begin = int(begin) del param['begin'] if begin > 0: timeNow = begin if 'end' in param: end = param['end'] or 0 end = int(end) del param['end'] if end > 0: timePlusTwo = end t = {} t["sday"] = t["day"] = strftime("%d", localtime(timeNow)) t["smonth"] = t["month"] = strftime("%m", localtime(timeNow)) t["syear"] = t["year"] = strftime("%Y", localtime(timeNow)) t["smin"] = strftime("%M", localtime(timeNow)) t["shour"] = strftime("%H", localtime(timeNow)) t["emin"] = strftime("%M", localtime(timePlusTwo)) t["ehour"] = strftime("%H", localtime(timePlusTwo)) key = "" for i in param: p = str(i) if p != "sRef" and param[p] != None: key = p if key == "smin" or key == "emin" : start = 0 end = 59 elif key == "shour" or key == "ehour": start = 0 end = 23 elif key == "day" or key == "sday": start = 1 end = 31 elif key == "month" or key == "smonth": start = 1 end = 12 else: start = int(t[key]) end = int(t[key]) + 2 if param[key] == "now" or param[key] == "end" or param[key] == "begin": input = int(t[key]) else: input = param[key] or 0 input = int(input) self.result = self.fillOptionListAny(input, start, end) return self.result def fillOptionListAny(self, input, start, end): returnList = [] for i in range(start, end + 1, 1): returnList1 = [] j = str(i) if len(j) == 1: j = "0%s" % j returnList1.extend((j, i)) if i == input: returnList1.append("selected") else: returnList1.append("") returnList.append(returnList1) return returnList def fillRepeated(self, param): print "fillRepeated", param repeated = param or 0 repeated = int(repeated) self.lut = {"Name":0 , "Value":1 , "Description":2 , "Selected":3 } mo = ["mo", 1, "Mo "]#"Monday"] tu = ["tu", 2, "Tu "]#"Tuesday"] we = ["we", 4, "We "]#"Wednesday"] th = ["th", 8, "Th "]#"Thursday"] fr = ["fr", 16, "Fr "]#"Friday"] sa = ["sa", 32, "Sa "]#"Saturday"] su = ["su", 64, "Su "]#"Sunday"] mf = ["mf", 31, "Mo-Fr"] ms = ["ms", 127, "Mo-Su"] if repeated == 127: repeated = repeated - 127 ms.append("checked") else: ms.append("") if repeated >= 64: repeated = repeated - 64 su.append("checked") else: su.append("") if repeated >= 32: repeated = repeated - 32 sa.append("checked") else: sa.append("") if repeated == 31: repeated = repeated - 31 mf.append("checked") else: mf.append("") if repeated >= 16: repeated = repeated - 16 fr.append("checked") else: fr.append("") if repeated >= 8: repeated = repeated - 8 th.append("checked") else: th.append("") if repeated >= 4: repeated = repeated - 4 we.append("checked") else: we.append("") if repeated >= 2: repeated = repeated - 2 tu.append("checked") else: tu.append("") if repeated == 1: repeated = repeated - 1 mo.append("checked") else: mo.append("") return [ mo, tu, we, th, fr, sa, su, mf, ms, ] def serviceListOne(self, bouquet, selref): ref = eServiceReference(bouquet) self.servicelist = ServiceList(ref, command_func=self.getServiceList, validate_commands=False) self.servicelist.setRoot(ref) returnList = [] for (ref2, name) in self.servicelist.getServicesAsList(): print "ref2: (", ref2, ") name: (", name, ")" returnListPart = [ name, ref2 ] if ref2 == str(selref): returnListPart.append("selected") self.sRefFound = 1 else: returnListPart.append("") returnList.append(returnListPart) return returnList def serviceList(self, param): print "serviceList: ", param sRef = str(param["sRef"]) bouquet = str(param["bouquet"]) self.sRefFound = 0 if bouquet == '': returnList = [] bouquet = '1:7:1:0:0:0:0:0:0:0:FROM BOUQUET "bouquets.tv" ORDER BY bouquet' ref = eServiceReference(bouquet) self.servicelist = ServiceList(ref, command_func=self.getServiceList, validate_commands=False) self.servicelist.setRoot(ref) for (ref2, name) in self.servicelist.getServicesAsList(): part = self.serviceListOne(ref2, sRef) if part: returnList = returnList + [["-- " + name + " --", "<" + name + ">", ""]] + part bouquet = '1:7:1:0:0:0:0:0:0:0:FROM BOUQUET "bouquets.radio" ORDER BY bouquet' ref = eServiceReference(bouquet) self.servicelist = ServiceList(ref, command_func=self.getServiceList, validate_commands=False) self.servicelist.setRoot(ref) for (ref2, name) in self.servicelist.getServicesAsList(): part = self.serviceListOne(ref2, sRef) if part: returnList = returnList + [["-- " + name + " --", "<" + name + ">", ""]] + part else: returnList = self.serviceListOne(bouquet, sRef) if self.sRefFound == 0 and sRef != '': returnListPart = ["Inserted", sRef, "selected"] returnList = [returnListPart] + returnList #print returnList return returnList def getServiceList(self, ref): self.servicelist.root = ref def locationList(self, param): print "locationList", param dirname = param lst = config.movielist.videodirs.value if not dirname: dirname = "/hdd/movie/" if not dirname in lst: lst = [dirname] + lst returnList = [[lst[i], i, dirname == lst[i] and "selected" or ""] for i in range(len(lst))] return returnList def tagList(self, param): print "tagList", param tag = param try: file = open("/etc/enigma2/movietags") taglist = [x.rstrip() for x in file] while "" in taglist: taglist.remove("") file.close() except IOError, ioe: taglist = [] if not tag in taglist: taglist = [tag] + taglist if not "" in taglist: taglist.append("") returnList = [[taglist[i], i, tag == taglist[i] and "selected" or ""] for i in range(len(taglist))] return returnList
class WAPfunctions(Source): LISTTIME = 0 REPEATED = 1 SERVICELIST = 2 OPTIONLIST = 3 FILLVALUE = 4 LOCATIONLIST = 5 TAGLIST = 6 DELETEOLD = 7 lut = { "Name": 0, "Value": 1, "Selected": 2 } def __init__(self, session, func=LISTTIME): self.func = func Source.__init__(self) self.session = session self.result = ("unknown command (%s)" % (self.func), ) def handleCommand(self, cmd): print "WAPfunctions: handleCommand", cmd if self.func is self.LISTTIME: self.result = self.fillListTime(cmd) elif self.func is self.REPEATED: self.result = self.fillRepeated(cmd) elif self.func is self.SERVICELIST: self.result = self.serviceList(cmd) elif self.func is self.OPTIONLIST: self.result = self.fillOptionList(cmd) elif self.func is self.FILLVALUE: self.result = self.fillValue(cmd) elif self.func is self.LOCATIONLIST: self.result = self.locationList(cmd) elif self.func is self.TAGLIST: self.result = self.tagList(cmd) elif self.func is self.DELETEOLD: self.result = self.deleteOldSaved(cmd) else: self.result = ("unknown command cmd(%s) self.func(%s)" % (cmd, self.func), ) def fillListTime(self, param): print "fillListTime", param input = 0 start = 1 end = 1 timeNow = time() timePlusTwo = timeNow + 7200 if 'begin' in param: begin = param['begin'] or 0 begin = int(begin) del param['begin'] if begin > 0: timeNow = begin if 'end' in param: end = param['end'] or 0 end = int(end) del param['end'] if end > 0: timePlusTwo = end t = {} t["sday"] = t["day"] = strftime("%d", localtime(timeNow)) t["smonth"] = t["month"] = strftime("%m", localtime(timeNow)) t["syear"] = t["year"] = strftime("%Y", localtime(timeNow)) t["smin"] = strftime("%M", localtime(timeNow)) t["shour"] = strftime("%H", localtime(timeNow)) t["emin"] = strftime("%M", localtime(timePlusTwo)) t["ehour"] = strftime("%H", localtime(timePlusTwo)) key = "" for i in param: p = str(i) if p != "sRef" and param[p] != None: key = p if key == "smin" or key == "emin": start = 0 end = 59 elif key == "shour" or key == "ehour": start = 0 end = 23 elif key == "day" or key == "sday": start = 1 end = 31 elif key == "month" or key == "smonth": start = 1 end = 12 else: start = int(t[key]) end = int(t[key]) + 2 if param[key] == "now" or param[key] == "end" or param[key] == "begin": input = int(t[key]) else: input = param[key] or 0 input = int(input) self.result = self.fillOptionListAny(input, start, end) return self.result def fillOptionListAny(self, input, start, end): returnList = [] for i in range(start, end + 1, 1): returnList1 = [] j = str(i) if len(j) == 1: j = "0%s" % j returnList1.extend((j, i)) if i == input: returnList1.append("selected") else: returnList1.append("") returnList.append(returnList1) return returnList def fillRepeated(self, param): print "fillRepeated", param repeated = param or 0 repeated = int(repeated) self.lut = {"Name": 0 , "Value": 1 , "Description": 2 , "Selected": 3 } mo = ["mo", 1, "Mo "]#"Monday"] tu = ["tu", 2, "Tu "]#"Tuesday"] we = ["we", 4, "We "]#"Wednesday"] th = ["th", 8, "Th "]#"Thursday"] fr = ["fr", 16, "Fr "]#"Friday"] sa = ["sa", 32, "Sa "]#"Saturday"] su = ["su", 64, "Su "]#"Sunday"] mf = ["mf", 31, "Mo-Fr"] ms = ["ms", 127, "Mo-Su"] if repeated == 127: repeated = repeated - 127 ms.append("checked") else: ms.append("") if repeated >= 64: repeated = repeated - 64 su.append("checked") else: su.append("") if repeated >= 32: repeated = repeated - 32 sa.append("checked") else: sa.append("") if repeated == 31: repeated = repeated - 31 mf.append("checked") else: mf.append("") if repeated >= 16: repeated = repeated - 16 fr.append("checked") else: fr.append("") if repeated >= 8: repeated = repeated - 8 th.append("checked") else: th.append("") if repeated >= 4: repeated = repeated - 4 we.append("checked") else: we.append("") if repeated >= 2: repeated = repeated - 2 tu.append("checked") else: tu.append("") if repeated == 1: repeated = repeated - 1 mo.append("checked") else: mo.append("") return [ mo, tu, we, th, fr, sa, su, mf, ms, ] def serviceListOne(self, bouquet, selref): ref = eServiceReference(bouquet) self.servicelist = ServiceList(ref, command_func=self.getServiceList, validate_commands=False) self.servicelist.setRoot(ref) returnList = [] for (ref2, name) in self.servicelist.getServicesAsList(): print "ref2: (", ref2, ") name: (", name, ")" returnListPart = [ name, ref2 ] if ref2 == str(selref): returnListPart.append("selected") self.sRefFound = 1 else: returnListPart.append("") returnList.append(returnListPart) return returnList def serviceList(self, param): print "serviceList: ", param sRef = str(param["sRef"]) bouquet = str(param["bouquet"]) self.sRefFound = 0 if bouquet == '': returnList = [] bouquet = '1:7:1:0:0:0:0:0:0:0:FROM BOUQUET "bouquets.tv" ORDER BY bouquet' ref = eServiceReference(bouquet) self.servicelist = ServiceList(ref, command_func=self.getServiceList, validate_commands=False) self.servicelist.setRoot(ref) for (ref2, name) in self.servicelist.getServicesAsList(): part = self.serviceListOne(ref2, sRef) if part: returnList = returnList + [["-- " + name + " --", "<" + name + ">", ""]] + part bouquet = '1:7:1:0:0:0:0:0:0:0:FROM BOUQUET "bouquets.radio" ORDER BY bouquet' ref = eServiceReference(bouquet) self.servicelist = ServiceList(ref, command_func=self.getServiceList, validate_commands=False) self.servicelist.setRoot(ref) for (ref2, name) in self.servicelist.getServicesAsList(): part = self.serviceListOne(ref2, sRef) if part: returnList = returnList + [["-- " + name + " --", "<" + name + ">", ""]] + part else: returnList = self.serviceListOne(bouquet, sRef) if self.sRefFound == 0 and sRef != '': returnListPart = ["Inserted", sRef, "selected"] returnList = [returnListPart] + returnList #print returnList return returnList def getServiceList(self, ref): self.servicelist.root = ref def locationList(self, param): print "locationList", param dirname = param lst = config.movielist.videodirs.value if not dirname: dirname = resolveFilename(SCOPE_HDD) if not dirname in lst: lst = [dirname] + lst returnList = [[lst[i], i, dirname == lst[i] and "selected" or ""] for i in range(len(lst))] return returnList def tagList(self, param): print "tagList", param tag = param try: file = open(resolveFilename(SCOPE_CONFIG, "movietags")) taglist = [x.rstrip() for x in file] while "" in taglist: taglist.remove("") file.close() except IOError, ioe: taglist = [] if not tag in taglist: taglist = [tag] + taglist if not "" in taglist: taglist.append("") returnList = [[taglist[i], i, tag == taglist[i] and "selected" or ""] for i in range(len(taglist))] return returnList
class ServiceListRecursive(Source): FETCH = 0 def __init__(self, session, func=FETCH): Source.__init__(self) self.session = session self.func = func self.servicelist = {} self.xml = "" self.command = eServiceReference( service_types_tv + ' FROM BOUQUET "bouquets.tv" ORDER BY bouquet') def handleCommand(self, cmd): self.command = eServiceReference(cmd) def do_func(self): if self.func == self.FETCH: func = self.buildList else: func = self.buildList return func(self.command) def buildList(self, ref): self.servicelist = ServiceList(ref, command_func=self.getServiceList, validate_commands=False) list = self.servicelist.getServicesAsList() for item in list: self.servicelist.setRoot(eServiceReference(item[0])) sub = self.servicelist.getServicesAsList() if sub: self.xml += "\t<e2bouquet>\n" bouquet = True subxml = "" for (ref, name) in sub: subxml += "\t\t\t<e2service>\n" subxml += "\t\t\t\t<e2servicereference>%s</e2servicereference>\n\t\t\t\t<e2servicename>%s</e2servicename>\n" % ( self.filterXML(ref), self.filterXML(name)) subxml += "\t\t\t</e2service>\n" else: self.xml += "\t\t<e2service>\n" bouquet = False self.xml += "\t\t<e2servicereference>%s</e2servicereference>\n\t\t<e2servicename>%s</e2servicename>\n" % ( self.filterXML(item[0]), self.filterXML(item[1])) if bouquet: self.xml += "\t\t<e2servicelist>\n" self.xml += subxml self.xml += "\t\t</e2servicelist>\n" self.xml += "\t</e2bouquet>\n" else: self.xml += "\t</e2service>\n" return self.xml def filterXML(self, item): item = item.replace("&", "&").replace("<", "<").replace( '"', '"').replace(">", ">") return item def getServiceList(self, ref): self.servicelist.root = ref text = property(do_func)
class ServiceListRecursive(Source): FETCH = 0 def __init__(self, session, func=FETCH): Source.__init__(self) self.session = session self.func = func self.servicelist = {} self.xml = "" self.command = eServiceReference(service_types_tv + ' FROM BOUQUET "bouquets.tv" ORDER BY bouquet') def handleCommand(self, cmd): self.command = eServiceReference(cmd) def do_func(self): if self.func == self.FETCH: func = self.buildList else: func = self.buildList return func(self.command) def buildList(self, ref): self.servicelist = ServiceList(ref, command_func=self.getServiceList, validate_commands=False) list = self.servicelist.getServicesAsList() for item in list: self.servicelist.setRoot(eServiceReference(item[0])) sub = self.servicelist.getServicesAsList() if sub: self.xml += "\t<e2bouquet>\n" bouquet = True subxml = "" for (ref, name) in sub: subxml += "\t\t\t<e2service>\n" subxml += "\t\t\t\t<e2servicereference>%s</e2servicereference>\n\t\t\t\t<e2servicename>%s</e2servicename>\n" % (self.filterXML(ref), self.filterXML(name)) subxml += "\t\t\t</e2service>\n" else: self.xml += "\t\t<e2service>\n" bouquet = False self.xml += "\t\t<e2servicereference>%s</e2servicereference>\n\t\t<e2servicename>%s</e2servicename>\n" % (self.filterXML(item[0]), self.filterXML(item[1])) if bouquet: self.xml += "\t\t<e2servicelist>\n" self.xml += subxml self.xml += "\t\t</e2servicelist>\n" self.xml += "\t</e2bouquet>\n" else: self.xml += "\t</e2service>\n" return self.xml def filterXML(self, item): item = item.replace("&", "&").replace("<", "<").replace('"', '"').replace(">", ">") return item def getServiceList(self, ref): self.servicelist.root = ref text = property(do_func)
def gerarBouquets(self): self.mudaSituacao(1, _("Creating favorites")) from enigma import eServiceReference, eServiceCenter, iServiceInformation from Components.Sources.ServiceList import ServiceList if self.parserules(): self.satPref=config.plugins.Easy.pref.value if config.plugins.Easy.pref.value=="DVB-C" else utils.positionToSat(config.plugins.Easy.pref.value) currentServiceRef = self.session.nav.getCurrentlyPlayingServiceReference() servicelist = ServiceList("") servicelist.setRoot(currentServiceRef) try: canais = servicelist.getServicesAsList() except: self.session.open(MessageBox, text = _("Please, put in valid service first."), type = MessageBox.TYPE_WARNING,close_on_any_key=True, timeout=5) return # tmp=open("/tmp/teste","w") servicehandler = eServiceCenter.getInstance() for item in canais: canal = eServiceReference(item[0]) if canal: nome = servicehandler.info(canal).getName(canal) if nome=="(...)" or re.match("\d+",nome): continue # tipo=str(canal.type) tipo=item[0].split(":")[2] transponder_info = servicehandler.info(canal).getInfoObject(canal, iServiceInformation.sTransponderData) cabo = True if transponder_info["tuner_type"]=="DVB-C" else False if cabo and nome.strip().lower().endswith("hd"): tipo="25" if str(tipo) in ["1","19","25"]: if transponder_info["tuner_type"]=="DVB-C": satName="DVB-C" sat=satName position=satName else: position = int(transponder_info["orbital_position"]) if position>1800: sat= str(int(((float(position)/10)-360)*10)) satName= "%sW" % str(int(((float(position)/10)-360)*-1)) else: sat= str(int(((float(position)/10)+180)*10)) satName= "%sE" % str(int(((float(position)/10)-180)*-1)) frequencia=str(int(transponder_info["frequency"])/1000) sid = canal.toString().split(":")[3] sid=str(int(sid,16)) # tmp.write("%s:%s\n"%(nome,sid)) bouqs=self.whichBouquets(nome,sat,frequencia,sid,tipo) for bq in bouqs: if config.plugins.Easy.addSat.value: self.bouquets[bq].append("%s:%s (%s)"%(item[0],nome,satName)) else: self.bouquets[bq].append("%s:%s"%(item[0],nome)) if not self.fazParte(nome, self.rulesdict["exclude"], sat, frequencia,sid,tipo): tmpCanal=self.fazParteFavorito(nome, sat, frequencia,sid,tipo) if tmpCanal: if config.plugins.Easy.addSat.value: self.favouritesTv.append("%s:%s (%s)"%(item[0],nome,satName)) else: self.favouritesTv.append("%s:%s"%(item[0],nome)) elif tipo=="2": if(position==config.plugins.Easy.pref.value): self.favouritesRadio.append("%s:%s"%(item[0],nome)) if config.plugins.Easy.operadora.value and position==config.plugins.Easy.pref.value: self.favoritoOperadora.append("%s:%s"%(item[0],nome)) self.mudaSituacao(40, _("Deleting all favorites")) self.t=eTimer() self.t.callback.append(utils.removeoldfiles) self.t.callback.append(self.escreveBouquets) if config.plugins.Easy.operadora.value: self.t.callback.append(self.escreveOperadoraFavoritos) self.t.start(1,True) return True else: self.iniciar.stop() self.close() return False