[smuxi] Engine: implemented new engine/session/on-event-message hook
- From: Mirco M. M. Bauer <mmmbauer src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [smuxi] Engine: implemented new engine/session/on-event-message hook
- Date: Sun, 13 Jul 2014 17:44:32 +0000 (UTC)
commit 024b02d597db23470da184edb988f800bf31310a
Author: Mirco Bauer <meebey meebey net>
Date: Sun Jul 13 19:43:59 2014 +0200
Engine: implemented new engine/session/on-event-message hook
src/Engine/Session.cs | 53 +++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 53 insertions(+), 0 deletions(-)
---
diff --git a/src/Engine/Session.cs b/src/Engine/Session.cs
index 0d6a826..fa353ab 100644
--- a/src/Engine/Session.cs
+++ b/src/Engine/Session.cs
@@ -63,6 +63,7 @@ namespace Smuxi.Engine
public event EventHandler<GroupChatPersonAddedEventArgs> GroupChatPersonAdded;
public event EventHandler<GroupChatPersonRemovedEventArgs> GroupChatPersonRemoved;
public event EventHandler<GroupChatPersonUpdatedEventArgs> GroupChatPersonUpdated;
+ public event EventHandler<EventMessageEventArgs> EventMessage;
public IList<IProtocolManager> ProtocolManagers {
get {
@@ -1326,6 +1327,14 @@ namespace Smuxi.Engine
fm.AddMessageToChat(chat, msg);
}
}
+
+ if (msg.MessageType == MessageType.Event) {
+ // on-event-message
+ OnEventMessage(
+ // at this point we no longer know who sent this nor to whom
+ new EventMessageEventArgs(chat, msg, String.Empty, String.Empty)
+ );
+ }
}
public void AddPersonToGroupChat(GroupChatModel groupChat, PersonModel person)
@@ -2041,6 +2050,33 @@ namespace Smuxi.Engine
hooks.Run();
}
+ protected virtual void OnEventMessage(EventMessageEventArgs e)
+ {
+ if (EventMessage != null) {
+ EventMessage(this, e);
+ }
+
+ var pm = e.Chat.ProtocolManager;
+ var hooks = new HookRunner("engine", "session", "on-event-message");
+ hooks.Environments.Add(new ChatHookEnvironment(e.Chat));
+ if (pm != null) {
+ hooks.Environments.Add(new ProtocolManagerHookEnvironment(pm));
+ }
+ hooks.Environments.Add(new MessageHookEnvironment(e.Message,
+ e.Sender,
+ e.Receiver));
+
+ var cmdChar = (string) UserConfig["Interface/Entry/CommandCharacter"];
+ hooks.Commands.Add(new SessionHookCommand(this, e.Chat, cmdChar));
+ if (pm != null) {
+ hooks.Commands.Add(new ProtocolManagerHookCommand(pm, e.Chat, cmdChar));
+ }
+
+ // show time
+ hooks.Init();
+ hooks.Run();
+ }
+
private static string _(string msg)
{
return LibraryCatalog.GetString(msg, _LibraryTextDomain);
@@ -2088,4 +2124,21 @@ namespace Smuxi.Engine
NewPerson = newPerson;
}
}
+
+ public class EventMessageEventArgs : EventArgs
+ {
+ public ChatModel Chat { get; protected set; }
+ public MessageModel Message { get; protected set; }
+ public string Sender { get; protected set; }
+ public string Receiver { get; protected set; }
+
+ public EventMessageEventArgs(ChatModel chat, MessageModel msg,
+ string sender, string receiver)
+ {
+ Chat = chat;
+ Message = msg;
+ Sender = sender;
+ Receiver = receiver;
+ }
+ }
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]