From 0060f58e3d940649a5758c4b4011eabb0f6fab51 Mon Sep 17 00:00:00 2001 From: blitzmann Date: Sat, 11 Jul 2015 01:31:18 -0400 Subject: [PATCH] Support evemon character imports. --- eos/saveddata/character.py | 5 +++-- service/character.py | 31 ++++++++++++++++++++++++++----- 2 files changed, 29 insertions(+), 7 deletions(-) diff --git a/eos/saveddata/character.py b/eos/saveddata/character.py index f0b4d9a56..3efb5b75e 100644 --- a/eos/saveddata/character.py +++ b/eos/saveddata/character.py @@ -105,10 +105,11 @@ class Character(object): for skill in self.__skills: self.__skillIdMap[skill.itemID] = skill - def apiUpdateCharSheet(self, sheet): + def apiUpdateCharSheet(self, skills): del self.__skills[:] self.__skillIdMap.clear() - for skillRow in sheet.skills: + for skillRow in skills: + self.addSkill(Skill(skillRow["typeID"], skillRow["level"])) @property diff --git a/service/character.py b/service/character.py index af4b43106..b6b3e4e1e 100644 --- a/service/character.py +++ b/service/character.py @@ -45,13 +45,34 @@ class CharacterImportThread(threading.Thread): sCharacter = Character.getInstance() for path in paths: try: + # we try to parse api XML data first with open(path, mode='r') as charFile: sheet = service.ParseXML(charFile) charID = sCharacter.new() sCharacter.rename(charID, sheet.name+" (imported)") - sCharacter.apiUpdateCharSheet(charID, sheet) + sCharacter.apiUpdateCharSheet(charID, sheet.skills) except: - continue + # if it's not api XML data, try this + # this is a horrible logic flow, but whatever + try: + charFile = open(path, mode='r').read() + doc = minidom.parseString(charFile) + if doc.documentElement.tagName != "SerializableCCPCharacter": + raise RuntimeError("Incorrect EVEMon XML sheet") + name = doc.getElementsByTagName("name")[0].firstChild.nodeValue + skill_els = doc.getElementsByTagName("skill") + skills = [] + for skill in skill_els: + skills.append({ + "typeID": int(skill.getAttribute("typeID")), + "level": int(skill.getAttribute("level")), + }) + charID = sCharacter.new() + sCharacter.rename(charID, name+" (EVEMon)") + sCharacter.apiUpdateCharSheet(charID, skills) + except: + continue + wx.CallAfter(self.callback) class SkillBackupThread(threading.Thread): @@ -269,12 +290,12 @@ class Character(object): sheet = auth.character(charID).CharacterSheet() - dbChar.apiUpdateCharSheet(sheet) + dbChar.apiUpdateCharSheet(sheet.skills) eos.db.commit() - def apiUpdateCharSheet(self, charID, sheet): + def apiUpdateCharSheet(self, charID, skills): char = eos.db.getCharacter(charID) - char.apiUpdateCharSheet(sheet) + char.apiUpdateCharSheet(skills) eos.db.commit() def changeLevel(self, charID, skillID, level):