summaryrefslogtreecommitdiff
path: root/protocols/IRCG/userinfo.cpp
diff options
context:
space:
mode:
authorVadim Dashevskiy <watcherhd@gmail.com>2012-05-15 10:38:20 +0000
committerVadim Dashevskiy <watcherhd@gmail.com>2012-05-15 10:38:20 +0000
commit48540940b6c28bb4378abfeb500ec45a625b37b6 (patch)
tree2ef294c0763e802f91d868bdef4229b6868527de /protocols/IRCG/userinfo.cpp
parent5c350913f011e119127baeb32a6aedeb4f0d33bc (diff)
initial commit
git-svn-id: http://svn.miranda-ng.org/main/trunk@2 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c
Diffstat (limited to 'protocols/IRCG/userinfo.cpp')
-rw-r--r--protocols/IRCG/userinfo.cpp224
1 files changed, 224 insertions, 0 deletions
diff --git a/protocols/IRCG/userinfo.cpp b/protocols/IRCG/userinfo.cpp
new file mode 100644
index 0000000000..cecc61cf2f
--- /dev/null
+++ b/protocols/IRCG/userinfo.cpp
@@ -0,0 +1,224 @@
+/*
+IRC plugin for Miranda IM
+
+Copyright (C) 2003-05 Jurgen Persson
+Copyright (C) 2007-09 George Hazan
+
+This program is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public License
+as published by the Free Software Foundation; either version 2
+of the License, or (at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+*/
+
+#include "irc.h"
+
+/////////////////////////////////////////////////////////////////////////////////////////
+// 'User details' dialog
+
+struct UserDetailsDlgProcParam
+{
+ UserDetailsDlgProcParam( CIrcProto* _pro, HANDLE _info ) :
+ ppro( _pro ),
+ hContact( _info )
+ {}
+
+ CIrcProto* ppro;
+ HANDLE hContact;
+};
+
+#define STR_BASIC "Faster! Searches the network for an exact match of the nickname only. The hostmask is optional and provides further security if used. Wildcards (? and *) are allowed."
+#define STR_ADVANCED "Slower! Searches the network for nicknames matching a wildcard string. The hostmask is mandatory and a minimum of 4 characters is necessary in the \"Nick\" field. Wildcards (? and *) are allowed."
+#define STR_ERROR "Settings could not be saved!\n\nThe \"Nick\" field must contain at least four characters including wildcards,\n and it must also match the default nickname for this contact."
+#define STR_ERROR2 "Settings could not be saved!\n\nA full hostmask must be set for this online detection mode to work."
+
+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, ( HANDLE )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);
+ DBFreeVariant(&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);
+ DBFreeVariant(&dbv);
+ } }
+
+ if ( !p->ppro->getTString( p->hContact, "UUser", &dbv)) {
+ SetDlgItemText( m_hwnd, IDC_USER, dbv.ptszVal);
+ DBFreeVariant(&dbv);
+ }
+
+ if ( !p->ppro->getTString( p->hContact, "UHost", &dbv)) {
+ SetDlgItemText( m_hwnd, IDC_HOST, dbv.ptszVal);
+ DBFreeVariant(&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));
+ DBVARIANT dbv;
+
+ 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;
+ }
+
+ if ( !p->ppro->getTString( p->hContact, "Default", &dbv )) {
+ CMString S = _T(STR_ERROR);
+ S += _T(" (");
+ S += dbv.ptszVal;
+ S += _T(")");
+ if (( lstrlen(temp) < 4 && lstrlen(temp)) || !WCCmp(CharLower(temp), CharLower(dbv.ptszVal))) {
+ MessageBox( NULL, TranslateTS( S.c_str()), TranslateT( "IRC error" ), MB_OK | MB_ICONERROR );
+ DBFreeVariant( &dbv );
+ return FALSE;
+ }
+ DBFreeVariant( &dbv );
+ }
+
+ GetDlgItemText( m_hwnd, IDC_WILDCARD, temp, SIZEOF(temp));
+ if ( lstrlen( GetWord(temp, 0).c_str()))
+ p->ppro->setTString( p->hContact, "UWildcard", GetWord(temp, 0).c_str());
+ else
+ DBDeleteContactSetting( p->hContact, p->ppro->m_szModuleName, "UWildcard");
+ }
+
+ p->ppro->setByte( p->hContact, "AdvancedMode", bAdvanced);
+
+ GetDlgItemText( m_hwnd, IDC_USER, temp, SIZEOF(temp));
+ if (lstrlen(GetWord(temp, 0).c_str()))
+ p->ppro->setTString( p->hContact, "UUser", GetWord(temp, 0).c_str());
+ else
+ DBDeleteContactSetting( p->hContact, p->ppro->m_szModuleName, "UUser");
+
+ GetDlgItemText( m_hwnd, IDC_HOST, temp, SIZEOF(temp));
+ if (lstrlen(GetWord(temp, 0).c_str()))
+ p->ppro->setTString( p->hContact, "UHost", GetWord(temp, 0).c_str());
+ else
+ DBDeleteContactSetting( 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, "" );
+ DBDeleteContactSetting( p->hContact, p->ppro->m_szModuleName, "UWildcard");
+ DBDeleteContactSetting( p->hContact, p->ppro->m_szModuleName, "UUser");
+ DBDeleteContactSetting( 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 );
+ DBFreeVariant( &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 );
+ DBFreeVariant( &dbv );
+ }
+ EnableWindow(GetDlgItem( m_hwnd, IDC_WILDCARD), true);
+ }
+ break;
+ }
+ return FALSE;
+}
+
+int __cdecl CIrcProto::OnInitUserInfo(WPARAM wParam, LPARAM lParam)
+{
+ char* szProto = ( char* )CallService( MS_PROTO_GETCONTACTBASEPROTO, lParam, 0);
+ HANDLE hContact = (HANDLE) lParam;
+ if ( !hContact || !szProto || lstrcmpiA( szProto, m_szModuleName ))
+ return 0;
+
+ if ( getByte( hContact, "ChatRoom", 0 ) != 0 )
+ return 0;
+
+ if ( getByte( hContact, "DCC", 0 ) != 0 )
+ return 0;
+
+ DBVARIANT dbv;
+ if ( !getTString( hContact, "Default", &dbv )) {
+ if ( IsChannel( dbv.ptszVal )) {
+ DBFreeVariant( &dbv );
+ return 0;
+ }
+ DBFreeVariant(&dbv);
+ }
+
+ OPTIONSDIALOGPAGE odp = { 0 };
+ odp.cbSize = sizeof(odp);
+ odp.flags = ODPF_DONTTRANSLATE;
+ odp.pszTitle = m_szModuleName;
+ odp.hIcon = NULL;
+ odp.dwInitParam = ( LPARAM )this;
+ odp.hInstance = hInst;
+ odp.position = -1900000000;
+ odp.pfnDlgProc = UserDetailsDlgProc;
+ odp.pszTemplate = MAKEINTRESOURCEA(IDD_USERINFO);
+ odp.pszTitle = m_szModuleName;
+ CallService( MS_USERINFO_ADDPAGE, wParam, (LPARAM) & odp);
+ return 0;
+}