Exemple #1
0
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;
}
Exemple #2
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;
}
Exemple #3
0
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;
}