Rework cargo to use cargoinfo

This commit is contained in:
DarkPhoenix
2019-04-12 20:09:13 +03:00
parent 2800637a90
commit 336af0f669
5 changed files with 50 additions and 29 deletions

View File

@@ -3,9 +3,7 @@ from logbook import Logger
import eos.db import eos.db
from eos.exception import HandledListActionError from eos.exception import HandledListActionError
from eos.saveddata.cargo import Cargo
from service.fit import Fit from service.fit import Fit
from service.market import Market
pyfalog = Logger(__name__) pyfalog = Logger(__name__)
@@ -13,33 +11,31 @@ pyfalog = Logger(__name__)
class FitAddCargoCommand(wx.Command): class FitAddCargoCommand(wx.Command):
def __init__(self, fitID, itemID, amount=1): def __init__(self, fitID, cargoInfo):
wx.Command.__init__(self, True, 'Add Cargo') wx.Command.__init__(self, True, 'Add Cargo')
self.fitID = fitID self.fitID = fitID
self.itemID = itemID self.cargoInfo = cargoInfo
self.amount = amount
def Do(self): def Do(self):
pyfalog.debug('Doing addition of cargo {} x{} to fit {}'.format(self.itemID, self.amount, self.fitID)) pyfalog.debug('Doing addition of cargo {} to fit {}'.format(self.cargoInfo, self.fitID))
fit = Fit.getInstance().getFit(self.fitID) fit = Fit.getInstance().getFit(self.fitID)
item = Market.getInstance().getItem(self.itemID) cargo = next((x for x in fit.cargo if x.itemID == self.cargoInfo.itemID), None)
cargo = next((x for x in fit.cargo if x.itemID == self.itemID), None)
if cargo is None: if cargo is None:
cargo = Cargo(item) cargo = self.cargoInfo.toCargo()
try: try:
fit.cargo.append(cargo) fit.cargo.append(cargo)
except HandledListActionError: except HandledListActionError:
pyfalog.warning('Failed to append to list') pyfalog.warning('Failed to append to list')
eos.db.commit() eos.db.commit()
return False return False
cargo.amount += self.amount else:
cargo.amount += self.cargoInfo.amount
eos.db.commit() eos.db.commit()
return True return True
def Undo(self): def Undo(self):
pyfalog.debug('Undoing addition of cargo {} x{} to fit {}'.format(self.itemID, self.amount, self.fitID)) pyfalog.debug('Undoing addition of cargo {} to fit {}'.format(self.cargoInfo, self.fitID))
from .fitRemoveCargo import FitRemoveCargoCommand from .fitRemoveCargo import FitRemoveCargoCommand
cmd = FitRemoveCargoCommand(fitID=self.fitID, itemID=self.itemID, amount=self.amount) cmd = FitRemoveCargoCommand(fitID=self.fitID, cargoInfo=self.cargoInfo)
cmd.Do() cmd.Do()
return True return True

View File

@@ -2,6 +2,7 @@ import wx
from logbook import Logger from logbook import Logger
import eos.db import eos.db
from gui.fitCommands.helpers import CargoInfo
from service.fit import Fit from service.fit import Fit
@@ -10,31 +11,27 @@ pyfalog = Logger(__name__)
class FitRemoveCargoCommand(wx.Command): class FitRemoveCargoCommand(wx.Command):
def __init__(self, fitID, itemID, amount=1): def __init__(self, fitID, cargoInfo):
wx.Command.__init__(self, True, 'Remove Cargo') wx.Command.__init__(self, True, 'Remove Cargo')
self.fitID = fitID self.fitID = fitID
self.itemID = itemID self.cargoInfo = cargoInfo
self.amount = amount # Pass infinity if you want to remove stack
self.savedRemovedAmount = None self.savedRemovedAmount = None
def Do(self): def Do(self):
pyfalog.debug('Doing removal of cargo {} x{} from fit {}'.format(self.itemID, self.amount, self.fitID)) pyfalog.debug('Doing removal of cargo {} to fit {}'.format(self.cargoInfo, self.fitID))
fit = Fit.getInstance().getFit(self.fitID) fit = Fit.getInstance().getFit(self.fitID)
cargo = next((x for x in fit.cargo if x.itemID == self.itemID), None) cargo = next((x for x in fit.cargo if x.itemID == self.cargoInfo.itemID), None)
if cargo is None: if cargo is None:
return False return False
self.savedRemovedAmount = min(cargo.amount, self.cargoInfo.amount)
self.savedRemovedAmount = min(cargo.amount, self.amount)
cargo.amount -= self.savedRemovedAmount cargo.amount -= self.savedRemovedAmount
if cargo.amount <= 0: if cargo.amount <= 0:
fit.cargo.remove(cargo) fit.cargo.remove(cargo)
eos.db.commit() eos.db.commit()
return True return True
def Undo(self): def Undo(self):
pyfalog.debug('Undoing removal of cargo {} x{} from fit {}'.format(self.itemID, self.amount, self.fitID)) pyfalog.debug('Undoing removal of cargo {} to fit {}'.format(self.cargoInfo, self.fitID))
from gui.fitCommands.calc.fitAddCargo import FitAddCargoCommand from gui.fitCommands.calc.fitAddCargo import FitAddCargoCommand
cmd = FitAddCargoCommand(fitID=self.fitID, itemID=self.itemID, amount=self.savedRemovedAmount) cmd = FitAddCargoCommand(fitID=self.fitID, cargoInfo=CargoInfo(itemID=self.cargoInfo.itemID, amount=self.savedRemovedAmount))
return cmd.Do() return cmd.Do()

