From 0530308a99067c946ae6321050bf5730d00462f3 Mon Sep 17 00:00:00 2001 From: Yann Leboulanger Date: Mon, 29 Feb 2016 21:04:08 +0100 Subject: [PATCH] pending events are now in objects rather that storing parameters in tuple --- src/chat_control.py | 81 ++++++++++----------- 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 | 71 ++++++++++--------- src/roster_window.py | 41 +++++------ src/session.py | 27 +++---- 9 files changed, 245 insertions(+), 133 deletions(-) diff --git a/src/chat_control.py b/src/chat_control.py index 47687a4dc..0697ffba1 100644 --- a/src/chat_control.py +++ b/src/chat_control.py @@ -46,6 +46,7 @@ import history_window import notify import re +from common import events from common import gajim from common import helpers from common import exceptions @@ -912,20 +913,23 @@ class ChatControlBase(MessageControl, ChatCommandProcessor, CommandTools): # 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_) + self.account, self.contact, event_type.type_) - event = gajim.events.create_event(type_, (text, subject, self, - msg_log_id), show_in_roster=show_in_roster, + 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 @@ -2677,7 +2681,7 @@ class ChatControl(ChatControlBase): 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': @@ -3010,23 +3014,20 @@ class ChatControl(ChatControlBase): 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]) + 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 len(data) > 8 and not self.session: - self.set_session(data[8]) + 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, @@ -3258,7 +3259,7 @@ class ChatControl(ChatControlBase): 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 @@ -3322,15 +3323,13 @@ class ChatControl(ChatControlBase): self._add_info_bar_message(markup, [b], file_props, Gtk.MessageType.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) @@ -3339,17 +3338,15 @@ class ChatControl(ChatControlBase): 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 = '%s: %s' % (_('Groupchat Invitation'), room_jid) - if comment: - markup += ' (%s)' % comment + markup = '%s: %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.MessageType.QUESTION) + self._add_info_bar_message(markup, [b1, b2], (event.room_jid, + event.comment), Gtk.MessageType.QUESTION) def on_event_added(self, event): if event.account != self.account: @@ -3357,19 +3354,19 @@ class ChatControl(ChatControlBase): 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': @@ -3392,11 +3389,11 @@ class ChatControl(ChatControlBase): 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 --git a/src/common/commands.py b/src/common/commands.py index a8b425580..19d8c1397 100644 --- a/src/common/commands.py +++ b/src/common/commands.py @@ -287,9 +287,9 @@ class ForwardMessagesCommand(AdHocCommand): 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 @@ class FwdMsgThenDisconnectCommand(AdHocCommand): 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 --git a/src/common/events.py b/src/common/events.py index 1ebb601b1..b83a4d0a7 100644 --- a/src/common/events.py +++ b/src/common/events.py @@ -31,8 +31,7 @@ class Event: 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 @@ class Event: 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' + +class SubscriptionRequestEvent(Event): + type_ = 'subscription_request' + def __init__(self, text, nick, 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.text = text + self.nick = nick + +class UnsubscribedEvent(Event): + type_ = 'unsubscribed' + def __init__(self, contact, 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.contact = contact + +class GcInvitationtEvent(Event): + type_ = 'gc-invitation' + def __init__(self, room_jid, reason, password, is_continued, from_jid, + 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.room_jid = room_jid + self.reason = reason + self.password = password + self.is_continued = is_continued + self.from_jid = from_jid + +class FileRequestEvent(Event): + type_ = 'file-request' + def __init__(self, file_props, 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.file_props = file_props + +class FileSendErrorEvent(FileRequestEvent): + type_ = 'file-send-error' + +class FileErrorEvent(FileRequestEvent): + type_ = 'file-error' + +class FileRequestErrorEvent(FileRequestEvent): + type_ = 'file-request-error' + +class FileCompletedEvent(FileRequestEvent): + type_ = 'file-completed' + +class FileStoppedEvent(FileRequestEvent): + type_ = 'file-stopped' + +class FileHashErrorEvent(Event): + type_ = 'file-hash-rror' + +class JingleIncomingEvent(Event): + type_ = 'jingle-incoming' + def __init__(self, peerjid, sid, content_types, 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.peerjid = peerjid + self.sid = sid + self.content_types = content_types + class Events: """ Information concerning all events @@ -122,13 +232,6 @@ class Events: def remove_account(self, account): del self._events[account] - def create_event(self, type_, parameters, time_=None, - show_in_roster=False, show_in_systray=True): - if not time_: - time_ = time.time() - return Event(type_, time_, parameters, show_in_roster, - show_in_systray) - def add_event(self, account, jid, event): # No such account before ? if account not in self._events: diff --git a/src/common/stanza_session.py b/src/common/stanza_session.py index 82fbf60c1..346815312 100644 --- a/src/common/stanza_session.py +++ b/src/common/stanza_session.py @@ -96,8 +96,8 @@ class StanzaSession(object): for j in (self.jid, self.jid.getStripped()): for event in gajim.events.get_events(self.conn.name, j, types=types): # the event wasn't in this session - if (event.type_ == 'chat' and event.parameters[8] != self) or \ - (event.type_ == 'printed_chat' and event.parameters[2].session != \ + if (event.type_ == 'chat' and event.session != self) or \ + (event.type_ == 'printed_chat' and event.control.session != \ self): continue diff --git a/src/filetransfers_window.py b/src/filetransfers_window.py index eb586d727..f8eb150b9 100644 --- a/src/filetransfers_window.py +++ b/src/filetransfers_window.py @@ -592,7 +592,7 @@ class FileTransfersWindow: for ev_type in ('file-error', 'file-completed', 'file-request-error', 'file-send-error', 'file-stopped'): for event in gajim.events.get_events(account, jid, [ev_type]): - if event.parameters.sid == file_props.sid: + if event.file_props.sid == file_props.sid: gajim.events.remove_events(account, jid, event) gajim.interface.roster.draw_contact(jid, account) gajim.interface.roster.show_title() diff --git a/src/groupchat_control.py b/src/groupchat_control.py index 76e0fed2b..b8b33146a 100644 --- a/src/groupchat_control.py +++ b/src/groupchat_control.py @@ -46,6 +46,7 @@ import cell_renderer_image import dataforms_widget import nbxmpp +from common import events from common import gajim from common import helpers from common import dataforms @@ -1082,8 +1083,9 @@ class GroupchatControl(ChatControlBase): fjid = self.room_jid + '/' + nick no_queue = len(gajim.events.get_events(self.account, fjid)) == 0 - event = gajim.events.create_event('pm', (msg, '', 'incoming', tim, - encrypted, '', msg_log_id, xhtml, session, None, displaymarking, False)) + event = events.PmEvent(msg, '', 'incoming', tim, encrypted, '', + msg_log_id, xhtml=xhtml, session=session, form_node=None, + displaymarking=displaymarking, sent_forwarded=False) gajim.events.add_event(self.account, fjid, event) autopopup = gajim.config.get('autopopup') diff --git a/src/gui_interface.py b/src/gui_interface.py index 709c47225..92e01960e 100644 --- a/src/gui_interface.py +++ b/src/gui_interface.py @@ -47,6 +47,7 @@ from gi.repository import GLib from common import i18n from common import gajim +from common import events from common import dbus_support if dbus_support.supported: @@ -468,8 +469,8 @@ class Interface: obj.user_nick) return - self.add_event(account, obj.jid, 'subscription_request', (obj.status, - obj.user_nick)) + event = events.SubscriptionRequestEvent(obj.status, obj.user_nick) + self.add_event(account, obj.jid, event) if helpers.allow_showing_notification(account): path = gtkgui_helpers.get_icon_path('gajim-subscription_request', @@ -526,7 +527,8 @@ class Interface: self.show_unsubscribed_dialog(account, contact) return - self.add_event(account, obj.jid, 'unsubscribed', contact) + event = events.UnsubscribedEvent(contact) + self.add_event(account, obj.jid, event) if helpers.allow_showing_notification(account): path = gtkgui_helpers.get_icon_path('gajim-unsubscribed', 48) @@ -645,8 +647,9 @@ class Interface: is_continued=obj.is_continued) return - self.add_event(account, obj.jid_from, 'gc-invitation', (obj.room_jid, - obj.reason, obj.password, obj.is_continued, obj.jid_from)) + event = events.GcInvitationtEvent(obj.room_jid, obj.reason, + obj.password, obj.is_continued, obj.jid_from) + self.add_event(account, obj.jid_from, event) if helpers.allow_showing_notification(account): path = gtkgui_helpers.get_icon_path('gajim-gc_invitation', 48) @@ -845,7 +848,8 @@ class Interface: ft.show_send_error(file_props) return - self.add_event(account, jid, 'file-send-error', file_props) + event = events.FileSendErrorEvent(file_props) + self.add_event(account, jid, event) if helpers.allow_showing_notification(account): path = gtkgui_helpers.get_icon_path('gajim-ft_error', 48) @@ -904,11 +908,14 @@ class Interface: return if errno in (-4, -5): + event_class = events.FileErrorEvent msg_type = 'file-error' else: + event_class = events.FileRequestErrorEvent msg_type = 'file-request-error' - self.add_event(obj.conn.name, obj.jid, msg_type, obj.file_props) + event = event_class(obj.file_props) + self.add_event(obj.conn.name, obj.jid, event) if helpers.allow_showing_notification(obj.conn.name): # check if we should be notified @@ -942,7 +949,8 @@ class Interface: self.instances['file_transfers'].show_file_request(account, contact, obj.file_props) return - self.add_event(account, obj.jid, 'file-request', obj.file_props) + event = events.FileRequestEvent(obj.file_props) + self.add_event(account, obj.jid, event) if helpers.allow_showing_notification(account): path = gtkgui_helpers.get_icon_path('gajim-ft_request', 48) txt = _('%s wants to send you a file.') % gajim.get_name_from_jid( @@ -1040,12 +1048,15 @@ class Interface: event_type = '' if file_props.error == 0 and gajim.config.get( 'notify_on_file_complete'): + event_class = events.FileCompletedEvent msg_type = 'file-completed' event_type = _('File Transfer Completed') elif file_props.error in (-1, -6): + event_class = events.FileStoppedEvent msg_type = 'file-stopped' event_type = _('File Transfer Stopped') elif file_props.error == -10: + event_class = events.FileHashErrorEvent msg_type = 'file-hash-error' event_type = _('File Transfer Failed') @@ -1058,7 +1069,8 @@ class Interface: return if msg_type: - self.add_event(account, jid, msg_type, file_props) + event = event_class(file_props) + self.add_event(account, jid, event) if file_props is not None: if file_props.type_ == 'r': @@ -1261,8 +1273,8 @@ class Interface: content_types) return - self.add_event(account, obj.jid, 'jingle-incoming', (obj.fjid, obj.sid, - content_types)) + event = events.JingleIncomingEvent(obj.fjid, obj.sid, content_types) + self.add_event(account, obj.jid, event) if helpers.allow_showing_notification(account): # TODO: we should use another pixmap ;-) @@ -1412,7 +1424,7 @@ class Interface: 'New SHA-1 fingerprint: %(new_sha1)s\nNew SHA-256 fingerprint: ' '%(new_sha256)s\n\nDo you still want to connect ' 'and update the fingerprint of the certificate?') % \ - {'account': account, + {'account': account, 'old_sha1': gajim.config.get_per('accounts', account, 'ssl_fingerprint_sha1'), 'old_sha256': gajim.config.get_per('accounts', account, 'ssl_fingerprint_sha256'), 'new_sha1': obj.new_fingerprint_sha1, @@ -1620,7 +1632,7 @@ class Interface: ### Methods dealing with gajim.events ################################################################################ - def add_event(self, account, jid, type_, event_args): + def add_event(self, account, jid, event): """ Add an event to the gajim.events var """ @@ -1628,25 +1640,22 @@ class Interface: # Do we have a queue? jid = gajim.get_jid_without_resource(jid) no_queue = len(gajim.events.get_events(account, jid)) == 0 - # type_ can be gc-invitation file-send-error file-error - # file-request-error file-request file-completed file-stopped - # file-hash-error jingle-incoming + # event can be in common.events.* # event_type can be in advancedNotificationWindow.events_list event_types = {'file-request': 'ft_request', 'file-completed': 'ft_finished'} - event_type = event_types.get(type_) + event_type = event_types.get(event.type_) show_in_roster = notify.get_show_in_roster(event_type, account, jid) show_in_systray = notify.get_show_in_systray(event_type, account, jid) - event = gajim.events.create_event(type_, event_args, - show_in_roster=show_in_roster, - show_in_systray=show_in_systray) + event.show_in_roster = show_in_roster + event.show_in_systray = show_in_systray gajim.events.add_event(account, jid, event) self.roster.show_title() if no_queue: # We didn't have a queue: we change icons if not gajim.contacts.get_contact_with_highest_priority(account, jid): - if type_ == 'gc-invitation': + if event.type_ == 'gc-invitation': self.roster.add_groupchat(jid, account, status='offline') else: # add contact to roster ("Not In The Roster") if he is not @@ -1692,9 +1701,9 @@ class Interface: return if type_ == 'printed_chat': - ctrl = event.parameters[2] + ctrl = event.control elif type_ == 'chat': - session = event.parameters[8] + session = event.session ctrl = session.control elif type_ == '': ctrl = self.msg_win_mgr.get_control(fjid, account) @@ -1732,9 +1741,9 @@ class Interface: return if type_ == 'printed_pm': - ctrl = event.parameters[2] + ctrl = event.control elif type_ == 'pm': - session = event.parameters[8] + session = event.session if session and session.control: ctrl = session.control @@ -1780,21 +1789,19 @@ class Interface: helpers.launch_browser_mailer('url', url) elif type_ == 'gc-invitation': event = gajim.events.get_first_event(account, jid, type_) - data = event.parameters - dialogs.InvitationReceivedDialog(account, data[0], jid, data[2], - data[1], data[3]) + dialogs.InvitationReceivedDialog(account, event.room_jid, jid, + event.password, event.reason, event.is_continued) gajim.events.remove_events(account, jid, event) self.roster.draw_contact(jid, account) elif type_ == 'subscription_request': event = gajim.events.get_first_event(account, jid, type_) - data = event.parameters - dialogs.SubscriptionRequestWindow(jid, data[0], account, data[1]) + dialogs.SubscriptionRequestWindow(jid, event.text, account, + event.nick) gajim.events.remove_events(account, jid, event) self.roster.draw_contact(jid, account) elif type_ == 'unsubscribed': event = gajim.events.get_first_event(account, jid, type_) - contact = event.parameters - self.show_unsubscribed_dialog(account, contact) + self.show_unsubscribed_dialog(account, event.contact) gajim.events.remove_events(account, jid, event) self.roster.draw_contact(jid, account) if w: diff --git a/src/roster_window.py b/src/roster_window.py index 9a44e3152..b968a7c22 100644 --- a/src/roster_window.py +++ b/src/roster_window.py @@ -1965,9 +1965,9 @@ class RosterWindow: for ev in event_list: if ev.type_ != 'printed_chat': continue - if len(ev.parameters) > 3 and ev.parameters[3]: + if ev.msg_log_id: # There is a msg_log_id - msg_log_ids.append(ev.parameters[3]) + msg_log_ids.append(ev.msg_log_id) if msg_log_ids: gajim.logger.set_read_messages(msg_log_ids) @@ -1991,59 +1991,60 @@ class RosterWindow: """ If an event was handled, return True, else return False """ - data = event.parameters ft = gajim.interface.instances['file_transfers'] event = gajim.events.get_first_event(account, jid, event.type_) if event.type_ == 'normal': dialogs.SingleMessageWindow(account, jid, - action='receive', from_whom=jid, subject=data[1], - message=data[0], resource=data[5], session=data[8], - form_node=data[9]) + action='receive', from_whom=jid, subject=event.subject, + message=event.message, resource=event.resource, + session=event.session, form_node=event.form_node) gajim.events.remove_events(account, jid, event) return True elif event.type_ == 'file-request': contact = gajim.contacts.get_contact_with_highest_priority(account, jid) - ft.show_file_request(account, contact, data) + ft.show_file_request(account, contact, event.file_props) gajim.events.remove_events(account, jid, event) return True elif event.type_ in ('file-request-error', 'file-send-error'): - ft.show_send_error(data) + ft.show_send_error(event.file_props) gajim.events.remove_events(account, jid, event) return True elif event.type_ in ('file-error', 'file-stopped'): msg_err = '' - if data.error == -1: + if event.file_props.error == -1: msg_err = _('Remote contact stopped transfer') - elif data.error == -6: + elif event.file_props.error == -6: msg_err = _('Error opening file') - ft.show_stopped(jid, data, error_msg=msg_err) + ft.show_stopped(jid, event.file_props, error_msg=msg_err) gajim.events.remove_events(account, jid, event) return True elif event.type_ == 'file-hash-error': - ft.show_hash_error(jid, data, account) + ft.show_hash_error(jid, event.file_props, account) gajim.events.remove_events(account, jid, event) return True elif event.type_ == 'file-completed': - ft.show_completed(jid, data) + ft.show_completed(jid, event.file_props) gajim.events.remove_events(account, jid, event) return True elif event.type_ == 'gc-invitation': - dialogs.InvitationReceivedDialog(account, data[0], data[4], data[2], - data[1], is_continued=data[3]) + dialogs.InvitationReceivedDialog(account, event.room_jid, + event.jid_from, event.password, event.reason, + is_continued=event.is_continued) gajim.events.remove_events(account, jid, event) return True elif event.type_ == 'subscription_request': - dialogs.SubscriptionRequestWindow(jid, data[0], account, data[1]) + dialogs.SubscriptionRequestWindow(jid, event.text, account, + event.nick) gajim.events.remove_events(account, jid, event) return True elif event.type_ == 'unsubscribed': - gajim.interface.show_unsubscribed_dialog(account, data) + gajim.interface.show_unsubscribed_dialog(account, event.contact) gajim.events.remove_events(account, jid, event) return True elif event.type_ == 'jingle-incoming': - peerjid, sid, content_types = data - dialogs.VoIPCallReceivedDialog(account, peerjid, sid, content_types) + dialogs.VoIPCallReceivedDialog(account, event.peerjid, event.sid, + event.content_types) gajim.events.remove_events(account, jid, event) return True return False @@ -4160,7 +4161,7 @@ class RosterWindow: session = None if first_ev: if first_ev.type_ in ('chat', 'normal'): - session = first_ev.parameters[8] + session = first_ev.session fjid = jid if resource: fjid += '/' + resource diff --git a/src/session.py b/src/session.py index 042b3c718..f5f1fe169 100644 --- a/src/session.py +++ b/src/session.py @@ -23,6 +23,7 @@ from common import helpers +from common import events from common import exceptions from common import gajim from common import stanza_session @@ -235,11 +236,11 @@ class ChatControlSession(stanza_session.EncryptedStanzaSession): obj.popup = helpers.allow_popup_window(self.conn.name) - type_ = 'chat' + event_t = events.ChatEvent event_type = 'message_received' if obj.mtype == 'normal': - type_ = 'normal' + event_t = events.NormalEvent event_type = 'single_message_received' if self.control and obj.mtype != 'normal': @@ -253,10 +254,11 @@ class ChatControlSession(stanza_session.EncryptedStanzaSession): if (not self.control and obj.mtype != 'normal') or \ (obj.mtype == 'normal' and not obj.popup): - event = gajim.events.create_event(type_, (obj.msgtxt, obj.subject, - obj.mtype, obj.timestamp, obj.encrypted, obj.resource, - obj.msg_log_id, obj.xhtml, self, obj.form_node, obj.displaymarking, - obj.forwarded and obj.sent), + event = event_t(obj.msgtxt, obj.subject, obj.mtype, obj.timestamp, + obj.encrypted, obj.resource, obj.msg_log_id, xhtml=obj.xhtml, + session=self, form_node=obj.form_node, + displaymarking=obj.displaymarking, + sent_forwarded=obj.forwarded and obj.sent, show_in_roster=obj.show_in_roster, show_in_systray=obj.show_in_systray) @@ -338,11 +340,11 @@ class ChatControlSession(stanza_session.EncryptedStanzaSession): return # We save it in a queue - type_ = 'chat' + event_t = events.ChatEvent event_type = 'message_received' if msg_type == 'normal': - type_ = 'normal' + event_t = events.NormalEvent event_type = 'single_message_received' show_in_roster = notify.get_show_in_roster(event_type, self.conn.name, @@ -350,10 +352,11 @@ class ChatControlSession(stanza_session.EncryptedStanzaSession): show_in_systray = notify.get_show_in_systray(event_type, self.conn.name, contact) - event = gajim.events.create_event(type_, (msg, subject, msg_type, tim, - encrypted, resource, msg_log_id, xhtml, self, form_node, displaymarking, - False), show_in_roster=show_in_roster, - show_in_systray=show_in_systray) + event = event_t(msg, subject, msg_type, tim, encrypted, resource, + msg_log_id, xhtml=xhtml, session=self, form_node=form_node, + displaymarking=displaymarking, sent_forwarded=False, + show_in_roster=obj.show_in_roster, + show_in_systray=obj.show_in_systray) gajim.events.add_event(self.conn.name, fjid, event)