initial support for private storage
This commit is contained in:
parent
a1eba9bedb
commit
c0a01941fc
5 changed files with 37 additions and 1 deletions
|
@ -84,6 +84,8 @@ class SQLite3Backend : public StorageBackend
|
|||
void updateBuddy(long userId, const BuddyInfo &buddyInfo);
|
||||
void removeBuddy(long id) {}
|
||||
|
||||
void getUserSetting(long userId, const std::string &variable, int &type, std::string &value);
|
||||
|
||||
void beginTransaction();
|
||||
void commitTransaction();
|
||||
|
||||
|
@ -97,6 +99,8 @@ class SQLite3Backend : public StorageBackend
|
|||
// statements
|
||||
sqlite3_stmt *m_setUser;
|
||||
sqlite3_stmt *m_getUser;
|
||||
sqlite3_stmt *m_getUserSetting;
|
||||
sqlite3_stmt *m_setUserSetting;
|
||||
sqlite3_stmt *m_removeUser;
|
||||
sqlite3_stmt *m_removeUserBuddies;
|
||||
sqlite3_stmt *m_removeUserSettings;
|
||||
|
|
|
@ -108,6 +108,8 @@ class StorageBackend
|
|||
virtual void updateBuddy(long userId, const BuddyInfo &buddyInfo) = 0;
|
||||
virtual void removeBuddy(long id) = 0;
|
||||
|
||||
virtual void getUserSetting(long userId, const std::string &variable, int &type, std::string &value) = 0;
|
||||
|
||||
virtual void beginTransaction() = 0;
|
||||
virtual void commitTransaction() = 0;
|
||||
|
||||
|
|
|
@ -29,6 +29,7 @@ namespace Transport {
|
|||
class User;
|
||||
class Component;
|
||||
class StorageBackend;
|
||||
class StorageResponder;
|
||||
|
||||
/// Manages online XMPP Users.
|
||||
|
||||
|
@ -80,6 +81,7 @@ class UserManager {
|
|||
std::map<std::string, User *> m_users;
|
||||
Component *m_component;
|
||||
StorageBackend *m_storageBackend;
|
||||
StorageResponder *m_storageResponder;
|
||||
};
|
||||
|
||||
}
|
||||
|
|
|
@ -85,6 +85,8 @@ SQLite3Backend::~SQLite3Backend(){
|
|||
FINALIZE_STMT(m_updateBuddy);
|
||||
FINALIZE_STMT(m_getBuddies);
|
||||
FINALIZE_STMT(m_getBuddiesSettings);
|
||||
FINALIZE_STMT(m_getUserSetting);
|
||||
FINALIZE_STMT(m_setUserSetting);
|
||||
sqlite3_close(m_db);
|
||||
}
|
||||
}
|
||||
|
@ -110,6 +112,8 @@ bool SQLite3Backend::connect() {
|
|||
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_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 (?,?,?,?)");
|
||||
|
||||
return true;
|
||||
}
|
||||
|
@ -157,7 +161,7 @@ bool SQLite3Backend::createDatabase() {
|
|||
" user_id int(10) NOT NULL,"
|
||||
" var varchar(50) NOT NULL,"
|
||||
" type int(4) NOT NULL,"
|
||||
" value varchar(255) NOT NULL,"
|
||||
" value varchar(4095) NOT NULL,"
|
||||
" PRIMARY KEY (user_id, var)"
|
||||
");");
|
||||
|
||||
|
@ -355,6 +359,24 @@ bool SQLite3Backend::removeUser(long id) {
|
|||
return true;
|
||||
}
|
||||
|
||||
void SQLite3Backend::getUserSetting(long id, const std::string &variable, int &type, std::string &value) {
|
||||
BEGIN(m_getUserSetting);
|
||||
BIND_INT(m_getUserSetting, id);
|
||||
BIND_STR(m_getUserSetting, variable);
|
||||
if(sqlite3_step(m_setUser) != SQLITE_ROW) {
|
||||
BEGIN(m_setUserSetting);
|
||||
BIND_INT(m_setUserSetting, id);
|
||||
BIND_STR(m_setUserSetting, variable);
|
||||
BIND_INT(m_setUserSetting, type);
|
||||
BIND_STR(m_setUserSetting, value);
|
||||
EXECUTE_STATEMENT(m_setUserSetting, "m_setUserSetting");
|
||||
}
|
||||
else {
|
||||
type = GET_INT(m_getUserSetting);
|
||||
value = GET_STR(m_getUserSetting);
|
||||
}
|
||||
}
|
||||
|
||||
void SQLite3Backend::beginTransaction() {
|
||||
exec("BEGIN TRANSACTION;");
|
||||
}
|
||||
|
|
|
@ -24,6 +24,7 @@
|
|||
#include "transport/storagebackend.h"
|
||||
#include "transport/conversationmanager.h"
|
||||
#include "transport/rostermanager.h"
|
||||
#include "storageresponder.h"
|
||||
|
||||
namespace Transport {
|
||||
|
||||
|
@ -33,6 +34,9 @@ UserManager::UserManager(Component *component, StorageBackend *storageBackend) {
|
|||
m_component = component;
|
||||
m_storageBackend = storageBackend;
|
||||
|
||||
m_storageResponder = new StorageResponder(component->getIQRouter(), m_storageBackend, this);
|
||||
m_storageResponder->start();
|
||||
|
||||
component->onUserPresenceReceived.connect(bind(&UserManager::handlePresence, this, _1));
|
||||
m_component->getStanzaChannel()->onMessageReceived.connect(bind(&UserManager::handleMessageReceived, this, _1));
|
||||
m_component->getStanzaChannel()->onPresenceReceived.connect(bind(&UserManager::handleGeneralPresenceReceived, this, _1));
|
||||
|
@ -40,6 +44,8 @@ UserManager::UserManager(Component *component, StorageBackend *storageBackend) {
|
|||
}
|
||||
|
||||
UserManager::~UserManager(){
|
||||
m_storageResponder->stop();
|
||||
delete m_storageResponder;
|
||||
}
|
||||
|
||||
void UserManager::addUser(User *user) {
|
||||
|
|
Loading…
Add table
Reference in a new issue