diff options
Diffstat (limited to 'options.cpp')
-rw-r--r-- | options.cpp | 41 |
1 files changed, 35 insertions, 6 deletions
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<<str.c_str();
+ f.close();
+ break;
}
SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0);
@@ -169,6 +185,7 @@ static BOOL CALLBACK DlgProcGpgOpts(HWND hwndDlg, UINT msg, WPARAM wParam, LPARA static BOOL CALLBACK DlgProcGpgBinOpts(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam)
{
+ TCHAR *tmp = NULL;
switch (msg)
{
case WM_INITDIALOG:
@@ -236,8 +253,7 @@ static BOOL CALLBACK DlgProcLoadPublicKey(HWND hwndDlg,UINT msg,WPARAM wParam,LP TranslateDialogDefault(hwndDlg);
tmp = UniGetContactSettingUtf(hContact, szModuleName, "GPGPubKey", _T(""));
SetDlgItemText(hwndDlg, IDC_PUBLIC_KEY_EDIT, (_tcslen(tmp) > 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();
|