From 329ad737e54ed5972a727105301877750011d9b3 Mon Sep 17 00:00:00 2001 From: Gluzskiy Alexandr Date: Tue, 10 Aug 2010 01:50:05 +0300 Subject: modified: main.cpp modified: options.cpp modified: utilities.cpp modified: utilities.h --- options.cpp | 41 +++++++++++++++++++++++++++++++++++------ 1 file changed, 35 insertions(+), 6 deletions(-) (limited to 'options.cpp') diff --git a/options.cpp b/options.cpp index 772d2d4..60cf2d9 100644 --- a/options.cpp +++ b/options.cpp @@ -64,6 +64,7 @@ static BOOL CALLBACK DlgProcGpgOpts(HWND hwndDlg, UINT msg, WPARAM wParam, LPARA hwndList_p = hwndList; LVCOLUMN col; LVITEM item; + TCHAR *tmp; NMLISTVIEW * hdr = (NMLISTVIEW *) lParam; switch (msg) { @@ -123,14 +124,29 @@ static BOOL CALLBACK DlgProcGpgOpts(HWND hwndDlg, UINT msg, WPARAM wParam, LPARA case IDC_LOAD_KEY_BUTTON: ShowLoadPublicKeyDialog(); return TRUE; - case IDC_SAVE_KEY_BUTTON: - break; case IDC_DELETE_KEY_BUTTON: DBDeleteContactSetting(user_data[item_num+1], szModuleName, "GPGPubKey"); ListView_SetItemText(hwndList, item_num, 2, _T("not set")); break; default: break; + case IDC_SAVE_KEY_BUTTON: + tmp = GetFilePath(_T("Export public key"), _T("*"), _T(".asc pubkey file"), true); + if(!tmp) + { + break; + } + wfstream f(tmp, std::ios::out); + delete [] tmp; + wstring str = UniGetContactSettingUtf(user_data[item_num+1], szModuleName, "GPGPubKey", _T("")); + wstring::size_type s = 0; + while((s = str.find(_T("\r"), s)) != wstring::npos) + { + str.erase(s, 1); + } + f< 1)?tmp:_T("")); - mir_free(tmp); - return TRUE; + return TRUE; } @@ -249,7 +265,13 @@ static BOOL CALLBACK DlgProcLoadPublicKey(HWND hwndDlg,UINT msg,WPARAM wParam,LP tmp = new TCHAR [40960]; GetDlgItemText(hwndDlg, IDC_PUBLIC_KEY_EDIT, tmp, 40960); key_buf.append(tmp); + key_buf.append(_T("\n")); //no new line at end of file ) delete [] tmp; + while((ws1 = key_buf.find(_T("\r"), ws1)) != wstring::npos) + { + key_buf.erase(ws1, 1); //remove windows specific trash + } + ws1 = 0; if(((ws2 = key_buf.find(_T("-----END PGP PUBLIC KEY BLOCK-----"))) == wstring::npos) || ((ws1 = key_buf.find(_T("-----BEGIN PGP PUBLIC KEY BLOCK-----"))) == wstring::npos)) { MessageBox(0, _T("This is not public key"), _T("INFO"), MB_OK); @@ -257,12 +279,19 @@ static BOOL CALLBACK DlgProcLoadPublicKey(HWND hwndDlg,UINT msg,WPARAM wParam,LP } ws2 += _tcslen(_T("-----END PGP PUBLIC KEY BLOCK-----")); DBWriteContactSettingTString(hContact, szModuleName, "GPGPubKey", key_buf.substr(ws1,ws2-ws1).c_str()); - ListView_SetItemText(hwndList_p, item_num, 2, (TCHAR*)key_buf.substr(ws1,ws2-ws1).c_str()); + tmp = new TCHAR [key_buf.length()+1]; + _tcscpy(tmp, key_buf.substr(ws1,ws2-ws1).c_str()); + ListView_SetItemText(hwndList_p, item_num, 2, tmp); + delete [] tmp; key_buf.clear(); DestroyWindow(hwndDlg); break; case ID_LOAD_FROM_FILE: tmp = GetFilePath(_T("Set file containing GPG public key"), _T("*"), _T("GPG public key file")); + if(!tmp) + { + break; + } wfstream f(tmp, std::ios::in); delete [] tmp; if(!f.is_open()) @@ -275,7 +304,7 @@ static BOOL CALLBACK DlgProcLoadPublicKey(HWND hwndDlg,UINT msg,WPARAM wParam,LP tmp = new TCHAR [1024]; f.getline(tmp, 1024, '\n'); key_buf.append(tmp); - key_buf.append(_T("\r\n")); + key_buf.append(_T("\n")); delete [] tmp; } f.close(); -- cgit v1.2.3