Move headline sending login to backend

This commit is contained in:
Jan Kaluza 2012-12-18 12:56:38 +01:00
parent 0b0e020cdf
commit 761c746d10
7 changed files with 45 additions and 16 deletions

View file

@ -652,22 +652,20 @@ void TwitterPlugin::displayFriendlist(std::string &user, std::vector<User> &frie
void TwitterPlugin::displayTweets(std::string &user, std::string &userRequested, std::vector<Status> &tweets , Error &errMsg) void TwitterPlugin::displayTweets(std::string &user, std::string &userRequested, std::vector<Status> &tweets , Error &errMsg)
{ {
if(errMsg.getMessage().length() == 0) { if(errMsg.getMessage().length() == 0) {
std::string timeline = "";
std::map<std::string, int> lastTweet; std::map<std::string, int> lastTweet;
std::map<std::string, int>::iterator it; std::map<std::string, int>::iterator it;
for(int i = tweets.size() - 1 ; i >= 0 ; i--) { for(int i = tweets.size() - 1 ; i >= 0 ; i--) {
if(userdb[user].twitterMode != CHATROOM) { if(userdb[user].twitterMode != CHATROOM) {
std::string m = " - " + tweets[i].getUserData().getScreenName() + ": " + tweets[i].getTweet() + " (MsgId: " + (tweets[i].getRetweetID().empty() ? tweets[i].getID() : tweets[i].getRetweetID()) + ")\n"; std::string m = " - " + tweets[i].getUserData().getScreenName() + ": " + tweets[i].getTweet() + " (MsgId: " + (tweets[i].getRetweetID().empty() ? tweets[i].getID() : tweets[i].getRetweetID()) + ")\n";
handleMessage(user, adminLegacyName, m, "", "", tweets[i].getCreationTime()); handleMessage(user, adminLegacyName, m, "", "", tweets[i].getCreationTime(), true);
std::string scrname = tweets[i].getUserData().getScreenName(); std::string scrname = tweets[i].getUserData().getScreenName();
if(lastTweet.count(scrname) == 0 || cmp(tweets[lastTweet[scrname]].getID(), tweets[i].getID()) <= 0) lastTweet[scrname] = i; if(lastTweet.count(scrname) == 0 || cmp(tweets[lastTweet[scrname]].getID(), tweets[i].getID()) <= 0) lastTweet[scrname] = i;
} else { } else {
handleMessage(user, userdb[user].twitterMode == CHATROOM ? adminChatRoom : adminLegacyName, handleMessage(user, userdb[user].twitterMode == CHATROOM ? adminChatRoom : adminLegacyName,
tweets[i].getTweet() + " (MsgId: " + (tweets[i].getRetweetID().empty() ? tweets[i].getID() : tweets[i].getRetweetID()) + ")", tweets[i].getUserData().getScreenName(), "", tweets[i].getCreationTime()); tweets[i].getTweet() + " (MsgId: " + (tweets[i].getRetweetID().empty() ? tweets[i].getID() : tweets[i].getRetweetID()) + ")", tweets[i].getUserData().getScreenName(), "", tweets[i].getCreationTime(), true);
} }
} }
@ -685,8 +683,6 @@ void TwitterPlugin::displayTweets(std::string &user, std::string &userRequested,
if(tweetID != tweets[0].getID()) updateLastTweetID(user, tweets[0].getID()); if(tweetID != tweets[0].getID()) updateLastTweetID(user, tweets[0].getID());
} }
if(timeline.length()) handleMessage(user, userdb[user].twitterMode == CHATROOM ? adminChatRoom : adminLegacyName,
timeline, userdb[user].twitterMode == CHATROOM ? adminNickName : "");
} else handleMessage(user, userdb[user].twitterMode == CHATROOM ? adminChatRoom : adminLegacyName, } else handleMessage(user, userdb[user].twitterMode == CHATROOM ? adminChatRoom : adminLegacyName,
errMsg.getMessage(), userdb[user].twitterMode == CHATROOM ? adminNickName : ""); errMsg.getMessage(), userdb[user].twitterMode == CHATROOM ? adminNickName : "");
} }

View file

