Make market service to return item objects instead of tuples
This commit is contained in:
@@ -142,9 +142,6 @@ class ShipBrowser(wx.Panel):
|
||||
def GetStage3ShipName(self):
|
||||
return self._stage3ShipName
|
||||
|
||||
def nameKey(self, info):
|
||||
return info[1]
|
||||
|
||||
def stage1(self, event):
|
||||
self._lastStage = self._activeStage
|
||||
self._activeStage = 1
|
||||
@@ -158,32 +155,32 @@ class ShipBrowser(wx.Panel):
|
||||
self.lpane.Freeze()
|
||||
self.lpane.RemoveAllChildren()
|
||||
if len(self.categoryList) == 0:
|
||||
self.categoryList = sMarket.getShipRoot()
|
||||
self.categoryList.sort(key=self.nameKey)
|
||||
for ID, name in self.categoryList:
|
||||
self.lpane.AddWidget(CategoryItem(self.lpane, ID, (name, 0)))
|
||||
self.categoryList = list(sMarket.getShipRoot())
|
||||
self.categoryList.sort(key=lambda ship: ship.name)
|
||||
for ship in self.categoryList:
|
||||
self.lpane.AddWidget(CategoryItem(self.lpane, ship.ID, (ship.name, 0)))
|
||||
|
||||
self.lpane.RefreshList()
|
||||
self.lpane.Thaw()
|
||||
|
||||
RACE_ORDER = ["amarr", "caldari", "gallente", "minmatar", "ore", "serpentis", "angel", "blood", "sansha", "guristas", None]
|
||||
def raceNameKey(self, shipInfo):
|
||||
return self.RACE_ORDER.index(shipInfo[2]), shipInfo[1]
|
||||
def raceNameKey(self, ship):
|
||||
return self.RACE_ORDER.index(ship.race), ship.name
|
||||
|
||||
def stage2Callback(self,data):
|
||||
def stage2Callback(self, data):
|
||||
if self.GetActiveStage() != 2:
|
||||
return
|
||||
categoryID, shipList = data
|
||||
ships = list(data[1])
|
||||
sFit = service.Fit.getInstance()
|
||||
|
||||
shipList.sort(key=self.raceNameKey)
|
||||
for ID, name, race in shipList:
|
||||
fits = len(sFit.getFitsWithShip(ID))
|
||||
ships.sort(key=self.raceNameKey)
|
||||
for ship in ships:
|
||||
fits = len(sFit.getFitsWithShip(ship.ID))
|
||||
if self.filterShipsWithNoFits:
|
||||
if fits>0:
|
||||
self.lpane.AddWidget(ShipItem(self.lpane, ID, (name, fits), race))
|
||||
self.lpane.AddWidget(ShipItem(self.lpane, ship.ID, (ship.name, fits), ship.race))
|
||||
else:
|
||||
self.lpane.AddWidget(ShipItem(self.lpane, ID, (name, fits), race))
|
||||
self.lpane.AddWidget(ShipItem(self.lpane, ship.ID, (ship.name, fits), ship.race))
|
||||
|
||||
self.lpane.ShowLoading(False)
|
||||
|
||||
@@ -210,6 +207,9 @@ class ShipBrowser(wx.Panel):
|
||||
self.hpane.ToggleNewFitSB(False)
|
||||
self.hpane.ToggleFitViewModeSB(True)
|
||||
|
||||
def nameKey(self, info):
|
||||
return info[1]
|
||||
|
||||
def stage3(self, event):
|
||||
|
||||
self.lpane.ShowLoading(False)
|
||||
@@ -272,15 +272,15 @@ class ShipBrowser(wx.Panel):
|
||||
|
||||
self.lpane.RemoveAllChildren()
|
||||
if query:
|
||||
shipList = sMarket.searchShips(query)
|
||||
ships = sMarket.searchShips(query)
|
||||
fitList = sFit.searchFits(query)
|
||||
|
||||
for ID, name, race in shipList:
|
||||
self.lpane.AddWidget(ShipItem(self.lpane, ID, (name, len(sFit.getFitsWithShip(ID))), race))
|
||||
for ship in ships:
|
||||
self.lpane.AddWidget(ShipItem(self.lpane, ship.ID, (ship.name, len(sFit.getFitsWithShip(ship.ID))), ship.race))
|
||||
|
||||
for ID, name, shipID, shipName,timestamp in fitList:
|
||||
self.lpane.AddWidget(FitItem(self.lpane, ID, (shipName, name,timestamp), shipID))
|
||||
if len(shipList) == 0 and len(fitList) == 0 :
|
||||
if len(ships) == 0 and len(fitList) == 0 :
|
||||
self.lpane.AddWidget(PFStaticText(self.lpane, label = "No matching results."))
|
||||
self.lpane.RefreshList(doFocus = False)
|
||||
self.lpane.Thaw()
|
||||
|
||||
@@ -51,12 +51,12 @@ class ShipBrowserWorkerThread(threading.Thread):
|
||||
while True:
|
||||
try:
|
||||
callback, id = queue.get()
|
||||
list = cache.get(id)
|
||||
if list is None:
|
||||
list = sMarket.getShipList(id)
|
||||
cache[id] = list
|
||||
set = cache.get(id)
|
||||
if set is None:
|
||||
set = sMarket.getShipList(id)
|
||||
cache[id] = set
|
||||
|
||||
wx.CallAfter(callback, (id,list))
|
||||
wx.CallAfter(callback, (id, set))
|
||||
except:
|
||||
pass
|
||||
finally:
|
||||
@@ -280,6 +280,12 @@ class Market():
|
||||
("complex", frozenset((6,))),
|
||||
("officer", frozenset((5,)))])
|
||||
self.SEARCH_CATEGORIES = ("Drone", "Module", "Subsystem", "Charge", "Implant")
|
||||
self.ROOT_MARKET_GROUPS = (9, # Modules
|
||||
1111, # Rigs
|
||||
157, # Drones
|
||||
11, # Ammo
|
||||
1112, # Subsystems
|
||||
24) # Implants & Boosters
|
||||
|
||||
# Tell other threads that Market is at their service
|
||||
mktRdy.set()
|
||||
@@ -364,6 +370,12 @@ class Market():
|
||||
group = item.group
|
||||
return group
|
||||
|
||||
def getCategoryByItem(self, item):
|
||||
"""Get category by item"""
|
||||
grp = self.getGroupByItem(item)
|
||||
cat = grp.category
|
||||
return cat
|
||||
|
||||
def getMetaGroupByItem(self, item):
|
||||
"""Get meta group by item"""
|
||||
# Check if item is in forced metagroup map
|
||||
@@ -526,20 +538,6 @@ class Market():
|
||||
pub = group.published
|
||||
return pub
|
||||
|
||||
def getShipRoot(self):
|
||||
cat = self.getCategory("Ship")
|
||||
root = []
|
||||
for grp in self.getGroupsByCategory(cat):
|
||||
root.append((grp.ID, grp.name))
|
||||
return root
|
||||
|
||||
ROOT_MARKET_GROUPS = (9, # Modules
|
||||
1111, # Rigs
|
||||
157, # Drones
|
||||
11, # Ammo
|
||||
1112, # Subsystems
|
||||
24) # Implants & Boosters
|
||||
|
||||
def getMarketRoot(self):
|
||||
"""
|
||||
Get the root of the market tree.
|
||||
@@ -553,13 +551,16 @@ class Market():
|
||||
|
||||
return root
|
||||
|
||||
def getShipRoot(self):
|
||||
cat = self.getCategory("Ship")
|
||||
root = set(self.getGroupsByCategory(cat))
|
||||
return root
|
||||
|
||||
def getShipList(self, grpid):
|
||||
"""Get ships for given group id"""
|
||||
ships = []
|
||||
grp = self.getGroup(grpid, eager=("items", "items.marketGroup", "items.attributes"))
|
||||
for item in grp.items:
|
||||
if self.getPublicityByItem(item):
|
||||
ships.append((item.ID, item.name, item.race))
|
||||
"""Get ships for given group id"""
|
||||
grp = self.getGroup(grpid, eager="items")
|
||||
ships = set(filter(lambda ship: self.getPublicityByItem(ship), grp.items))
|
||||
#ships.append((item.ID, item.name, item.race))
|
||||
return ships
|
||||
|
||||
def getShipListDelayed(self, id, callback):
|
||||
@@ -569,10 +570,10 @@ class Market():
|
||||
def searchShips(self, name):
|
||||
"""Find ships according to given text pattern"""
|
||||
results = eos.db.searchItems(name)
|
||||
ships = []
|
||||
ships = set()
|
||||
for item in results:
|
||||
if self.getGroupByItem(item).category.name == "Ship" and self.getPublicityByItem(item):
|
||||
ships.append((item.ID, item.name, item.race))
|
||||
if self.getCategoryByItem(item).name == "Ship" and self.getPublicityByItem(item):
|
||||
ships.add(item)
|
||||
return ships
|
||||
|
||||
def searchItems(self, name, callback):
|
||||
|
||||
Reference in New Issue
Block a user