From 57add5900f1e26fd577d46f6c9895fa9f3c10e70 Mon Sep 17 00:00:00 2001 From: HanzZ Date: Mon, 4 Jun 2012 19:51:38 +0200 Subject: [PATCH 1/2] Remove useless old debug message --- src/networkpluginserver.cpp | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/networkpluginserver.cpp b/src/networkpluginserver.cpp index fdd68e68..d9221a51 100644 --- a/src/networkpluginserver.cpp +++ b/src/networkpluginserver.cpp @@ -204,7 +204,6 @@ static void handleBuddyPayload(LocalBuddy *buddy, const pbnetwork::Buddy &payloa // Set alias only if it's not empty. Backends are allowed to send empty alias if it has // not changed. if (!payload.alias().empty()) { - LOG4CXX_INFO(logger, "Setting alias to " << payload.alias() << " " << buddy->getAlias()); buddy->setAlias(payload.alias()); } @@ -509,8 +508,6 @@ void NetworkPluginServer::handleBuddyChangedPayload(const std::string &data) { if (!user) return; - LOG4CXX_INFO(logger, "HANDLE BUDDY CHANGED " << payload.buddyname() << "-" << payload.alias()); - LocalBuddy *buddy = (LocalBuddy *) user->getRosterManager()->getBuddy(payload.buddyname()); if (buddy) { handleBuddyPayload(buddy, payload); From 9cb2171e009570a84a94b1eb913d024e25b0c328 Mon Sep 17 00:00:00 2001 From: HanzZ Date: Fri, 20 Jul 2012 13:46:28 +0200 Subject: [PATCH 2/2] Added updateBuddySetting, removeBuddySetting and removeBuddy implementation for SQLite --- backends/libpurple/main.cpp | 2 -- backends/libyahoo2/main.cpp | 1 + include/transport/mysqlbackend.h | 3 ++ include/transport/pqxxbackend.h | 3 ++ include/transport/rosterstorage.h | 2 ++ include/transport/sqlite3backend.h | 8 ++++- include/transport/storagebackend.h | 3 ++ src/rostermanager.cpp | 3 ++ src/rosterstorage.cpp | 6 ++++ src/sqlite3backend.cpp | 48 ++++++++++++++++++++++++++++++ 10 files changed, 76 insertions(+), 3 deletions(-) diff --git a/backends/libpurple/main.cpp b/backends/libpurple/main.cpp index e06fdb2b..fc2a3049 100644 --- a/backends/libpurple/main.cpp +++ b/backends/libpurple/main.cpp @@ -390,8 +390,6 @@ class SpectrumNetworkPlugin : public NetworkPlugin { purple_account_disconnect(account); purple_account_set_enabled(account, "spectrum", FALSE); - g_free(account->ui_data); - account->ui_data = NULL; m_accounts.erase(account); purple_accounts_delete(account); diff --git a/backends/libyahoo2/main.cpp b/backends/libyahoo2/main.cpp index c6e2c6b4..eda158b0 100644 --- a/backends/libyahoo2/main.cpp +++ b/backends/libyahoo2/main.cpp @@ -16,6 +16,7 @@ // Swiften #include "Swiften/Swiften.h" +#include "Swiften/Network/TLSConnectionFactory.h" #include "Swiften/TLS/OpenSSL/OpenSSLContextFactory.h" // for signal handler diff --git a/include/transport/mysqlbackend.h b/include/transport/mysqlbackend.h index 47c8757b..7b1de13b 100644 --- a/include/transport/mysqlbackend.h +++ b/include/transport/mysqlbackend.h @@ -89,6 +89,9 @@ class MySQLBackend : public StorageBackend void updateBuddy(long userId, const BuddyInfo &buddyInfo); void removeBuddy(long id) {} + void getBuddySetting(long userId, long buddyId, const std::string &variable, int &type, std::string &value) {} + void updateBuddySetting(long userId, long buddyId, const std::string &variable, int type, const std::string &value) {} + void getUserSetting(long userId, const std::string &variable, int &type, std::string &value); void updateUserSetting(long userId, const std::string &variable, const std::string &value); diff --git a/include/transport/pqxxbackend.h b/include/transport/pqxxbackend.h index f571433b..bf5abf25 100644 --- a/include/transport/pqxxbackend.h +++ b/include/transport/pqxxbackend.h @@ -89,6 +89,9 @@ class PQXXBackend : public StorageBackend void updateBuddy(long userId, const BuddyInfo &buddyInfo); void removeBuddy(long id) {} + void getBuddySetting(long userId, long buddyId, const std::string &variable, int &type, std::string &value) {} + void updateBuddySetting(long userId, long buddyId, const std::string &variable, int type, const std::string &value) {} + void getUserSetting(long userId, const std::string &variable, int &type, std::string &value); void updateUserSetting(long userId, const std::string &variable, const std::string &value); diff --git a/include/transport/rosterstorage.h b/include/transport/rosterstorage.h index bd5cc7db..726425c4 100644 --- a/include/transport/rosterstorage.h +++ b/include/transport/rosterstorage.h @@ -40,6 +40,8 @@ class RosterStorage { // will happen if buddy is already added. void storeBuddy(Buddy *buddy); + void removeBuddy(Buddy *buddy); + // Store all buddies from queue immediately. Returns true // if some buddies were stored. bool storeBuddies(); diff --git a/include/transport/sqlite3backend.h b/include/transport/sqlite3backend.h index 5d7372bf..d654ffa6 100644 --- a/include/transport/sqlite3backend.h +++ b/include/transport/sqlite3backend.h @@ -86,7 +86,10 @@ class SQLite3Backend : public StorageBackend long addBuddy(long userId, const BuddyInfo &buddyInfo); void updateBuddy(long userId, const BuddyInfo &buddyInfo); - void removeBuddy(long id) {} + void removeBuddy(long id); + + void getBuddySetting(long userId, long buddyId, const std::string &variable, int &type, std::string &value); + void updateBuddySetting(long userId, long buddyId, const std::string &variable, int type, const std::string &value); void getUserSetting(long userId, const std::string &variable, int &type, std::string &value); void updateUserSetting(long userId, const std::string &variable, const std::string &value); @@ -111,9 +114,12 @@ class SQLite3Backend : public StorageBackend sqlite3_stmt *m_removeUserBuddies; sqlite3_stmt *m_removeUserSettings; sqlite3_stmt *m_removeUserBuddiesSettings; + sqlite3_stmt *m_removeBuddy; + sqlite3_stmt *m_removeBuddySettings; sqlite3_stmt *m_addBuddy; sqlite3_stmt *m_updateBuddy; sqlite3_stmt *m_updateBuddySetting; + sqlite3_stmt *m_getBuddySetting; sqlite3_stmt *m_getBuddies; sqlite3_stmt *m_getBuddiesSettings; sqlite3_stmt *m_setUserOnline; diff --git a/include/transport/storagebackend.h b/include/transport/storagebackend.h index f0a13df5..52890104 100644 --- a/include/transport/storagebackend.h +++ b/include/transport/storagebackend.h @@ -119,6 +119,9 @@ class StorageBackend virtual void updateBuddy(long userId, const BuddyInfo &buddyInfo) = 0; virtual void removeBuddy(long id) = 0; + virtual void getBuddySetting(long userId, long buddyId, const std::string &variable, int &type, std::string &value) = 0; + virtual void updateBuddySetting(long userId, long buddyId, const std::string &variable, int type, const std::string &value) = 0; + virtual void getUserSetting(long userId, const std::string &variable, int &type, std::string &value) = 0; virtual void updateUserSetting(long userId, const std::string &variable, const std::string &value) = 0; diff --git a/src/rostermanager.cpp b/src/rostermanager.cpp index e2b3d01e..0f89cfb1 100644 --- a/src/rostermanager.cpp +++ b/src/rostermanager.cpp @@ -113,6 +113,9 @@ void RosterManager::removeBuddy(const std::string &name) { sendBuddyUnsubscribePresence(buddy); } + if (m_rosterStorage) + m_rosterStorage->removeBuddy(buddy); + unsetBuddy(buddy); delete buddy; } diff --git a/src/rosterstorage.cpp b/src/rosterstorage.cpp index 8716245b..0d04f158 100644 --- a/src/rosterstorage.cpp +++ b/src/rosterstorage.cpp @@ -85,6 +85,12 @@ RosterStorage::~RosterStorage() { m_storageTimer->stop(); } +void RosterStorage::removeBuddy(Buddy *buddy) { + if (buddy->getID() != -1) { + m_storageBackend->removeBuddy(buddy->getID()); + } +} + void RosterStorage::storeBuddy(Buddy *buddy) { if (!buddy) { return; diff --git a/src/sqlite3backend.cpp b/src/sqlite3backend.cpp index a079c90b..3de7371b 100644 --- a/src/sqlite3backend.cpp +++ b/src/sqlite3backend.cpp @@ -88,6 +88,8 @@ SQLite3Backend::~SQLite3Backend(){ FINALIZE_STMT(m_removeUserBuddies); FINALIZE_STMT(m_removeUserSettings); FINALIZE_STMT(m_removeUserBuddiesSettings); + FINALIZE_STMT(m_removeBuddy); + FINALIZE_STMT(m_removeBuddySettings); FINALIZE_STMT(m_addBuddy); FINALIZE_STMT(m_updateBuddy); FINALIZE_STMT(m_getBuddies); @@ -96,6 +98,7 @@ SQLite3Backend::~SQLite3Backend(){ FINALIZE_STMT(m_setUserSetting); FINALIZE_STMT(m_updateUserSetting); FINALIZE_STMT(m_updateBuddySetting); + FINALIZE_STMT(m_getBuddySetting); FINALIZE_STMT(m_setUserOnline); FINALIZE_STMT(m_getOnlineUsers); sqlite3_close(m_db); @@ -122,11 +125,15 @@ bool SQLite3Backend::connect() { PREP_STMT(m_removeUserSettings, "DELETE FROM " + m_prefix + "users_settings WHERE user_id=?"); PREP_STMT(m_removeUserBuddiesSettings, "DELETE FROM " + m_prefix + "buddies_settings WHERE user_id=?"); + PREP_STMT(m_removeBuddy, "DELETE FROM " + m_prefix + "buddies WHERE id=?"); + PREP_STMT(m_removeBuddySettings, "DELETE FROM " + m_prefix + "buddies_settings WHERE buddy_id=?"); + PREP_STMT(m_addBuddy, "INSERT INTO " + m_prefix + "buddies (user_id, uin, subscription, groups, nickname, flags) VALUES (?, ?, ?, ?, ?, ?)"); PREP_STMT(m_updateBuddy, "UPDATE " + m_prefix + "buddies SET groups=?, nickname=?, flags=?, subscription=? WHERE user_id=? AND uin=?"); PREP_STMT(m_getBuddies, "SELECT id, uin, subscription, nickname, groups, flags FROM " + m_prefix + "buddies WHERE user_id=? ORDER BY id ASC"); PREP_STMT(m_getBuddiesSettings, "SELECT buddy_id, type, var, value FROM " + m_prefix + "buddies_settings WHERE user_id=? ORDER BY buddy_id ASC"); PREP_STMT(m_updateBuddySetting, "INSERT OR REPLACE INTO " + m_prefix + "buddies_settings (user_id, buddy_id, var, type, value) VALUES (?, ?, ?, ?, ?)"); + PREP_STMT(m_getBuddySetting, "SELECT type, value FROM " + m_prefix + "buddies_settings WHERE user_id=? AND buddy_id=? AND var=?"); PREP_STMT(m_getUserSetting, "SELECT type, value FROM " + m_prefix + "users_settings WHERE user_id=? AND var=?"); PREP_STMT(m_setUserSetting, "INSERT INTO " + m_prefix + "users_settings (user_id, var, type, value) VALUES (?,?,?,?)"); @@ -405,6 +412,22 @@ bool SQLite3Backend::getBuddies(long id, std::list &roster) { return true; } +void SQLite3Backend::removeBuddy(long id) { + sqlite3_reset(m_removeBuddy); + sqlite3_bind_int(m_removeBuddy, 1, id); + if(sqlite3_step(m_removeBuddy) != SQLITE_DONE) { + LOG4CXX_ERROR(logger, "removeBuddy query"<< (sqlite3_errmsg(m_db) == NULL ? "" : sqlite3_errmsg(m_db))); + return; + } + + sqlite3_reset(m_removeBuddySettings); + sqlite3_bind_int(m_removeBuddySettings, 1, id); + if(sqlite3_step(m_removeBuddySettings) != SQLITE_DONE) { + LOG4CXX_ERROR(logger, "removeBuddySettings query"<< (sqlite3_errmsg(m_db) == NULL ? "" : sqlite3_errmsg(m_db))); + return; + } +} + bool SQLite3Backend::removeUser(long id) { sqlite3_reset(m_removeUser); sqlite3_bind_int(m_removeUser, 1, id); @@ -467,6 +490,31 @@ void SQLite3Backend::updateUserSetting(long id, const std::string &variable, con EXECUTE_STATEMENT(m_updateUserSetting, "m_updateUserSetting"); } +void SQLite3Backend::getBuddySetting(long userId, long buddyId, const std::string &variable, int &type, std::string &value) { + BEGIN(m_getBuddySetting); + BIND_INT(m_getBuddySetting, userId); + BIND_INT(m_getBuddySetting, buddyId); + BIND_STR(m_getBuddySetting, variable); + if(sqlite3_step(m_getBuddySetting) == SQLITE_ROW) { + type = GET_INT(m_getBuddySetting); + value = GET_STR(m_getBuddySetting); + } + + int ret; + while((ret = sqlite3_step(m_getBuddySetting)) == SQLITE_ROW) { + } +} + +void SQLite3Backend::updateBuddySetting(long userId, long buddyId, const std::string &variable, int type, const std::string &value) { + BEGIN(m_updateBuddySetting); + BIND_INT(m_updateBuddySetting, userId); + BIND_INT(m_updateBuddySetting, buddyId); + BIND_STR(m_updateBuddySetting, variable); + BIND_INT(m_updateBuddySetting, type); + BIND_STR(m_updateBuddySetting, value); + EXECUTE_STATEMENT(m_updateBuddySetting, "m_updateBuddySetting"); +} + void SQLite3Backend::beginTransaction() { exec("BEGIN TRANSACTION;"); }