def getPackageUpdates(): try: updates_available = False data = metrixCore.getWeb('http://connect.mymetrix.de/store/api/?q=get.xml.packages&category_id=%', True) if not data: print '[MyMetrix] Error getting package updates' dom = parseString(data) for design in dom.getElementsByTagName('entry'): item_id = str(design.getAttributeNode('id').nodeValue) name = str(design.getAttributeNode('name').nodeValue) author = str(design.getAttributeNode('author').nodeValue) version = str(design.getAttributeNode('version').nodeValue) rating = str(design.getAttributeNode('rating').nodeValue) date = str(design.getAttributeNode('date_created').nodeValue) item_type = str(design.getAttributeNode('type').nodeValue) file_id = str(design.getAttributeNode('file_id').nodeValue) file_token = str(design.getAttributeNode('file_token').nodeValue) image_id = str(design.getAttributeNode('image_id').nodeValue) image_token = str(design.getAttributeNode('image_token').nodeValue) total_votes = str(design.getAttributeNode('total_votes').nodeValue) description = str(design.getAttributeNode('description').nodeValue) previouspackage = str(design.getAttributeNode('previouspackage').nodeValue) path = metrixDefaults.pathRoot() + 'packages/' + item_id if not os.path.exists(path): if previouspackage != '0': path = metrixDefaults.pathRoot() + 'packages/' + previouspackage if os.path.exists(path): '[MyMetrix] Update found: ' + name + ' Version: ' + version installPackage(item_id + ';' + file_id + ';' + file_token, 0) updates_available = True if updates_available == True: getPackageUpdates() except: pass
def postBackup(): postSkinParts(metrixDefaults.pathRoot() + 'skinparts/widgets/active/', 'Active') postSkinParts(metrixDefaults.pathRoot() + 'skinparts/screens/active/', 'Active') postSkinParts(metrixDefaults.pathRoot() + 'skinparts/widgets/inactive/', 'Inactive') postSkinParts(metrixDefaults.pathRoot() + 'skinparts/screens/inactive/', 'Inactive')
def updateSkinParts(): checkSkinPartUpdates(metrixDefaults.pathRoot() + 'skinparts/screens/active/') checkSkinPartUpdates(metrixDefaults.pathRoot() + 'skinparts/widgets/active/') checkSkinPartUpdates( metrixDefaults.pathRoot() + 'skinparts/screens/inactive/', False) checkSkinPartUpdates( metrixDefaults.pathRoot() + 'skinparts/widgets/inactive/', False)
def getPackages(self, isactive=''): try: self.menulist = [] file = urllib2.urlopen(self.url + self.orderby + '&category_id=' + str(self.category_id)) data = file.read() file.close() dom = parseString(data) for design in dom.getElementsByTagName('entry'): item_id = str(design.getAttributeNode('id').nodeValue) name = str(design.getAttributeNode('name').nodeValue) author = str(design.getAttributeNode('author').nodeValue) version = str(design.getAttributeNode('version').nodeValue) rating = str(design.getAttributeNode('rating').nodeValue) date = str(design.getAttributeNode('date_created').nodeValue) item_type = str(design.getAttributeNode('type').nodeValue) file_id = str(design.getAttributeNode('file_id').nodeValue) file_token = str( design.getAttributeNode('file_token').nodeValue) image_id = str(design.getAttributeNode('image_id').nodeValue) image_token = str( design.getAttributeNode('image_token').nodeValue) total_votes = str( design.getAttributeNode('total_votes').nodeValue) description = str( design.getAttributeNode('description').nodeValue) previouspackage = str( design.getAttributeNode('previouspackage').nodeValue) path = metrixDefaults.pathRoot() + 'packages/' + item_id if self.onlyShowUpdates == '1': if not os.path.exists(path): if previouspackage != '0': path = metrixDefaults.pathRoot( ) + 'packages/' + previouspackage if os.path.exists(path): self.menulist.append( self.PackagesListEntry( item_id, name, author, rating, date, version, total_votes, item_type, image_id, image_token, description, file_id, file_token, previouspackage, isactive)) elif previouspackage == '0': self.menulist.append( self.PackagesListEntry(item_id, name, author, rating, date, version, total_votes, item_type, image_id, image_token, description, file_id, file_token, previouspackage, isactive)) self['menu'].setList(self.menulist) self.updateMeta() self.ShowPicture() except: pass
def PackagesListEntry(self, item_id, name, author, rating, date, version, total_votes, item_type, image_id, image_token, description, file_id, file_token, previouspackage = '0', isactive = ''): res = [[item_id, name, author, rating, date, version, total_votes, item_type, image_id, image_token, description, file_id, file_token, isactive, previouspackage]] path = metrixDefaults.pathRoot() + 'packages/' + str(item_id) if os.path.exists(path): pngtype = '/usr/lib/enigma2/python/Plugins/Extensions/MyMetrix/images/package-on.png' else: pngtype = '/usr/lib/enigma2/python/Plugins/Extensions/MyMetrix/images/package.png' png = '/usr/lib/enigma2/python/Plugins/Extensions/MyMetrix/images/vote' + rating + '.png' res.append(MultiContentEntryPixmapAlphaTest(pos=(412, 9), size=(170, 32), png=loadPNG(png))) res.append(MultiContentEntryPixmapAlphaTest(pos=(3, 7), size=(32, 32), png=loadPNG(pngtype))) res.append(MultiContentEntryText(pos=(40, 4), size=(367, 45), font=0, text=name)) return res
def updateMeta(self): try: self['itemname'].setText( _(str(self['menu'].l.getCurrentSelection()[0][1]))) self['author'].setText(_('loading...')) self['votes'].setText( str(self['menu'].l.getCurrentSelection()[0][6])) self['date'].setText( str(self['menu'].l.getCurrentSelection()[0][5])) self['description'].setText( str(self['menu'].l.getCurrentSelection()[0][10])) self.currentid = str(self['menu'].l.getCurrentSelection()[0][0]) self.currenttype = str(self['menu'].l.getCurrentSelection()[0][7]) self.currentauthor = str( self['menu'].l.getCurrentSelection()[0][2]) id = self.currentid type = self.currenttype path = metrixDefaults.pathRoot( ) + 'skinparts/' + type + 's/active/' + type + '_' + str(id) + '/' if os.path.exists(path): self['isInstalled'].setText(_('Already installed!')) else: self['isInstalled'].setText('') except Exception as e: print '[MyMetrix] ' + str(e) traceback.print_exc()
def installPackage(param, actionId): params = param.split(';') packageId = params[0] print '[MyMetrix] Installing package ' + packageId downloadurl = 'http://connect.mymetrix.de/store/api/?q=get.xml.packagefile' + '&file_id=' + params[1] + '&token=' + params[2] localPath = '/tmp/metrixPackage.ipk' try: file_name = localPath u = urllib2.urlopen(downloadurl) f = open(file_name, 'wb') meta = u.info() file_size = int(meta.getheaders('Content-Length')[0]) file_size_dl = 0 block_sz = 8192 while True: buffer = u.read(block_sz) if not buffer: break file_size_dl += len(buffer) f.write(buffer) status = 'Downloading... (%3.0f%%)' % (file_size_dl * 100.0 / file_size) status = status + chr(8) * (len(status) + 1) f.close() global_executer.execute('opkg install --force-overwrite ' + localPath) config.plugins.MetrixUpdater.Reboot.value = 1 config.plugins.MetrixUpdater.save() configfile.save() path = metrixDefaults.pathRoot() + 'packages/' + packageId if not os.path.exists(path): os.makedirs(path) showInfo(_('Package successfully installed!')) except: print '[MyMetrix] Error installing package ' + params[0]
def installSkinPart(id, type, author='', image_id='', image_token='', date_modified='', isActive=True): downloadurl = 'http://connect.mymetrix.de/store/api/?q=get.xml.skinpartxml&id=' downloadmetaurl = 'http://connect.mymetrix.de/store/api/?q=get.xml.skinpartmeta&id=' screenshotpath = 'http://connect.mymetrix.de/store/api/?q=get.pngresized&width=550' screenshotpath_v2 = 'http://connect.mymetrix.de/store/api/?q=v2.get.png&width=550&type=6' path = metrixDefaults.pathRoot( ) + 'skinparts/' + type + 's/inactive/' + type + '_' + str(id) + '/' if not os.path.exists(path): os.makedirs(path) datapath = metrixTools.downloadFile( downloadurl + str(id) + '&author=' + author, path + 'data.xml', 'SKINPART/', '/usr/share/enigma2/MetrixHD/skinparts/' + id + '/') metapath = metrixTools.downloadFile( downloadmetaurl + str(id) + '&author=' + author, path + 'meta.xml') imagepath = '' if image_id == '': imagepath = metrixTools.downloadFile(screenshotpath_v2 + '&id=' + id, path + 'preview.png') else: imagepath = metrixTools.downloadFile( screenshotpath + '&image_id=' + image_id + '&token=' + image_token, path + 'preview.png') if isActive: enableSkinPart(path) downloadSkinPartRenderer(id) downloadSkinPartConverter(id) downloadSkinPartImages(id)
def installSkinPart(id, type, author="", image_id="", image_token="", date_modified="", isActive=True): downloadurl = "http://connect.mymetrix.de/store/api/?q=get.xml.skinpartxml&id=" downloadmetaurl = "http://connect.mymetrix.de/store/api/?q=get.xml.skinpartmeta&id=" screenshotpath = "http://connect.mymetrix.de/store/api/?q=get.pngresized&width=550" screenshotpath_v2 = "http://connect.mymetrix.de/store/api/?q=v2.get.png&width=550&type=6" path = metrixDefaults.pathRoot() + "skinparts/" + type + "s/inactive/" + type + "_" + str(id) + "/" if not os.path.exists(path): os.makedirs(path) datapath = metrixTools.downloadFile( downloadurl + str(id) + "&author=" + author, path + "data.xml", "SKINPART/", "/usr/share/enigma2/MetrixHD/skinparts/" + id + "/", ) metapath = metrixTools.downloadFile(downloadmetaurl + str(id) + "&author=" + author, path + "meta.xml") imagepath = "" if image_id == "": imagepath = metrixTools.downloadFile(screenshotpath_v2 + "&id=" + id, path + "preview.png") else: imagepath = metrixTools.downloadFile( screenshotpath + "&image_id=" + image_id + "&token=" + image_token, path + "preview.png" ) if isActive: enableSkinPart(path) downloadSkinPartRenderer(id) downloadSkinPartConverter(id) downloadSkinPartImages(id)
def updateMeta(self): try: self['itemname'].setText( str(self['menu'].l.getCurrentSelection()[0][1])) self['author'].setText(_('loading...')) self['votes'].setText( str(self['menu'].l.getCurrentSelection()[0][6])) self['date'].setText( str(self['menu'].l.getCurrentSelection()[0][5])) self['description'].setText( str(self['menu'].l.getCurrentSelection()[0][10])) self.file_id = str(self['menu'].l.getCurrentSelection()[0][11]) self.file_token = str(self['menu'].l.getCurrentSelection()[0][12]) self.currentid = str(self['menu'].l.getCurrentSelection()[0][0]) self.currenttype = str(self['menu'].l.getCurrentSelection()[0][7]) id = self.currentid type = self.currenttype path = metrixDefaults.pathRoot( ) + 'packages/' + type + 's/active/' + type + '_' + str(id) + '/' if os.path.exists(path): self['isInstalled'].setText('Already installed!') else: self['isInstalled'].setText('') except: pass
def threadworker(self): while 1: if self.getCatalog == True: self.getCatalog = False self.mainmenu = [] self.getSkinParts(metrixDefaults.pathRoot() + 'skinparts/widgets/active/', '-on') self.getSkinParts(metrixDefaults.pathRoot() + 'skinparts/screens/active/', '-on') self.getSkinParts(metrixDefaults.pathRoot() + 'skinparts/widgets/inactive/') self.getSkinParts(metrixDefaults.pathRoot() + 'skinparts/screens/inactive/') if self.initPicture == True: self.initPicture = False self.UpdatePicture() self.updateMeta() if self.getEntry == True: self.getEntry = False self.updateMeta() self.ShowPicture() time.sleep(1)
def updateMeta(self): try: self["itemname"].setText(str(self["menu"].l.getCurrentSelection()[0][1])) self.setTitle(_("OpenStore // "+self["menu"].l.getCurrentSelection()[0][1])) self["author"].setText(_("loading...")) self["votes"].setText(str(self["menu"].l.getCurrentSelection()[0][6])) self["date"].setText(str(self["menu"].l.getCurrentSelection()[0][5])) self["description"].setText(str(self["menu"].l.getCurrentSelection()[0][10])) self.currentid = int(self["menu"].l.getCurrentSelection()[0][0]) self.currenttype = str(self["menu"].l.getCurrentSelection()[0][7]) isinstalled = self["menu"].l.getCurrentSelection()[0][15] updateavailable = self["menu"].l.getCurrentSelection()[0][16] if isinstalled: self["yellowbutton"].setText(_("Vote")) packageName = metrixDefaults.cfg(metrixDefaults.CONFIG_INSTALLEDPACKAGES,self.currentid,"name") if not packageName == "": self["redbutton"].setText(_("Remove")) else: self["redbutton"].setText("") if updateavailable: self["isInstalled"].setText(_("Update available!")) self["greenbutton"].setText(_("Update")) else: self["isInstalled"].setText(_("This app is installed!")) self["greenbutton"].setText(_("Reinstall")) else: type = self["menu"].l.getCurrentSelection()[0][7] if type == "piconrepo" and config.plugins.MyMetrix.XPiconsRepository.value == self.currentid: self["yellowbutton"].setText("Vote") else: self["yellowbutton"].setText("") self["redbutton"].setText("") if self.currenttype == "piconrepo": self["greenbutton"].setText(_("Apply")) if config.plugins.MyMetrix.XPiconsRepository.value == self.currentid: self["greenbutton"].setText("") else: self["greenbutton"].setText(_("Install")) self["isInstalled"].setText("") path = metrixDefaults.pathRoot()+"packages/"+str(self.currentid)+"/" except Exception, e: self["itemname"].setText(_("No packages available!")) self["author"].setText("") self["votes"].setText("") self["redbutton"].setText("") self["greenbutton"].setText("") self["yellowbutton"].setText("") self["description"].setText("") self["date"].setText("") metrixTools.log("No packages available in this view!",e)
def getPackageUpdates(): try: updates_available = False data = metrixCore.getWeb( 'http://connect.mymetrix.de/store/api/?q=get.xml.packages&category_id=%', True) if not data: print '[MyMetrix] Error getting package updates' dom = parseString(data) for design in dom.getElementsByTagName('entry'): item_id = str(design.getAttributeNode('id').nodeValue) name = str(design.getAttributeNode('name').nodeValue) author = str(design.getAttributeNode('author').nodeValue) version = str(design.getAttributeNode('version').nodeValue) rating = str(design.getAttributeNode('rating').nodeValue) date = str(design.getAttributeNode('date_created').nodeValue) item_type = str(design.getAttributeNode('type').nodeValue) file_id = str(design.getAttributeNode('file_id').nodeValue) file_token = str(design.getAttributeNode('file_token').nodeValue) image_id = str(design.getAttributeNode('image_id').nodeValue) image_token = str(design.getAttributeNode('image_token').nodeValue) total_votes = str(design.getAttributeNode('total_votes').nodeValue) description = str(design.getAttributeNode('description').nodeValue) previouspackage = str( design.getAttributeNode('previouspackage').nodeValue) path = metrixDefaults.pathRoot() + 'packages/' + item_id if not os.path.exists(path): if previouspackage != '0': path = metrixDefaults.pathRoot( ) + 'packages/' + previouspackage if os.path.exists(path): '[MyMetrix] Update found: ' + name + ' Version: ' + version installPackage( item_id + ';' + file_id + ';' + file_token, 0) updates_available = True if updates_available == True: getPackageUpdates() except: pass
def getPackages(self, isactive = ''): try: self.menulist = [] file = urllib2.urlopen(self.url + self.orderby + '&category_id=' + str(self.category_id)) data = file.read() file.close() dom = parseString(data) for design in dom.getElementsByTagName('entry'): item_id = str(design.getAttributeNode('id').nodeValue) name = str(design.getAttributeNode('name').nodeValue) author = str(design.getAttributeNode('author').nodeValue) version = str(design.getAttributeNode('version').nodeValue) rating = str(design.getAttributeNode('rating').nodeValue) date = str(design.getAttributeNode('date_created').nodeValue) item_type = str(design.getAttributeNode('type').nodeValue) file_id = str(design.getAttributeNode('file_id').nodeValue) file_token = str(design.getAttributeNode('file_token').nodeValue) image_id = str(design.getAttributeNode('image_id').nodeValue) image_token = str(design.getAttributeNode('image_token').nodeValue) total_votes = str(design.getAttributeNode('total_votes').nodeValue) description = str(design.getAttributeNode('description').nodeValue) previouspackage = str(design.getAttributeNode('previouspackage').nodeValue) path = metrixDefaults.pathRoot() + 'packages/' + item_id if self.onlyShowUpdates == '1': if not os.path.exists(path): if previouspackage != '0': path = metrixDefaults.pathRoot() + 'packages/' + previouspackage if os.path.exists(path): self.menulist.append(self.PackagesListEntry(item_id, name, author, rating, date, version, total_votes, item_type, image_id, image_token, description, file_id, file_token, previouspackage, isactive)) elif previouspackage == '0': self.menulist.append(self.PackagesListEntry(item_id, name, author, rating, date, version, total_votes, item_type, image_id, image_token, description, file_id, file_token, previouspackage, isactive)) self['menu'].setList(self.menulist) self.updateMeta() self.ShowPicture() except: pass
def threadworker(self): while 1: if self.getCatalog == True: self.getCatalog = False self.mainmenu = [] self.getSkinParts( metrixDefaults.pathRoot() + 'skinparts/widgets/active/', '-on') self.getSkinParts( metrixDefaults.pathRoot() + 'skinparts/screens/active/', '-on') self.getSkinParts(metrixDefaults.pathRoot() + 'skinparts/widgets/inactive/') self.getSkinParts(metrixDefaults.pathRoot() + 'skinparts/screens/inactive/') if self.initPicture == True: self.initPicture = False self.UpdatePicture() self.updateMeta() if self.getEntry == True: self.getEntry = False self.updateMeta() self.ShowPicture() time.sleep(1)
def getPackages(self,isactive=""): menu = [] try: params = {'restrictions':metrixTools.getRestrictions(), 'orderby':self.orderby+" "+self.limit, 'category_id':str(self.category_id)} data = metrixCore.getWeb(self.url,True,params) if "<exception status=""error""" in data: raise Exception("Error loading data") dom = parseString(data) for design in dom.getElementsByTagName('entry'): isinstalled = False updateavailable = False item_id = str(design.getAttributeNode('id').nodeValue) name = str(design.getAttributeNode('name').nodeValue) author = str(design.getAttributeNode('author').nodeValue) version = str(design.getAttributeNode('version').nodeValue) rating = str(design.getAttributeNode('rating').nodeValue) date = str(design.getAttributeNode('date_created').nodeValue) date_modified = str(design.getAttributeNode('date_modified').nodeValue) item_type = str(design.getAttributeNode('type').nodeValue) file_link = str(design.getAttributeNode('file_link').nodeValue) image_link = str(design.getAttributeNode('image_link').nodeValue) icon_link = str(design.getAttributeNode('icon_link').nodeValue) downloads = str(design.getAttributeNode('downloads').nodeValue) total_votes = str(design.getAttributeNode('total_votes').nodeValue) build = int(design.getAttributeNode('build').nodeValue) description = str(design.getAttributeNode('description').nodeValue) previouspackage = str(design.getAttributeNode('previouspackage').nodeValue) path = metrixDefaults.pathRoot()+"packages/"+item_id localbuild = int(metrixDefaults.cfg(metrixDefaults.CONFIG_INSTALLEDPACKAGES,item_id,"build","int")) # add when not only updates or (only updates and online build is higher) if not localbuild == metrixDefaults.NONEINT: isinstalled = True if build > localbuild: updateavailable = True if (not self.onlyupdates and not self.onlyinstalled == True) or (build > localbuild and self.onlyupdates == True) or (self.onlyinstalled and isinstalled == True): menu.append(self.PackagesListEntry(item_id,name,author,rating,date,version,total_votes,item_type,image_link,icon_link,description,file_link,downloads,previouspackage,date_modified,build,isinstalled,updateavailable)) metrixTools.callOnMainThread(self.setList,menu) if len(menu) < 1: self.image = metrixDefaults.PLUGIN_DIR + "images/sponsor.png" metrixTools.callOnMainThread(self.setList,menu) except Exception, e: metrixTools.log('Error getting packages via web',e) self.image = metrixDefaults.PLUGIN_DIR + "images/sponsor.png" metrixTools.callOnMainThread(self.setList,menu)
def downloadPackage(self): id = self.currentid url = self.downloadurl + '&file_id=' + self.file_id + '&token=' + self.file_token localPath = '/tmp/metrixPackage.ipk' try: file_name = localPath u = urllib2.urlopen(url) f = open(file_name, 'wb') meta = u.info() file_size = int(meta.getheaders('Content-Length')[0]) file_size_dl = 0 block_sz = 8192 while True: buffer = u.read(block_sz) if not buffer: break file_size_dl += len(buffer) f.write(buffer) status = 'Downloading... (%3.0f%%)' % (file_size_dl * 100.0 / file_size) status = status + chr(8) * (len(status) + 1) self['isInstalled'].setText(status) f.close() self['isInstalled'].setText('Installing...') try: global_executer.execute('opkg install --force-overwrite ' + localPath) time.sleep(6) self['isInstalled'].setText(_('Installation complete!')) config.plugins.MetrixUpdater.Reboot.value = 1 config.plugins.MetrixUpdater.save() configfile.save() except Exception as e: print '[MyMetrix] ' + str(e) traceback.print_exc() self['isInstalled'].setText(_('Installation error!')) path = metrixDefaults.pathRoot() + 'packages/' + id if not os.path.exists(path): os.makedirs(path) except Exception as e: print '[MyMetrix] ' + str(e) traceback.print_exc() self['isInstalled'].setText('Error during installation!')
def PackagesListEntry(self,item_id,name,author="",rating="",date="",version="",total_votes="",item_type="",image_link="",icon_link="",description="",file_link="",downloads="",previouspackage="0",date_modified="",build=0,isinstalled=False,updateavailable=False): res = [[item_id,name,author,rating,date,version,total_votes,item_type,image_link,icon_link,description,file_link,downloads,date_modified,build,isinstalled,updateavailable]] path = metrixDefaults.pathRoot()+"packages/"+str(item_id) if isinstalled: pngtype = metrixDefaults.PLUGIN_DIR + "images/package-on.png" if updateavailable: res.append(MultiContentEntryText(pos=(70, 4), size=(365, 45), font=0, text=name,color=metrixDefaults.COLOR_UPDATE_AVAILABLE)) else: res.append(MultiContentEntryText(pos=(70, 4), size=(365, 45), font=0, text=name,color=metrixDefaults.COLOR_INSTALLED)) else: pngtype = metrixDefaults.PLUGIN_DIR + "images/package.png" res.append(MultiContentEntryText(pos=(70, 4), size=(365, 45), font=0, text=name)) png = metrixDefaults.PLUGIN_DIR + "images/vote"+rating+".png" pngicon = metrixTools.webPixmap(icon_link,"openStoreIcon"+str(item_id),{'width':54}) res.append(MultiContentEntryPixmapAlphaBlend(pos=(445, 9), size=(185, 32), png=loadPNG(png))) res.append(MultiContentEntryPixmapAlphaBlend(pos=(5, 1), size=(54, 54), png=loadPNG(pngicon))) return res
def SkinPartsListEntry( self, item_id, name, author, rating, date, version, total_votes, item_type, image_id, image_token, description, screenname, isactive="", ): res = [ [ item_id, name, author, rating, date, version, total_votes, item_type, image_id, image_token, description, screenname, isactive, ] ] path = metrixDefaults.pathRoot() + "skinparts/" + item_type + "s/active/" + item_type + "_" + str(item_id) + "/" if os.path.exists(path): pngtype = "/usr/lib/enigma2/python/Plugins/Extensions/MyMetrix/images/" + item_type + "-on.png" else: pngtype = "/usr/lib/enigma2/python/Plugins/Extensions/MyMetrix/images/" + item_type + ".png" png = "/usr/lib/enigma2/python/Plugins/Extensions/MyMetrix/images/vote" + rating + ".png" res.append(MultiContentEntryPixmapAlphaTest(pos=(412, 9), size=(170, 32), png=loadPNG(png))) res.append(MultiContentEntryPixmapAlphaTest(pos=(3, 7), size=(32, 32), png=loadPNG(pngtype))) res.append(MultiContentEntryText(pos=(40, 4), size=(367, 45), font=0, text=name)) return res
def updateMeta(self): try: self["itemname"].setText(_(str(self["menu"].l.getCurrentSelection()[0][1]))) self["author"].setText(_("loading...")) self["votes"].setText(str(self["menu"].l.getCurrentSelection()[0][6])) self["date"].setText(str(self["menu"].l.getCurrentSelection()[0][5])) self["description"].setText(str(self["menu"].l.getCurrentSelection()[0][10])) self.currentid = str(self["menu"].l.getCurrentSelection()[0][0]) self.currenttype = str(self["menu"].l.getCurrentSelection()[0][7]) self.currentauthor = str(self["menu"].l.getCurrentSelection()[0][2]) id = self.currentid type = self.currenttype path = metrixDefaults.pathRoot() + "skinparts/" + type + "s/active/" + type + "_" + str(id) + "/" if os.path.exists(path): self["isInstalled"].setText("Already installed!") else: self["isInstalled"].setText("") except Exception as e: print "[MyMetrix] " + str(e) traceback.print_exc()
def installPackage(param,actionId,isUpdate=False): params = param.split(";") packageId = params[0] metrixTools.log("Installing package "+packageId) downloadurl = metrixDefaults.URL_STORE_API + "get.xml.packagefile&file_id="+params[1]+"&token="+params[2] if isUpdate: downloadurl = metrixDefaults.URL_STORE_API + "get.xml.packagefile-update&file_id="+params[1]+"&token="+params[2] localPath = "/tmp/metrixPackage.ipk" instSuccess = metrix_PackageTools.installPackage(downloadurl,True) if instSuccess: config.plugins.MetrixUpdater.Reboot.value = 1 config.plugins.MetrixUpdater.save() configfile.save() path = metrixDefaults.pathRoot()+"packages/"+packageId if not os.path.exists(path): os.makedirs(path) showInfo(_("Package successfully installed!")) else: showInfo(_("Error installing package!"),MessageBox.TYPE_ERROR) metrixTools.log("Error installing package "+params[0])
def updateMeta(self): try: self['itemname'].setText(str(self['menu'].l.getCurrentSelection()[0][1])) self['author'].setText(_('loading...')) self['votes'].setText(str(self['menu'].l.getCurrentSelection()[0][6])) self['date'].setText(str(self['menu'].l.getCurrentSelection()[0][5])) self['description'].setText(str(self['menu'].l.getCurrentSelection()[0][10])) self.file_id = str(self['menu'].l.getCurrentSelection()[0][11]) self.file_token = str(self['menu'].l.getCurrentSelection()[0][12]) self.currentid = str(self['menu'].l.getCurrentSelection()[0][0]) self.currenttype = str(self['menu'].l.getCurrentSelection()[0][7]) id = self.currentid type = self.currenttype path = metrixDefaults.pathRoot() + 'packages/' + type + 's/active/' + type + '_' + str(id) + '/' if os.path.exists(path): self['isInstalled'].setText('Already installed!') else: self['isInstalled'].setText('') except: pass
def PackagesListEntry(self, item_id, name, author, rating, date, version, total_votes, item_type, image_id, image_token, description, file_id, file_token, previouspackage='0', isactive=''): res = [[ item_id, name, author, rating, date, version, total_votes, item_type, image_id, image_token, description, file_id, file_token, isactive, previouspackage ]] path = metrixDefaults.pathRoot() + 'packages/' + str(item_id) if os.path.exists(path): pngtype = '/usr/lib/enigma2/python/Plugins/Extensions/MyMetrix/images/package-on.png' else: pngtype = '/usr/lib/enigma2/python/Plugins/Extensions/MyMetrix/images/package.png' png = '/usr/lib/enigma2/python/Plugins/Extensions/MyMetrix/images/vote' + rating + '.png' res.append( MultiContentEntryPixmapAlphaTest(pos=(412, 9), size=(170, 32), png=loadPNG(png))) res.append( MultiContentEntryPixmapAlphaTest(pos=(3, 7), size=(32, 32), png=loadPNG(pngtype))) res.append( MultiContentEntryText(pos=(40, 4), size=(367, 45), font=0, text=name)) return res
def installPackage(param, actionId): params = param.split(';') packageId = params[0] print '[MyMetrix] Installing package ' + packageId downloadurl = 'http://connect.mymetrix.de/store/api/?q=get.xml.packagefile' + '&file_id=' + params[ 1] + '&token=' + params[2] localPath = '/tmp/metrixPackage.ipk' try: file_name = localPath u = urllib2.urlopen(downloadurl) f = open(file_name, 'wb') meta = u.info() file_size = int(meta.getheaders('Content-Length')[0]) file_size_dl = 0 block_sz = 8192 while True: buffer = u.read(block_sz) if not buffer: break file_size_dl += len(buffer) f.write(buffer) status = 'Downloading... (%3.0f%%)' % (file_size_dl * 100.0 / file_size) status = status + chr(8) * (len(status) + 1) f.close() global_executer.execute('opkg install --force-overwrite ' + localPath) config.plugins.MetrixUpdater.Reboot.value = 1 config.plugins.MetrixUpdater.save() configfile.save() path = metrixDefaults.pathRoot() + 'packages/' + packageId if not os.path.exists(path): os.makedirs(path) showInfo(_('Package successfully installed!')) except: print '[MyMetrix] Error installing package ' + params[0]
def generateSkin(self): screennames = [] screennames = self.getSkinPartsScreennames(metrixDefaults.pathRoot() + 'skinparts/screens/active/') self['output'].setText(_(str('Reading template file'))) skindom = parse(metrixDefaults.pathRoot() + 'skintemplates/' + config.plugins.MyMetrix.templateFile.value) skinNode = skindom.getElementsByTagName('skin')[0] self['output'].setText(_(str('Setting colors'))) self.setColor(skinNode) for screen in skindom.getElementsByTagName('screen'): screenname = str(screen.getAttributeNode('name').nodeValue) self['output'].setText(_(str('Checking screen ' + screenname))) if screenname in screennames: self['output'].setText(_(str('Removing default screen ' + screenname))) parentNode = screen.parentNode parentNode.removeChild(screen) path = metrixDefaults.pathRoot() + 'skinparts/screens/active/' dirs = listdir(path) for dir in dirs: self['output'].setText(_(str('Parsing SkinPart Screens'))) try: screendom = parse(path + '/' + dir + '/data.xml') customscreen = skindom.importNode(screendom.getElementsByTagName('screen')[0], True) skinNode.appendChild(customscreen) except: pass path = metrixDefaults.pathRoot() + 'skinparts/widgets/active/' dirs = listdir(path) for dir in dirs: try: widgetdom = parse(path + '/' + dir + '/data.xml') widget = widgetdom.getElementsByTagName('skinpartwidget')[0] widgetscreenname = str(widget.getAttributeNode('screenname').nodeValue) self['output'].setText(_(str('Parsing SkinPart Widget for ' + widgetscreenname))) for screen in skinNode.getElementsByTagName('screen'): screenname = str(screen.getAttributeNode('name').nodeValue) if screenname == widgetscreenname: for child in widget.childNodes: childimport = skindom.importNode(child, True) screen.appendChild(childimport) break except: pass for screen in skindom.getElementsByTagName('screen'): screenname = str(screen.getAttributeNode('name').nodeValue) self['output'].setText(_(str('Setting ProgressBars for ' + screenname + ' screen'))) try: for widget in screen.getElementsByTagName('widget'): try: pixmap = widget.getAttributeNode('pixmap').nodeValue if pixmap == 'MetrixHD/colors/00ffffff.png': widget.setAttribute('pixmap', pixmap.replace('/00ffffff', '/' + config.plugins.MyMetrix.Color.ProgressBar.value.replace('#', ''))) elif pixmap == '%METRIX:PROGRESSBAR:COLOR:MULTI%': widget.setAttribute('pixmap', 'MetrixHD/colors/' + config.plugins.MyMetrix.Color.ProgressBar.value.replace('#', '') + '.png') elif pixmap == '%METRIX:PROGRESSBAR:COLOR:WHITE%': widget.setAttribute('pixmap', 'MetrixHD/colors/00ffffff.png') except: pass except: pass for screen in skinNode.getElementsByTagName('screen'): screenname = str(screen.getAttributeNode('name').nodeValue) self['output'].setText(_(str('Checking compatibility for ' + screenname))) screen = skinPartIsCompatible(screen) self['output'].setText(_(str('Writing skin file, please wait...'))) file = '/usr/share/enigma2/MetrixHD/skin.xml' path = os.path.dirname(file) if not os.path.exists(path): os.makedirs(path) file = open(path + '/skin.xml', 'w') file.write(skindom.toxml()) file.close() try: self['output'].setText(_(str('Activating MetrixHD'))) config.skin.primary_skin.value = 'MetrixHD/skin.xml' config.skin.primary_fallback_skin.value = True config.skin.primary_fallback_skin.save() config.skin.primary_skin.save() configfile.save() except: print 'Error activating MetrixHD' restartbox = self.session.openWithCallback(self.restartGUI, MessageBox, _('GUI needs a restart to apply a new skin.\nDo you want to Restart the GUI now?'), MessageBox.TYPE_YESNO) restartbox.setTitle(_('Restart GUI'))
def updateSkinParts(): checkSkinPartUpdates(metrixDefaults.pathRoot() + "skinparts/screens/active/") checkSkinPartUpdates(metrixDefaults.pathRoot() + "skinparts/widgets/active/") checkSkinPartUpdates(metrixDefaults.pathRoot() + "skinparts/screens/inactive/", False) checkSkinPartUpdates(metrixDefaults.pathRoot() + "skinparts/widgets/inactive/", False)
def generateSkin(self): screennames = [] screennames = self.getSkinPartsScreennames(metrixDefaults.pathRoot() + 'skinparts/screens/active/') self['output'].setText(_(str('Reading template file'))) skindom = parse(metrixDefaults.pathRoot() + 'skintemplates/' + config.plugins.MyMetrix.templateFile.value) skinNode = skindom.getElementsByTagName('skin')[0] self['output'].setText(_(str('Setting colors'))) self.setColor(skinNode) for screen in skindom.getElementsByTagName('screen'): screenname = str(screen.getAttributeNode('name').nodeValue) self['output'].setText(_(str('Checking screen ' + screenname))) if screenname in screennames: self['output'].setText( _(str('Removing default screen ' + screenname))) parentNode = screen.parentNode parentNode.removeChild(screen) path = metrixDefaults.pathRoot() + 'skinparts/screens/active/' dirs = listdir(path) for dir in dirs: self['output'].setText(_(str('Parsing SkinPart Screens'))) try: screendom = parse(path + '/' + dir + '/data.xml') customscreen = skindom.importNode( screendom.getElementsByTagName('screen')[0], True) skinNode.appendChild(customscreen) except: pass path = metrixDefaults.pathRoot() + 'skinparts/widgets/active/' dirs = listdir(path) for dir in dirs: try: widgetdom = parse(path + '/' + dir + '/data.xml') widget = widgetdom.getElementsByTagName('skinpartwidget')[0] widgetscreenname = str( widget.getAttributeNode('screenname').nodeValue) self['output'].setText( _(str('Parsing SkinPart Widget for ' + widgetscreenname))) for screen in skinNode.getElementsByTagName('screen'): screenname = str(screen.getAttributeNode('name').nodeValue) if screenname == widgetscreenname: for child in widget.childNodes: childimport = skindom.importNode(child, True) screen.appendChild(childimport) break except: pass for screen in skindom.getElementsByTagName('screen'): screenname = str(screen.getAttributeNode('name').nodeValue) self['output'].setText( _(str('Setting ProgressBars for ' + screenname + ' screen'))) try: for widget in screen.getElementsByTagName('widget'): try: pixmap = widget.getAttributeNode('pixmap').nodeValue if pixmap == 'MetrixHD/colors/00ffffff.png': widget.setAttribute( 'pixmap', pixmap.replace( '/00ffffff', '/' + config.plugins.MyMetrix. Color.ProgressBar.value.replace('#', ''))) elif pixmap == '%METRIX:PROGRESSBAR:COLOR:MULTI%': widget.setAttribute( 'pixmap', 'MetrixHD/colors/' + config.plugins.MyMetrix.Color.ProgressBar. value.replace('#', '') + '.png') elif pixmap == '%METRIX:PROGRESSBAR:COLOR:WHITE%': widget.setAttribute( 'pixmap', 'MetrixHD/colors/00ffffff.png') except: pass except: pass for screen in skinNode.getElementsByTagName('screen'): screenname = str(screen.getAttributeNode('name').nodeValue) self['output'].setText( _(str('Checking compatibility for ' + screenname))) screen = skinPartIsCompatible(screen) self['output'].setText(_(str('Writing skin file, please wait...'))) file = '/usr/share/enigma2/MetrixHD/skin.xml' path = os.path.dirname(file) if not os.path.exists(path): os.makedirs(path) file = open(path + '/skin.xml', 'w') file.write(skindom.toxml()) file.close() try: self['output'].setText(_(str('Activating MetrixHD'))) config.skin.primary_skin.value = 'MetrixHD/skin.xml' config.skin.primary_fallback_skin.value = True config.skin.primary_fallback_skin.save() config.skin.primary_skin.save() configfile.save() except: print 'Error activating MetrixHD' restartbox = self.session.openWithCallback( self.restartGUI, MessageBox, _('GUI needs a restart to apply a new skin.\nDo you want to Restart the GUI now?' ), MessageBox.TYPE_YESNO) restartbox.setTitle(_('Restart GUI'))
def generateSkin(actionId): try: print '[MyMetrix] Generating Skin via web' showInfo(_('Generating skin!')) screennames = [] screennames = getSkinPartsScreennames(metrixDefaults.pathRoot() + 'skinparts/screens/active/') skindom = parse(metrixDefaults.pathRoot() + 'skintemplates/' + config.plugins.MyMetrix.templateFile.value) skinNode = skindom.getElementsByTagName('skin')[0] setColor(skinNode) for screen in skindom.getElementsByTagName('screen'): screenname = str(screen.getAttributeNode('name').nodeValue) if screenname in screennames: parentNode = screen.parentNode parentNode.removeChild(screen) path = metrixDefaults.pathRoot() + 'skinparts/screens/active/' dirs = listdir(path) for dir in dirs: try: screendom = parse(path + '/' + dir + '/data.xml') customscreen = skindom.importNode( screendom.getElementsByTagName('screen')[0], True) skinNode.appendChild(customscreen) except: pass path = metrixDefaults.pathRoot() + 'skinparts/widgets/active/' dirs = listdir(path) for dir in dirs: try: widgetdom = parse(path + '/' + dir + '/data.xml') widget = widgetdom.getElementsByTagName('skinpartwidget')[0] widgetscreenname = str( widget.getAttributeNode('screenname').nodeValue) for screen in skinNode.getElementsByTagName('screen'): screenname = str(screen.getAttributeNode('name').nodeValue) if screenname == widgetscreenname: for child in widget.childNodes: childimport = skindom.importNode(child, True) screen.appendChild(childimport) break except: pass for screen in skindom.getElementsByTagName('screen'): screenname = str(screen.getAttributeNode('name').nodeValue) for widget in screen.getElementsByTagName('widget'): try: pixmap = str(widget.getAttributeNode('pixmap').nodeValue) if pixmap == 'MetrixHD/colors/00ffffff.png': widget.setAttribute( 'pixmap', pixmap.replace( '/00ffffff', '/' + config.plugins.MyMetrix. Color.ProgressBar.value.replace('#', ''))) elif pixmap == '%METRIX:PROGRESSBAR:COLOR:MULTI%': widget.setAttribute( 'pixmap', 'MetrixHD/colors/' + config.plugins.MyMetrix.Color. ProgressBar.value.replace('#', '') + '.png') elif pixmap == '%METRIX:PROGRESSBAR:COLOR:WHITE%': widget.setAttribute('pixmap', 'MetrixHD/colors/00ffffff.png') except: pass for screen in skindom.getElementsByTagName('screen'): screen = skinPartIsCompatible(screen) file = '/usr/share/enigma2/MetrixHD/skin.xml' path = os.path.dirname(file) if not os.path.exists(path): os.makedirs(path) file = open(path + '/skin.xml', 'w') file.write(skindom.toxml()) file.close() try: config.skin.primary_skin.value = 'MetrixHD/skin.xml' config.skin.primary_skin.save() config.skin.primary_fallback_skin.value = True config.skin.primary_fallback_skin.save() configfile.save() showInfo(_('Skin successfully generated!')) except Exception as e: print '[MyMetrix] ' + str(e) traceback.print_exc() print '[MyMetrix] Error activating MetrixHD' except Exception as e: print '[MyMetrix] ' + str(e) traceback.print_exc()
def generateSkin(actionId): try: print '[MyMetrix] Generating Skin via web' showInfo(_('Generating skin!')) screennames = [] screennames = getSkinPartsScreennames(metrixDefaults.pathRoot() + 'skinparts/screens/active/') skindom = parse(metrixDefaults.pathRoot() + 'skintemplates/' + config.plugins.MyMetrix.templateFile.value) skinNode = skindom.getElementsByTagName('skin')[0] setColor(skinNode) for screen in skindom.getElementsByTagName('screen'): screenname = str(screen.getAttributeNode('name').nodeValue) if screenname in screennames: parentNode = screen.parentNode parentNode.removeChild(screen) path = metrixDefaults.pathRoot() + 'skinparts/screens/active/' dirs = listdir(path) for dir in dirs: try: screendom = parse(path + '/' + dir + '/data.xml') customscreen = skindom.importNode(screendom.getElementsByTagName('screen')[0], True) skinNode.appendChild(customscreen) except: pass path = metrixDefaults.pathRoot() + 'skinparts/widgets/active/' dirs = listdir(path) for dir in dirs: try: widgetdom = parse(path + '/' + dir + '/data.xml') widget = widgetdom.getElementsByTagName('skinpartwidget')[0] widgetscreenname = str(widget.getAttributeNode('screenname').nodeValue) for screen in skinNode.getElementsByTagName('screen'): screenname = str(screen.getAttributeNode('name').nodeValue) if screenname == widgetscreenname: for child in widget.childNodes: childimport = skindom.importNode(child, True) screen.appendChild(childimport) break except: pass for screen in skindom.getElementsByTagName('screen'): screenname = str(screen.getAttributeNode('name').nodeValue) for widget in screen.getElementsByTagName('widget'): try: pixmap = str(widget.getAttributeNode('pixmap').nodeValue) if pixmap == 'MetrixHD/colors/00ffffff.png': widget.setAttribute('pixmap', pixmap.replace('/00ffffff', '/' + config.plugins.MyMetrix.Color.ProgressBar.value.replace('#', ''))) elif pixmap == '%METRIX:PROGRESSBAR:COLOR:MULTI%': widget.setAttribute('pixmap', 'MetrixHD/colors/' + config.plugins.MyMetrix.Color.ProgressBar.value.replace('#', '') + '.png') elif pixmap == '%METRIX:PROGRESSBAR:COLOR:WHITE%': widget.setAttribute('pixmap', 'MetrixHD/colors/00ffffff.png') except: pass for screen in skindom.getElementsByTagName('screen'): screen = skinPartIsCompatible(screen) file = '/usr/share/enigma2/MetrixHD/skin.xml' path = os.path.dirname(file) if not os.path.exists(path): os.makedirs(path) file = open(path + '/skin.xml', 'w') file.write(skindom.toxml()) file.close() try: config.skin.primary_skin.value = 'MetrixHD/skin.xml' config.skin.primary_skin.save() config.skin.primary_fallback_skin.value = True config.skin.primary_fallback_skin.save() configfile.save() showInfo(_('Skin successfully generated!')) except Exception as e: print '[MyMetrix] ' + str(e) traceback.print_exc() print '[MyMetrix] Error activating MetrixHD' except Exception as e: print '[MyMetrix] ' + str(e) traceback.print_exc()