diff --git a/service/port/dna.py b/service/port/dna.py index 5a1d7e364..5d2177372 100644 --- a/service/port/dna.py +++ b/service/port/dna.py @@ -46,15 +46,11 @@ DNA_OPTIONS = ( def importDna(string, fitName=None): sMkt = Market.getInstance() - ids = list(map(int, re.findall(r'\d+', string))) for id_ in ids: try: try: - try: - Ship(sMkt.getItem(sMkt.getItem(id_))) - except ValueError: - Citadel(sMkt.getItem(sMkt.getItem(id_))) + Ship(sMkt.getItem(id_)) except ValueError: Citadel(sMkt.getItem(id_)) string = string[string.index(str(id_)):] @@ -66,7 +62,29 @@ def importDna(string, fitName=None): pass string = string[:string.index("::") + 2] info = string.split(":") + return processImportInfo(info, fitName, ";") +def importDnaAlt(string, fitName=None): + sMkt = Market.getInstance() + ids = list(map(int, re.findall(r'\d+', string))) + for id_ in ids: + try: + try: + Ship(sMkt.getItem(id_)) + except ValueError: + Citadel(sMkt.getItem(id_)) + string = string[string.index(str(id_)):] + break + except (KeyboardInterrupt, SystemExit): + raise + except: + pyfalog.warning("Exception caught in importDna") + pass + info = string.split(":") + return processImportInfo(info, fitName, "*") + +def processImportInfo(info, fitName, amountSeparator): + sMkt = Market.getInstance() f = Fit() try: try: @@ -89,7 +107,11 @@ def importDna(string, fitName=None): moduleList = [] for itemInfo in info[1:]: if itemInfo: - itemID, amount = itemInfo.split(";") + if amountSeparator in itemInfo: + itemID, amount = itemInfo.split(amountSeparator) + else: + itemID = itemInfo + amount = 1 item = sMkt.getItem(int(itemID), eager="group.category") if item.category.name == "Drone": diff --git a/service/port/port.py b/service/port/port.py index 210f8bf47..5d6ea2bd4 100644 --- a/service/port/port.py +++ b/service/port/port.py @@ -31,7 +31,7 @@ from logbook import Logger from eos import db from eos.const import ImplantLocation from service.fit import Fit as svcFit -from service.port.dna import exportDna, importDna +from service.port.dna import exportDna, importDna, importDnaAlt from service.port.eft import ( exportEft, importEft, importEftCfg, isValidDroneImport, isValidFighterImport, isValidCargoImport, @@ -250,6 +250,9 @@ class Port: m = re.search(dnaChatPattern, firstLine) if m: return "DNA", True, (cls.importDna(m.group("dna"), fitName=m.group("fitName")),) + m = re.search(r"DNA:(?P\d+(:\d+(\*\d+)?)*)", firstLine) + if m: + return "DNA", True, (cls.importDnaAlt(m.group("dna")),) if activeFit is not None: # Try to import mutated module @@ -297,6 +300,10 @@ class Port: def importDna(string, fitName=None): return importDna(string, fitName=fitName) + @staticmethod + def importDnaAlt(string, fitName=None): + return importDnaAlt(string, fitName=fitName) + @staticmethod def exportDna(fit, options, callback=None): return exportDna(fit, options, callback=callback)