From 964a7089f8a243fed81b9fc293512c7e2be6ce18 Mon Sep 17 00:00:00 2001 From: "(no author)" <(no author)@4f64403b-2f21-0410-a795-97e2b3489a10> Date: Tue, 3 Jun 2008 13:27:13 +0000 Subject: import sametime plugin source git-svn-id: https://server.scottellis.com.au/svn/mim_plugs@412 4f64403b-2f21-0410-a795-97e2b3489a10 --- sametime/options.cpp | 320 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 320 insertions(+) create mode 100644 sametime/options.cpp (limited to 'sametime/options.cpp') diff --git a/sametime/options.cpp b/sametime/options.cpp new file mode 100644 index 0000000..80c9444 --- /dev/null +++ b/sametime/options.cpp @@ -0,0 +1,320 @@ +#include "options.h" + +HWND hWndOptions = 0; + +Options options = {0}; + +#define DEFAULT_ID (0x1800) + +#define NUM_IDS 20 +TCHAR *client_names[NUM_IDS] = {_T("Official Binary Library"), _T("Official Java Applet"), _T("Official Binary Application"), + _T("Official Java Application"), _T("Notes v6.5"), _T("Notes v7.0"), _T("ICT"), _T("NotesBuddy"), _T("NotesBuddy v4.15"), _T("Sanity"), + _T("Perl"), _T("PMR Alert"), _T("Trillian (SourceForge)"), _T("Trillian (IBM)"), _T("Meanwhile Library"), _T("Meanwhile (Python)"), + _T("Meanwhile (Gaim)"), _T("Meanwhile (Adium)"), _T("Meanwhile (Kopete)"), _T("Custom")}; +int client_ids[NUM_IDS] = {0x1000, 0x1001, 0x1002, 0x1003, 0x1200, 0x1210, 0x1300, 0x1400, 0x1405, 0x1600, 0x1625, + 0x1650, 0x16aa, 0x16bb, 0x1700, 0x1701, 0x1702, 0x1703, 0x1704, 0xFFFF}; + +static BOOL CALLBACK DlgProcOptNet(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) +{ + switch ( msg ) { + case WM_INITDIALOG: { + TranslateDialogDefault( hwndDlg ); + + { + TCHAR verbuf[100]; + WORD client_ver = GetClientVersion(), server_ver = GetServerVersion(); + if(client_ver) + _stprintf(verbuf, _T("Client proto version: %03d.%03d"), (client_ver & 0xFF00) >> 8, client_ver & 0xFF); + else + _stprintf(verbuf, _T("Disconnected")); + SetDlgItemText(hwndDlg, IDC_ST_CLIENTVER, verbuf); + if(server_ver) + _stprintf(verbuf, _T("Server proto version: %03d.%03d"), (server_ver & 0xFF00) >> 8, server_ver & 0xFF); + else + _stprintf(verbuf, _T("Disconnected")); + SetDlgItemText(hwndDlg, IDC_ST_SERVERVER, verbuf); + } + + hWndOptions = hwndDlg; + + wchar_t *s; + s = u2w(options.server_name); SetDlgItemTextW(hwndDlg, IDC_ED_SNAME, s); free(s); + s = u2w(options.id); SetDlgItemTextW(hwndDlg, IDC_ED_NAME, s); free(s); + s = u2w(options.pword); SetDlgItemTextW(hwndDlg, IDC_ED_PWORD, s); free(s); + + SetDlgItemInt(hwndDlg, IDC_ED_PORT, options.port, FALSE); + CheckDlgButton(hwndDlg, IDC_CHK_GETSERVERCONTACTS, options.get_server_contacts ? TRUE : FALSE); + CheckDlgButton(hwndDlg, IDC_CHK_ADDCONTACTS, options.add_contacts ? TRUE : FALSE); + CheckDlgButton(hwndDlg, IDC_CHK_IDLEAWAY, options.idle_as_away ? TRUE : FALSE); + + { + SendDlgItemMessage(hwndDlg, IDC_CMB_CLIENT, CB_RESETCONTENT, 0, 0); + int pos = 0; + bool found = false; + + for(int i = 0; i < NUM_IDS; i++) { + pos = SendDlgItemMessage(hwndDlg, IDC_CMB_CLIENT, CB_ADDSTRING, -1, (LPARAM)client_names[i]); + SendDlgItemMessage(hwndDlg, IDC_CMB_CLIENT, CB_SETITEMDATA, pos, client_ids[i]); + if(client_ids[i] == options.client_id) { + found = true; + SendDlgItemMessage(hwndDlg, IDC_CMB_CLIENT, CB_SETCURSEL, pos, 0); + SetDlgItemInt(hwndDlg, IDC_ED_CLIENTID, client_ids[i], FALSE); + if(i != sizeof(client_ids) / sizeof(int) - 1) { + HWND hw = GetDlgItem(hwndDlg, IDC_ED_CLIENTID); + EnableWindow(hw, false); + } + } + } + + if(!found) { + SendDlgItemMessage(hwndDlg, IDC_CMB_CLIENT, CB_SETCURSEL, pos, 0); // pos is last item, i.e. custom + SetDlgItemInt(hwndDlg, IDC_ED_CLIENTID, options.client_id, FALSE); + } + } + + if(!ServiceExists(MS_POPUP_ADDPOPUP)) { + HWND hw = GetDlgItem(hwndDlg, IDC_RAD_ERRPOP); + EnableWindow(hw, FALSE); + } + + if(!ServiceExists(MS_CLIST_SYSTRAY_NOTIFY)) { + HWND hw = GetDlgItem(hwndDlg, IDC_RAD_ERRBAL); + EnableWindow(hw, FALSE); + } + + switch(options.err_method) { + case ED_POP: CheckDlgButton(hwndDlg, IDC_RAD_ERRPOP, TRUE); break; + case ED_MB: CheckDlgButton(hwndDlg, IDC_RAD_ERRMB, TRUE); break; + case ED_BAL: CheckDlgButton(hwndDlg, IDC_RAD_ERRBAL, TRUE); break; + } + + if(options.encrypt_session) + CheckDlgButton(hwndDlg, IDC_RAD_ENC, TRUE); + else + CheckDlgButton(hwndDlg, IDC_RAD_NOENC, TRUE); + + return FALSE; + } + case WM_COMMAND: + if ( HIWORD( wParam ) == EN_CHANGE && ( HWND )lParam == GetFocus()) { + SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); + } + if ( HIWORD( wParam ) == CBN_SELCHANGE) { + int sel = SendDlgItemMessage(hwndDlg, IDC_CMB_CLIENT, CB_GETCURSEL, 0, 0); + int id = SendDlgItemMessage(hwndDlg, IDC_CMB_CLIENT, CB_GETITEMDATA, sel, 0); + bool custom = (id == client_ids[sizeof(client_ids) / sizeof(int) - 1]); + + if(!custom) + SetDlgItemInt(hwndDlg, IDC_ED_CLIENTID, id, FALSE); + else + SetDlgItemInt(hwndDlg, IDC_ED_CLIENTID, DEFAULT_ID, FALSE); + + HWND hw = GetDlgItem(hwndDlg, IDC_ED_CLIENTID); + EnableWindow(hw, custom); + + SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); + } + + if ( HIWORD( wParam ) == BN_CLICKED ) { + switch( LOWORD( wParam )) { + case IDC_BTN_UPLOADCONTACTS: + { + HWND hBut = GetDlgItem(hwndDlg, IDC_BTN_UPLOADCONTACTS); + EnableWindow(hBut, FALSE); + hBut = GetDlgItem(hwndDlg, IDC_BTN_IMPORTCONTACTS); + EnableWindow(hBut, FALSE); + + ExportContactsToServer(); + + SendMessage(hwndDlg, WMU_STORECOMPLETE, 0, 0); + } + return TRUE; + case IDC_BTN_IMPORTCONTACTS: + { + OPENFILENAME ofn = {0}; + TCHAR import_filename[MAX_PATH]; + import_filename[0] = 0; + + ofn.lStructSize = sizeof(ofn); + ofn.lpstrFile = import_filename; + ofn.hwndOwner = hwndDlg; + ofn.Flags = CC_FULLOPEN; + ofn.nMaxFile = MAX_PATH; + ofn.lpstrFilter = _T("All\0*.*\0"); + ofn.nFilterIndex = 1; + ofn.lpstrFileTitle = NULL; + ofn.nMaxFileTitle = 0; + ofn.lpstrInitialDir = NULL; + ofn.Flags = OFN_PATHMUSTEXIST; + + if(GetOpenFileName(&ofn) == TRUE) { + HWND hBut = GetDlgItem(hwndDlg, IDC_BTN_UPLOADCONTACTS); + EnableWindow(hBut, FALSE); + hBut = GetDlgItem(hwndDlg, IDC_BTN_IMPORTCONTACTS); + EnableWindow(hBut, FALSE); + + ImportContactsFromFile(ofn.lpstrFile); + + SendMessage(hwndDlg, WMU_STORECOMPLETE, 0, 0); + } + } + return TRUE; + case IDC_CHK_GETSERVERCONTACTS: + case IDC_CHK_ENCMESSAGES: + case IDC_RAD_ERRMB: + case IDC_RAD_ERRBAL: + case IDC_RAD_ERRPOP: + case IDC_CHK_USERCP: + case IDC_CHK_ADDCONTACTS: + case IDC_CHK_IDLEAWAY: + case IDC_RAD_ENC: + case IDC_RAD_NOENC: + SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); + return TRUE; + case IDC_RAD_ANSI: + case IDC_RAD_UTF8: + case IDC_RAD_OEM: + case IDC_RAD_UTF7: + case IDC_RAD_USERCP: + { + HWND hw = GetDlgItem(hwndDlg, IDC_CHK_USERCP); + EnableWindow(hw, !IsDlgButtonChecked(hwndDlg, IDC_RAD_USERCP)); + } + SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); + return TRUE; + } + } + break; + + case WMU_STORECOMPLETE: + { + HWND hBut = GetDlgItem(hwndDlg, IDC_BTN_UPLOADCONTACTS); + EnableWindow(hBut, TRUE); + hBut = GetDlgItem(hwndDlg, IDC_BTN_IMPORTCONTACTS); + EnableWindow(hBut, TRUE); + } + return TRUE; + case WM_NOTIFY: + if (((LPNMHDR)lParam)->code == PSN_APPLY ) { + wchar_t ws[2048]; + char *utf; + + GetDlgItemTextW(hwndDlg, IDC_ED_SNAME, ws, LSTRINGLEN); + strcpy(options.server_name, utf = w2u(ws)); free(utf); + GetDlgItemTextW(hwndDlg, IDC_ED_NAME, ws, LSTRINGLEN); + strcpy(options.id, utf = w2u(ws)); free(utf); + GetDlgItemTextW(hwndDlg, IDC_ED_PWORD, ws, LSTRINGLEN); + strcpy(options.pword, utf = w2u(ws)); free(utf); + + BOOL translated; + int port = GetDlgItemInt(hwndDlg, IDC_ED_PORT, &translated, FALSE); + if(translated) + options.port = port; + + options.get_server_contacts = (IsDlgButtonChecked(hwndDlg, IDC_CHK_GETSERVERCONTACTS) != FALSE); + + int sel = SendDlgItemMessage(hwndDlg, IDC_CMB_CLIENT, CB_GETCURSEL, 0, 0); + int id = SendDlgItemMessage(hwndDlg, IDC_CMB_CLIENT, CB_GETITEMDATA, sel, 0); + + if(id == client_ids[sizeof(client_ids) / sizeof(int) - 1]) { + BOOL trans; + id = GetDlgItemInt(hwndDlg, IDC_ED_CLIENTID, &trans, FALSE); + if(trans) + options.client_id = id; + } else + options.client_id = id; + + if(IsDlgButtonChecked(hwndDlg, IDC_RAD_ERRMB)) options.err_method = ED_MB; + else if(IsDlgButtonChecked(hwndDlg, IDC_RAD_ERRBAL)) options.err_method = ED_BAL; + else if(IsDlgButtonChecked(hwndDlg, IDC_RAD_ERRPOP)) options.err_method = ED_POP; + + options.add_contacts = (IsDlgButtonChecked(hwndDlg, IDC_CHK_ADDCONTACTS) != FALSE); + options.encrypt_session = (IsDlgButtonChecked(hwndDlg, IDC_RAD_ENC) != FALSE); + options.idle_as_away = (IsDlgButtonChecked(hwndDlg, IDC_CHK_IDLEAWAY) != FALSE); + + SaveOptions(); + + return TRUE; + } + break; + case WM_DESTROY: + hWndOptions = 0; + break; + } + + return FALSE; +} + +int OptInit(WPARAM wParam,LPARAM lParam) +{ + OPTIONSDIALOGPAGE odp = { 0 }; + TCHAR *temp_proto = a2t(PROTO); + + odp.flags = ODPF_BOLDGROUPS; +#ifdef _UNICODE + odp.flags |= ODPF_UNICODE; +#endif + odp.cbSize = sizeof(odp); + odp.position = -790000000; + odp.hInstance = hInst; + odp.pszTemplate = MAKEINTRESOURCEA(IDD_OPTNET); + odp.ptszTitle = TranslateTS(temp_proto); + odp.ptszGroup = TranslateT("Network"); + odp.pfnDlgProc = DlgProcOptNet; + CallService( MS_OPT_ADDPAGE, wParam,( LPARAM )&odp ); + + free(temp_proto); + + return 0; +} + +void LoadOptions() { + DBVARIANT dbv; + + if(!DBGetContactSettingUtf(0, PROTO, "ServerName", &dbv)) { + strncpy(options.server_name, dbv.pszVal, LSTRINGLEN); + DBFreeVariant(&dbv); + } + if(!DBGetContactSettingUtf(0, PROTO, "stid", &dbv)) { + strncpy(options.id, dbv.pszVal, LSTRINGLEN); + DBFreeVariant(&dbv); + } + if(!DBGetContactSettingUtf(0, PROTO, "PWord", &dbv)) { + strncpy(options.pword, dbv.pszVal, LSTRINGLEN); + DBFreeVariant(&dbv); + + CallService(MS_DB_CRYPT_DECODESTRING, (WPARAM)LSTRINGLEN, (LPARAM)options.pword); + } + + options.port = DBGetContactSettingDword(0, PROTO, "ServerPort", DEFAULT_PORT); + options.get_server_contacts = (DBGetContactSettingByte(0, PROTO, "GetServerContacts", 1) == 1); + options.client_id = DBGetContactSettingDword(0, PROTO, "ClientID", DEFAULT_ID); + + // if popups not installed, will be changed to 'ED_BAL' (balloons) in main.cpp, modules loaded + options.err_method = (ErrorDisplay)DBGetContactSettingByte(0, PROTO, "ErrorDisplay", ED_POP); + + options.add_contacts = (DBGetContactSettingByte(0, PROTO, "AutoAddContacts", 0) == 1); + options.encrypt_session = (DBGetContactSettingByte(0, PROTO, "EncryptSession", 0) == 1); + options.idle_as_away = (DBGetContactSettingByte(0, PROTO, "IdleAsAway", 1) == 1); +} + +void SaveOptions() { + DBWriteContactSettingStringUtf(0, PROTO, "ServerName", options.server_name); + + DBWriteContactSettingStringUtf(0, PROTO, "stid", options.id); + //DBWriteContactSettingString(0, PROTO, "Nick", options.id); + + char buff[LSTRINGLEN]; + strcpy(buff, options.pword); + CallService(MS_DB_CRYPT_ENCODESTRING, (WPARAM)LSTRINGLEN, (LPARAM)buff); + DBWriteContactSettingStringUtf(0, PROTO, "PWord", buff); + + DBWriteContactSettingDword(0, PROTO, "ServerPort", options.port); + DBWriteContactSettingByte(0, PROTO, "GetServerContacts", options.get_server_contacts ? 1 : 0); + DBWriteContactSettingDword(0, PROTO, "ClientID", options.client_id); + DBWriteContactSettingByte(0, PROTO, "ErrorDisplay", options.err_method); + + DBWriteContactSettingByte(0, PROTO, "AutoAddContacts", options.add_contacts ? 1 : 0); + DBWriteContactSettingByte(0, PROTO, "EncryptSession", options.encrypt_session ? 1 : 0); + DBWriteContactSettingByte(0, PROTO, "IdleAsAway", options.idle_as_away ? 1 : 0); +} -- cgit v1.2.3