As commands now commit/recalc even in case of failure (as they do not know about exact reason of failure and we're not sure if rollback was succeeded), do not run them for every item added via double-click

This commit is contained in:
DarkPhoenix
2019-04-15 18:44:26 +03:00
parent 4c0f88cdfa
commit 3fa5ac7858
8 changed files with 60 additions and 23 deletions

View File

@@ -142,7 +142,7 @@ class Effect(EqBase):
"""
if not self.__generated:
self.__generateHandler()
return self.__effectDef is not None
def isType(self, type):
@@ -151,7 +151,7 @@ class Effect(EqBase):
"""
if not self.__generated:
self.__generateHandler()
return self.type is not None and type in self.type
def __generateHandler(self):
@@ -477,9 +477,33 @@ class Item(EqBase):
def getAbyssalTypes(cls):
cls.ABYSSAL_TYPES = eos.db.getAbyssalTypes()
@property
def isModule(self):
return self.category.name == 'Module'
@property
def isSubsystem(self):
return self.category.name == 'Subsystem'
@property
def isCharge(self):
return self.category.name == "Charge"
return self.category.name == 'Charge'
@property
def isDrone(self):
return self.category.name == 'Drone'
@property
def isFighter(self):
return self.category.name == 'Fighter'
@property
def isImplant(self):
return self.category.name == 'Implant' and self.group.name != 'Booster'
@property
def isBooster(self):
return self.group.name == 'Booster' and self.category.name == 'Implant'
def __repr__(self):
return "Item(ID={}, name={}) at {}".format(

View File

@@ -19,14 +19,16 @@
# noinspection PyPackageRequirements
import wx
import gui.display as d
import gui.fitCommands as cmd
import gui.globalEvents as GE
from gui.builtinMarketBrowser.events import ItemSelected, ITEM_SELECTED
from gui.builtinMarketBrowser.events import ITEM_SELECTED, ItemSelected
from gui.builtinViewColumns.state import State
from gui.contextMenu import ContextMenu
from gui.utils.staticHelpers import DragDropHelper
from service.fit import Fit
import gui.fitCommands as cmd
from service.market import Market
class BoosterViewDrop(wx.DropTarget):
@@ -124,10 +126,13 @@ class BoosterView(d.Display):
event.Skip()
def addItem(self, event):
sFit = Fit.getInstance()
fitID = self.mainFrame.getActiveFit()
item = Market.getInstance().getItem(event.itemID, eager='group')
if item is None or not item.isBooster:
event.Skip()
return
fit = sFit.getFit(fitID)
fitID = self.mainFrame.getActiveFit()
fit = Fit.getInstance().getFit(fitID)
if not fit or fit.isStructure:
event.Skip()

View File

@@ -206,11 +206,13 @@ class DroneView(Display):
event.Skip()
def addItem(self, event):
sFit = Fit.getInstance()
item = Market.getInstance().getItem(event.itemID, eager='group.category')
if item is None or not item.isDrone:
event.Skip()
return
fitID = self.mainFrame.getActiveFit()
fit = sFit.getFit(fitID)
fit = Fit.getInstance().getFit(fitID)
if not fit or fit.isStructure:
event.Skip()
return

View File

@@ -257,8 +257,12 @@ class FighterDisplay(d.Display):
event.Skip()
def addItem(self, event):
fitID = self.mainFrame.getActiveFit()
item = Market.getInstance().getItem(event.itemID, eager='group.category')
if item is None or not item.isFighter:
event.Skip()
return
fitID = self.mainFrame.getActiveFit()
if self.mainFrame.command.Submit(cmd.GuiAddLocalFighterCommand(fitID, event.itemID)):
self.mainFrame.additionsPane.select("Fighters")

View File

@@ -175,10 +175,13 @@ class ImplantDisplay(d.Display):
event.Skip()
def addItem(self, event):
sFit = Fit.getInstance()
fitID = self.mainFrame.getActiveFit()
item = Market.getInstance().getItem(event.itemID, eager='group.category')
if item is None or not item.isImplant:
event.Skip()
return
fit = sFit.getFit(fitID)
fitID = self.mainFrame.getActiveFit()
fit = Fit.getInstance().getFit(fitID)
if not fit or fit.isStructure:
event.Skip()

View File

@@ -357,8 +357,11 @@ class FittingView(d.Display):
itemID = event.itemID
fitID = self.activeFitID
if fitID is not None:
sFit = Fit.getInstance()
if sFit.isAmmo(itemID):
item = Market.getInstance().getItem(event.itemID, eager='group.category')
if item is None or not (item.isModule or item.isSubsystem):
event.Skip()
return
if Fit.getInstance().isAmmo(itemID):
# If we've selected ammo, then apply to the selected module(s)
modules = []
sel = self.GetFirstSelected()

View File

@@ -37,6 +37,7 @@ class GuiCargoToModuleCommand(wx.Command):
result = False
# We're trying to move a charge from cargo to a slot. Use SetCharge command (don't respect move vs copy)
# todo: replace with item.ischarge, broken for now
if sFit.isAmmo(cargo.itemID):
result = self.internalHistory.Submit(CalcChangeModuleChargesCommand(self.fitID, False, {module.modPosition: cargo.itemID}))
else:

View File

@@ -401,11 +401,6 @@ class Fit(FitDeprecated):
fit.character = self.character = eos.db.getCharacter(charID)
self.recalc(fit)
@staticmethod
def isAmmo(itemID):
# todo: get rid of this form the service, use directly from item
return eos.db.getItem(itemID).isCharge
@staticmethod
def getTargetResists(fitID):
pyfalog.debug("Get target resists for fit ID: {0}", fitID)