[smuxi: 6/6] Engine(-IRC|-XMPP): implemented engine/protocol-manager/on-presence-status-changed hook point
- From: Mirco M. M. Bauer <mmmbauer src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [smuxi: 6/6] Engine(-IRC|-XMPP): implemented engine/protocol-manager/on-presence-status-changed hook point
- Date: Thu, 22 May 2014 17:16:40 +0000 (UTC)
commit d4739cf61885b724af6ea77d6450328dfbbd43c0
Author: Mirco Bauer <meebey meebey net>
Date: Thu May 22 19:11:00 2014 +0200
Engine(-IRC|-XMPP): implemented engine/protocol-manager/on-presence-status-changed hook point
src/Engine-IRC/Protocols/Irc/IrcProtocolManager.cs | 6 ++-
.../Protocols/Xmpp/XmppProtocolManager.cs | 2 +
src/Engine/Protocols/ProtocolManagerBase.cs | 56 ++++++++++++++++++--
3 files changed, 58 insertions(+), 6 deletions(-)
---
diff --git a/src/Engine-IRC/Protocols/Irc/IrcProtocolManager.cs
b/src/Engine-IRC/Protocols/Irc/IrcProtocolManager.cs
index 0c258fd..855345f 100644
--- a/src/Engine-IRC/Protocols/Irc/IrcProtocolManager.cs
+++ b/src/Engine-IRC/Protocols/Irc/IrcProtocolManager.cs
@@ -717,6 +717,8 @@ namespace Smuxi.Engine
_IrcClient.RfcAway(message);
break;
}
+
+ base.SetPresenceStatus(status, message);
}
public override bool Command(CommandModel command)
@@ -1639,9 +1641,9 @@ namespace Smuxi.Engine
public void CommandAway(CommandModel cd)
{
if (cd.DataArray.Length >= 2) {
- _IrcClient.RfcAway(cd.Parameter);
+ SetPresenceStatus(PresenceStatus.Away, cd.Parameter);
} else {
- _IrcClient.RfcAway();
+ SetPresenceStatus(PresenceStatus.Online, null);
}
}
diff --git a/src/Engine-XMPP/Protocols/Xmpp/XmppProtocolManager.cs
b/src/Engine-XMPP/Protocols/Xmpp/XmppProtocolManager.cs
index ebae831..aae8be7 100644
--- a/src/Engine-XMPP/Protocols/Xmpp/XmppProtocolManager.cs
+++ b/src/Engine-XMPP/Protocols/Xmpp/XmppProtocolManager.cs
@@ -640,6 +640,8 @@ namespace Smuxi.Engine
}
JabberClient.SendMyPresence();
+
+ base.SetPresenceStatus(status, message);
}
[MethodImpl(MethodImplOptions.Synchronized)]
diff --git a/src/Engine/Protocols/ProtocolManagerBase.cs b/src/Engine/Protocols/ProtocolManagerBase.cs
index a638a8f..3b6e1ca 100644
--- a/src/Engine/Protocols/ProtocolManagerBase.cs
+++ b/src/Engine/Protocols/ProtocolManagerBase.cs
@@ -1,7 +1,7 @@
/*
* Smuxi - Smart MUltipleXed Irc
*
- * Copyright (c) 2007-2013 Mirco Bauer <meebey meebey net>
+ * Copyright (c) 2007-2014 Mirco Bauer <meebey meebey net>
*
* Full GPL License: <http://www.gnu.org/licenses/gpl.txt>
*
@@ -48,6 +48,7 @@ namespace Smuxi.Engine
public event EventHandler Disconnected;
public event EventHandler<MessageEventArgs> MessageSent;
public event EventHandler<MessageEventArgs> MessageReceived;
+ public event EventHandler<PresenceStatusChangedEventArgs> PresenceStatusChanged;
public virtual string Host {
get {
@@ -81,7 +82,6 @@ namespace Smuxi.Engine
return _PresenceStatus;
}
set {
- _PresenceStatus = value;
SetPresenceStatus(value, null);
}
}
@@ -174,8 +174,17 @@ namespace Smuxi.Engine
public abstract void OpenChat(FrontendManager fm, ChatModel chat);
public abstract void CloseChat(FrontendManager fm, ChatModel chat);
- public abstract void SetPresenceStatus(PresenceStatus status,
- string message);
+ public virtual void SetPresenceStatus(PresenceStatus status,
+ string message)
+ {
+ var args = new PresenceStatusChangedEventArgs(_PresenceStatus,
+ status, message);
+ _PresenceStatus = status;
+
+ if (args.OldStatus != args.NewStatus) {
+ OnPresenceStatusChanged(args);
+ }
+ }
protected void NotConnected(CommandModel cmd)
{
@@ -308,6 +317,29 @@ namespace Smuxi.Engine
hooks.Run();
}
+ protected virtual void OnPresenceStatusChanged(PresenceStatusChangedEventArgs e)
+ {
+ Trace.Call(e);
+
+ if (PresenceStatusChanged != null) {
+ PresenceStatusChanged(this, e);
+ }
+
+ var hooks = new HookRunner("engine", "protocol-manager", "on-presence-status-changed");
+ hooks.EnvironmentVariables.Add("PRESENCE_STATUS_CHANGED_OLD_STATUS", e.OldStatus.ToString());
+ hooks.EnvironmentVariables.Add("PRESENCE_STATUS_CHANGED_NEW_STATUS", e.NewStatus.ToString());
+ hooks.EnvironmentVariables.Add("PRESENCE_STATUS_CHANGED_NEW_MESSAGE", e.NewMessage);
+ hooks.Environments.Add(new ProtocolManagerHookEnvironment(this));
+
+ var cmdChar = (string) Session.UserConfig["Interface/Entry/CommandCharacter"];
+ hooks.Commands.Add(new SessionHookCommand(Session, Chat, cmdChar));
+ hooks.Commands.Add(new ProtocolManagerHookCommand(this, Chat, cmdChar));
+
+ // show time
+ hooks.Init();
+ hooks.Run();
+ }
+
private static string _(string msg)
{
return LibraryCatalog.GetString(msg, _LibraryTextDomain);
@@ -413,4 +445,20 @@ namespace Smuxi.Engine
Receiver = receiver;
}
}
+
+ public class PresenceStatusChangedEventArgs : EventArgs
+ {
+ public PresenceStatus OldStatus { get; protected set; }
+ public PresenceStatus NewStatus { get; protected set; }
+ public string NewMessage { get; protected set; }
+
+ public PresenceStatusChangedEventArgs(PresenceStatus oldStatus,
+ PresenceStatus newStatus,
+ string newMessage)
+ {
+ OldStatus = oldStatus;
+ NewStatus = newStatus;
+ NewMessage = newMessage;
+ }
+ }
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]