summaryrefslogtreecommitdiff
path: root/poezio/core/commands.py
diff options
context:
space:
mode:
Diffstat (limited to 'poezio/core/commands.py')
-rw-r--r--poezio/core/commands.py54
1 files changed, 46 insertions, 8 deletions
diff --git a/poezio/core/commands.py b/poezio/core/commands.py
index 6cf398ff..e785a93b 100644
--- a/poezio/core/commands.py
+++ b/poezio/core/commands.py
@@ -23,6 +23,8 @@ 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
+from poezio import windows
from poezio.plugin import PluginConfig
from poezio.roster import roster
from poezio.theming import dump_tuple, get_theme
@@ -508,7 +510,43 @@ class CommandCore:
self.core.bookmarks.save(self.core.xmpp, callback=cb)
else:
self.core.information('No bookmark to remove', 'Info')
-
+
+ @command_args_parser.quoted(0, 1)
+ def command_accept(self, args):
+ """
+ Accept a JID. Authorize it AND subscribe to it
+ """
+ if not args:
+ tab = self.core.tabs.current_tab
+ RosterInfoTab = tabs.RosterInfoTab
+ if not isinstance(tab, RosterInfoTab):
+ return self.core.information('No JID specified', 'Error')
+ else:
+ item = tab.selected_row
+ if isinstance(item, Contact):
+ jid = item.bare_jid
+ else:
+ return self.core.information('No subscription to accept', 'Warning')
+ else:
+ jid = safeJID(args[0]).bare
+ nodepart = safeJID(jid).user
+ jid = safeJID(jid)
+ # crappy transports putting resources inside the node part
+ if '\\2f' in nodepart:
+ jid.user = nodepart.split('\\2f')[0]
+ contact = roster[jid]
+ if contact is None:
+ return self.core.information('No subscription to accept', 'Warning')
+ contact.pending_in = False
+ roster.modified()
+ self.core.xmpp.send_presence(pto=jid, ptype='subscribed')
+ self.core.xmpp.client_roster.send_last_presence()
+ if contact.subscription in ('from',
+ 'none') and not contact.pending_out:
+ self.core.xmpp.send_presence(
+ pto=jid, ptype='subscribe', pnick=self.core.own_nick)
+ self.core.information('%s is now authorized' % jid, 'Roster')
+
@command_args_parser.quoted(1)
def command_add(self, args):
"""
@@ -516,17 +554,17 @@ class CommandCore:
accept the reverse subscription
"""
if args is None:
- jid = self.core.tabs.current_tab.name
- if jid is 'Roster' or 'muc' in jid:
- self.core.information('No JID specified', 'Error')
- return
- else:
+ tab = self.core.tabs.current_tab
+ ConversationTab = tabs.ConversationTab
+ if isinstance(tab, ConversationTab):
+ jid = tab.general_jid
if jid in roster and roster[jid].subscription in ('to', 'both'):
return self.core.information('Already subscribed.', 'Roster')
roster.add(jid)
roster.modified()
- self.core.information('%s was added to the roster' % jid, 'Roster')
- return
+ return self.core.information('%s was added to the roster' % jid, 'Roster')
+ else:
+ return self.core.information('No JID specified', 'Error')
jid = safeJID(safeJID(args[0]).bare)
if not str(jid):
self.core.information(