Spectrum can work without database now :)
This commit is contained in:
parent
3ec7beccda
commit
bb1a8e4c36
6 changed files with 39 additions and 19 deletions
|
@ -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();
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -14,5 +14,6 @@ protocol=prpl-jabber
|
|||
#protocol=prpl-icq
|
||||
|
||||
[database]
|
||||
type = sqlite3 # or "none" without database backend
|
||||
database = test.sql
|
||||
prefix=icq
|
||||
|
|
|
@ -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")
|
||||
;
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue