Changeset - c0a01941fc10
[Not reviewed]
0 5 0
HanzZ - 14 years ago 2011-05-19 17:53:31
hanzz.k@gmail.com
initial support for private storage
5 files changed with 37 insertions and 1 deletions:
0 comments (0 inline, 0 general)
include/transport/sqlite3backend.h
Show inline comments
 
@@ -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;
include/transport/storagebackend.h
Show inline comments
 
@@ -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;
 

	
include/transport/usermanager.h
Show inline comments
 
@@ -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;
 
};
 

	
 
}
src/sqlite3backend.cpp
Show inline comments
 
@@ -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;");
 
}
src/usermanager.cpp
Show inline comments
 
@@ -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) {
0 comments (0 inline, 0 general)