From d96146034a56db2fb04195637b26b0858aaec7fd Mon Sep 17 00:00:00 2001 From: DarkPhoenix Date: Sun, 3 Mar 2019 09:46:27 +0300 Subject: [PATCH] Fix replacing of modules --- eos/saveddata/module.py | 9 +++++++++ gui/mainFrame.py | 9 +++++---- service/price.py | 19 ++++++++++--------- 3 files changed, 24 insertions(+), 13 deletions(-) diff --git a/eos/saveddata/module.py b/eos/saveddata/module.py index c4c2f0b00..df1048ce3 100644 --- a/eos/saveddata/module.py +++ b/eos/saveddata/module.py @@ -979,6 +979,15 @@ class Module(HandledItem, HandledCharge, ItemAttrShortcut, ChargeAttrShortcut): return copy + def rebase(self, item): + state = self.state + charge = self.charge + Module.__init__(self, item, self.baseItem, self.mutaplasmid) + self.state = state + self.charge = charge + for x in self.mutators.values(): + Mutator(self, x.attribute, x.value) + def __repr__(self): if self.item: return "Module(ID={}, name={}) at {}".format( diff --git a/gui/mainFrame.py b/gui/mainFrame.py index bbb30835f..2aac8eaa1 100644 --- a/gui/mainFrame.py +++ b/gui/mainFrame.py @@ -671,12 +671,13 @@ class MainFrame(wx.Frame): def optimizeFitPrice(self, event): sPrice = Price.getInstance() - fit = Fit.getInstance().getFit(self.getActiveFit()) + fitID = self.getActiveFit() + fit = Fit.getInstance().getFit(fitID) if fit: # TODO: block/unblock UI while pyfa is working - - def cb(): - pass + def cb(changes): + if changes: + wx.PostEvent(self, GE.FitChanged(fitID=fitID)) sPrice.optimizeFitPrice(fit, cb, includeBetter=True, fetchTimeout=10) diff --git a/service/price.py b/service/price.py index 558e59760..447d1112c 100644 --- a/service/price.py +++ b/service/price.py @@ -234,18 +234,19 @@ class Price: def cb(replacementMap): changes = False - for fitobj in self.fitObjectIter(fit): - if fitobj.item in replacementMap: - fitobj.item = replacementMap[fitobj.item] - changes = True - charge = getattr(fitobj, 'charge', None) - if charge and charge in replacementMap: - fitobj.charge = replacementMap[charge] - changes = True + for container in (fit.modules,): + for obj in container: + charge = getattr(obj, 'charge', None) + if charge is not None and charge in replacementMap: + obj.charge = replacementMap[charge] + changes = True + if obj.item in replacementMap: + obj.rebase(replacementMap[obj.item]) + changes = True if changes: Fit.getInstance().refreshFit(fit.ID) try: - callback() + callback(changes) except Exception as e: pyfalog.critical("Execution of callback from optimizeFitPrice failed.") pyfalog.critical(e)