plugin XEP-0045: add MUC search to plugin JID search results.
This commit is contained in:
parent
7f6081b54f
commit
65c6aefd68
1 changed files with 37 additions and 2 deletions
|
|
@ -17,8 +17,9 @@
|
|||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
import difflib
|
||||
import time
|
||||
from typing import Optional
|
||||
from typing import Optional, cast
|
||||
import uuid
|
||||
|
||||
import shortuuid
|
||||
|
|
@ -37,6 +38,7 @@ from libervia.backend.core.constants import Const as C
|
|||
from libervia.backend.core.i18n import D_, _
|
||||
from libervia.backend.core.log import getLogger
|
||||
from libervia.backend.memory import memory
|
||||
from libervia.backend.plugins import plugin_misc_jid_search
|
||||
from libervia.backend.tools import xml_tools, utils
|
||||
|
||||
|
||||
|
|
@ -49,7 +51,7 @@ PLUGIN_INFO = {
|
|||
C.PI_TYPE: "XEP",
|
||||
C.PI_MODES: C.PLUG_MODE_BOTH,
|
||||
C.PI_PROTOCOLS: ["XEP-0045"],
|
||||
C.PI_DEPENDENCIES: ["XEP-0359"],
|
||||
C.PI_DEPENDENCIES: ["XEP-0359", "JID_SEARCH"],
|
||||
C.PI_RECOMMENDATIONS: [C.TEXT_CMDS, "XEP-0313"],
|
||||
C.PI_MAIN: "XEP_0045",
|
||||
C.PI_HANDLER: "yes",
|
||||
|
|
@ -89,6 +91,9 @@ class XEP_0045:
|
|||
log.info(_("Plugin XEP_0045 initialization"))
|
||||
self.host = host
|
||||
self._sessions = memory.Sessions()
|
||||
self._jid_search = cast(
|
||||
plugin_misc_jid_search.JidSearch, host.plugins["JID_SEARCH"]
|
||||
)
|
||||
# return same arguments as muc_room_joined + a boolean set to True is the room was
|
||||
# already joined (first argument)
|
||||
host.bridge.add_method(
|
||||
|
|
@ -204,6 +209,9 @@ class XEP_0045:
|
|||
"message_received", self.message_received_trigger, priority=1000000
|
||||
)
|
||||
host.trigger.add("message_parse", self._message_parse_trigger)
|
||||
host.trigger.add(
|
||||
"JID_SEARCH_perform_search", self.jid_search_perform_search_trigger
|
||||
)
|
||||
|
||||
async def profile_connected(self, client):
|
||||
client.muc_service = await self.get_muc_service(client)
|
||||
|
|
@ -250,6 +258,33 @@ class XEP_0045:
|
|||
return False
|
||||
return True
|
||||
|
||||
async def jid_search_perform_search_trigger(
|
||||
self,
|
||||
client: SatXMPPEntity,
|
||||
search_term: str,
|
||||
options: plugin_misc_jid_search.Options,
|
||||
sequence_matcher: difflib.SequenceMatcher,
|
||||
matches: plugin_misc_jid_search.SearchItems
|
||||
) -> bool:
|
||||
if options.groupchat:
|
||||
if client.muc_service is not None:
|
||||
# FIXME: RSM is not handled, we need proper RSM handling as number of
|
||||
# rooms may be large.
|
||||
disco_items = await self.host.memory.disco.get_items(
|
||||
client,
|
||||
client.muc_service
|
||||
)
|
||||
for disco_item in disco_items:
|
||||
search_item = plugin_misc_jid_search.RoomSearchItem(
|
||||
entity = disco_item.entity,
|
||||
name = disco_item.name or "",
|
||||
local = True
|
||||
)
|
||||
self._jid_search.process_matching(
|
||||
search_term, sequence_matcher, matches,search_item
|
||||
)
|
||||
return True
|
||||
|
||||
def get_room(self, client: SatXMPPEntity, room_jid: jid.JID) -> muc.Room:
|
||||
"""Retrieve Room instance from its jid
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue