changeset 2963918706a4 in /home/hg/repos/gajim
author: Yann Leboulanger asterix@lagaule.org branches: gajim_0.16 details:http://hg.gajim.org/gajim?cmd=changeset;node=2963918706a4 description: pending events are now in objects rather that storing parameters in tuple
diffstat:
src/chat_control.py | 85 +++++++++++++-------------- src/common/commands.py | 13 +-- src/common/events.py | 133 ++++++++++++++++++++++++++++++++++++++---- src/common/stanza_session.py | 4 +- src/filetransfers_window.py | 2 +- src/groupchat_control.py | 6 +- src/gui_interface.py | 69 ++++++++++++---------- src/roster_window.py | 41 ++++++------ src/session.py | 27 ++++--- 9 files changed, 246 insertions(+), 134 deletions(-)
diffs (truncated from 810 to 300 lines):
diff -r 77d98dfb504f -r 2963918706a4 src/chat_control.py --- a/src/chat_control.py Sat Feb 27 19:52:46 2016 +0100 +++ b/src/chat_control.py Mon Feb 29 21:04:08 2016 +0100 @@ -40,6 +40,7 @@ import notify import re
+from common import events from common import gajim from common import helpers from common import exceptions @@ -970,20 +971,23 @@ # other_tags_for_text == ['marked'] --> highlighted gc message if gc_message: if 'marked' in other_tags_for_text: - type_ = 'printed_marked_gc_msg' + event_type = events.PrintedMarkedGcMsgEvent else: - type_ = 'printed_gc_msg' + event_type = events.PrintedGcMsgEvent event = 'gc_message_received' else: - type_ = 'printed_' + self.type_id + if self.type_id == message_control.TYPE_CHAT: + event_type = events.PrintedChatEvent + else: + event_type = events.PrintedPmEvent event = 'message_received' show_in_roster = notify.get_show_in_roster(event, self.account, self.contact, self.session) show_in_systray = notify.get_show_in_systray(event, - self.account, self.contact, type_) - - event = gajim.events.create_event(type_, (text, subject, self, - msg_log_id), show_in_roster=show_in_roster, + self.account, self.contact, event_type.type_) + + event = event_type(text, subject, self, msg_log_id, + show_in_roster=show_in_roster, show_in_systray=show_in_systray) gajim.events.add_event(self.account, full_jid, event) # We need to redraw contact if we show in roster @@ -2731,7 +2735,7 @@
gajim.nec.push_outgoing_event(MessageOutgoingEvent(None, account=self.account, jid=self.contact.jid, chatstate=state, - msg_id=contact.msg_id, control=self)) + msg_id=contact.msg_log_id, control=self))
contact.our_chatstate = state if state == 'active': @@ -3064,23 +3068,20 @@ for event in events: if event.type_ != self.type_id: continue - data = event.parameters - kind = data[2] - if kind == 'error': + if event.kind == 'error': kind = 'info' else: kind = 'print_queue' - if data[11]: + if event.sent_forwarded: kind = 'out' - dm = data[10] - self.print_conversation(data[0], kind, tim=data[3], - encrypted=data[4], subject=data[1], xhtml=data[7], - displaymarking=dm) - if len(data) > 6 and isinstance(data[6], int): - message_ids.append(data[6]) - - if len(data) > 8 and not self.session: - self.set_session(data[8]) + self.print_conversation(event.message, kind, tim=event.time, + encrypted=event.encrypted, subject=event.subject, + xhtml=event.xhtml, displaymarking=event.displaymarking) + if isinstance(event.msg_log_id, int): + message_ids.append(event.msg_log_id) + + if event.session and not self.session: + self.set_session(event.session) if message_ids: gajim.logger.set_read_messages(message_ids) gajim.events.remove_events(self.account, jid_with_resource, @@ -3343,7 +3344,7 @@ def _get_file_props_event(self, file_props, type_): evs = gajim.events.get_events(self.account, self.contact.jid, [type_]) for ev in evs: - if ev.parameters == file_props: + if ev.file_props == file_props: return ev return None
@@ -3407,15 +3408,13 @@ 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) + if event.is_continued: + gajim.interface.join_gc_room(self.account, event.room_jid, + gajim.nicks[self.account], event.password, + is_continued=True) else: - dialogs.JoinGroupchatWindow(self.account, room_jid) + dialogs.JoinGroupchatWindow(self.account, event.room_jid) except GajimGeneralException: pass gajim.events.remove_events(self.account, self.contact.jid, event=event) @@ -3424,17 +3423,15 @@ 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 + markup = '<b>%s:</b> %s' % (_('Groupchat Invitation'), event.room_jid) + if event.comment: + markup += ' (%s)' % event.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) + self._add_info_bar_message(markup, [b1, b2], (event.room_jid, + event.comment), gtk.MESSAGE_QUESTION)
def on_event_added(self, event): if event.account != self.account: @@ -3442,19 +3439,19 @@ if event.jid != self.contact.jid: return if event.type_ == 'file-request': - self._got_file_request(event.parameters) + self._got_file_request(event.file_props) elif event.type_ == 'file-completed': - self._got_file_completed(event.parameters) + self._got_file_completed(event.file_props) elif event.type_ in ('file-error', 'file-stopped'): msg_err = '' - if event.parameters.error == -1: + if event.file_props.error == -1: msg_err = _('Remote contact stopped transfer') - elif event.parameters.error == -6: + elif event.file_props.error == -6: msg_err = _('Error opening file') - self._got_file_error(event.parameters, event.type_, + self._got_file_error(event.file_props, event.type_, _('File transfer stopped'), msg_err) elif event.type_ in ('file-request-error', 'file-send-error'): - self._got_file_error(event.parameters, event.type_, + self._got_file_error(event.file_props, event.type_, _('File transfer cancelled'), _('Connection with peer cannot be established.')) elif event.type_ == 'gc-invitation': @@ -3477,11 +3474,11 @@ removed = False for ib_msg in self.info_bar_queue: if ev.type_ == 'gc-invitation': - if ev.parameters[0] == ib_msg[2][0]: + if ev.room_jid == ib_msg[2][0]: self.info_bar_queue.remove(ib_msg) removed = True else: # file-* - if ib_msg[2] == ev.parameters: + if ib_msg[2] == ev.file_props: self.info_bar_queue.remove(ib_msg) removed = True if removed: diff -r 77d98dfb504f -r 2963918706a4 src/common/commands.py --- a/src/common/commands.py Sat Feb 27 19:52:46 2016 +0100 +++ b/src/common/commands.py Mon Feb 29 21:04:08 2016 +0100 @@ -287,9 +287,9 @@ if ev_typ == 'printed_chat': ev_typ = 'chat' gajim.nec.push_outgoing_event(MessageOutgoingEvent(None, - account=account, jid=j, message=event.parameters[0], - type_=ev_typ, subject=event.parameters[1], - resource=resource, forward_from=jid, delayed=event.time_)) + account=account, jid=j, message=event.message, type_=ev_typ, + subject=event.subject, resource=resource, forward_from=jid, + delayed=event.time_))
# Inform other client of completion response, cmd = self.buildResponse(request, status = 'completed') @@ -321,10 +321,9 @@ if ev_typ == 'printed_chat': ev_typ = 'chat' gajim.nec.push_outgoing_event(MessageOutgoingEvent(None, - account=account, jid=j, message=event.parameters[0], - type_=ev_typ, subject=event.parameters[1], - resource=resource, forward_from=jid, delayed=event.time_, - now=True)) + account=account, jid=j, message=event.message, type_=ev_typ, + subject=event.subject, resource=resource, forward_from=jid, + delayed=event.time_, now=True))
response, cmd = self.buildResponse(request, status = 'completed') cmd.addChild('note', {}, _('The status has been changed.')) diff -r 77d98dfb504f -r 2963918706a4 src/common/events.py --- a/src/common/events.py Sat Feb 27 19:52:46 2016 +0100 +++ b/src/common/events.py Mon Feb 29 21:04:08 2016 +0100 @@ -31,8 +31,7 @@ Information concerning each event """
- def __init__(self, type_, time_, parameters, show_in_roster=False, - show_in_systray=True): + def __init__(self, time_=None, show_in_roster=False, show_in_systray=True): """ type_ in chat, normal, file-request, file-error, file-completed, file-request-error, file-send-error, file-stopped, gc_msg, pm, @@ -41,27 +40,138 @@
parameters is (per type_): chat, normal, pm: [message, subject, kind, time, encrypted, resource, - msg_id] + msg_log_id] where kind in error, incoming file-*: file_props gc_msg: None - printed_chat: [message, subject, control, msg_id] + printed_chat: [message, subject, control, msg_log_id] printed_*: None messages that are already printed in chat, but not read - gc-invitation: [room_jid, reason, password, is_continued] + gc-invitation: [room_jid, reason, password, is_continued, jid_from] subscription_request: [text, nick] unsubscribed: contact jingle-incoming: (fulljid, sessionid, content_types) """ - self.type_ = type_ - self.time_ = time_ - self.parameters = parameters + if time_: + self.time_ = time_ + else: + self.time_ = time.time() self.show_in_roster = show_in_roster self.show_in_systray = show_in_systray # Set when adding the event self.jid = None self.account = None
+class ChatEvent(Event): + type_ = 'chat' + def __init__ (self, message, subject, kind, time, encrypted, resource, + msg_log_id=None, xhtml=None, session=None, form_node=None, displaymarking=None, + sent_forwarded=False, time_=None, show_in_roster=False, + show_in_systray=True): + Event.__init__(self, time_, show_in_roster=show_in_roster, + show_in_systray=show_in_systray) + self.message = message + self.subject = subject + self.kind = kind + self.time = time + self.encrypted = encrypted + self.resource = resource + self.msg_log_id = msg_log_id + self.xhtml = xhtml + self.session = session + self.form_node = form_node + self.displaymarking = displaymarking + self.sent_forwarded = sent_forwarded + +class NormalEvent(ChatEvent): + type_ = 'normal' + +class PmEvent(ChatEvent): + type_ = 'pm' + +class PrintedChatEvent(Event): + type_ = 'printed_chat' + def __init__(self, message, subject, control, msg_log_id, time_=None, + show_in_roster=False, show_in_systray=True): + Event.__init__(self, time_, show_in_roster=show_in_roster, + show_in_systray=show_in_systray) + self.message = message + self.subject = subject + self.control = control + self.msg_log_id = msg_log_id + +class PrintedGcMsgEvent(PrintedChatEvent): + type_ = 'printed_gc_msg' + +class PrintedMarkedGcMsgEvent(PrintedChatEvent): + type_ = 'printed_marked_gc_msg' + +class PrintedPmEvent(PrintedChatEvent): + type_ = 'printed_pm' +