Store icon_hask into databa => working avatars
This commit is contained in:
parent
877d783276
commit
96fb9b61e8
7 changed files with 84 additions and 29 deletions
|
@ -238,29 +238,41 @@ static void buddyListNewNode(PurpleBlistNode *node) {
|
|||
np->handleBuddyChanged(np->m_accounts[account], purple_buddy_get_name(buddy), getAlias(buddy), getGroups(buddy)[0], (int) status.getType(), message, getIconHash(buddy));
|
||||
}
|
||||
|
||||
static void buddyStatusChanged(PurpleBuddy *buddy, PurpleStatus *status_, PurpleStatus *old_status) {
|
||||
// static void buddyStatusChanged(PurpleBuddy *buddy, PurpleStatus *status_, PurpleStatus *old_status) {
|
||||
// PurpleAccount *account = purple_buddy_get_account(buddy);
|
||||
//
|
||||
// Swift::StatusShow status;
|
||||
// std::string message;
|
||||
// getStatus(buddy, status, message);
|
||||
//
|
||||
// np->handleBuddyChanged(np->m_accounts[account], purple_buddy_get_name(buddy), getAlias(buddy), getGroups(buddy)[0], (int) status.getType(), message, getIconHash(buddy));
|
||||
// }
|
||||
//
|
||||
// static void buddySignedOn(PurpleBuddy *buddy) {
|
||||
// PurpleAccount *account = purple_buddy_get_account(buddy);
|
||||
//
|
||||
// Swift::StatusShow status;
|
||||
// std::string message;
|
||||
// getStatus(buddy, status, message);
|
||||
//
|
||||
// np->handleBuddyChanged(np->m_accounts[account], purple_buddy_get_name(buddy), getAlias(buddy), getGroups(buddy)[0], (int) status.getType(), message, getIconHash(buddy));
|
||||
// }
|
||||
//
|
||||
// static void buddySignedOff(PurpleBuddy *buddy) {
|
||||
// PurpleAccount *account = purple_buddy_get_account(buddy);
|
||||
//
|
||||
// Swift::StatusShow status;
|
||||
// std::string message;
|
||||
// getStatus(buddy, status, message);
|
||||
//
|
||||
// np->handleBuddyChanged(np->m_accounts[account], purple_buddy_get_name(buddy), getAlias(buddy), getGroups(buddy)[0], (int) status.getType(), message, getIconHash(buddy));
|
||||
// }
|
||||
|
||||
void buddyListUpdate(PurpleBuddyList *list, PurpleBlistNode *node) {
|
||||
if (!PURPLE_BLIST_NODE_IS_BUDDY(node))
|
||||
return;
|
||||
PurpleBuddy *buddy = (PurpleBuddy *) node;
|
||||
PurpleAccount *account = purple_buddy_get_account(buddy);
|
||||
|
||||
Swift::StatusShow status;
|
||||
std::string message;
|
||||
getStatus(buddy, status, message);
|
||||
|
||||
np->handleBuddyChanged(np->m_accounts[account], purple_buddy_get_name(buddy), getAlias(buddy), getGroups(buddy)[0], (int) status.getType(), message, getIconHash(buddy));
|
||||
}
|
||||
|
||||
static void buddySignedOn(PurpleBuddy *buddy) {
|
||||
PurpleAccount *account = purple_buddy_get_account(buddy);
|
||||
|
||||
Swift::StatusShow status;
|
||||
std::string message;
|
||||
getStatus(buddy, status, message);
|
||||
|
||||
np->handleBuddyChanged(np->m_accounts[account], purple_buddy_get_name(buddy), getAlias(buddy), getGroups(buddy)[0], (int) status.getType(), message, getIconHash(buddy));
|
||||
}
|
||||
|
||||
static void buddySignedOff(PurpleBuddy *buddy) {
|
||||
PurpleAccount *account = purple_buddy_get_account(buddy);
|
||||
|
||||
Swift::StatusShow status;
|
||||
std::string message;
|
||||
getStatus(buddy, status, message);
|
||||
|
@ -279,7 +291,7 @@ static PurpleBlistUiOps blistUiOps =
|
|||
NULL,
|
||||
buddyListNewNode,
|
||||
NULL,
|
||||
NULL, // buddyListUpdate,
|
||||
buddyListUpdate,
|
||||
NULL, //NodeRemoved,
|
||||
NULL,
|
||||
NULL,
|
||||
|
@ -543,9 +555,9 @@ static bool initPurple(Config &cfg) {
|
|||
// purple_signal_connect(purple_conversations_get_handle(), "buddy-typing-stopped", &conversation_handle, PURPLE_CALLBACK(buddyTypingStopped), NULL);
|
||||
purple_signal_connect(purple_connections_get_handle(), "signed-on", &blist_handle,PURPLE_CALLBACK(signed_on), NULL);
|
||||
// purple_signal_connect(purple_blist_get_handle(), "buddy-removed", &blist_handle,PURPLE_CALLBACK(buddyRemoved), NULL);
|
||||
purple_signal_connect(purple_blist_get_handle(), "buddy-signed-on", &blist_handle,PURPLE_CALLBACK(buddySignedOn), NULL);
|
||||
purple_signal_connect(purple_blist_get_handle(), "buddy-signed-off", &blist_handle,PURPLE_CALLBACK(buddySignedOff), NULL);
|
||||
purple_signal_connect(purple_blist_get_handle(), "buddy-status-changed", &blist_handle,PURPLE_CALLBACK(buddyStatusChanged), NULL);
|
||||
// purple_signal_connect(purple_blist_get_handle(), "buddy-signed-on", &blist_handle,PURPLE_CALLBACK(buddySignedOn), NULL);
|
||||
// purple_signal_connect(purple_blist_get_handle(), "buddy-signed-off", &blist_handle,PURPLE_CALLBACK(buddySignedOff), NULL);
|
||||
// purple_signal_connect(purple_blist_get_handle(), "buddy-status-changed", &blist_handle,PURPLE_CALLBACK(buddyStatusChanged), NULL);
|
||||
purple_signal_connect(purple_blist_get_handle(), "blist-node-removed", &blist_handle,PURPLE_CALLBACK(NodeRemoved), NULL);
|
||||
// purple_signal_connect(purple_conversations_get_handle(), "chat-topic-changed", &conversation_handle, PURPLE_CALLBACK(conv_chat_topic_changed), NULL);
|
||||
//
|
||||
|
|
|
@ -109,6 +109,7 @@ class SQLite3Backend : public StorageBackend
|
|||
sqlite3_stmt *m_removeUserBuddiesSettings;
|
||||
sqlite3_stmt *m_addBuddy;
|
||||
sqlite3_stmt *m_updateBuddy;
|
||||
sqlite3_stmt *m_updateBuddySetting;
|
||||
sqlite3_stmt *m_getBuddies;
|
||||
sqlite3_stmt *m_getBuddiesSettings;
|
||||
};
|
||||
|
|
|
@ -109,9 +109,9 @@ Swift::Presence::ref Buddy::generatePresenceStanza(int features, bool only_new)
|
|||
// caps
|
||||
// presence->addPayload(boost::shared_ptr<Swift::Payload>(new Swift::CapsInfo (CONFIG().caps)));
|
||||
|
||||
if (features & 0/*TRANSPORT_FEATURE_AVATARS*/) {
|
||||
// if (features & 0/*TRANSPORT_FEATURE_AVATARS*/) {
|
||||
presence->addPayload(boost::shared_ptr<Swift::Payload>(new Swift::VCardUpdate (getIconHash())));
|
||||
}
|
||||
// }
|
||||
}
|
||||
|
||||
if (only_new) {
|
||||
|
|
|
@ -69,6 +69,8 @@ class NetworkFactory : public Factory {
|
|||
buddy->setSubscription(buddyInfo.subscription);
|
||||
buddy->setGroups(buddyInfo.groups);
|
||||
buddy->setFlags((BuddyFlag) buddyInfo.flags);
|
||||
if (buddyInfo.settings.find("icon_hash") != buddyInfo.settings.end())
|
||||
buddy->setIconHash(buddyInfo.settings.find("icon_hash")->second.s);
|
||||
return buddy;
|
||||
}
|
||||
private:
|
||||
|
|
|
@ -47,6 +47,14 @@ RosterManager::RosterManager(User *user, Component *component){
|
|||
RosterManager::~RosterManager() {
|
||||
m_setBuddyTimer->stop();
|
||||
m_RIETimer->stop();
|
||||
if (m_rosterStorage) {
|
||||
for (std::map<std::string, Buddy *>::const_iterator it = m_buddies.begin(); it != m_buddies.end(); it++) {
|
||||
Buddy *buddy = (*it).second;
|
||||
m_rosterStorage->storeBuddy(buddy);
|
||||
}
|
||||
m_rosterStorage->storeBuddies();
|
||||
}
|
||||
|
||||
for (std::map<std::string, Buddy *>::const_iterator it = m_buddies.begin(); it != m_buddies.end(); it++) {
|
||||
Buddy *buddy = (*it).second;
|
||||
delete buddy;
|
||||
|
|
|
@ -106,6 +106,8 @@ bool RosterStorage::storeBuddies() {
|
|||
buddyInfo.subscription = buddy->getSubscription();
|
||||
buddyInfo.id = buddy->getID();
|
||||
buddyInfo.flags = buddy->getFlags();
|
||||
buddyInfo.settings["icon_hash"].s = buddy->getIconHash();
|
||||
buddyInfo.settings["icon_hash"].type = TYPE_STRING;
|
||||
|
||||
// Buddy is in DB
|
||||
if (buddyInfo.id != -1) {
|
||||
|
|
|
@ -89,6 +89,7 @@ SQLite3Backend::~SQLite3Backend(){
|
|||
FINALIZE_STMT(m_getUserSetting);
|
||||
FINALIZE_STMT(m_setUserSetting);
|
||||
FINALIZE_STMT(m_updateUserSetting);
|
||||
FINALIZE_STMT(m_updateBuddySetting);
|
||||
sqlite3_close(m_db);
|
||||
}
|
||||
}
|
||||
|
@ -114,6 +115,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_updateBuddySetting, "INSERT OR REPLACE INTO " + m_prefix + "buddies_settings (user_id, buddy_id, var, type, value) VALUES (?, ?, ?, ?, ?)");
|
||||
|
||||
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 (?,?,?,?)");
|
||||
PREP_STMT(m_updateUserSetting, "UPDATE " + m_prefix + "users_settings SET value=? WHERE user_id=? AND var=?");
|
||||
|
@ -245,7 +248,19 @@ long SQLite3Backend::addBuddy(long userId, const BuddyInfo &buddyInfo) {
|
|||
onStorageError("addBuddy query", (sqlite3_errmsg(m_db) == NULL ? "" : sqlite3_errmsg(m_db)));
|
||||
return -1;
|
||||
}
|
||||
return (long) sqlite3_last_insert_rowid(m_db);
|
||||
|
||||
long id = (long) sqlite3_last_insert_rowid(m_db);
|
||||
|
||||
// INSERT OR REPLACE INTO " + m_prefix + "buddies_settings (user_id, buddy_id, var, type, value) VALUES (?, ?, ?, ?, ?)
|
||||
BEGIN(m_updateBuddySetting);
|
||||
BIND_INT(m_updateBuddySetting, userId);
|
||||
BIND_INT(m_updateBuddySetting, id);
|
||||
BIND_STR(m_updateBuddySetting, buddyInfo.settings.find("icon_hash")->first);
|
||||
BIND_INT(m_updateBuddySetting, TYPE_STRING);
|
||||
BIND_STR(m_updateBuddySetting, buddyInfo.settings.find("icon_hash")->second.s);
|
||||
|
||||
EXECUTE_STATEMENT(m_updateBuddySetting, "updateBuddySetting query");
|
||||
return id;
|
||||
}
|
||||
|
||||
void SQLite3Backend::updateBuddy(long userId, const BuddyInfo &buddyInfo) {
|
||||
|
@ -259,6 +274,16 @@ void SQLite3Backend::updateBuddy(long userId, const BuddyInfo &buddyInfo) {
|
|||
BIND_STR(m_updateBuddy, buddyInfo.legacyName);
|
||||
|
||||
EXECUTE_STATEMENT(m_updateBuddy, "updateBuddy query");
|
||||
|
||||
// INSERT OR REPLACE INTO " + m_prefix + "buddies_settings (user_id, buddy_id, var, type, value) VALUES (?, ?, ?, ?, ?)
|
||||
BEGIN(m_updateBuddySetting);
|
||||
BIND_INT(m_updateBuddySetting, userId);
|
||||
BIND_INT(m_updateBuddySetting, buddyInfo.id);
|
||||
BIND_STR(m_updateBuddySetting, buddyInfo.settings.find("icon_hash")->first);
|
||||
BIND_INT(m_updateBuddySetting, TYPE_STRING);
|
||||
BIND_STR(m_updateBuddySetting, buddyInfo.settings.find("icon_hash")->second.s);
|
||||
|
||||
EXECUTE_STATEMENT(m_updateBuddySetting, "updateBuddySetting query");
|
||||
}
|
||||
|
||||
bool SQLite3Backend::getBuddies(long id, std::list<BuddyInfo> &roster) {
|
||||
|
@ -292,6 +317,7 @@ bool SQLite3Backend::getBuddies(long id, std::list<BuddyInfo> &roster) {
|
|||
}
|
||||
|
||||
while(buddy_id == -1 && (ret = sqlite3_step(m_getBuddiesSettings)) == SQLITE_ROW) {
|
||||
RESET_GET_COUNTER(m_getBuddiesSettings);
|
||||
buddy_id = GET_INT(m_getBuddiesSettings);
|
||||
|
||||
var.type = GET_INT(m_getBuddiesSettings);
|
||||
|
@ -306,6 +332,10 @@ bool SQLite3Backend::getBuddies(long id, std::list<BuddyInfo> &roster) {
|
|||
var.s = val;
|
||||
break;
|
||||
default:
|
||||
if (buddy_id == b.id) {
|
||||
buddy_id = -1;
|
||||
}
|
||||
continue;
|
||||
break;
|
||||
}
|
||||
if (buddy_id == b.id) {
|
||||
|
|
Loading…
Add table
Reference in a new issue