Spectrum can work without database now :)

This commit is contained in:
HanzZ 2011-06-13 23:31:06 +02:00
parent 3ec7beccda
commit bb1a8e4c36
6 changed files with 39 additions and 19 deletions

View file

@ -41,7 +41,7 @@ class UserManager {
/// Creates new UserManager.
/// \param component Component which's presence will be handled
/// \param storageBackend Storage backend used to fetch UserInfos
UserManager(Component *component, StorageBackend *storageBackend);
UserManager(Component *component, StorageBackend *storageBackend = NULL);
/// Destroys UserManager.
~UserManager();

View file

@ -55,15 +55,21 @@ int main(int argc, char **argv)
Component transport(&eventLoop, &config, NULL);
Logger logger(&transport);
SQLite3Backend sql(&config);
logger.setStorageBackend(&sql);
if (!sql.connect()) {
std::cerr << "Can't connect to database.\n";
StorageBackend *storageBackend = NULL;
if (CONFIG_STRING(&config, "database.type") == "sqlite3") {
storageBackend = new SQLite3Backend(&config);
logger.setStorageBackend(storageBackend);
if (!storageBackend->connect()) {
std::cerr << "Can't connect to database.\n";
}
}
UserManager userManager(&transport, &sql);
UserRegistration userRegistration(&transport, &userManager, &sql);
logger.setUserRegistration(&userRegistration);
UserManager userManager(&transport, storageBackend);
if (storageBackend) {
UserRegistration userRegistration(&transport, &userManager, storageBackend);
logger.setUserRegistration(&userRegistration);
}
logger.setUserManager(&userManager);
NetworkPluginServer plugin(&transport, &config, &userManager);

View file

@ -14,5 +14,6 @@ protocol=prpl-jabber
#protocol=prpl-icq
[database]
type = sqlite3 # or "none" without database backend
database = test.sql
prefix=icq

View file

@ -48,6 +48,7 @@ bool Config::load(const std::string &configfile, boost::program_options::options
("registration.username_field", value<std::string>()->default_value(""), "Label for username field")
("registration.username_mask", value<std::string>()->default_value(""), "Username mask")
("registration.encoding", value<std::string>()->default_value("en"), "Default encoding in registration form")
("database.type", value<std::string>()->default_value("none"), "Database type.")
("database.database", value<std::string>()->default_value(""), "Database used to store data")
("database.prefix", value<std::string>()->default_value(""), "Prefix of tables in database")
;

View file

@ -161,7 +161,7 @@ void RosterManager::handleSubscription(Swift::Presence::ref presence) {
}
void RosterManager::setStorageBackend(StorageBackend *storageBackend) {
if (m_rosterStorage) {
if (m_rosterStorage || !storageBackend) {
return;
}
m_rosterStorage = new RosterStorage(m_user, storageBackend);

View file

@ -33,9 +33,12 @@ UserManager::UserManager(Component *component, StorageBackend *storageBackend) {
m_onlineBuddies = 0;
m_component = component;
m_storageBackend = storageBackend;
m_storageResponder = NULL;
m_storageResponder = new StorageResponder(component->getIQRouter(), m_storageBackend, this);
m_storageResponder->start();
if (m_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));
@ -44,8 +47,10 @@ UserManager::UserManager(Component *component, StorageBackend *storageBackend) {
}
UserManager::~UserManager(){
m_storageResponder->stop();
delete m_storageResponder;
if (m_storageResponder) {
m_storageResponder->stop();
delete m_storageResponder;
}
}
void UserManager::addUser(User *user) {
@ -93,15 +98,17 @@ void UserManager::handlePresence(Swift::Presence::ref presence) {
m_component->getStanzaChannel()->sendPresence(response);
UserInfo res;
bool registered = m_storageBackend->getUser(userkey, res);
if (registered) {
m_storageBackend->setUserOnline(res.id, false);
if (m_storageBackend) {
bool registered = m_storageBackend->getUser(userkey, res);
if (registered) {
m_storageBackend->setUserOnline(res.id, false);
}
}
return;
}
UserInfo res;
bool registered = m_storageBackend->getUser(userkey, res);
bool registered = m_storageBackend ? m_storageBackend->getUser(userkey, res) : false;
if (m_component->inServerMode()) {
if (!registered) {
@ -111,8 +118,13 @@ void UserManager::handlePresence(Swift::Presence::ref presence) {
if (res.uin.find_last_of("%") != std::string::npos) {
res.uin.replace(res.uin.find_last_of("%"), 1, "@");
}
m_storageBackend->setUser(res);
registered = m_storageBackend->getUser(userkey, res);
if (m_storageBackend) {
m_storageBackend->setUser(res);
registered = m_storageBackend->getUser(userkey, res);
}
else {
registered = true;
}
}
res.password = m_component->getUserRegistryPassword(userkey);
}