changeset 22920951d869 in /home/hg/repos/gajim
details:http://hg.gajim.org/gajim?cmd=changeset;node=22920951d869
description: show invitation to groupchats in chat window info bar. Fixes #1804
diffstat:
src/chat_control.py | 48 +++++++++++++++++++++++++++++++++++++++++++++---
1 files changed, 45 insertions(+), 3 deletions(-)
diffs (82 lines):
diff -r c3966b469985 -r 22920951d869 src/chat_control.py
--- a/src/chat_control.py Mon Apr 09 19:45:56 2012 +0200
+++ b/src/chat_control.py Mon Apr 09 21:26:35 2012 +0200
@@ -56,6 +56,7 @@
from common.xmpp.protocol import NS_JINGLE_RTP_AUDIO, NS_JINGLE_RTP_VIDEO,
NS_JINGLE_ICE_UDP
from common.xmpp.protocol import NS_CHATSTATES
from common.connection_handlers_events import MessageOutgoingEvent
+from common.exceptions import GajimGeneralException
from command_system.implementation.middleware import ChatCommandProcessor
from command_system.implementation.middleware import CommandTools
@@ -3246,6 +3247,36 @@
b.connect('clicked', self._on_ok, file_props, type_)
self._add_info_bar_message(markup, [b], file_props, gtk.MESSAGE_ERROR)
+ def _on_accept_gc_invitation(self, widget, event):
+ room_jid = event.parameters[0]
+ password = event.parameters[2]
+ is_continued = event.parameters[3]
+ try:
+ if is_continued:
+ gajim.interface.join_gc_room(self.account, room_jid,
+ gajim.nicks[self.account], password, is_continued=True)
+ else:
+ dialogs.JoinGroupchatWindow(self.account, room_jid)
+ except GajimGeneralException:
+ pass
+ gajim.events.remove_events(self.account, self.contact.jid, event=event)
+
+ def _on_cancel_gc_invitation(self, widget, event):
+ gajim.events.remove_events(self.account, self.contact.jid, event=event)
+
+ def _get_gc_invitation(self, event):
+ room_jid = event.parameters[0]
+ comment = event.parameters[1]
+ markup = '<b>%s:</b> %s' % (_('Groupchat Invitation'), room_jid)
+ if comment:
+ markup += ' (%s)' % comment
+ b1 = gtk.Button(_('_Join'))
+ b1.connect('clicked', self._on_accept_gc_invitation, event)
+ b2 = gtk.Button(stock=gtk.STOCK_CANCEL)
+ b2.connect('clicked', self._on_cancel_gc_invitation, event)
+ self._add_info_bar_message(markup, [b1, b2], event.parameters,
+ gtk.MESSAGE_QUESTION)
+
def on_event_added(self, event):
if event.account != self.account:
return
@@ -3267,6 +3298,8 @@
self._got_file_error(event.parameters, event.type_,
_('File transfer cancelled'),
_('Connection with peer cannot be established.'))
+ elif event.type_ == 'gc-invitation':
+ self._get_gc_invitation(event)
def on_event_removed(self, event_list):
"""
@@ -3278,12 +3311,21 @@
if ev.jid != self.contact.jid:
continue
if ev.type_ not in ('file-request', 'file-completed', 'file-error',
- 'file-stopped', 'file-request-error', 'file-send-error'):
+ 'file-stopped', 'file-request-error', 'file-send-error',
+ 'gc-invitation'):
continue
i = 0
+ removed = False
for ib_msg in self.info_bar_queue:
- if ib_msg[2] == ev.parameters:
- self.info_bar_queue.remove(ib_msg)
+ if ev.type_ == 'gc-invitation':
+ if ev.parameters[0] == ib_msg[2][0]:
+ self.info_bar_queue.remove(ib_msg)
+ removed = True
+ else: # file-*
+ if ib_msg[2] == ev.parameters:
+ self.info_bar_queue.remove(ib_msg)
+ removed = True
+ if removed:
if i == 0:
# We are removing the one currently displayed
self.info_bar.set_no_show_all(True)
_______________________________________________
Commits mailing list
[email protected]
http://lists.gajim.org/cgi-bin/listinfo/commits