handle gc outgoing messages with events.
This commit is contained in:
parent
a0f7501f44
commit
4481b6356e
|
@ -757,6 +757,8 @@ class Connection(CommonConnection, ConnectionHandlers):
|
||||||
self._nec_agent_info_received)
|
self._nec_agent_info_received)
|
||||||
gajim.ged.register_event_handler('message-outgoing', ged.OUT_CORE,
|
gajim.ged.register_event_handler('message-outgoing', ged.OUT_CORE,
|
||||||
self._nec_message_outgoing)
|
self._nec_message_outgoing)
|
||||||
|
gajim.ged.register_event_handler('gc-message-outgoing', ged.OUT_CORE,
|
||||||
|
self._nec_gc_message_outgoing)
|
||||||
# END __init__
|
# END __init__
|
||||||
|
|
||||||
def cleanup(self):
|
def cleanup(self):
|
||||||
|
@ -769,6 +771,8 @@ class Connection(CommonConnection, ConnectionHandlers):
|
||||||
self._nec_agent_info_received)
|
self._nec_agent_info_received)
|
||||||
gajim.ged.remove_event_handler('message-outgoing', ged.OUT_CORE,
|
gajim.ged.remove_event_handler('message-outgoing', ged.OUT_CORE,
|
||||||
self._nec_message_outgoing)
|
self._nec_message_outgoing)
|
||||||
|
gajim.ged.remove_event_handler('message-outgoing', ged.OUT_CORE,
|
||||||
|
self._nec_gc_message_outgoing)
|
||||||
|
|
||||||
def get_config_values_or_default(self):
|
def get_config_values_or_default(self):
|
||||||
if gajim.config.get_per('accounts', self.name, 'keep_alives_enabled'):
|
if gajim.config.get_per('accounts', self.name, 'keep_alives_enabled'):
|
||||||
|
@ -2600,6 +2604,42 @@ class Connection(CommonConnection, ConnectionHandlers):
|
||||||
if callback:
|
if callback:
|
||||||
callback(msg_iq, msg)
|
callback(msg_iq, msg)
|
||||||
|
|
||||||
|
def _nec_gc_message_outgoing(self, obj):
|
||||||
|
if obj.account != self.name:
|
||||||
|
return
|
||||||
|
if not gajim.account_is_connected(self.name):
|
||||||
|
return
|
||||||
|
|
||||||
|
if obj.correction_msg:
|
||||||
|
id_ = obj.correction_msg.getID()
|
||||||
|
if obj.correction_msg.getTag('replace'):
|
||||||
|
obj.correction_msg.delChild('replace')
|
||||||
|
obj.correction_msg.setTag('replace', attrs={'id': id_},
|
||||||
|
namespace=nbxmpp.NS_CORRECT)
|
||||||
|
id2 = self.connection.getAnID()
|
||||||
|
obj.correction_msg.setID(id2)
|
||||||
|
obj.correction_msg.setBody(obj.message)
|
||||||
|
if obj.xhtml:
|
||||||
|
obj.correction_msg.setXHTML(xhtml)
|
||||||
|
self.connection.send(obj.correction_msg)
|
||||||
|
gajim.nec.push_incoming_event(MessageSentEvent(None, conn=self,
|
||||||
|
jid=obj.jid, message=obj.message, keyID=None, chatstate=None))
|
||||||
|
if obj.callback:
|
||||||
|
obj.callback(obj.correction_msg, obj.message)
|
||||||
|
return
|
||||||
|
if not obj.xhtml and gajim.config.get('rst_formatting_outgoing_messages'):
|
||||||
|
from common.rst_xhtml_generator import create_xhtml
|
||||||
|
obj.xhtml = create_xhtml(obj.message)
|
||||||
|
msg_iq = nbxmpp.Message(obj.jid, obj.message, typ='groupchat',
|
||||||
|
xhtml=obj.xhtml)
|
||||||
|
if obj.label is not None:
|
||||||
|
msg_iq.addChild(node=label)
|
||||||
|
self.connection.send(msg_iq)
|
||||||
|
gajim.nec.push_incoming_event(MessageSentEvent(None, conn=self,
|
||||||
|
jid=obj.jid, message=obj.message, keyID=None, chatstate=None))
|
||||||
|
if obj.callback:
|
||||||
|
obj.callback(msg_iq, obj.message)
|
||||||
|
|
||||||
def send_gc_subject(self, jid, subject):
|
def send_gc_subject(self, jid, subject):
|
||||||
if not gajim.account_is_connected(self.name):
|
if not gajim.account_is_connected(self.name):
|
||||||
return
|
return
|
||||||
|
|
|
@ -2444,6 +2444,25 @@ class MessageOutgoingEvent(nec.NetworkOutgoingEvent):
|
||||||
def generate(self):
|
def generate(self):
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
|
||||||
|
class GcMessageOutgoingEvent(nec.NetworkOutgoingEvent):
|
||||||
|
name = 'gc-message-outgoing'
|
||||||
|
base_network_events = []
|
||||||
|
|
||||||
|
def init(self):
|
||||||
|
self.message = ''
|
||||||
|
self.xhtml = None
|
||||||
|
self.label = None
|
||||||
|
self.callback = None
|
||||||
|
self.callback_args = []
|
||||||
|
self.is_loggable = True
|
||||||
|
self.control = None
|
||||||
|
self.correction_msg = None
|
||||||
|
|
||||||
|
def generate(self):
|
||||||
|
return True
|
||||||
|
|
||||||
|
|
||||||
class ClientCertPassphraseEvent(nec.NetworkIncomingEvent):
|
class ClientCertPassphraseEvent(nec.NetworkIncomingEvent):
|
||||||
name = 'client-cert-passphrase'
|
name = 'client-cert-passphrase'
|
||||||
base_network_events = []
|
base_network_events = []
|
||||||
|
|
|
@ -54,6 +54,7 @@ from common.exceptions import GajimGeneralException
|
||||||
|
|
||||||
from command_system.implementation.hosts import PrivateChatCommands
|
from command_system.implementation.hosts import PrivateChatCommands
|
||||||
from command_system.implementation.hosts import GroupChatCommands
|
from command_system.implementation.hosts import GroupChatCommands
|
||||||
|
from common.connection_handlers_events import GcMessageOutgoingEvent
|
||||||
|
|
||||||
import logging
|
import logging
|
||||||
log = logging.getLogger('gajim.groupchat_control')
|
log = logging.getLogger('gajim.groupchat_control')
|
||||||
|
@ -1923,9 +1924,10 @@ class GroupchatControl(ChatControlBase):
|
||||||
else:
|
else:
|
||||||
correction_msg = None
|
correction_msg = None
|
||||||
# Send the message
|
# Send the message
|
||||||
gajim.connections[self.account].send_gc_message(self.room_jid,
|
gajim.nec.push_outgoing_event(GcMessageOutgoingEvent(None,
|
||||||
message, xhtml=xhtml, label=label,
|
account=self.account, jid=self.room_jid, message=message,
|
||||||
correction_msg=correction_msg, callback=_cb)
|
xhtml=xhtml, label=label, callback=_cb,
|
||||||
|
callback_args=[_cb] + [message], correction_msg=correction_msg))
|
||||||
self.msg_textview.get_buffer().set_text('')
|
self.msg_textview.get_buffer().set_text('')
|
||||||
self.msg_textview.grab_focus()
|
self.msg_textview.grab_focus()
|
||||||
|
|
||||||
|
|
|
@ -37,7 +37,9 @@ from common import helpers
|
||||||
from time import time
|
from time import time
|
||||||
from dialogs import AddNewContactWindow, NewChatDialog, JoinGroupchatWindow
|
from dialogs import AddNewContactWindow, NewChatDialog, JoinGroupchatWindow
|
||||||
from common import ged
|
from common import ged
|
||||||
from common.connection_handlers_events import MessageOutgoingEvent
|
from common.connection_handlers_events import MessageOutgoingEvent,
|
||||||
|
GcMessageOutgoingEvent
|
||||||
|
|
||||||
|
|
||||||
from common import dbus_support
|
from common import dbus_support
|
||||||
if dbus_support.supported:
|
if dbus_support.supported:
|
||||||
|
@ -478,6 +480,8 @@ class SignalObject(dbus.service.Object):
|
||||||
if connected_account:
|
if connected_account:
|
||||||
connection = gajim.connections[connected_account]
|
connection = gajim.connections[connected_account]
|
||||||
connection.send_gc_message(room_jid, message)
|
connection.send_gc_message(room_jid, message)
|
||||||
|
gajim.nec.push_outgoing_event(GcMessageOutgoingEvent(None,
|
||||||
|
account=connected_account, jid=room_jid, message=message))
|
||||||
return DBUS_BOOLEAN(True)
|
return DBUS_BOOLEAN(True)
|
||||||
return DBUS_BOOLEAN(False)
|
return DBUS_BOOLEAN(False)
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue