Pass search results as set of item IDs

This commit is contained in:
DarkPhoenix
2020-04-16 15:13:32 +03:00
parent 32db3e3179
commit 1a897c0419
5 changed files with 25 additions and 7 deletions

View File

@@ -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):

View File

@@ -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()

View File

@@ -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)

View File

@@ -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):

View File

@@ -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):