From ed24e7a2a37fc1b7ad9af78b8242dc38ac7720e6 Mon Sep 17 00:00:00 2001 From: DarkPhoenix Date: Mon, 25 Feb 2019 08:43:27 +0300 Subject: [PATCH] Add validity override of 2 hours for prices --- eos/saveddata/price.py | 5 ++--- gui/builtinViewColumns/price.py | 2 +- service/port/multibuy.py | 2 +- service/price.py | 21 +++++++++++---------- 4 files changed, 15 insertions(+), 15 deletions(-) diff --git a/eos/saveddata/price.py b/eos/saveddata/price.py index 79f8cd590..0a2a7ce9d 100644 --- a/eos/saveddata/price.py +++ b/eos/saveddata/price.py @@ -49,14 +49,13 @@ class Price(object): self.price = 0 self.status = PriceStatus.initialized - @property - def isValid(self): + def isValid(self, validityOverride=None): # Always attempt to update prices which were just initialized, and prices # of unsupported items (maybe we start supporting them at some point) if self.status in (PriceStatus.initialized, PriceStatus.notSupported): return False elif self.status == PriceStatus.fetchSuccess: - return time() <= self.time + VALIDITY + return time() <= self.time + (validityOverride if validityOverride is not None else VALIDITY) elif self.status == PriceStatus.fetchFail: return time() <= self.time + REREQUEST elif self.status == PriceStatus.fetchTimeout: diff --git a/gui/builtinViewColumns/price.py b/gui/builtinViewColumns/price.py index 6d96fab4a..563d0b1c0 100644 --- a/gui/builtinViewColumns/price.py +++ b/gui/builtinViewColumns/price.py @@ -63,7 +63,7 @@ class Price(ViewColumn): priceObj = stuff.item.price - if not priceObj.isValid: + if not priceObj.isValid(): return False return formatPrice(stuff, priceObj) diff --git a/service/port/multibuy.py b/service/port/multibuy.py index 392b656ed..da2326086 100644 --- a/service/port/multibuy.py +++ b/service/port/multibuy.py @@ -78,7 +78,7 @@ def exportMultiBuy(fit, options, callback): callback(string) priceSvc = sPrc.getInstance() - priceSvc.findCheaperReplacements(itemAmounts, cb) + priceSvc.findCheaperReplacements(itemAmounts, cb, includeBetter=True) else: string = _prepareString(fit.ship.item, itemAmounts) if callback: diff --git a/service/price.py b/service/price.py index f987b8978..06f3936b3 100644 --- a/service/price.py +++ b/service/price.py @@ -66,7 +66,7 @@ class Price: return cls.instance @classmethod - def fetchPrices(cls, prices, fetchTimeout): + def fetchPrices(cls, prices, fetchTimeout, validityOverride): """Fetch all prices passed to this method""" # Dictionary for our price objects @@ -74,7 +74,7 @@ class Price: # Check all provided price objects, and add those we want to update to # dictionary for price in prices: - if not price.isValid: + if not price.isValid(validityOverride): priceMap[price.typeID] = price if not priceMap: @@ -175,7 +175,7 @@ class Price: return item.price.price - def getPrices(self, objitems, callback, fetchTimeout=30, waitforthread=False): + def getPrices(self, objitems, callback, fetchTimeout=30, waitforthread=False, validityOverride=None): """Get prices for multiple typeIDs""" requests = [] sMkt = Market.getInstance() @@ -195,7 +195,7 @@ class Price: if waitforthread: self.priceWorkerThread.setToWait(requests, cb) else: - self.priceWorkerThread.trigger(requests, cb, fetchTimeout) + self.priceWorkerThread.trigger(requests, cb, fetchTimeout, validityOverride) def clearPriceCache(self): pyfalog.debug("Clearing Prices") @@ -226,8 +226,9 @@ class Price: pyfalog.critical("Execution of callback from findCheaperReplacements failed.") pyfalog.critical(e) - # TODO: add validity override - self.getPrices(itemsToFetch, cb, fetchTimeout=fetchTimeout) + # Prices older than 2 hours have to be refetched + validityOverride = 2 * 60 * 60 + self.getPrices(itemsToFetch, cb, fetchTimeout=fetchTimeout, validityOverride=validityOverride) class PriceWorkerThread(threading.Thread): @@ -243,11 +244,11 @@ class PriceWorkerThread(threading.Thread): queue = self.queue while True: # Grab our data - callback, requests, fetchTimeout = queue.get() + callback, requests, fetchTimeout, validityOverride = queue.get() # Grab prices, this is the time-consuming part if len(requests) > 0: - Price.fetchPrices(requests, fetchTimeout) + Price.fetchPrices(requests, fetchTimeout, validityOverride) wx.CallAfter(callback) queue.task_done() @@ -259,8 +260,8 @@ class PriceWorkerThread(threading.Thread): for callback in callbacks: wx.CallAfter(callback) - def trigger(self, prices, callbacks, fetchTimeout): - self.queue.put((callbacks, prices, fetchTimeout)) + def trigger(self, prices, callbacks, fetchTimeout, validityOverride): + self.queue.put((callbacks, prices, fetchTimeout, validityOverride)) def setToWait(self, prices, callback): for price in prices: