Get rid of caching code in shipbrowser and do it in the service instead
(faster, less code, cleaner)
This commit is contained in:
@@ -31,9 +31,6 @@ class ShipBrowser(wx.Panel):
|
|||||||
self.lastStage = (0,0)
|
self.lastStage = (0,0)
|
||||||
self.mainFrame = gui.mainFrame.MainFrame.getInstance()
|
self.mainFrame = gui.mainFrame.MainFrame.getInstance()
|
||||||
|
|
||||||
self.stage2Cache = {}
|
|
||||||
self.stage3Cache = {}
|
|
||||||
|
|
||||||
self.categoryList=[]
|
self.categoryList=[]
|
||||||
|
|
||||||
self._stage1Data = -1
|
self._stage1Data = -1
|
||||||
@@ -91,8 +88,10 @@ class ShipBrowser(wx.Panel):
|
|||||||
|
|
||||||
def __del__(self):
|
def __del__(self):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def GetActiveStage(self):
|
def GetActiveStage(self):
|
||||||
return self._activeStage
|
return self._activeStage
|
||||||
|
|
||||||
def GetLastStage(self):
|
def GetLastStage(self):
|
||||||
return self._lastStage
|
return self._lastStage
|
||||||
|
|
||||||
@@ -104,6 +103,7 @@ class ShipBrowser(wx.Panel):
|
|||||||
if stage == 3:
|
if stage == 3:
|
||||||
return self._stage3Data
|
return self._stage3Data
|
||||||
return -1
|
return -1
|
||||||
|
|
||||||
def GetStage3ShipName(self):
|
def GetStage3ShipName(self):
|
||||||
return self._stage3ShipName
|
return self._stage3ShipName
|
||||||
|
|
||||||
@@ -134,20 +134,15 @@ class ShipBrowser(wx.Panel):
|
|||||||
def stage2Callback(self,data):
|
def stage2Callback(self,data):
|
||||||
categoryID, shipList = data
|
categoryID, shipList = data
|
||||||
sFit = service.Fit.getInstance()
|
sFit = service.Fit.getInstance()
|
||||||
content = self.stage2Cache.get(categoryID,None)
|
|
||||||
if not content:
|
|
||||||
content = []
|
|
||||||
shipList.sort(key=self.raceNameKey)
|
|
||||||
for ID, name, race in shipList:
|
|
||||||
fits = len(sFit.getFitsWithShip(ID))
|
|
||||||
if self.filterShipsWithNoFits:
|
|
||||||
if fits>0:
|
|
||||||
self.lpane.AddWidget(ShipItem(self.lpane, ID, (name, fits), race))
|
|
||||||
else:
|
|
||||||
self.lpane.AddWidget(ShipItem(self.lpane, ID, (name, fits), race))
|
|
||||||
|
|
||||||
content.append((ID,name,fits,race))
|
shipList.sort(key=self.raceNameKey)
|
||||||
self.stage2Cache[categoryID]= content
|
for ID, name, race in shipList:
|
||||||
|
fits = len(sFit.getFitsWithShip(ID))
|
||||||
|
if self.filterShipsWithNoFits:
|
||||||
|
if fits>0:
|
||||||
|
self.lpane.AddWidget(ShipItem(self.lpane, ID, (name, fits), race))
|
||||||
|
else:
|
||||||
|
self.lpane.AddWidget(ShipItem(self.lpane, ID, (name, fits), race))
|
||||||
|
|
||||||
self.lpane.RefreshList()
|
self.lpane.RefreshList()
|
||||||
self.Show()
|
self.Show()
|
||||||
@@ -162,29 +157,11 @@ class ShipBrowser(wx.Panel):
|
|||||||
categoryID = event.categoryID
|
categoryID = event.categoryID
|
||||||
self.lastdata = categoryID
|
self.lastdata = categoryID
|
||||||
|
|
||||||
content = self.stage2Cache.get(categoryID,None)
|
|
||||||
if not content:
|
|
||||||
# self.lpane.ShowLoading(True)
|
# self.lpane.ShowLoading(True)
|
||||||
self.lpane.RemoveAllChildren()
|
self.lpane.RemoveAllChildren()
|
||||||
sMarket = service.Market.getInstance()
|
sMarket = service.Market.getInstance()
|
||||||
sMarket.getShipListDelayed(self.stage2Callback, categoryID)
|
sMarket.getShipListDelayed(self.stage2Callback, categoryID)
|
||||||
else:
|
|
||||||
self.lpane.RemoveAllChildren()
|
|
||||||
sFit = service.Fit.getInstance()
|
|
||||||
count = 0
|
|
||||||
for ID,name,fits,race in content:
|
|
||||||
dbfits = len(sFit.getFitsWithShip(ID))
|
|
||||||
if dbfits != fits:
|
|
||||||
fits = dbfits
|
|
||||||
self.stage2Cache[categoryID][count]= (ID,name,fits,race)
|
|
||||||
count += 1
|
|
||||||
if self.filterShipsWithNoFits:
|
|
||||||
if fits >0:
|
|
||||||
self.lpane.AddWidget(ShipItem(self.lpane,ID, (name,fits),race))
|
|
||||||
else:
|
|
||||||
self.lpane.AddWidget(ShipItem(self.lpane,ID, (name,fits),race))
|
|
||||||
self.lpane.RefreshList()
|
|
||||||
self.Show()
|
|
||||||
|
|
||||||
self._stage2Data = categoryID
|
self._stage2Data = categoryID
|
||||||
self.hpane.ToggleNewFitSB(False)
|
self.hpane.ToggleNewFitSB(False)
|
||||||
|
|||||||
@@ -29,15 +29,21 @@ import traceback
|
|||||||
class ShipBrowserWorkerThread(threading.Thread):
|
class ShipBrowserWorkerThread(threading.Thread):
|
||||||
def run(self):
|
def run(self):
|
||||||
self.queue = Queue.Queue()
|
self.queue = Queue.Queue()
|
||||||
|
self.cache = {}
|
||||||
self.processRequests()
|
self.processRequests()
|
||||||
|
|
||||||
def processRequests(self):
|
def processRequests(self):
|
||||||
queue = self.queue
|
queue = self.queue
|
||||||
|
cache = self.cache
|
||||||
sMarket = Market.getInstance()
|
sMarket = Market.getInstance()
|
||||||
while True:
|
while True:
|
||||||
try:
|
try:
|
||||||
callback, id = queue.get()
|
callback, id = queue.get()
|
||||||
list = sMarket.getShipList(id)
|
list = cache.get(id)
|
||||||
|
if list is None:
|
||||||
|
list = sMarket.getShipList(id)
|
||||||
|
cache[id] = list
|
||||||
|
|
||||||
wx.CallAfter(callback, (id,list))
|
wx.CallAfter(callback, (id,list))
|
||||||
except:
|
except:
|
||||||
pass
|
pass
|
||||||
|
|||||||
Reference in New Issue
Block a user