Working attention from XMPP -> legacy network
This commit is contained in:
parent
d6c003bad3
commit
fb420ef125
8 changed files with 45 additions and 3 deletions
|
@ -433,6 +433,13 @@ class SpectrumNetworkPlugin : public NetworkPlugin {
|
|||
}
|
||||
}
|
||||
|
||||
void handleAttentionRequest(const std::string &user, const std::string &buddyName, const std::string &message) {
|
||||
PurpleAccount *account = m_sessions[user];
|
||||
if (account) {
|
||||
purple_prpl_send_attention(purple_account_get_connection(account), buddyName.c_str(), 0);
|
||||
}
|
||||
}
|
||||
|
||||
std::map<std::string, PurpleAccount *> m_sessions;
|
||||
std::map<PurpleAccount *, std::string> m_accounts;
|
||||
std::map<std::string, unsigned int> m_vcards;
|
||||
|
|
|
@ -100,7 +100,7 @@ void Server::handleNewClientConnection(boost::shared_ptr<Connection> connection)
|
|||
|
||||
boost::shared_ptr<ServerFromClientSession> serverFromClientSession = boost::shared_ptr<ServerFromClientSession>(
|
||||
new ServerFromClientSession(idGenerator.generateID(), connection,
|
||||
&payloadParserFactories, &payloadSerializers, userRegistry_));
|
||||
getPayloadParserFactories(), getPayloadSerializers(), userRegistry_));
|
||||
//serverFromClientSession->setAllowSASLEXTERNAL();
|
||||
|
||||
serverFromClientSession->onSessionStarted.connect(
|
||||
|
|
|
@ -67,8 +67,6 @@ namespace Swift {
|
|||
|
||||
private:
|
||||
IDGenerator idGenerator;
|
||||
FullPayloadParserFactoryCollection payloadParserFactories;
|
||||
FullPayloadSerializerCollection payloadSerializers;
|
||||
UserRegistry *userRegistry_;
|
||||
int port_;
|
||||
EventLoop* eventLoop;
|
||||
|
|
|
@ -80,6 +80,7 @@ class NetworkPlugin {
|
|||
virtual void handleTypingRequest(const std::string &/*user*/, const std::string &/*buddyName*/) {}
|
||||
virtual void handleTypedRequest(const std::string &/*user*/, const std::string &/*buddyName*/) {}
|
||||
virtual void handleStoppedTypingRequest(const std::string &/*user*/, const std::string &/*buddyName*/) {}
|
||||
virtual void handleAttentionRequest(const std::string &/*user*/, const std::string &/*buddyName*/, const std::string &/*message*/) {}
|
||||
|
||||
|
||||
private:
|
||||
|
@ -94,6 +95,7 @@ class NetworkPlugin {
|
|||
void handleBuddyChangedPayload(const std::string &payload);
|
||||
void handleBuddyRemovedPayload(const std::string &payload);
|
||||
void handleChatStatePayload(const std::string &payload, Swift::ChatState::ChatStateType type);
|
||||
void handleAttentionPayload(const std::string &payload);
|
||||
void handleDataRead(const Swift::SafeByteArray&);
|
||||
void _handleConnected(bool error);
|
||||
void handleDisconnected();
|
||||
|
|
|
@ -61,9 +61,11 @@ void ConversationManager::handleMessageReceived(Swift::Message::ref message) {
|
|||
name.replace(name.find_last_of("%"), 1, "@");
|
||||
}
|
||||
|
||||
// create conversation if it does not exist.
|
||||
if (!m_convs[name]) {
|
||||
m_convs[name] = m_component->getFactory()->createConversation(this, name);
|
||||
}
|
||||
// if it exists and it's MUC, but this message is PM, get PM conversation or create new one.
|
||||
else if (m_convs[name]->isMUC() && message->getType() != Swift::Message::Groupchat) {
|
||||
std::string room_name = name;
|
||||
name = message->getTo().getResource();
|
||||
|
|
|
@ -303,6 +303,16 @@ void NetworkPlugin::handleConvMessagePayload(const std::string &data) {
|
|||
handleMessageSendRequest(payload.username(), payload.buddyname(), payload.message());
|
||||
}
|
||||
|
||||
void NetworkPlugin::handleAttentionPayload(const std::string &data) {
|
||||
pbnetwork::ConversationMessage payload;
|
||||
if (payload.ParseFromString(data) == false) {
|
||||
// TODO: ERROR
|
||||
return;
|
||||
}
|
||||
|
||||
handleAttentionRequest(payload.username(), payload.buddyname(), payload.message());
|
||||
}
|
||||
|
||||
void NetworkPlugin::handleJoinRoomPayload(const std::string &data) {
|
||||
pbnetwork::Room payload;
|
||||
if (payload.ParseFromString(data) == false) {
|
||||
|
@ -443,6 +453,9 @@ void NetworkPlugin::handleDataRead(const Swift::SafeByteArray &data) {
|
|||
case pbnetwork::WrapperMessage_Type_TYPE_BUDDY_STOPPED_TYPING:
|
||||
handleChatStatePayload(wrapper.payload(), Swift::ChatState::Active);
|
||||
break;
|
||||
case pbnetwork::WrapperMessage_Type_TYPE_ATTENTION:
|
||||
handleAttentionPayload(wrapper.payload());
|
||||
break;
|
||||
default:
|
||||
return;
|
||||
}
|
||||
|
|
|
@ -34,6 +34,7 @@
|
|||
#include "Swiften/Server/ServerStanzaChannel.h"
|
||||
#include "Swiften/Elements/StreamError.h"
|
||||
#include "Swiften/Network/BoostConnectionServer.h"
|
||||
#include "Swiften/Elements/AttentionPayload.h"
|
||||
#include "pbnetwork.pb.h"
|
||||
#include "sys/wait.h"
|
||||
#include "sys/signal.h"
|
||||
|
@ -649,6 +650,24 @@ void NetworkPluginServer::handleMessageReceived(NetworkConversation *conv, boost
|
|||
}
|
||||
}
|
||||
|
||||
boost::shared_ptr<Swift::AttentionPayload> attentionPayload = msg->getPayload<Swift::AttentionPayload>();
|
||||
if (attentionPayload) {
|
||||
pbnetwork::ConversationMessage m;
|
||||
m.set_username(conv->getConversationManager()->getUser()->getJID().toBare());
|
||||
m.set_buddyname(conv->getLegacyName());
|
||||
m.set_message(msg->getBody());
|
||||
|
||||
std::string message;
|
||||
m.SerializeToString(&message);
|
||||
|
||||
WRAP(message, pbnetwork::WrapperMessage_Type_TYPE_ATTENTION);
|
||||
|
||||
Client *c = (Client *) conv->getConversationManager()->getUser()->getData();
|
||||
send(c->connection, message);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
if (!msg->getBody().empty()) {
|
||||
pbnetwork::ConversationMessage m;
|
||||
m.set_username(conv->getConversationManager()->getUser()->getJID().toBare());
|
||||
|
|
|
@ -93,6 +93,7 @@ message WrapperMessage {
|
|||
TYPE_BUDDY_STOPPED_TYPING = 19;
|
||||
TYPE_BUDDY_TYPED = 20;
|
||||
TYPE_AUTH_REQUEST = 21;
|
||||
TYPE_ATTENTION = 22;
|
||||
}
|
||||
required Type type = 1;
|
||||
optional bytes payload = 2;
|
||||
|
|
Loading…
Add table
Reference in a new issue