comparison libervia/web/pages/_browser/jid_search.py @ 1546:7f3f5ae7d65a

browser (jid_search): implement a mechanism to get JIDs from search terms
author Goffi <goffi@goffi.org>
date Thu, 06 Jul 2023 12:11:17 +0200
parents
children 66aa6e140ebb
comparison
equal deleted inserted replaced
1545:be20e6ac9f22 1546:7f3f5ae7d65a
1 from bridge import AsyncBridge as Bridge
2 from browser import aio, console as log, window
3 from cache import cache
4 import json
5
6 log.warning = log.warn
7 profile = window.profile or ""
8 bridge = Bridge()
9
10
11 class JidSearch:
12
13 def __init__(self, search_elt, callback, empty_cb=None):
14 self.search_elt = search_elt
15 self.search_elt.bind("input", self.on_search_input)
16 self.last_query = None
17 self.current_query = None
18 self.callback = callback
19 self.empty_cb = empty_cb
20 current_search = search_elt.value.strip() or None
21 if current_search is not None:
22 aio.run(self.perform_search(current_search))
23
24 def on_search_input(self, evt):
25 search_text = evt.target.value.strip()
26 if not search_text and self.empty_cb is not None:
27 self.empty_cb()
28 elif len(search_text) > 2:
29 aio.run(self.perform_search(search_text))
30
31 async def perform_search(self, query):
32 if self.current_query is None:
33 log.debug(f"performing search: {query=}")
34 self.current_query = query
35 jid_items = json.loads(await bridge.jid_search(query, ""))
36 await cache.fill_identities(i["entity"] for i in jid_items)
37
38 self.last_query = query
39 self.current_query = None
40 current_query = self.search_elt.value.strip()
41 if current_query != query:
42 await self.perform_search(current_query)
43 return
44 self.callback(jid_items)