def getActiveMods( uimods=None ): # returns a list of ModInfo's containing information of the mods """uimods: None - return all active mods True - only return active UI Mods False - only return active non-UI Mods """ active_mods = [] try: if not os.path.exists(PREFSFILENAME): logger.info("No game.prefs file found") return [] l = luaparser.luaParser(PREFSFILENAME) l.loweringKeys = False modlist = l.parse({"active_mods": "active_mods"}, {"active_mods": {}})["active_mods"] if l.error: logger.info("Error in reading the game.prefs file") return [] uids = [uid for uid, b in modlist.items() if b == 'true'] #logger.debug("Active mods detected: %s" % str(uids)) allmods = [] for m in installedMods: if ((uimods == True and m.ui_only) or (uimods == False and not m.ui_only) or uimods == None): allmods.append(m) active_mods = [m for m in allmods if m.uid in uids] #logger.debug("Allmods uids: %s\n\nActive mods uids: %s\n" % (", ".join([mod.uid for mod in allmods]), ", ".join([mod.uid for mod in allmods]))) return active_mods except: return []
def getModInfoFromZip(zfile): """get the mod info from a zip file""" if zfile in modCache: return modCache[zfile] r = None if zipfile.is_zipfile(os.path.join(MODFOLDER, zfile)): zip = zipfile.ZipFile(os.path.join(MODFOLDER, zfile), "r", zipfile.ZIP_DEFLATED) if zip.testzip() is None: for member in zip.namelist(): filename = os.path.basename(member) if not filename: continue if filename == "mod_info.lua": modinfofile = luaparser.luaParser("mod_info.lua") modinfofile.iszip = True modinfofile.zip = zip r = getModInfo(modinfofile) if r is None: logger.debug("mod_info.lua not found in zip file %s" % zfile) return None f, info = r if f.error: logger.debug("Error in parsing mod_info.lua in %s" % zfile) return None m = ModInfo(**info) m.setFolder(zfile) m.update() modCache[zfile] = m return m
def getActiveMods(uimods=None): # returns a list of ModInfo's containing information of the mods """uimods: None - return all active mods True - only return active UI Mods False - only return active non-UI Mods """ active_mods = [] try: if not os.path.exists(PREFSFILENAME): logger.info("No game.prefs file found") return [] l = luaparser.luaParser(PREFSFILENAME) l.loweringKeys = False modlist = l.parse({"active_mods": "active_mods"}, {"active_mods": {}})["active_mods"] if l.error: logger.info("Error in reading the game.prefs file") return [] uids = [uid for uid, b in modlist.items() if b == "true"] # logger.debug("Active mods detected: %s" % str(uids)) allmods = [] for m in installedMods: if (uimods == True and m.ui_only) or (uimods == False and not m.ui_only) or uimods == None: allmods.append(m) active_mods = [m for m in allmods if m.uid in uids] # logger.debug("Allmods uids: %s\n\nActive mods uids: %s\n" % (", ".join([mod.uid for mod in allmods]), ", ".join([mod.uid for mod in allmods]))) return active_mods except: return []
def getModInfoFromZip(zfile): """get the mod info from a zip file""" if zfile in modCache: return modCache[zfile] r = None if zipfile.is_zipfile(os.path.join(MODFOLDER, zfile)): zip = zipfile.ZipFile(os.path.join(MODFOLDER, zfile), "r", zipfile.ZIP_DEFLATED) if zip.testzip() == None: for member in zip.namelist(): filename = os.path.basename(member) if not filename: continue if filename == "mod_info.lua": modinfofile = luaparser.luaParser("mod_info.lua") modinfofile.iszip = True modinfofile.zip = zip r = getModInfo(modinfofile) if r == None: logger.debug("mod_info.lua not found in zip file %s" % zfile) return None f, info = r if f.error: logger.debug("Error in parsing mod_info.lua in %s" % zfile) return None m = ModInfo(**info) print zfile m.setFolder(zfile) m.update() modCache[zfile] = m return m
def uploadMap(self): mapDir = QtGui.QFileDialog.getExistingDirectory (self.client, "Select the map directory to upload", maps.getUserMapsFolder(), QtGui.QFileDialog.ShowDirsOnly) logger.debug("Uploading map from: " + mapDir) if mapDir != "" : if maps.isMapFolderValid(mapDir) : os.chmod(mapDir, S_IWRITE) mapName = os.path.basename(mapDir) zipName = mapName.lower()+".zip" scenariolua = luaparser.luaParser(os.path.join(mapDir,maps.getScenarioFile(mapDir))) scenarioInfos = scenariolua.parse({'scenarioinfo>name':'name', 'size':'map_size', 'description':'description', 'count:armies':'max_players','map_version':'version','type':'map_type','teams>0>name':'battle_type'}, {'version':'1'}) if scenariolua.error: logger.debug("There were " + str(scenariolua.errors) + " errors and " + str(scenariolua.warnings) + " warnings.") logger.debug(scenariolua.errorMsg) QtGui.QMessageBox.critical(self.client, "Lua parsing error", scenariolua.errorMsg + "\nMap uploading cancelled.") else: if scenariolua.warning: uploadmap = QtGui.QMessageBox.question(self.client, "Lua parsing warning", scenariolua.errorMsg + "\nDo you want to upload the map?", QtGui.QMessageBox.Yes, QtGui.QMessageBox.No) else: uploadmap = QtGui.QMessageBox.Yes if uploadmap == QtGui.QMessageBox.Yes: savelua = luaparser.luaParser(os.path.join(mapDir,maps.getSaveFile(mapDir))) saveInfos = savelua.parse({'markers>mass*>position':'mass:__parent__', 'markers>hydro*>position':'hydro:__parent__', 'markers>army*>position':'army:__parent__'}) if savelua.error or savelua.warning: logger.debug("There were " + str(scenariolua.errors) + " errors and " + str(scenariolua.warnings) + " warnings.") logger.debug(scenariolua.errorMsg) self.__preparePositions(saveInfos, scenarioInfos["map_size"]) tmpFile = maps.processMapFolderForUpload(mapDir, saveInfos) if not tmpFile: QtGui.QMessageBox.critical(self.client, "Map uploading error", "Couldn't make previews for " + mapName + "\nMap uploading cancelled.") return None qfile = QtCore.QFile(tmpFile.name) self.client.writeToServer("UPLOAD_MAP", zipName, scenarioInfos, qfile) #removing temporary files qfile.remove() else : QtGui.QMessageBox.information(self.client,"Map selection", "This folder doesn't contain valid map datas.")
def uploadMap(self): mapDir = QtGui.QFileDialog.getExistingDirectory( self.client, "Select the map directory to upload", maps.getUserMapsFolder(), QtGui.QFileDialog.ShowDirsOnly) logger.debug("Uploading map from: " + mapDir) if mapDir != "": if maps.isMapFolderValid(mapDir): os.chmod(mapDir, S_IWRITE) mapName = os.path.basename(mapDir) zipName = mapName.lower() + ".zip" scenariolua = luaparser.luaParser( os.path.join(mapDir, maps.getScenarioFile(mapDir))) scenarioInfos = scenariolua.parse( { 'scenarioinfo>name': 'name', 'size': 'map_size', 'description': 'description', 'count:armies': 'max_players', 'map_version': 'version', 'type': 'map_type', 'teams>0>name': 'battle_type' }, {'version': '1'}) if scenariolua.error: logger.debug("There were " + str(scenariolua.errors) + " errors and " + str(scenariolua.warnings) + " warnings.") logger.debug(scenariolua.errorMsg) QtGui.QMessageBox.critical( self.client, "Lua parsing error", scenariolua.errorMsg + "\nMap uploading cancelled.") else: if scenariolua.warning: uploadmap = QtGui.QMessageBox.question( self.client, "Lua parsing warning", scenariolua.errorMsg + "\nDo you want to upload the map?", QtGui.QMessageBox.Yes, QtGui.QMessageBox.No) else: uploadmap = QtGui.QMessageBox.Yes if uploadmap == QtGui.QMessageBox.Yes: savelua = luaparser.luaParser( os.path.join(mapDir, maps.getSaveFile(mapDir))) saveInfos = savelua.parse({ 'markers>mass*>position': 'mass:__parent__', 'markers>hydro*>position': 'hydro:__parent__', 'markers>army*>position': 'army:__parent__' }) if savelua.error or savelua.warning: logger.debug("There were " + str(scenariolua.errors) + " errors and " + str(scenariolua.warnings) + " warnings.") logger.debug(scenariolua.errorMsg) self.__preparePositions(saveInfos, scenarioInfos["map_size"]) tmpFile = maps.processMapFolderForUpload( mapDir, saveInfos) if not tmpFile: QtGui.QMessageBox.critical( self.client, "Map uploading error", "Couldn't make previews for " + mapName + "\nMap uploading cancelled.") return None qfile = QtCore.QFile(tmpFile.name) self.client.writeToServer("UPLOAD_MAP", zipName, scenarioInfos, qfile) #removing temporary files qfile.remove() else: QtGui.QMessageBox.information( self.client, "Map selection", "This folder doesn't contain valid map data.")
def parseModInfo(folder): if not isModFolderValid(folder): return None modinfofile = luaparser.luaParser(os.path.join(folder, "mod_info.lua")) return getModInfo(modinfofile)