diff --git a/backends/twitter/TwitterPlugin.cpp b/backends/twitter/TwitterPlugin.cpp index 6d5c5e69..320da9de 100644 --- a/backends/twitter/TwitterPlugin.cpp +++ b/backends/twitter/TwitterPlugin.cpp @@ -348,7 +348,7 @@ void TwitterPlugin::pollForDirectMessages() std::set::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 **********************************/ diff --git a/backends/twitter/TwitterPlugin.h b/backends/twitter/TwitterPlugin.h index fee4b84d..9f4bd2c5 100644 --- a/backends/twitter/TwitterPlugin.h +++ b/backends/twitter/TwitterPlugin.h @@ -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}; diff --git a/include/Swiften/Network/DummyNetworkFactories.cpp b/include/Swiften/Network/DummyNetworkFactories.cpp index 9da055e3..28fbe5b0 100644 --- a/include/Swiften/Network/DummyNetworkFactories.cpp +++ b/include/Swiften/Network/DummyNetworkFactories.cpp @@ -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(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; diff --git a/include/Swiften/Network/DummyNetworkFactories.h b/include/Swiften/Network/DummyNetworkFactories.h index 64694e8a..2edc85b0 100644 --- a/include/Swiften/Network/DummyNetworkFactories.h +++ b/include/Swiften/Network/DummyNetworkFactories.h @@ -6,10 +6,17 @@ #pragma once +#include +//#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 #include +#if HAVE_SWIFTEN_3 #include #include +#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; +#endif DomainNameResolver* domainNameResolver; ConnectionServerFactory* connectionServerFactory; EventLoop *eventLoop;