@ -111,7 +111,7 @@ class NetworkPlugin {
/// \param message Plain text message. /// \param message Plain text message.
/// \param nickname Nickname of buddy in room. Empty if it's normal chat message. /// \param nickname Nickname of buddy in room. Empty if it's normal chat message.
/// \param xhtml XHTML message. /// \param xhtml XHTML message.
void handleMessage(const std::string &user, const std::string &legacyName, const std::string &message, const std::string &nickname = "", const std::string &xhtml = "", const std::string &timestamp = ""); void handleMessage(const std::string &user, const std::string &legacyName, const std::string &message, const std::string &nickname = "", const std::string &xhtml = "", const std::string &timestamp = "", bool headline = false);
/// Call this function when subject in room changed. /// Call this function when subject in room changed.
/// \param user XMPP JID of user for which this event occurs. You can get it from NetworkPlugin::handleLoginRequest(). (eg. "user%gmail.com@xmpp.domain.tld") /// \param user XMPP JID of user for which this event occurs. You can get it from NetworkPlugin::handleLoginRequest(). (eg. "user%gmail.com@xmpp.domain.tld")

View file

@ -82,7 +82,7 @@ void NetworkPlugin::sendConfig(const PluginConfig &cfg) {
send(message); send(message);
} }
void NetworkPlugin::handleMessage(const std::string &user, const std::string &legacyName, const std::string &msg, const std::string &nickname, const std::string &xhtml, const std::string &timestamp) { void NetworkPlugin::handleMessage(const std::string &user, const std::string &legacyName, const std::string &msg, const std::string &nickname, const std::string &xhtml, const std::string &timestamp, bool headline) {
pbnetwork::ConversationMessage m; pbnetwork::ConversationMessage m;
m.set_username(user); m.set_username(user);
m.set_buddyname(legacyName); m.set_buddyname(legacyName);
@ -90,6 +90,7 @@ void NetworkPlugin::handleMessage(const std::string &user, const std::string &le
m.set_nickname(nickname); m.set_nickname(nickname);
m.set_xhtml(xhtml); m.set_xhtml(xhtml);
m.set_timestamp(timestamp); m.set_timestamp(timestamp);
m.set_headline(headline);
std::string message; std::string message;
m.SerializeToString(&message); m.SerializeToString(&message);

View file

@ -82,15 +82,15 @@ void Conversation::handleMessage(boost::shared_ptr<Swift::Message> &message, con
message->setType(Swift::Message::Groupchat); message->setType(Swift::Message::Groupchat);
} }
else { else {
if (message->getType() != Swift::Message::Headline) { if (message->getType() == Swift::Message::Headline) {
if (m_conversationManager->getUser()->getUserSetting("send_headlines") == "1") { if (m_conversationManager->getUser()->getUserSetting("send_headlines") != "1") {
message->setType(Swift::Message::Headline); message->setType(Swift::Message::Chat);
}
} }
else { else {
message->setType(Swift::Message::Chat); message->setType(Swift::Message::Chat);
} }
} }
}
std::string n = nickname; std::string n = nickname;
if (n.empty() && !m_room.empty() && !m_muc) { if (n.empty() && !m_room.empty() && !m_muc) {

View file

@ -43,7 +43,7 @@ SettingsAdHocCommand::SettingsAdHocCommand(Component *component, UserManager *us
field = Swift::BooleanFormField::create(CONFIG_STRING_DEFAULTED(component->getConfig(), "settings.send_headlines", "0") == "1"); field = Swift::BooleanFormField::create(CONFIG_STRING_DEFAULTED(component->getConfig(), "settings.send_headlines", "0") == "1");
field->setName("send_headlines"); field->setName("send_headlines");
field->setLabel("Send messages as headlines"); field->setLabel("Allow sending messages as headlines");
addFormField(field); addFormField(field);
} }

View file

@ -215,6 +215,7 @@ class ConversationManagerTest : public CPPUNIT_NS :: TestFixture, public BasicTe
boost::shared_ptr<Swift::Message> msg(new Swift::Message()); boost::shared_ptr<Swift::Message> msg(new Swift::Message());
msg->setBody("hi there<>!"); msg->setBody("hi there<>!");
msg->setType(Swift::Message::Headline);
// Forward it // Forward it
conv->handleMessage(msg); conv->handleMessage(msg);
@ -229,19 +230,20 @@ class ConversationManagerTest : public CPPUNIT_NS :: TestFixture, public BasicTe
received.clear(); received.clear();
user->addUserSetting("send_headlines", "0"); user->addUserSetting("send_headlines", "0");
// Forward it - Conversation should keep the Headline type, because msg->getType() is Headline // Forward it
conv->handleMessage(msg); conv->handleMessage(msg);
loop->processEvents(); loop->processEvents();
CPPUNIT_ASSERT_EQUAL(1, (int) received.size()); CPPUNIT_ASSERT_EQUAL(1, (int) received.size());
CPPUNIT_ASSERT(dynamic_cast<Swift::Message *>(getStanza(received[0]))); CPPUNIT_ASSERT(dynamic_cast<Swift::Message *>(getStanza(received[0])));
CPPUNIT_ASSERT_EQUAL(Swift::Message::Headline, dynamic_cast<Swift::Message *>(getStanza(received[0]))->getType()); CPPUNIT_ASSERT_EQUAL(Swift::Message::Chat, dynamic_cast<Swift::Message *>(getStanza(received[0]))->getType());
CPPUNIT_ASSERT_EQUAL(std::string("hi there<>!"), dynamic_cast<Swift::Message *>(getStanza(received[0]))->getBody()); CPPUNIT_ASSERT_EQUAL(std::string("hi there<>!"), dynamic_cast<Swift::Message *>(getStanza(received[0]))->getBody());
CPPUNIT_ASSERT_EQUAL(std::string("user@localhost"), dynamic_cast<Swift::Message *>(getStanza(received[0]))->getTo().toString()); CPPUNIT_ASSERT_EQUAL(std::string("user@localhost"), dynamic_cast<Swift::Message *>(getStanza(received[0]))->getTo().toString());
CPPUNIT_ASSERT_EQUAL(std::string("buddy1\\40test@localhost/bot"), dynamic_cast<Swift::Message *>(getStanza(received[0]))->getFrom().toString()); CPPUNIT_ASSERT_EQUAL(std::string("buddy1\\40test@localhost/bot"), dynamic_cast<Swift::Message *>(getStanza(received[0]))->getFrom().toString());
received.clear(); received.clear();
msg->setType(Swift::Message::Chat); msg->setType(Swift::Message::Chat);
user->addUserSetting("send_headlines", "1");
// Forward it // Forward it
conv->handleMessage(msg); conv->handleMessage(msg);
loop->processEvents(); loop->processEvents();

View file

@ -30,6 +30,7 @@ class NetworkPluginServerTest : public CPPUNIT_NS :: TestFixture, public BasicTe
CPPUNIT_TEST(handleBuddyChangedPayload); CPPUNIT_TEST(handleBuddyChangedPayload);
CPPUNIT_TEST(handleBuddyChangedPayloadNoEscaping); CPPUNIT_TEST(handleBuddyChangedPayloadNoEscaping);
CPPUNIT_TEST(handleBuddyChangedPayloadUserContactInRoster); CPPUNIT_TEST(handleBuddyChangedPayloadUserContactInRoster);
CPPUNIT_TEST(handleMessageHeadline);
CPPUNIT_TEST_SUITE_END(); CPPUNIT_TEST_SUITE_END();
public: public:
@ -104,6 +105,35 @@ class NetworkPluginServerTest : public CPPUNIT_NS :: TestFixture, public BasicTe
serv->handleBuddyChangedPayload(message); serv->handleBuddyChangedPayload(message);
CPPUNIT_ASSERT_EQUAL(0, (int) received.size()); CPPUNIT_ASSERT_EQUAL(0, (int) received.size());
} }
void handleMessageHeadline() {
User *user = userManager->getUser("user@localhost");
pbnetwork::ConversationMessage m;
m.set_username("user@localhost");
m.set_buddyname("user");
m.set_message("msg");
m.set_nickname("");
m.set_xhtml("");
m.set_timestamp("");
m.set_headline(true);
std::string message;
m.SerializeToString(&message);
serv->handleConvMessagePayload(message, false);
CPPUNIT_ASSERT_EQUAL(1, (int) received.size());
CPPUNIT_ASSERT(dynamic_cast<Swift::Message *>(getStanza(received[0])));
CPPUNIT_ASSERT_EQUAL(Swift::Message::Chat, dynamic_cast<Swift::Message *>(getStanza(received[0]))->getType());
received.clear();
user->addUserSetting("send_headlines", "1");
serv->handleConvMessagePayload(message, false);
CPPUNIT_ASSERT_EQUAL(1, (int) received.size());
CPPUNIT_ASSERT(dynamic_cast<Swift::Message *>(getStanza(received[0])));
CPPUNIT_ASSERT_EQUAL(Swift::Message::Headline, dynamic_cast<Swift::Message *>(getStanza(received[0]))->getType());
}
}; };
CPPUNIT_TEST_SUITE_REGISTRATION (NetworkPluginServerTest); CPPUNIT_TEST_SUITE_REGISTRATION (NetworkPluginServerTest);