From eef0d9d1b115bc49e64496d468b17154cd07bec0 Mon Sep 17 00:00:00 2001 From: cncfanatics Date: Wed, 3 Nov 2010 09:51:25 +0100 Subject: [PATCH] Get rid of caching code in shipbrowser and do it in the service instead (faster, less code, cleaner) --- gui/shipBrowser.py | 53 +++++++++++++--------------------------------- service/market.py | 8 ++++++- 2 files changed, 22 insertions(+), 39 deletions(-) diff --git a/gui/shipBrowser.py b/gui/shipBrowser.py index e1485492f..d7ccfb3cf 100644 --- a/gui/shipBrowser.py +++ b/gui/shipBrowser.py @@ -31,9 +31,6 @@ class ShipBrowser(wx.Panel): self.lastStage = (0,0) self.mainFrame = gui.mainFrame.MainFrame.getInstance() - self.stage2Cache = {} - self.stage3Cache = {} - self.categoryList=[] self._stage1Data = -1 @@ -91,8 +88,10 @@ class ShipBrowser(wx.Panel): def __del__(self): pass + def GetActiveStage(self): return self._activeStage + def GetLastStage(self): return self._lastStage @@ -104,6 +103,7 @@ class ShipBrowser(wx.Panel): if stage == 3: return self._stage3Data return -1 + def GetStage3ShipName(self): return self._stage3ShipName @@ -134,20 +134,15 @@ class ShipBrowser(wx.Panel): def stage2Callback(self,data): categoryID, shipList = data 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)) - self.stage2Cache[categoryID]= 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)) self.lpane.RefreshList() self.Show() @@ -162,29 +157,11 @@ class ShipBrowser(wx.Panel): categoryID = event.categoryID self.lastdata = categoryID - content = self.stage2Cache.get(categoryID,None) - if not content: + # self.lpane.ShowLoading(True) - self.lpane.RemoveAllChildren() - sMarket = service.Market.getInstance() - 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.lpane.RemoveAllChildren() + sMarket = service.Market.getInstance() + sMarket.getShipListDelayed(self.stage2Callback, categoryID) self._stage2Data = categoryID self.hpane.ToggleNewFitSB(False) diff --git a/service/market.py b/service/market.py index 09aeb62fb..df22f5389 100644 --- a/service/market.py +++ b/service/market.py @@ -29,15 +29,21 @@ import traceback class ShipBrowserWorkerThread(threading.Thread): def run(self): self.queue = Queue.Queue() + self.cache = {} self.processRequests() def processRequests(self): queue = self.queue + cache = self.cache sMarket = Market.getInstance() while True: try: 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)) except: pass