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)