Mercurial > libervia-web
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) |