Skip to content

Commit

Permalink
Pass search results as set of item IDs
Browse files Browse the repository at this point in the history
  • Loading branch information
DarkFenX committed Apr 16, 2020
1 parent 32db3e3 commit 1a897c0
Show file tree
Hide file tree
Showing 5 changed files with 25 additions and 7 deletions.
10 changes: 10 additions & 0 deletions eos/db/gamedata/queries.py
Original file line number Diff line number Diff line change
Expand Up @@ -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):
Expand Down
4 changes: 3 additions & 1 deletion gui/builtinMarketBrowser/itemView.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
from gui.display import Display
from gui.utils.staticHelpers import DragDropHelper
from service.fit import Fit
from service.market import Market


pyfalog = Logger(__name__)
Expand Down Expand Up @@ -193,10 +194,11 @@ def clearSearch(self, event=None):
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()
Expand Down
4 changes: 2 additions & 2 deletions gui/builtinViews/implantEditor.py
Original file line number Diff line number Diff line change
Expand Up @@ -311,12 +311,12 @@ def scheduleSearch(self, event=None):

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)

Expand Down
3 changes: 2 additions & 1 deletion gui/propertyEditor.py
Original file line number Diff line number Diff line change
Expand Up @@ -227,7 +227,8 @@ def itemSort(self, item):

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):
Expand Down
11 changes: 8 additions & 3 deletions service/market.py
Original file line number Diff line number Diff line change
Expand Up @@ -159,12 +159,12 @@ def processSearches(self):
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()
Expand Down Expand Up @@ -488,6 +488,11 @@ def getItem(identity, *args, **kwargs):

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):
Expand Down

0 comments on commit 1a897c0

Please sign in to comment.