diff options
author | Maxime Buquet <pep@bouah.net> | 2020-05-10 00:30:56 +0200 |
---|---|---|
committer | Maxime Buquet <pep@bouah.net> | 2020-05-10 00:30:56 +0200 |
commit | 406a10bf15fe46400b658df6bbe7ce2942e6ee00 (patch) | |
tree | 10996f59972b2be47eae9ad4da257961c72f7429 /poezio/core | |
parent | f68fa1da5e2cccd396ee03eec12359ff905b7bc6 (diff) | |
parent | a1c8efdfb2f28976aaa653e5fc1e695b943bb739 (diff) | |
download | poezio-406a10bf15fe46400b658df6bbe7ce2942e6ee00.tar.gz poezio-406a10bf15fe46400b658df6bbe7ce2942e6ee00.tar.bz2 poezio-406a10bf15fe46400b658df6bbe7ce2942e6ee00.tar.xz poezio-406a10bf15fe46400b658df6bbe7ce2942e6ee00.zip |
Merge branch 'move-deny-remove-global-scope' into 'master'
Move /deny and /remove global scope
See merge request poezio/poezio!93
Diffstat (limited to 'poezio/core')
-rw-r--r-- | poezio/core/commands.py | 59 | ||||
-rw-r--r-- | poezio/core/completions.py | 13 | ||||
-rw-r--r-- | poezio/core/core.py | 26 |
3 files changed, 92 insertions, 6 deletions
diff --git a/poezio/core/commands.py b/poezio/core/commands.py index b00cf24a..6bf1d338 100644 --- a/poezio/core/commands.py +++ b/poezio/core/commands.py @@ -17,11 +17,12 @@ from slixmpp.xmlstream.matcher import StanzaPath from poezio import common from poezio import pep from poezio import tabs +from poezio import multiuserchat as muc from poezio.bookmarks import Bookmark from poezio.common import safeJID from poezio.config import config, DEFAULT_CONFIG, options as config_opts -from poezio import multiuserchat as muc from poezio.contact import Contact, Resource +from poezio.decorators import deny_anonymous from poezio.plugin import PluginConfig from poezio.roster import roster from poezio.theming import dump_tuple, get_theme @@ -517,8 +518,9 @@ class CommandCore: else: self.core.information('No bookmark to remove', 'Info') + @deny_anonymous @command_args_parser.quoted(0, 1) - def command_accept(self, args): + def accept(self, args): """ Accept a JID. Authorize it AND subscribe to it """ @@ -553,8 +555,9 @@ class CommandCore: pto=jid, ptype='subscribe', pnick=self.core.own_nick) self.core.information('%s is now authorized' % jid, 'Roster') + @deny_anonymous @command_args_parser.quoted(1) - def command_add(self, args): + def add(self, args): """ Add the specified JID to the roster, and automatically accept the reverse subscription @@ -582,6 +585,56 @@ class CommandCore: roster.modified() self.core.information('%s was added to the roster' % jid, 'Roster') + @deny_anonymous + @command_args_parser.quoted(0, 1) + def deny(self, args): + """ + /deny [jid] + Denies a JID from our roster + """ + jid = None + if not args: + tab = self.core.tabs.current_tab + if isinstance(tab, tabs.RosterInfoTab): + item = tab.roster_win.selected_row + if isinstance(item, Contact): + jid = item.bare_jid + else: + jid = safeJID(args[0]).bare + if jid not in [jid for jid in roster.jids()]: + jid = None + if jid is None: + self.core.information('No subscription to deny', 'Warning') + return + + contact = roster[jid] + if contact: + contact.unauthorize() + self.core.information('Subscription to %s was revoked' % jid, + 'Roster') + + @deny_anonymous + @command_args_parser.quoted(0, 1) + def remove(self, args): + """ + Remove the specified JID from the roster. i.e.: unsubscribe + from its presence, and cancel its subscription to our. + """ + jid = None + if args: + jid = safeJID(args[0]).bare + else: + tab = self.core.tabs.current_tab + if isinstance(tab, tabs.RosterInfoTab): + item = tab.roster_win.selected_row + if isinstance(item, Contact): + jid = item.bare_jid + if jid is None: + self.core.information('No roster item to remove', 'Error') + return + roster.remove(jid) + del roster[jid] + @command_args_parser.ignored def command_reconnect(self): """ diff --git a/poezio/core/completions.py b/poezio/core/completions.py index ee3e95bf..ada8d2b9 100644 --- a/poezio/core/completions.py +++ b/poezio/core/completions.py @@ -44,6 +44,19 @@ class CompletionCore: ' ', quotify=False) + def roster_barejids(self, the_input): + """Complete roster bare jids""" + jids = sorted( + str(contact.bare_jid) for contact in roster.contacts.values() + if contact.pending_in + ) + return Completion(the_input.new_completion, jids, 1, '', quotify=False) + + def remove(self, the_input): + """Completion for /remove""" + jids = [jid for jid in roster.jids()] + return Completion(the_input.auto_completion, jids, '', quotify=False) + def presence(self, the_input): """ Completion of /presence diff --git a/poezio/core/core.py b/poezio/core/core.py index 8f25d551..06d56062 100644 --- a/poezio/core/core.py +++ b/poezio/core/core.py @@ -1770,20 +1770,40 @@ class Core: completion=self.completion.bookmark) self.register_command( 'accept', - self.command.command_accept, + self.command.accept, usage='[jid]', desc='Allow the provided JID (or the selected contact ' 'in your roster), to see your presence.', - shortdesc='Allow a user your presence.',) + shortdesc='Allow a user your presence.', + completion=self.completion.roster_barejids) self.register_command( 'add', - self.command.command_add, + self.command.add, usage='<jid>', desc='Add the specified JID to your roster, ask them to' ' allow you to see his presence, and allow them to' ' see your presence.', shortdesc='Add a user to your roster.') self.register_command( + 'deny', + self.command.deny, + usage='[jid]', + desc='Deny your presence to the provided JID (or the ' + 'selected contact in your roster), who is asking' + 'you to be in their roster.', + shortdesc='Deny a user your presence.', + completion=self.completion.roster_barejids) + self.register_command( + 'remove', + self.command.remove, + usage='[jid]', + desc='Remove the specified JID from your roster. This ' + 'will unsubscribe you from its presence, cancel ' + 'its subscription to yours, and remove the item ' + 'from your roster.', + shortdesc='Remove a user from your roster.', + completion=self.completion.remove) + self.register_command( 'reconnect', self.command.command_reconnect, usage="[reconnect]", |