void MeanwhileSession::handleStorageLoad(struct mwServiceStorage * /* srvc */, guint32 result, struct mwStorageUnit *item, gpointer /* data */) { HERE; if (result != ERR_SUCCESS) { mwDebug() << "contact list load returned " << result << endl; return; } struct mwGetBuffer *buf = mwGetBuffer_wrap(mwStorageUnit_asOpaque(item)); struct mwSametimeList *list = mwSametimeList_new(); mwSametimeList_get(buf, list); GList *gl, *glf, *cl, *clf; Kopete::ContactList *contactlist = Kopete::ContactList::self(); for (glf = gl = mwSametimeList_getGroups(list); gl; gl = gl->next) { struct mwSametimeGroup *stgroup = (struct mwSametimeGroup *)gl->data; Kopete::Group *group = contactlist->findGroup(mwSametimeGroup_getName(stgroup)); group->setPluginData(account->protocol(), "alias", mwSametimeGroup_getAlias(stgroup)); for (clf = cl = mwSametimeGroup_getUsers(stgroup); cl; cl = cl->next) { struct mwSametimeUser *stuser = (struct mwSametimeUser *)cl->data; MeanwhileContact *contact = static_cast<MeanwhileContact *> (account->contacts().value(mwSametimeUser_getUser(stuser))); if (contact != 0L) continue; account->addContact(mwSametimeUser_getUser(stuser), mwSametimeUser_getAlias(stuser), group, Kopete::Account::ChangeKABC); } g_list_free(clf); } g_list_free(glf); mwSametimeList_free(list); }
MCONTACT CSametimeProto::AddContact(mwSametimeUser* user, bool temporary) { debugLog(_T("CSametimeProto::AddContact() start")); const char* id = mwSametimeUser_getUser(user); const char* name = mwSametimeUser_getShortName(user); const char* nick = mwSametimeUser_getAlias(user); //const char* nick = mwSametimeUser_getShortName(user); mwSametimeUserType type = mwSametimeUser_getType(user); MCONTACT hContact = FindContactByUserId(id); bool new_contact = false; if (!hContact) { hContact = (MCONTACT)CallService(MS_DB_CONTACT_ADD, 0, 0); if (!hContact) { debugLog(_T("AddContact(): Failed to create Sametime contact")); return NULL; ///TODO error handling } if (Proto_AddToContact(hContact, m_szModuleName) != 0) { CallService(MS_DB_CONTACT_DELETE, (WPARAM)hContact, 0); debugLog(_T("AddContact(): Failed to register Sametime contact")); return NULL; ///TODO error handling } new_contact = true; } else if (!temporary) { db_unset(hContact, "CList", "NotOnList"); db_unset(hContact, "CList", "Hidden"); } // add to miranda if (new_contact) db_set_utf(hContact, m_szModuleName, "stid", id); if (name && mir_strlen(name)) db_set_utf(hContact, m_szModuleName, "Name", name); if (nick && mir_strlen(nick)) { db_set_utf(hContact, m_szModuleName, "Nick", nick); } else if (name && mir_strlen(name)) { db_set_utf(hContact, m_szModuleName, "Nick", name); } else { db_set_utf(hContact, m_szModuleName, "Nick", id); } db_set_b(hContact, m_szModuleName, "type", (BYTE)type); if (new_contact) { //add to our awareness list mwAwareIdBlock id_block; if (GetAwareIdFromContact(hContact, &id_block)) { GList* gl = g_list_prepend(NULL, &id_block); mwAwareList_addAware(aware_list, gl); g_list_free(gl); free(id_block.user); } } if (temporary) { db_set_b(hContact, "CList", "NotOnList", 1); db_set_b(hContact, "CList", "Hidden", 1); } else { db_unset(hContact, "CList", "NotOnList"); db_unset(hContact, "CList", "Hidden"); } return hContact; }