MCONTACT CIrcProto::CList_FindContact(CONTACT *user) { if (!user || !user->name) return 0; TCHAR* lowercasename = mir_tstrdup(user->name); CharLower(lowercasename); for (MCONTACT hContact = db_find_first(m_szModuleName); hContact; hContact = db_find_next(hContact, m_szModuleName)) { if (isChatRoom(hContact)) continue; MCONTACT hContact_temp = NULL; ptrT DBNick(getTStringA(hContact, "Nick")); ptrT DBUser(getTStringA(hContact, "UUser")); ptrT DBHost(getTStringA(hContact, "UHost")); ptrT DBDefault(getTStringA(hContact, "Default")); ptrT DBWildcard(getTStringA(hContact, "UWildcard")); if (DBWildcard) CharLower(DBWildcard); if (IsChannel(user->name)) { if (DBDefault && !lstrcmpi(DBDefault, user->name)) hContact_temp = (MCONTACT)-1; } else if (user->ExactNick && DBNick && !lstrcmpi(DBNick, user->name)) hContact_temp = hContact; else if (user->ExactOnly && DBDefault && !lstrcmpi(DBDefault, user->name)) hContact_temp = hContact; else if (user->ExactWCOnly) { if (DBWildcard && !lstrcmpi(DBWildcard, lowercasename) || (DBWildcard && !lstrcmpi(DBNick, lowercasename) && !WCCmp(DBWildcard, lowercasename)) || (!DBWildcard && !lstrcmpi(DBNick, lowercasename))) { hContact_temp = hContact; } } else if (_tcschr(user->name, ' ') == 0) { if ((DBDefault && !lstrcmpi(DBDefault, user->name) || DBNick && !lstrcmpi(DBNick, user->name) || DBWildcard && WCCmp(DBWildcard, lowercasename)) && (WCCmp(DBUser, user->user) && WCCmp(DBHost, user->host))) { hContact_temp = hContact; } } if (hContact_temp != NULL) { mir_free(lowercasename); if (hContact_temp != (MCONTACT)-1) return hContact_temp; return 0; } } mir_free(lowercasename); return 0; }
INT_PTR CALLBACK UserDetailsDlgProc(HWND m_hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { UserDetailsDlgProcParam *p = (UserDetailsDlgProcParam*)GetWindowLongPtr(m_hwnd, GWLP_USERDATA); switch (msg) { case WM_INITDIALOG: p = new UserDetailsDlgProcParam(NULL, lParam); SetWindowLongPtr(m_hwnd, GWLP_USERDATA, (LPARAM)p); break; case WM_NOTIFY: if (((LPNMHDR)lParam)->idFrom == 0 && ((LPNMHDR)lParam)->code == PSN_PARAMCHANGED) { p->ppro = (CIrcProto*)((PSHNOTIFY*)lParam)->lParam; DBVARIANT dbv; BYTE bAdvanced = p->ppro->getByte(p->hContact, "AdvancedMode", 0); TranslateDialogDefault(m_hwnd); CheckDlgButton(m_hwnd, IDC_RADIO1, bAdvanced ? BST_UNCHECKED : BST_CHECKED); CheckDlgButton(m_hwnd, IDC_RADIO2, bAdvanced ? BST_CHECKED : BST_UNCHECKED); EnableWindow(GetDlgItem(m_hwnd, IDC_WILDCARD), bAdvanced); if (!bAdvanced) { SetDlgItemText(m_hwnd, IDC_DEFAULT, TranslateT(STR_BASIC)); if (!p->ppro->getTString(p->hContact, "Default", &dbv)) { SetDlgItemText(m_hwnd, IDC_WILDCARD, dbv.ptszVal); db_free(&dbv); } } else { SetDlgItemText(m_hwnd, IDC_DEFAULT, TranslateT(STR_ADVANCED)); if (!p->ppro->getTString(p->hContact, "UWildcard", &dbv)) { SetDlgItemText(m_hwnd, IDC_WILDCARD, dbv.ptszVal); db_free(&dbv); } } if (!p->ppro->getTString(p->hContact, "UUser", &dbv)) { SetDlgItemText(m_hwnd, IDC_USER, dbv.ptszVal); db_free(&dbv); } if (!p->ppro->getTString(p->hContact, "UHost", &dbv)) { SetDlgItemText(m_hwnd, IDC_HOST, dbv.ptszVal); db_free(&dbv); } ProtoBroadcastAck(p->ppro->m_szModuleName, p->hContact, ACKTYPE_GETINFO, ACKRESULT_SUCCESS, (HANDLE)1, 0); } break; case WM_COMMAND: if ((LOWORD(wParam) == IDC_WILDCARD || LOWORD(wParam) == IDC_USER || LOWORD(wParam) == IDC_HOST) && (HIWORD(wParam) != EN_CHANGE || (HWND)lParam != GetFocus())) return true; EnableWindow(GetDlgItem(m_hwnd, IDC_BUTTON), true); EnableWindow(GetDlgItem(m_hwnd, IDC_BUTTON2), true); if (HIWORD(wParam) == BN_CLICKED && LOWORD(wParam) == IDC_BUTTON) { TCHAR temp[500]; GetDlgItemText(m_hwnd, IDC_WILDCARD, temp, SIZEOF(temp)); BYTE bAdvanced = IsDlgButtonChecked(m_hwnd, IDC_RADIO1) ? 0 : 1; if (bAdvanced) { if (GetWindowTextLength(GetDlgItem(m_hwnd, IDC_WILDCARD)) == 0 || GetWindowTextLength(GetDlgItem(m_hwnd, IDC_USER)) == 0 || GetWindowTextLength(GetDlgItem(m_hwnd, IDC_HOST)) == 0) { MessageBox(NULL, TranslateT(STR_ERROR2), TranslateT("IRC error"), MB_OK | MB_ICONERROR); return FALSE; } DBVARIANT dbv; if (!p->ppro->getTString(p->hContact, "Default", &dbv)) { CMString S = _T(STR_ERROR); S += _T(" ("); S += dbv.ptszVal; S += _T(")"); if ((mir_tstrlen(temp) < 4 && mir_tstrlen(temp)) || !WCCmp(CharLower(temp), CharLower(dbv.ptszVal))) { MessageBox(NULL, TranslateTS(S.c_str()), TranslateT("IRC error"), MB_OK | MB_ICONERROR); db_free(&dbv); return FALSE; } db_free(&dbv); } GetDlgItemText(m_hwnd, IDC_WILDCARD, temp, SIZEOF(temp)); if (mir_tstrlen(GetWord(temp, 0).c_str())) p->ppro->setTString(p->hContact, "UWildcard", GetWord(temp, 0).c_str()); else db_unset(p->hContact, p->ppro->m_szModuleName, "UWildcard"); } p->ppro->setByte(p->hContact, "AdvancedMode", bAdvanced); GetDlgItemText(m_hwnd, IDC_USER, temp, SIZEOF(temp)); if (mir_tstrlen(GetWord(temp, 0).c_str())) p->ppro->setTString(p->hContact, "UUser", GetWord(temp, 0).c_str()); else db_unset(p->hContact, p->ppro->m_szModuleName, "UUser"); GetDlgItemText(m_hwnd, IDC_HOST, temp, SIZEOF(temp)); if (mir_tstrlen(GetWord(temp, 0).c_str())) p->ppro->setTString(p->hContact, "UHost", GetWord(temp, 0).c_str()); else db_unset(p->hContact, p->ppro->m_szModuleName, "UHost"); EnableWindow(GetDlgItem(m_hwnd, IDC_BUTTON), FALSE); } if (HIWORD(wParam) == BN_CLICKED && LOWORD(wParam) == IDC_BUTTON2) { if (IsDlgButtonChecked(m_hwnd, IDC_RADIO2)) SetDlgItemTextA(m_hwnd, IDC_WILDCARD, ""); SetDlgItemTextA(m_hwnd, IDC_HOST, ""); SetDlgItemTextA(m_hwnd, IDC_USER, ""); db_unset(p->hContact, p->ppro->m_szModuleName, "UWildcard"); db_unset(p->hContact, p->ppro->m_szModuleName, "UUser"); db_unset(p->hContact, p->ppro->m_szModuleName, "UHost"); EnableWindow(GetDlgItem(m_hwnd, IDC_BUTTON), FALSE); EnableWindow(GetDlgItem(m_hwnd, IDC_BUTTON2), FALSE); } if (HIWORD(wParam) == BN_CLICKED && LOWORD(wParam) == IDC_RADIO1) { SetDlgItemText(m_hwnd, IDC_DEFAULT, TranslateT(STR_BASIC)); DBVARIANT dbv; if (!p->ppro->getTString(p->hContact, "Default", &dbv)) { SetDlgItemText(m_hwnd, IDC_WILDCARD, dbv.ptszVal); db_free(&dbv); } EnableWindow(GetDlgItem(m_hwnd, IDC_WILDCARD), FALSE); } if (HIWORD(wParam) == BN_CLICKED && LOWORD(wParam) == IDC_RADIO2) { DBVARIANT dbv; SetDlgItemText(m_hwnd, IDC_DEFAULT, TranslateT(STR_ADVANCED)); if (!p->ppro->getTString(p->hContact, "UWildcard", &dbv)) { SetDlgItemText(m_hwnd, IDC_WILDCARD, dbv.ptszVal); db_free(&dbv); } EnableWindow(GetDlgItem(m_hwnd, IDC_WILDCARD), true); } break; } return FALSE; }
HANDLE CIrcProto::CList_FindContact (CONTACT* user) { if ( !user || !user->name ) return 0; TCHAR* lowercasename = mir_tstrdup( user->name ); CharLower(lowercasename); DBVARIANT dbv1; DBVARIANT dbv2; DBVARIANT dbv3; DBVARIANT dbv4; DBVARIANT dbv5; for (HANDLE hContact = db_find_first(m_szModuleName); hContact; hContact = db_find_next(hContact, m_szModuleName)) { if ( isChatRoom(hContact)) continue; HANDLE hContact_temp = NULL; TCHAR* DBDefault = NULL; TCHAR* DBNick = NULL; TCHAR* DBWildcard = NULL; TCHAR* DBUser = NULL; TCHAR* DBHost = NULL; if ( !getTString(hContact, "Default", &dbv1)) DBDefault = dbv1.ptszVal; if ( !getTString(hContact, "Nick", &dbv2)) DBNick = dbv2.ptszVal; if ( !getTString(hContact, "UWildcard", &dbv3)) DBWildcard = dbv3.ptszVal; if ( !getTString(hContact, "UUser", &dbv4)) DBUser = dbv4.ptszVal; if ( !getTString(hContact, "UHost", &dbv5)) DBHost = dbv5.ptszVal; if ( DBWildcard ) CharLower( DBWildcard ); if ( IsChannel( user->name )) { if ( DBDefault && !lstrcmpi( DBDefault, user->name )) hContact_temp = (HANDLE)-1; } else if ( user->ExactNick && DBNick && !lstrcmpi( DBNick, user->name )) hContact_temp = hContact; else if ( user->ExactOnly && DBDefault && !lstrcmpi( DBDefault, user->name )) hContact_temp = hContact; else if ( user->ExactWCOnly ) { if ( DBWildcard && !lstrcmpi( DBWildcard, lowercasename ) || ( DBWildcard && !lstrcmpi( DBNick, lowercasename ) && !WCCmp( DBWildcard, lowercasename )) || ( !DBWildcard && !lstrcmpi(DBNick, lowercasename))) { hContact_temp = hContact; } } else if ( _tcschr(user->name, ' ' ) == 0 ) { if (( DBDefault && !lstrcmpi(DBDefault, user->name) || DBNick && !lstrcmpi(DBNick, user->name) || DBWildcard && WCCmp( DBWildcard, lowercasename )) && ( WCCmp(DBUser, user->user) && WCCmp(DBHost, user->host))) { hContact_temp = hContact; } } if ( DBDefault ) db_free(&dbv1); if ( DBNick ) db_free(&dbv2); if ( DBWildcard ) db_free(&dbv3); if ( DBUser ) db_free(&dbv4); if ( DBHost ) db_free(&dbv5); if ( hContact_temp != NULL ) { mir_free(lowercasename); if ( hContact_temp != (HANDLE)-1 ) return hContact_temp; return 0; } } mir_free(lowercasename); return 0; }