From f47187d464dc3ee58eb16024a3c2fd4e5b717a59 Mon Sep 17 00:00:00 2001 From: HanzZ Date: Sat, 13 Aug 2011 02:03:49 +0200 Subject: [PATCH] Probably working invisible state, but I'm lazy to test it after midnight... --- backends/libpurple/main.cpp | 3 +++ src/networkpluginserver.cpp | 12 +++++++++++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/backends/libpurple/main.cpp b/backends/libpurple/main.cpp index ee58aee2..62eba46e 100644 --- a/backends/libpurple/main.cpp +++ b/backends/libpurple/main.cpp @@ -311,6 +311,9 @@ class SpectrumNetworkPlugin : public NetworkPlugin { st = PURPLE_STATUS_OFFLINE; break; } + case 255: + st = PURPLE_STATUS_INVISIBLE; + break; default: st = PURPLE_STATUS_AVAILABLE; break; diff --git a/src/networkpluginserver.cpp b/src/networkpluginserver.cpp index 577348c4..f3dc2310 100644 --- a/src/networkpluginserver.cpp +++ b/src/networkpluginserver.cpp @@ -37,6 +37,7 @@ #include "Swiften/Network/BoostConnectionServer.h" #include "Swiften/Elements/AttentionPayload.h" #include "Swiften/Elements/XHTMLIMPayload.h" +#include "Swiften/Elements/InvisiblePayload.h" #include "pbnetwork.pb.h" #include "sys/wait.h" #include "sys/signal.h" @@ -785,7 +786,16 @@ void NetworkPluginServer::handleUserPresenceChanged(User *user, Swift::Presence: pbnetwork::Status status; status.set_username(user->getJID().toBare()); - status.set_status((int) presence->getShow()); + + bool isInvisible = presence->getPayload() != NULL; + if (isInvisible) { + LOG4CXX_INFO(logger, "This presence is invisible"); + status.set_status(255); + } + else { + status.set_status((int) presence->getShow()); + } + status.set_statusmessage(presence->getStatus()); std::string message;