This commit is contained in:
Vitaly Takmazov 2013-05-28 18:48:29 +04:00
commit 10cef3dd09
4 changed files with 43 additions and 4 deletions

View file

@ -348,7 +348,7 @@ void TwitterPlugin::pollForDirectMessages()
std::set<std::string>::iterator it = onlineUsers.begin();
while(it != onlineUsers.end()) {
std::string user = *it;
tp->runAsThread(new DirectMessageRequest(userdb[user].sessions, user, "", userdb[user].mostRecentDirectMessageID,
tp->runAsThread(new DirectMessageRequest(userdb[user].sessions, user, "", getMostRecentDMIDUnsafe(user),
boost::bind(&TwitterPlugin::directMessageResponse, this, _1, _2, _3, _4)));
it++;
}
@ -569,14 +569,37 @@ void TwitterPlugin::updateLastDMID(const std::string user, const std::string ID)
{
boost::mutex::scoped_lock lock(userlock);
userdb[user].mostRecentDirectMessageID = ID;
UserInfo info;
if(storagebackend->getUser(user, info) == false) {
LOG4CXX_ERROR(logger, "Didn't find entry for " << user << " in the database!")
return;
}
storagebackend->updateUserSetting((long)info.id, "twitter_last_dm", ID);
}
std::string TwitterPlugin::getMostRecentDMIDUnsafe(const std::string user) {
std::string ID = "";
if(onlineUsers.count(user)) {
ID = userdb[user].mostRecentDirectMessageID;
if (ID.empty()) {
int type;
UserInfo info;
if(storagebackend->getUser(user, info) == false) {
LOG4CXX_ERROR(logger, "Didn't find entry for " << user << " in the database!")
}
else {
storagebackend->getUserSetting(info.id, "twitter_last_dm", type, ID);
}
}
}
}
std::string TwitterPlugin::getMostRecentDMID(const std::string user)
{
boost::mutex::scoped_lock lock(userlock);
std::string ID = "";
if(onlineUsers.count(user)) ID = userdb[user].mostRecentDirectMessageID;
return ID;
return getMostRecentDMIDUnsafe(user);
}
/************************************** Twitter response functions **********************************/

View file

@ -136,6 +136,7 @@ class TwitterPlugin : public NetworkPlugin {
private:
std::string getMostRecentTweetIDUnsafe(const std::string user);
std::string getMostRecentDMIDUnsafe(const std::string user);
enum status {NEW, WAITING_FOR_PIN, CONNECTED, DISCONNECTED};
enum mode {SINGLECONTACT, MULTIPLECONTACT, CHATROOM};

View file

@ -15,8 +15,12 @@ namespace Swift {
DummyNetworkFactories::DummyNetworkFactories(EventLoop* eventLoop) {
timerFactory = new DummyTimerFactory();
connectionFactory = new DummyConnectionFactory(eventLoop);
#if HAVE_SWIFTEN_3
idnConverter = boost::shared_ptr<IDNConverter>(PlatformIDNConverter::create());
domainNameResolver = new PlatformDomainNameResolver(idnConverter.get(), eventLoop);
#else
domainNameResolver = new PlatformDomainNameResolver(eventLoop);
#endif
connectionServerFactory = new DummyConnectionServerFactory(eventLoop);
m_platformXMLParserFactory = new PlatformXMLParserFactory();
this->eventLoop = eventLoop;

View file

@ -6,10 +6,17 @@
#pragma once
#include <Swiften/Version.h>
//#define HAVE_SWIFTEN_3 SWIFTEN_VERSION >= 0x030000
// Swiften 3 was not released yet and these changes are not in 3.0alpha
#define HAVE_SWIFTEN_3 0
#include <Swiften/Network/NetworkFactories.h>
#include <Swiften/Parser/PlatformXMLParserFactory.h>
#if HAVE_SWIFTEN_3
#include <Swiften/IDN/IDNConverter.h>
#include <Swiften/IDN/PlatformIDNConverter.h>
#endif
namespace Swift {
class EventLoop;
@ -27,9 +34,11 @@ namespace Swift {
return connectionFactory;
}
#if HAVE_SWIFTEN_3
IDNConverter* getIDNConverter() const {
return idnConverter.get();
}
#endif
DomainNameResolver* getDomainNameResolver() const {
return domainNameResolver;
@ -63,7 +72,9 @@ namespace Swift {
PlatformXMLParserFactory *m_platformXMLParserFactory;
TimerFactory* timerFactory;
ConnectionFactory* connectionFactory;
#if HAVE_SWIFTEN_3
boost::shared_ptr<IDNConverter> idnConverter;
#endif
DomainNameResolver* domainNameResolver;
ConnectionServerFactory* connectionServerFactory;
EventLoop *eventLoop;