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::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; }
int CAimProto::OnPreBuildContactMenu(WPARAM hContact, LPARAM) { bool bIsChatRoom = isChatRoom(hContact); //see if we should add the html away message context menu items Menu_ShowItem(hHTMLAwayContextMenuItem, getWord(hContact, AIM_KEY_ST, ID_STATUS_OFFLINE) == ID_STATUS_AWAY && !bIsChatRoom); Menu_ShowItem(hAddToServerListContextMenuItem, !getBuddyId(hContact, 1) && state != 0 && !bIsChatRoom); ptrA id(getStringA(hContact, AIM_KEY_SN)); if (id == NULL) return 0; switch (pd_mode) { case 1: Menu_ModifyItem(hBlockContextMenuItem, LPGENT("&Block")); break; case 2: Menu_ModifyItem(hBlockContextMenuItem, LPGENT("&Unblock")); break; case 3: Menu_ModifyItem(hBlockContextMenuItem, allow_list.find_id(id) ? LPGENT("&Block") : LPGENT("&Unblock")); break; case 4: Menu_ModifyItem(hBlockContextMenuItem, block_list.find_id(id) ? LPGENT("&Unblock") : LPGENT("&Block")); break; default: Menu_ShowItem(hBlockContextMenuItem, false); break; } 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; }