Pass search results as set of item IDs
This commit is contained in:
@@ -98,6 +98,16 @@ def getItem(lookfor, eager=None):
|
||||
raise TypeError("Need integer or string as argument")
|
||||
return item
|
||||
|
||||
@cachedQuery(1, "itemIDs")
|
||||
def getItems(itemIDs, eager=None):
|
||||
if not isinstance(itemIDs, (tuple, list, set)) or not all(isinstance(t, int) for t in itemIDs):
|
||||
raise TypeError("Need iterable of integers as argument")
|
||||
if eager is None:
|
||||
items = get_gamedata_session().query(Item).filter(Item.ID.in_(itemIDs)).all()
|
||||
else:
|
||||
items = get_gamedata_session().query(Item).options(*processEager(eager)).filter(Item.ID.in_(itemIDs)).all()
|
||||
return items
|
||||
|
||||
|
||||
def getMutaplasmid(lookfor, eager=None):
|
||||
if isinstance(lookfor, int):
|
||||
|
||||
@@ -9,6 +9,7 @@ from gui.contextMenu import ContextMenu
|
||||
from gui.display import Display
|
||||
from gui.utils.staticHelpers import DragDropHelper
|
||||
from service.fit import Fit
|
||||
from service.market import Market
|
||||
|
||||
|
||||
pyfalog = Logger(__name__)
|
||||
@@ -193,10 +194,11 @@ class ItemView(Display):
|
||||
self.setToggles()
|
||||
self.filterItemStore()
|
||||
|
||||
def populateSearch(self, items):
|
||||
def populateSearch(self, itemIDs):
|
||||
# If we're no longer searching, dump the results
|
||||
if self.marketBrowser.mode != 'search':
|
||||
return
|
||||
items = Market.getItems(itemIDs)
|
||||
self.updateItemStore(items)
|
||||
self.setToggles()
|
||||
self.filterItemStore()
|
||||
|
||||
@@ -311,12 +311,12 @@ class ItemView(d.Display):
|
||||
|
||||
sMkt.searchItems(search, self.populateSearch, 'implants')
|
||||
|
||||
def populateSearch(self, items):
|
||||
def populateSearch(self, itemIDs):
|
||||
if not self.IsShown():
|
||||
self.parent.availableImplantsTree.Hide()
|
||||
self.Show()
|
||||
self.parent.Layout()
|
||||
|
||||
items = Market.getItems(itemIDs)
|
||||
items = [i for i in items if i.group.name != 'Booster']
|
||||
self.items = sorted(list(items), key=lambda i: i.name)
|
||||
|
||||
|
||||
@@ -227,7 +227,8 @@ class ItemView(d.Display):
|
||||
|
||||
return not isFittable, catname, mktgrpid, parentname, metatab, metalvl, item.name
|
||||
|
||||
def populateSearch(self, items):
|
||||
def populateSearch(self, itemIDs):
|
||||
items = Market.getItems(itemIDs)
|
||||
self.update(items)
|
||||
|
||||
def populate(self, items):
|
||||
|
||||
@@ -159,12 +159,12 @@ class SearchWorkerThread(threading.Thread):
|
||||
eager=("group.category", "metaGroup"))
|
||||
all_results.update(filtered_results)
|
||||
|
||||
items = set()
|
||||
item_IDs = set()
|
||||
# Return only published items, consult with Market service this time
|
||||
for item in all_results:
|
||||
if sMkt.getPublicityByItem(item):
|
||||
items.add(item)
|
||||
wx.CallAfter(callback, list(items))
|
||||
item_IDs.add(item.ID)
|
||||
wx.CallAfter(callback, sorted(item_IDs))
|
||||
|
||||
def scheduleSearch(self, text, callback, filterName=None):
|
||||
self.cv.acquire()
|
||||
@@ -488,6 +488,11 @@ class Market:
|
||||
|
||||
return item
|
||||
|
||||
@staticmethod
|
||||
def getItems(itemIDs, eager=None):
|
||||
items = eos.db.getItems(itemIDs, eager=eager)
|
||||
return items
|
||||
|
||||
def getGroup(self, identity, *args, **kwargs):
|
||||
"""Get group by its ID or name"""
|
||||
if isinstance(identity, types_Group):
|
||||
|
||||
Reference in New Issue
Block a user