From 12a207a3a39380da6f0affd5b67adc7cfca993fd Mon Sep 17 00:00:00 2001 From: HanzZ Date: Sun, 11 Sep 2011 12:09:07 +0200 Subject: [PATCH] setUserOnline implemented in sqlite3/mysql backend --- include/transport/mysqlbackend.h | 1 + include/transport/sqlite3backend.h | 1 + src/mysqlbackend.cpp | 6 +++++- src/rostermanager.cpp | 8 ++++++++ src/sqlite3backend.cpp | 8 +++++++- 5 files changed, 22 insertions(+), 2 deletions(-) diff --git a/include/transport/mysqlbackend.h b/include/transport/mysqlbackend.h index c3ad94eb..04c00b7a 100644 --- a/include/transport/mysqlbackend.h +++ b/include/transport/mysqlbackend.h @@ -146,6 +146,7 @@ class MySQLBackend : public StorageBackend Statement *m_updateBuddySetting; Statement *m_getBuddies; Statement *m_getBuddiesSettings; + Statement *m_setUserOnline; }; } diff --git a/include/transport/sqlite3backend.h b/include/transport/sqlite3backend.h index 3aa40bc8..91275d69 100644 --- a/include/transport/sqlite3backend.h +++ b/include/transport/sqlite3backend.h @@ -114,6 +114,7 @@ class SQLite3Backend : public StorageBackend sqlite3_stmt *m_updateBuddySetting; sqlite3_stmt *m_getBuddies; sqlite3_stmt *m_getBuddiesSettings; + sqlite3_stmt *m_setUserOnline; }; } diff --git a/src/mysqlbackend.cpp b/src/mysqlbackend.cpp index fb425afc..0cfdd59a 100644 --- a/src/mysqlbackend.cpp +++ b/src/mysqlbackend.cpp @@ -275,6 +275,7 @@ MySQLBackend::~MySQLBackend(){ delete m_setUserSetting; delete m_updateUserSetting; delete m_updateBuddySetting; + delete m_setUserOnline; mysql_close(&m_conn); } @@ -313,6 +314,8 @@ bool MySQLBackend::connect() { m_setUserSetting = new Statement(&m_conn, "isis", "INSERT INTO " + m_prefix + "users_settings (user_id, var, type, value) VALUES (?,?,?,?)"); m_updateUserSetting = new Statement(&m_conn, "sis", "UPDATE " + m_prefix + "users_settings SET value=? WHERE user_id=? AND var=?"); + m_setUserOnline = new Statement(&m_conn, "bi", "UPDATE " + m_prefix + "users SET online=?, last_login=NOW() WHERE id=?"); + return true; } @@ -402,7 +405,8 @@ bool MySQLBackend::getUser(const std::string &barejid, UserInfo &user) { } void MySQLBackend::setUserOnline(long id, bool online) { - + *m_setUserOnline << online << id; + m_setUserOnline->execute(); } long MySQLBackend::addBuddy(long userId, const BuddyInfo &buddyInfo) { diff --git a/src/rostermanager.cpp b/src/rostermanager.cpp index 4cb51676..78161f70 100644 --- a/src/rostermanager.cpp +++ b/src/rostermanager.cpp @@ -491,6 +491,14 @@ void RosterManager::sendUnavailablePresences(const Swift::JID &to) { m_component->getStanzaChannel()->sendPresence(presence); } } + + // in gateway mode, we have to send unavailable presence for transport + // contact + Swift::Presence::ref response = Swift::Presence::create(); + response->setTo(to); + response->setFrom(m_component->getJID()); + response->setType(Swift::Presence::Unavailable); + m_component->getStanzaChannel()->sendPresence(response); } } diff --git a/src/sqlite3backend.cpp b/src/sqlite3backend.cpp index 602c6466..f79ce9fb 100644 --- a/src/sqlite3backend.cpp +++ b/src/sqlite3backend.cpp @@ -97,6 +97,7 @@ SQLite3Backend::~SQLite3Backend(){ FINALIZE_STMT(m_setUserSetting); FINALIZE_STMT(m_updateUserSetting); FINALIZE_STMT(m_updateBuddySetting); + FINALIZE_STMT(m_setUserOnline); sqlite3_close(m_db); } } @@ -129,6 +130,8 @@ bool SQLite3Backend::connect() { PREP_STMT(m_setUserSetting, "INSERT INTO " + m_prefix + "users_settings (user_id, var, type, value) VALUES (?,?,?,?)"); PREP_STMT(m_updateUserSetting, "UPDATE " + m_prefix + "users_settings SET value=? WHERE user_id=? AND var=?"); + PREP_STMT(m_setUserOnline, "UPDATE " + m_prefix + "users SET online=?, last_login=DATETIME('NOW') WHERE id=?"); + return true; } @@ -239,7 +242,10 @@ bool SQLite3Backend::getUser(const std::string &barejid, UserInfo &user) { } void SQLite3Backend::setUserOnline(long id, bool online) { - + BEGIN(m_setUserOnline); + BIND_INT(m_setUserOnline, (int)online); + BIND_INT(m_setUserOnline, id); + EXECUTE_STATEMENT(m_setUserOnline, "setUserOnline query"); } long SQLite3Backend::addBuddy(long userId, const BuddyInfo &buddyInfo) {