View File

@@ -3,11 +3,13 @@ from service.fit import Fit
import gui.mainFrame import gui.mainFrame
from gui import globalEvents as GE from gui import globalEvents as GE
from gui.fitCommands.helpers import CargoInfo
from .calc.fitAddCargo import FitAddCargoCommand from .calc.fitAddCargo import FitAddCargoCommand
class GuiAddCargoCommand(wx.Command): class GuiAddCargoCommand(wx.Command):
def __init__(self, fitID, itemID, amount=1, replace=False):
def __init__(self, fitID, itemID, amount=1):
wx.Command.__init__(self, True, "Cargo Add") wx.Command.__init__(self, True, "Cargo Add")
self.mainFrame = gui.mainFrame.MainFrame.getInstance() self.mainFrame = gui.mainFrame.MainFrame.getInstance()
self.sFit = Fit.getInstance() self.sFit = Fit.getInstance()
@@ -15,10 +17,9 @@ class GuiAddCargoCommand(wx.Command):
self.fitID = fitID self.fitID = fitID
self.itemID = itemID self.itemID = itemID
self.amount = amount self.amount = amount
self.replace = replace
def Do(self): def Do(self):
if self.internal_history.Submit(FitAddCargoCommand(self.fitID, self.itemID, self.amount, self.replace)): if self.internal_history.Submit(FitAddCargoCommand(fitID=self.fitID, cargoInfo=CargoInfo(itemID=self.itemID, amount=self.amount))):
wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=self.fitID)) wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=self.fitID))
return True return True
return False return False

View File

@@ -1,8 +1,11 @@
import math
import wx import wx
from service.fit import Fit from service.fit import Fit
import gui.mainFrame import gui.mainFrame
from gui import globalEvents as GE from gui import globalEvents as GE
from gui.fitCommands.helpers import CargoInfo
from .calc.fitRemoveCargo import FitRemoveCargoCommand from .calc.fitRemoveCargo import FitRemoveCargoCommand
@@ -16,7 +19,7 @@ class GuiRemoveCargoCommand(wx.Command):
self.itemID = itemID self.itemID = itemID
def Do(self): def Do(self):
if self.internal_history.Submit(FitRemoveCargoCommand(self.fitID, self.itemID, stack=True)): if self.internal_history.Submit(FitRemoveCargoCommand(fitID=self.fitID, cargoInfo=CargoInfo(itemID=self.itemID, amount=math.inf))):
wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=self.fitID)) wx.PostEvent(self.mainFrame, GE.FitChanged(fitID=self.fitID))
return True return True
return False return False

View File

@@ -3,6 +3,7 @@ from logbook import Logger
import eos.db import eos.db
from eos.const import FittingModuleState from eos.const import FittingModuleState
from eos.saveddata.booster import Booster from eos.saveddata.booster import Booster
from eos.saveddata.cargo import Cargo
from eos.saveddata.module import Module from eos.saveddata.module import Module
from service.market import Market from service.market import Market
from utils.repr import makeReprStr from utils.repr import makeReprStr
@@ -118,8 +119,31 @@ class BoosterInfo:
sideEffect.active = self.sideEffects[sideEffect.effectID] sideEffect.active = self.sideEffects[sideEffect.effectID]
return booster return booster
class CargoInfo:
def __init__(self, itemID, amount):
self.itemID = itemID
self.amount = amount
@classmethod
def fromCargo(cls, cargo):
if cargo is None:
return None
info = cls(
itemID=cargo.itemID,
amount=cargo.active)
return info
def toCargo(self):
item = Market.getInstance().getItem(self.itemID)
cargo = Cargo(item)
cargo.amount = self.amount
return cargo
def __repr__(self): def __repr__(self):
return makeReprStr(self, ['itemID', 'state', 'sideEffects']) return makeReprStr(self, ['itemID', 'amount'])
def stateLimit(itemIdentity): def stateLimit(itemIdentity):