From 67ed8818d88395b7c5e1def1ff1bd28710fb0c53 Mon Sep 17 00:00:00 2001 From: Martin Falatic Date: Sat, 15 Jun 2013 17:50:53 -0700 Subject: [PATCH] Cleaned up. Supports txt, xml and emp (gzipped xml) --- gui/characterSelection.py | 15 ++++++++++----- gui/mainFrame.py | 10 ++++++++-- service/character.py | 39 +++++++++++++++++++++++---------------- 3 files changed, 41 insertions(+), 23 deletions(-) diff --git a/gui/characterSelection.py b/gui/characterSelection.py index 5fdddb539..3d20d5589 100644 --- a/gui/characterSelection.py +++ b/gui/characterSelection.py @@ -138,19 +138,24 @@ class CharacterSelection(wx.Panel): event.Skip() - def _buildSkillsTooltip(self, reqs, tabulationLevel = 0): + def _buildSkillsTooltip(self, reqs, currItem = "", tabulationLevel = 0): tip = "" sCharacter = service.Character.getInstance() if tabulationLevel == 0: for item, subReqs in reqs.iteritems(): tip += " %s:\n" % item.name - tip += self._buildSkillsTooltip(subReqs, 1) + tip += self._buildSkillsTooltip(subReqs, item.name, 1) else: for name, info in reqs.iteritems(): level, ID, more = info - sCharacter.skillReqsDict['skills'].append( - {'skillID' : ID, 'skill' : name, 'level' : int(level)}) + sCharacter.skillReqsDict['skills'].append({ + 'item' : currItem, + 'skillID' : ID, + 'skill' : name, + 'level' : level, + 'indent' : tabulationLevel + }) tip += " %s%s: %d\n" % (" " * tabulationLevel, name, level) - tip += self._buildSkillsTooltip(more, tabulationLevel + 1) + tip += self._buildSkillsTooltip(more, currItem, tabulationLevel + 1) return tip diff --git a/gui/mainFrame.py b/gui/mainFrame.py index 73924dfd2..0f4f2d8d8 100644 --- a/gui/mainFrame.py +++ b/gui/mainFrame.py @@ -263,7 +263,9 @@ class MainFrame(wx.Frame): dlg=wx.FileDialog( self, "Open One Or More Fitting Files", - wildcard = "EFT text fitting files (*.cfg)|*.cfg|EvE XML fitting files (*.xml)|*.xml|All Files (*)|*", + wildcard = "EFT text fitting files (*.cfg)|*.cfg|" \ + "EvE XML fitting files (*.xml)|*.xml|" \ + "All Files (*)|*", style = wx.FD_OPEN | wx.FD_FILE_MUST_EXIST | wx.FD_MULTIPLE) if (dlg.ShowModal() == wx.ID_OK): self.waitDialog = animUtils.WaitDialog(self, title = "Importing") @@ -482,12 +484,16 @@ class MainFrame(wx.Frame): saveDialog = wx.FileDialog( self, "Export Skills Needed As...", - wildcard = "EVEMon skills training file (*.xml)|*.xml|Text skills training file (*.txt)|*.txt", + wildcard = "EVEMon skills training file (*.emp)|*.emp|" \ + "EVEMon skills training XML file (*.xml)|*.xml|" \ + "Text skills training file (*.txt)|*.txt", style = wx.FD_SAVE | wx.FD_OVERWRITE_PROMPT) if (saveDialog.ShowModal() == wx.ID_OK): saveFmtInt = saveDialog.GetFilterIndex() saveFmt = "" if saveFmtInt == 0: # Per ordering of wildcards above + saveFmt = "emp" + elif saveFmtInt == 1: saveFmt = "xml" else: saveFmt = "txt" diff --git a/service/character.py b/service/character.py index bff153d80..87f4f17b2 100644 --- a/service/character.py +++ b/service/character.py @@ -32,6 +32,8 @@ from codecs import open from xml.etree import ElementTree from xml.dom import minidom +import gzip + EVEMON_COMPATIBLE_VERSION = "4081" class SkillBackupThread(threading.Thread): @@ -47,16 +49,19 @@ class SkillBackupThread(threading.Thread): sCharacter = Character.getInstance() sFit = service.Fit.getInstance() fit = sFit.getFit(self.activeFit) - backupFile = open(path, "w", encoding="utf-8") backupData = ""; - if self.saveFmt == "xml": + if self.saveFmt == "xml" or self.saveFmt == "emp": backupData = sCharacter.exportXml() - elif self.saveFmt == "txt": - backupData = sCharacter.exportText() else: backupData = sCharacter.exportText() - backupFile.write(backupData) - backupFile.close() + + if self.saveFmt == "emp": + with gzip.open(path, "wb") as backupFile: + backupFile.write(backupData) + else: + with open(path, "w", encoding="utf-8") as backupFile: + backupFile.write(backupData) + wx.CallAfter(self.callback) class Character(): @@ -71,15 +76,17 @@ class Character(): return cls.instance def exportText(self): - data = "" - - mySkills = repr(self.skillReqsDict) - data += "-" * 79 - data += '\n' - data += repr(self.skillReqsDict) - data += '\n' - data += "-" * 79 - data += '\n' + data = "Pyfa exported plan for \""+self.skillReqsDict['charname']+"\"\n" + data += "=" * 79 + "\n" + data += "\n" + item = "" + for s in self.skillReqsDict['skills']: + if item == "" or not item == s["item"]: + item = s["item"] + data += "-" * 79 + "\n" + data += "Skills required for {}:\n".format(item) + data += "{}{}: {}\n".format(" " * s["indent"], s["skill"], int(s["level"])) + data += "-" * 79 + "\n" return data @@ -97,7 +104,7 @@ class Character(): entry = ElementTree.SubElement(root, "entry") entry.attrib["skillID"] = str(s["skillID"]) entry.attrib["skill"] = s["skill"] - entry.attrib["level"] = str(s["level"]) + entry.attrib["level"] = str(int(s["level"])) entry.attrib["priority"] = "3" entry.attrib["type"] = "Prerequisite" notes = ElementTree.SubElement(entry, "notes")