int CAimProto::OnGroupChange(WPARAM hContact, LPARAM lParam) { if (m_state != 1 || !getByte(AIM_KEY_MG, 1)) return 0; CLISTGROUPCHANGE *grpchg = (CLISTGROUPCHANGE*)lParam; if (hContact == NULL) { if (grpchg->pszNewName == NULL && grpchg->pszOldName != NULL) { T2Utf szOldName(grpchg->pszOldName); unsigned short group_id = m_group_list.find_id(szOldName); if (group_id) { aim_delete_contact(m_hServerConn, m_seqno, szOldName, 0, group_id, 1, false); m_group_list.remove_by_id(group_id); update_server_group("", 0); } } else if (grpchg->pszNewName != NULL && grpchg->pszOldName != NULL) { unsigned short group_id = m_group_list.find_id(T2Utf(grpchg->pszOldName)); if (group_id) update_server_group(T2Utf(grpchg->pszNewName), group_id); } } else { if (is_my_contact(hContact) && getBuddyId(hContact, 1) && !db_get_b(hContact, MOD_KEY_CL, AIM_KEY_NL, 0)) { if (grpchg->pszNewName) add_contact_to_group(hContact, T2Utf(grpchg->pszNewName)); else add_contact_to_group(hContact, AIM_DEFAULT_GROUP); } } return 0; }
int CAimProto::OnGroupChange(WPARAM wParam,LPARAM lParam) { if (state != 1 || !getByte(AIM_KEY_MG, 1)) return 0; const HANDLE hContact = (HANDLE)wParam; const CLISTGROUPCHANGE* grpchg = (CLISTGROUPCHANGE*)lParam; if (hContact == NULL) { if (grpchg->pszNewName == NULL && grpchg->pszOldName != NULL) { char* szOldName = mir_utf8encodeT(grpchg->pszOldName); unsigned short group_id = group_list.find_id(szOldName); if (group_id) { aim_delete_contact(hServerConn, seqno, szOldName, 0, group_id, 1, false); group_list.remove_by_id(group_id); update_server_group("", 0); } mir_free(szOldName); } else if (grpchg->pszNewName != NULL && grpchg->pszOldName != NULL) { char* szOldName = mir_utf8encodeT(grpchg->pszOldName); unsigned short group_id = group_list.find_id(szOldName); if (group_id) { char* szNewName = mir_utf8encodeT(grpchg->pszNewName); update_server_group(szNewName, group_id); mir_free(szNewName); } mir_free(szOldName); } } else { if (is_my_contact(hContact) && getBuddyId(hContact, 1) && !DBGetContactSettingByte(hContact, MOD_KEY_CL, AIM_KEY_NL, 0)) { if (grpchg->pszNewName) { char* szNewName = mir_utf8encodeT(grpchg->pszNewName); add_contact_to_group(hContact, szNewName); mir_free(szNewName); } else add_contact_to_group(hContact, AIM_DEFAULT_GROUP); } } return 0; }
int CAimProto::OnContactDeleted(WPARAM hContact, LPARAM) { if (m_state != 1) return 0; if (db_get_b(hContact, MOD_KEY_CL, AIM_KEY_NL, 0)) return 0; DBVARIANT dbv; if (!getString(hContact, AIM_KEY_SN, &dbv)) { for (int i = 1;; ++i) { unsigned short item_id = getBuddyId(hContact, i); if (item_id == 0) break; unsigned short group_id = getGroupId(hContact, i); if (group_id) { bool is_not_in_list = getBool(hContact, AIM_KEY_NIL, false); aim_ssi_update(m_hServerConn, m_seqno, true); aim_delete_contact(m_hServerConn, m_seqno, dbv.pszVal, item_id, group_id, 0, is_not_in_list); char *group = m_group_list.find_name(group_id); update_server_group(group, group_id); aim_ssi_update(m_hServerConn, m_seqno, false); } } db_free(&dbv); } return 0; }
int CAimProto::OnContactDeleted(WPARAM wParam,LPARAM /*lParam*/) { if (state != 1) return 0; const HANDLE hContact = (HANDLE)wParam; if (DBGetContactSettingByte(hContact, MOD_KEY_CL, AIM_KEY_NL, 0)) return 0; DBVARIANT dbv; if (!getString(hContact, AIM_KEY_SN, &dbv)) { for(int i=1;;++i) { unsigned short item_id = getBuddyId(hContact, i); if (item_id == 0) break; unsigned short group_id = getGroupId(hContact, i); if (group_id) { bool is_not_in_list = getBool(hContact, AIM_KEY_NIL, false); aim_ssi_update(hServerConn, seqno, true); aim_delete_contact(hServerConn, seqno, dbv.pszVal, item_id, group_id, 0, is_not_in_list); char* group = group_list.find_name(group_id); update_server_group(group, group_id); aim_ssi_update(hServerConn, seqno, false); } } DBFreeVariant(&dbv); } return 0; }