From 72f3ccc35b220489bf52abd2abe1d901c87acb2c Mon Sep 17 00:00:00 2001 From: Gluzskiy Alexandr Date: Fri, 13 Aug 2010 02:27:42 +0300 Subject: modified: main.cpp modified: messages.cpp modified: new_gpg.rc modified: resource.h modified: utilities.cpp --- main.cpp | 90 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++-- messages.cpp | 19 +++++++++---- new_gpg.rc | 22 +++++++++++++++ resource.h | 6 ++-- utilities.cpp | 1 + 5 files changed, 128 insertions(+), 10 deletions(-) diff --git a/main.cpp b/main.cpp index 1ab11aa..eeaa102 100644 --- a/main.cpp +++ b/main.cpp @@ -30,7 +30,7 @@ void test() } -HWND hwndFirstRun = NULL; +HWND hwndFirstRun = NULL, hwndSetDirs = NULL; int itemnum = 0; @@ -193,8 +193,83 @@ static BOOL CALLBACK DlgProcFirstRun(HWND hwndDlg,UINT msg,WPARAM wParam,LPARAM return FALSE; } +void ShowFirstRunDialog(); + +static BOOL CALLBACK DlgProcGpgBinOpts(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) +{ + TCHAR *tmp = NULL; + switch (msg) + { + case WM_INITDIALOG: + { + TranslateDialogDefault(hwndDlg); + tmp = UniGetContactSettingUtf(NULL, szModuleName, "szGpgBinPath", _T("")); + SetDlgItemText(hwndDlg, IDC_BIN_PATH, tmp); + mir_free(tmp); + tmp = UniGetContactSettingUtf(NULL, szModuleName, "szHomePath", _T("")); + SetDlgItemText(hwndDlg, IDC_HOME_DIR, tmp); + mir_free(tmp); + return TRUE; + } + + + case WM_COMMAND: + { + switch (LOWORD(wParam)) + { + case IDC_SET_BIN_PATH: + GetFilePath(_T("Choose gpg2.exe"), "szGpgBinPath", _T("*.exe"), _T("EXE Executables")); + tmp = UniGetContactSettingUtf(NULL, szModuleName, "szGpgBinPath", _T("gpg2.exe")); + SetDlgItemText(hwndDlg, IDC_BIN_PATH, tmp); + mir_free(tmp); + break; + case IDC_SET_HOME_DIR: + GetFolderPath(_T("Set home diractory"), "szHomePath"); + tmp = UniGetContactSettingUtf(NULL, szModuleName, "szHomePath", _T("")); + SetDlgItemText(hwndDlg, IDC_HOME_DIR, tmp); + mir_free(tmp); + break; + case ID_OK: + { + TCHAR tmp[512]; + GetDlgItemText(hwndDlg, IDC_BIN_PATH, tmp, 512); + DBWriteContactSettingTString(NULL, szModuleName, "szGpgBinPath", tmp); + GetDlgItemText(hwndDlg, IDC_HOME_DIR, tmp, 512); + DBWriteContactSettingTString(NULL, szModuleName, "szHomePath", tmp); + DestroyWindow(hwndDlg); + ShowFirstRunDialog(); + break; + } + + default: + break; + } + + break; + } + + case WM_NOTIFY: + { + switch (((LPNMHDR)lParam)->code) + { + } + } + break; + case WM_CLOSE: + DestroyWindow(hwndDlg); + break; + case WM_DESTROY: + hwndFirstRun = NULL; + break; + + } + return FALSE; +} + + extern HINSTANCE hInst; + void ShowFirstRunDialog() { if (hwndFirstRun == NULL) @@ -205,9 +280,20 @@ void ShowFirstRunDialog() } +void ShowSetDirsDialog() +{ + if (hwndSetDirs == NULL) + { + hwndSetDirs = CreateDialog(hInst, MAKEINTRESOURCE(IDD_BIN_PATH), NULL, DlgProcGpgBinOpts); + } + SetForegroundWindow(hwndSetDirs); +} + + void FirstRun() { + DWORD pid = 0; if(!DBGetContactSettingByte(NULL, szModuleName, "FirstRun", 1)) return; - ShowFirstRunDialog(); + ShowSetDirsDialog(); } diff --git a/messages.cpp b/messages.cpp index 792e3fa..db6fdad 100644 --- a/messages.cpp +++ b/messages.cpp @@ -102,7 +102,7 @@ int RecvMsgSvc(WPARAM w, LPARAM l) cmd += _T("\\decrypted_data\""); cmd += _T(" -d -a \""); cmd += path; - cmd += _T("\""); + cmd += _T("\""); pxExecute(&cmd, "", &out, &code); DeleteFile(path.c_str()); str.clear(); @@ -115,7 +115,11 @@ int RecvMsgSvc(WPARAM w, LPARAM l) { char tmp[256]; f.getline(tmp, 256); - TCHAR *tmp2 = mir_a2t(tmp); + TCHAR *tmp2; +// if(unicode) + tmp2 = mir_utf8decodeW(tmp); +// else +// tmp2 = mir_a2t(tmp); str.append(tmp2).append(_T("\n")); mir_free(tmp); } @@ -123,12 +127,11 @@ int RecvMsgSvc(WPARAM w, LPARAM l) DeleteFile(path.c_str()); if(!str.length()) { + mir_free((void**)pre->szMessage); pre->szMessage = "Failed to decrypt GPG encrypted message"; return CallService(MS_PROTO_CHAINRECV, w, (LPARAM)ccs); } - } - { - if(str.length() > 0) + else { mir_free((void**)pre->szMessage); char *utf = mir_utf8encodeW(str.c_str()); @@ -185,7 +188,11 @@ int SendMsgSvc(WPARAM w, LPARAM l) path.append(_T("\\exported_data")); cmd += _T("\""); { - char *tmp = mir_t2a(str.c_str()); + char *tmp; +// if(unicode) + tmp = mir_utf8encodeW(str.c_str()); +// else +// tmp = mir_t2a(str.c_str()); wfstream f(path.c_str(), std::ios::out); f<