Add method which supposedly will update fit to optimize its price
This commit is contained in:
@@ -36,6 +36,7 @@ from eos.saveddata.ship import Ship as es_Ship
|
||||
from service.character import Character
|
||||
from service.damagePattern import DamagePattern
|
||||
from service.fitDeprecated import FitDeprecated
|
||||
from service.price import Price
|
||||
from service.settings import SettingsProvider
|
||||
from utils.deprecated import deprecated
|
||||
|
||||
|
||||
@@ -796,7 +796,7 @@ class Market(object):
|
||||
filtered = set([item for item in items if self.getMetaGroupIdByItem(item) in metas])
|
||||
return filtered
|
||||
|
||||
def getReplacements(self, identity, includeBetter=False):
|
||||
def getReplacements(self, identity, includeBetter):
|
||||
item = self.getItem(identity)
|
||||
# We already store needed type IDs in database
|
||||
replTypeIDs = {int(i) for i in item.replaceSame.split(",") if i}
|
||||
|
||||
@@ -201,14 +201,14 @@ class Price:
|
||||
pyfalog.debug("Clearing Prices")
|
||||
db.clearPrices()
|
||||
|
||||
def findCheaperReplacements(self, items, callback, includeBetter=False, fetchTimeout=10):
|
||||
def findCheaperReplacements(self, items, callback, includeBetter, fetchTimeout=10):
|
||||
sMkt = Market.getInstance()
|
||||
|
||||
potential = {} # All possible item replacements
|
||||
for item in items:
|
||||
if item in potential:
|
||||
continue
|
||||
itemRepls = sMkt.getReplacements(item, includeBetter=includeBetter)
|
||||
itemRepls = sMkt.getReplacements(item, includeBetter)
|
||||
if itemRepls:
|
||||
potential[item] = itemRepls
|
||||
itemsToFetch = {i for i in chain(potential.keys(), *potential.values())}
|
||||
@@ -230,6 +230,29 @@ class Price:
|
||||
validityOverride = 2 * 60 * 60
|
||||
self.getPrices(itemsToFetch, cb, fetchTimeout=fetchTimeout, validityOverride=validityOverride)
|
||||
|
||||
def optimizeFitPrice(self, fit, callback, includeBetter, fetchTimeout=10):
|
||||
|
||||
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
|
||||
if changes:
|
||||
Fit.getInstance().refreshFit(fit.ID)
|
||||
try:
|
||||
callback()
|
||||
except Exception as e:
|
||||
pyfalog.critical("Execution of callback from optimizeFitPrice failed.")
|
||||
pyfalog.critical(e)
|
||||
|
||||
fitItems = {i for i in self.fitItemIter(fit) if i is not fit.ship.item}
|
||||
self.findCheaperReplacements(fitItems, cb, includeBetter, fetchTimeout=fetchTimeout)
|
||||
|
||||
|
||||
class PriceWorkerThread(threading.Thread):
|
||||
|
||||
|
||||
Reference in New Issue
Block a user