Set subject on IRC
This commit is contained in:
parent
af6b013748
commit
eb1df41b3e
7 changed files with 78 additions and 1 deletions
|
@ -129,6 +129,17 @@ void IRCNetworkPlugin::handleMessageSendRequest(const std::string &user, const s
|
|||
}
|
||||
}
|
||||
|
||||
void IRCNetworkPlugin::handleRoomSubjectChangedRequest(const std::string &user, const std::string &room, const std::string &message) {
|
||||
std::string session = getSessionName(user, room);
|
||||
if (m_sessions[session] == NULL) {
|
||||
LOG4CXX_WARN(logger, user << ": Session name: " << session << ", No session for user");
|
||||
return;
|
||||
}
|
||||
|
||||
std::string target = getTargetName(room);
|
||||
m_sessions[session]->sendCommand(IrcCommand::createTopic(FROM_UTF8(target), FROM_UTF8(message)));
|
||||
}
|
||||
|
||||
void IRCNetworkPlugin::handleJoinRoomRequest(const std::string &user, const std::string &room, const std::string &nickname, const std::string &password) {
|
||||
std::string session = getSessionName(user, room);
|
||||
std::string target = getTargetName(room);
|
||||
|
|
|
@ -26,6 +26,8 @@ class IRCNetworkPlugin : public QObject, public NetworkPlugin {
|
|||
|
||||
void handleLeaveRoomRequest(const std::string &user, const std::string &room);
|
||||
|
||||
void handleRoomSubjectChangedRequest(const std::string &user, const std::string &room, const std::string &message);
|
||||
|
||||
public slots:
|
||||
void readData();
|
||||
void sendData(const std::string &string);
|
||||
|
|
|
@ -218,6 +218,7 @@ class NetworkPlugin {
|
|||
/// \param photo Raw photo data.
|
||||
virtual void handleVCardUpdatedRequest(const std::string &/*user*/, const std::string &/*photo*/, const std::string &nickname) {}
|
||||
|
||||
virtual void handleRoomSubjectChangedRequest(const std::string &/*user*/, const std::string &/*room*/, const std::string &/*message*/) {}
|
||||
|
||||
virtual void handleJoinRoomRequest(const std::string &/*user*/, const std::string &/*room*/, const std::string &/*nickname*/, const std::string &/*pasword*/) {}
|
||||
virtual void handleLeaveRoomRequest(const std::string &/*user*/, const std::string &/*room*/) {}
|
||||
|
@ -260,6 +261,7 @@ class NetworkPlugin {
|
|||
void handleFTFinishPayload(const std::string &payload);
|
||||
void handleFTPausePayload(const std::string &payload);
|
||||
void handleFTContinuePayload(const std::string &payload);
|
||||
void handleRoomSubjectChangedPayload(const std::string &payload);
|
||||
|
||||
void send(const std::string &data);
|
||||
void sendPong();
|
||||
|
|
|
@ -374,6 +374,16 @@ void NetworkPlugin::handleConvMessagePayload(const std::string &data) {
|
|||
handleMessageSendRequest(payload.username(), payload.buddyname(), payload.message(), payload.xhtml());
|
||||
}
|
||||
|
||||
void NetworkPlugin::handleRoomSubjectChangedPayload(const std::string &data) {
|
||||
pbnetwork::ConversationMessage payload;
|
||||
if (payload.ParseFromString(data) == false) {
|
||||
// TODO: ERROR
|
||||
return;
|
||||
}
|
||||
|
||||
handleRoomSubjectChangedRequest(payload.username(), payload.buddyname(), payload.message());
|
||||
}
|
||||
|
||||
void NetworkPlugin::handleAttentionPayload(const std::string &data) {
|
||||
pbnetwork::ConversationMessage payload;
|
||||
if (payload.ParseFromString(data) == false) {
|
||||
|
@ -550,6 +560,9 @@ void NetworkPlugin::handleDataRead(std::string &data) {
|
|||
case pbnetwork::WrapperMessage_Type_TYPE_CONV_MESSAGE:
|
||||
handleConvMessagePayload(wrapper.payload());
|
||||
break;
|
||||
case pbnetwork::WrapperMessage_Type_TYPE_ROOM_SUBJECT_CHANGED:
|
||||
handleRoomSubjectChangedPayload(wrapper.payload());
|
||||
break;
|
||||
case pbnetwork::WrapperMessage_Type_TYPE_JOIN_ROOM:
|
||||
handleJoinRoomPayload(wrapper.payload());
|
||||
break;
|
||||
|
|
|
@ -1302,6 +1302,22 @@ void NetworkPluginServer::handleMessageReceived(NetworkConversation *conv, boost
|
|||
return;
|
||||
}
|
||||
|
||||
if (!msg->getSubject().empty()) {
|
||||
pbnetwork::ConversationMessage m;
|
||||
m.set_username(conv->getConversationManager()->getUser()->getJID().toBare());
|
||||
m.set_buddyname(conv->getLegacyName());
|
||||
m.set_message(msg->getSubject());
|
||||
|
||||
std::string message;
|
||||
m.SerializeToString(&message);
|
||||
|
||||
WRAP(message, pbnetwork::WrapperMessage_Type_TYPE_ROOM_SUBJECT_CHANGED);
|
||||
|
||||
Backend *c = (Backend *) conv->getConversationManager()->getUser()->getData();
|
||||
send(c->connection, message);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
std::string xhtml;
|
||||
boost::shared_ptr<Swift::XHTMLIMPayload> xhtmlPayload = msg->getPayload<Swift::XHTMLIMPayload>();
|
||||
|
|
|
@ -27,6 +27,7 @@ class ConversationManagerTest : public CPPUNIT_NS :: TestFixture, public BasicTe
|
|||
CPPUNIT_TEST(handleGroupchatMessages);
|
||||
CPPUNIT_TEST(handleGroupchatMessagesTwoResources);
|
||||
CPPUNIT_TEST(handleChatstateMessages);
|
||||
CPPUNIT_TEST(handleSubjectMessages);
|
||||
CPPUNIT_TEST(handleParticipantChanged);
|
||||
CPPUNIT_TEST(handleParticipantChangedTwoResources);
|
||||
CPPUNIT_TEST(handlePMFromXMPP);
|
||||
|
@ -91,6 +92,38 @@ class ConversationManagerTest : public CPPUNIT_NS :: TestFixture, public BasicTe
|
|||
received.clear();
|
||||
}
|
||||
|
||||
void handleSubjectMessages() {
|
||||
User *user = userManager->getUser("user@localhost");
|
||||
|
||||
TestingConversation *conv = new TestingConversation(user->getConversationManager(), "buddy1");
|
||||
user->getConversationManager()->addConversation(conv);
|
||||
conv->onMessageToSend.connect(boost::bind(&ConversationManagerTest::handleMessageReceived, this, _1, _2));
|
||||
|
||||
boost::shared_ptr<Swift::Message> msg(new Swift::Message());
|
||||
msg->setSubject("subject");
|
||||
|
||||
// Forward it
|
||||
conv->handleMessage(msg);
|
||||
loop->processEvents();
|
||||
|
||||
CPPUNIT_ASSERT_EQUAL(1, (int) received.size());
|
||||
CPPUNIT_ASSERT(dynamic_cast<Swift::Message *>(getStanza(received[0])));
|
||||
CPPUNIT_ASSERT_EQUAL(std::string("subject"), dynamic_cast<Swift::Message *>(getStanza(received[0]))->getSubject());
|
||||
received.clear();
|
||||
|
||||
// send response
|
||||
msg->setFrom("user@localhost/resource");
|
||||
msg->setTo("buddy1@localhost/bot");
|
||||
injectMessage(msg);
|
||||
loop->processEvents();
|
||||
|
||||
CPPUNIT_ASSERT_EQUAL(0, (int) received.size());
|
||||
CPPUNIT_ASSERT(m_msg);
|
||||
CPPUNIT_ASSERT_EQUAL(std::string("subject"), m_msg->getSubject());
|
||||
|
||||
received.clear();
|
||||
}
|
||||
|
||||
void handleNormalMessages() {
|
||||
User *user = userManager->getUser("user@localhost");
|
||||
|
||||
|
|
|
@ -340,7 +340,7 @@ void UserManager::handleMessageReceived(Swift::Message::ref message) {
|
|||
messageToBackendSent();
|
||||
}
|
||||
|
||||
if (message->getBody().empty() && !statePayload) {
|
||||
if (message->getBody().empty() && !statePayload && message->getSubject().empty()) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue