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) {
|
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 session = getSessionName(user, room);
|
||||||
std::string target = getTargetName(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 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:
|
public slots:
|
||||||
void readData();
|
void readData();
|
||||||
void sendData(const std::string &string);
|
void sendData(const std::string &string);
|
||||||
|
|
|
@ -218,6 +218,7 @@ class NetworkPlugin {
|
||||||
/// \param photo Raw photo data.
|
/// \param photo Raw photo data.
|
||||||
virtual void handleVCardUpdatedRequest(const std::string &/*user*/, const std::string &/*photo*/, const std::string &nickname) {}
|
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 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*/) {}
|
virtual void handleLeaveRoomRequest(const std::string &/*user*/, const std::string &/*room*/) {}
|
||||||
|
@ -260,6 +261,7 @@ class NetworkPlugin {
|
||||||
void handleFTFinishPayload(const std::string &payload);
|
void handleFTFinishPayload(const std::string &payload);
|
||||||
void handleFTPausePayload(const std::string &payload);
|
void handleFTPausePayload(const std::string &payload);
|
||||||
void handleFTContinuePayload(const std::string &payload);
|
void handleFTContinuePayload(const std::string &payload);
|
||||||
|
void handleRoomSubjectChangedPayload(const std::string &payload);
|
||||||
|
|
||||||
void send(const std::string &data);
|
void send(const std::string &data);
|
||||||
void sendPong();
|
void sendPong();
|
||||||
|
|
|
@ -374,6 +374,16 @@ void NetworkPlugin::handleConvMessagePayload(const std::string &data) {
|
||||||
handleMessageSendRequest(payload.username(), payload.buddyname(), payload.message(), payload.xhtml());
|
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) {
|
void NetworkPlugin::handleAttentionPayload(const std::string &data) {
|
||||||
pbnetwork::ConversationMessage payload;
|
pbnetwork::ConversationMessage payload;
|
||||||
if (payload.ParseFromString(data) == false) {
|
if (payload.ParseFromString(data) == false) {
|
||||||
|
@ -550,6 +560,9 @@ void NetworkPlugin::handleDataRead(std::string &data) {
|
||||||
case pbnetwork::WrapperMessage_Type_TYPE_CONV_MESSAGE:
|
case pbnetwork::WrapperMessage_Type_TYPE_CONV_MESSAGE:
|
||||||
handleConvMessagePayload(wrapper.payload());
|
handleConvMessagePayload(wrapper.payload());
|
||||||
break;
|
break;
|
||||||
|
case pbnetwork::WrapperMessage_Type_TYPE_ROOM_SUBJECT_CHANGED:
|
||||||
|
handleRoomSubjectChangedPayload(wrapper.payload());
|
||||||
|
break;
|
||||||
case pbnetwork::WrapperMessage_Type_TYPE_JOIN_ROOM:
|
case pbnetwork::WrapperMessage_Type_TYPE_JOIN_ROOM:
|
||||||
handleJoinRoomPayload(wrapper.payload());
|
handleJoinRoomPayload(wrapper.payload());
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -1302,6 +1302,22 @@ void NetworkPluginServer::handleMessageReceived(NetworkConversation *conv, boost
|
||||||
return;
|
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;
|
std::string xhtml;
|
||||||
boost::shared_ptr<Swift::XHTMLIMPayload> xhtmlPayload = msg->getPayload<Swift::XHTMLIMPayload>();
|
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(handleGroupchatMessages);
|
||||||
CPPUNIT_TEST(handleGroupchatMessagesTwoResources);
|
CPPUNIT_TEST(handleGroupchatMessagesTwoResources);
|
||||||
CPPUNIT_TEST(handleChatstateMessages);
|
CPPUNIT_TEST(handleChatstateMessages);
|
||||||
|
CPPUNIT_TEST(handleSubjectMessages);
|
||||||
CPPUNIT_TEST(handleParticipantChanged);
|
CPPUNIT_TEST(handleParticipantChanged);
|
||||||
CPPUNIT_TEST(handleParticipantChangedTwoResources);
|
CPPUNIT_TEST(handleParticipantChangedTwoResources);
|
||||||
CPPUNIT_TEST(handlePMFromXMPP);
|
CPPUNIT_TEST(handlePMFromXMPP);
|
||||||
|
@ -91,6 +92,38 @@ class ConversationManagerTest : public CPPUNIT_NS :: TestFixture, public BasicTe
|
||||||
received.clear();
|
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() {
|
void handleNormalMessages() {
|
||||||
User *user = userManager->getUser("user@localhost");
|
User *user = userManager->getUser("user@localhost");
|
||||||
|
|
||||||
|
|
|
@ -340,7 +340,7 @@ void UserManager::handleMessageReceived(Swift::Message::ref message) {
|
||||||
messageToBackendSent();
|
messageToBackendSent();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (message->getBody().empty() && !statePayload) {
|
if (message->getBody().empty() && !statePayload && message->getSubject().empty()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue