diff --git a/backends/libpurple/main.cpp b/backends/libpurple/main.cpp index ee58aee2bef148f5b286dd9857837330e1a4ad6b..62eba46e7eca13ae7dda7089d26ef7c55ab6cd98 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 577348c4b0ca12d11f651aafd7ecfa21b2c3de45..f3dc2310be025fc9ab01228ed193b4d3fe52d759 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;