diff --git a/eos/db/migrations/upgrade26.py b/eos/db/migrations/upgrade26.py new file mode 100644 index 000000000..d5b639a4c --- /dev/null +++ b/eos/db/migrations/upgrade26.py @@ -0,0 +1,11 @@ +""" +Migration 26 + +- Deletes invalid command fit relationships caused by a bug (see #1244) +""" + +import sqlalchemy + + +def upgrade(saveddata_engine): + saveddata_engine.execute("DELETE FROM commandFits WHERE boosterID NOT IN (SELECT ID FROM fits) OR boostedID NOT IN (SELECT ID FROM fits)") diff --git a/gui/builtinAdditionPanes/commandView.py b/gui/builtinAdditionPanes/commandView.py index db7b916d2..f103ced05 100644 --- a/gui/builtinAdditionPanes/commandView.py +++ b/gui/builtinAdditionPanes/commandView.py @@ -23,6 +23,7 @@ import wx import gui.builtinAdditionPanes.droneView import gui.display as d import gui.globalEvents as GE +from gui.builtinShipBrowser.events import EVT_FIT_REMOVED from eos.saveddata.drone import Drone as es_Drone from gui.builtinContextMenus.commandFits import CommandFits from gui.builtinViewColumns.state import State @@ -66,7 +67,8 @@ class CommandView(d.Display): self.lastFitId = None - self.mainFrame.Bind(GE.FIT_CHANGED, CommandFits.populateFits) + self.mainFrame.Bind(GE.FIT_CHANGED, CommandFits.fitChanged) + self.mainFrame.Bind(EVT_FIT_REMOVED, CommandFits.populateFits) self.mainFrame.Bind(GE.FIT_CHANGED, self.fitChanged) self.Bind(wx.EVT_LEFT_DOWN, self.click) self.Bind(wx.EVT_RIGHT_DOWN, self.click) diff --git a/gui/builtinContextMenus/commandFits.py b/gui/builtinContextMenus/commandFits.py index ffcaad6a5..dcb9b279f 100644 --- a/gui/builtinContextMenus/commandFits.py +++ b/gui/builtinContextMenus/commandFits.py @@ -18,7 +18,7 @@ class CommandFits(ContextMenu): menu = None @classmethod - def populateFits(cls, evt): + def fitChanged(cls, evt): # This fires on a FitChanged event and updates the command fits whenever a command burst module is added or # removed from a fit. evt.typeID can be either a int or a set (in the case of multiple module deletions) if evt is None or (getattr(evt, 'action', None) in ("modadd", "moddel") and getattr(evt, 'typeID', None)): @@ -29,8 +29,12 @@ class CommandFits(ContextMenu): if evt is None or not ids.isdisjoint(cls.commandTypeIDs): # we are adding or removing an item that defines a command fit. Need to refresh fit list - sFit = Fit.getInstance() - cls.commandFits = sFit.getFitsWithModules(cls.commandTypeIDs) + cls.populateFits(evt) + + @classmethod + def populateFits(cls, evt): + sFit = Fit.getInstance() + cls.commandFits = sFit.getFitsWithModules(cls.commandTypeIDs) def __init__(self): self.mainFrame = gui.mainFrame.MainFrame.getInstance()