From 2cc9918ee9112a2f9bfc9fa53ee3b0788b2501ad Mon Sep 17 00:00:00 2001 From: mathieui Date: Thu, 30 Jul 2015 21:13:20 +0200 Subject: Fix #3050 (better /ping completion) --- plugins/ping.py | 37 +++++++++++++++++++++++++++++++++---- 1 file changed, 33 insertions(+), 4 deletions(-) diff --git a/plugins/ping.py b/plugins/ping.py index a28406d1..c04f085c 100644 --- a/plugins/ping.py +++ b/plugins/ping.py @@ -22,9 +22,11 @@ Command the current interlocutor. """ +from decorators import command_args_parser from plugin import BasePlugin from roster import roster from common import safeJID +from contact import Contact, Resource import tabs import time @@ -41,6 +43,11 @@ class Plugin(BasePlugin): help='Send an XMPP ping to jid or nick (see XEP-0199).', short='Send a ping.', completion=self.completion_muc_ping) + self.api.add_tab_command(tabs.RosterInfoTab, 'ping', self.command_roster_ping, + usage='', + help='Send an XMPP ping to jid (see XEP-0199).', + short='Send a ping.', + completion=self.completion_ping) for _class in (tabs.PrivateTab, tabs.ConversationTab): self.api.add_tab_command(_class, 'ping', self.command_private_ping, usage='[jid]', @@ -48,6 +55,7 @@ class Plugin(BasePlugin): short='Send a ping', completion=self.completion_ping) + @command_args_parser.raw def command_ping(self, arg): if not arg: return self.core.command_help('ping') @@ -64,17 +72,19 @@ class Plugin(BasePlugin): def completion_muc_ping(self, the_input): users = [user.nick for user in self.api.current_tab().users] - l = [contact.bare_jid for contact in roster.get_contacts()] + l = self.resources() users.extend(l) return the_input.auto_completion(users, '', quotify=False) + @command_args_parser.raw def command_private_ping(self, arg): if arg: return self.command_ping(arg) self.command_ping(self.api.current_tab().name) + @command_args_parser.raw def command_muc_ping(self, arg): - if not arg.strip(): + if not arg: return user = self.api.current_tab().get_user_by_name(arg) if user: @@ -84,7 +94,26 @@ class Plugin(BasePlugin): jid = safeJID(arg) self.command_ping(jid.full) + @command_args_parser.raw + def command_roster_ping(self, arg): + if arg: + self.command_ping(arg) + else: + current = self.api.current_tab().selected_row + if isinstance(current, Resource): + self.command_ping(current.jid) + elif isinstance(current, Contact): + res = current.get_highest_priority_resource() + if res is not None: + self.command_ping(res.jid) + + def resources(self): + l = [] + for contact in roster.get_contacts(): + for resource in contact.resources: + l.append(resource.jid) + return l + def completion_ping(self, the_input): - l = [contact.bare_jid for contact in roster.get_contacts()] - return the_input.auto_completion(l, '', quotify=False) + return the_input.auto_completion(self.resources(), '', quotify=False) -- cgit v1.2.3