summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGluzskiy Alexandr <sss@sss.chaoslab.ru>2013-01-28 14:25:04 +0200
committerGluzskiy Alexandr <sss@sss.chaoslab.ru>2013-01-28 14:25:04 +0200
commit11fb01577835fbe3dbc309c690ae646080762742 (patch)
tree7f93cdb7777127536810f9ee22c7666259096d18
parentd1eec37b0ba6af269da5218edbdd1a74d8c0983b (diff)
merged with miranda_ng main repo
implemented #78 (except menu)
-rwxr-xr-xmain.cpp113
-rwxr-xr-xnew_gpg.rc32
-rwxr-xr-xoptions.cpp3
-rwxr-xr-xresource.h4
4 files changed, 131 insertions, 21 deletions
diff --git a/main.cpp b/main.cpp
index 87edd03..495f025 100755
--- a/main.cpp
+++ b/main.cpp
@@ -42,6 +42,8 @@ static INT_PTR CALLBACK DlgProcFirstRun(HWND hwndDlg,UINT msg,WPARAM wParam,LPAR
SetWindowPos(hwndDlg, 0, firstrun_rect.left, firstrun_rect.top, 0, 0, SWP_NOSIZE|SWP_SHOWWINDOW);
TranslateDialogDefault(hwndDlg);
SetWindowText(hwndDlg, TranslateT("Set own key"));
+ EnableWindow(GetDlgItem(hwndDlg, IDC_COPY_PUBKEY), 0);
+ EnableWindow(GetDlgItem(hwndDlg, IDC_EXPORT_PRIVATE), 0);
col.pszText = _T("Key ID");
col.mask = LVCF_TEXT | LVCF_WIDTH;
col.fmt = LVCFMT_LEFT;
@@ -321,10 +323,7 @@ static INT_PTR CALLBACK DlgProcFirstRun(HWND hwndDlg,UINT msg,WPARAM wParam,LPAR
if(result == pxNotFound)
break;
string::size_type s = 0;
- while((s = out.find("\r", s)) != string::npos)
- {
- out.erase(s, 1);
- }
+ boost::algorithm::erase_all(out, "\r");
{
char buf[64];
GetDlgItemTextA(hwndDlg, IDC_ACCOUNT, buf, 63);
@@ -708,6 +707,110 @@ static INT_PTR CALLBACK DlgProcFirstRun(HWND hwndDlg,UINT msg,WPARAM wParam,LPAR
}
}
break;
+ case IDC_COPY_PUBKEY:
+ {
+ if(OpenClipboard(hwndDlg))
+ {
+ ListView_GetItemText(hwndList, itemnum, 0, fp, 16);
+ string out;
+ DWORD code;
+ wstring cmd = _T("--batch -a --export ");
+ cmd += fp;
+ gpg_execution_params params;
+ pxResult result;
+ params.cmd = &cmd;
+ params.useless = "";
+ params.out = &out;
+ params.code = &code;
+ params.result = &result;
+ boost::thread gpg_thread(boost::bind(&pxEexcute_thread, &params));
+ if(!gpg_thread.timed_join(boost::posix_time::seconds(10)))
+ {
+ gpg_thread.~thread();
+ TerminateProcess(params.hProcess, 1);
+ params.hProcess = NULL;
+ if(bDebugLog)
+ debuglog<<std::string(time_str()+": GPG execution timed out, aborted");
+ break;
+ }
+ if(result == pxNotFound)
+ break;
+ boost::algorithm::erase_all(out, "\r");
+ HGLOBAL hMem = GlobalAlloc(GMEM_MOVEABLE, out.size() +1);
+ if(!hMem)
+ {
+ MessageBox(0, TranslateT("Failed to alocate memory"), TranslateT("Error"), MB_OK);
+ break;
+ }
+ char *szKey = (char*)GlobalLock(hMem);
+ if(!szKey)
+ {
+ char msg[64];
+ mir_snprintf(msg, 127, "Failed to lock memory with error %d", GetLastError());
+ MessageBoxA(0, msg, "Error", MB_OK);
+ GlobalFree(hMem);
+ }
+ memcpy(szKey, out.c_str(), out.size());
+ szKey[out.size()] = '\0';
+ EmptyClipboard();
+ GlobalUnlock(hMem);
+ if(!SetClipboardData(CF_OEMTEXT, hMem))
+ {
+ GlobalFree(hMem);
+ char msg[64];
+ mir_snprintf(msg, 127, "Failed write to clipboard with error %d", GetLastError());
+ MessageBoxA(0, msg, "Error", MB_OK);
+ }
+ CloseClipboard();
+ }
+ }
+ break;
+ case IDC_EXPORT_PRIVATE:
+ {
+ TCHAR *p = GetFilePath(_T("Choose file to export key"), _T("*"), _T("Any file"), true);
+ if(!p || !p[0])
+ {
+ delete [] p;
+ //TODO: handle error
+ break;
+ }
+ char *path = mir_t2a(p);
+ delete [] p;
+ std::ofstream file;
+ file.open(path, std::ios::trunc | std::ios::out);
+ mir_free(path);
+ if(!file.is_open())
+ break; //TODO: handle error
+ ListView_GetItemText(hwndList, itemnum, 0, fp, 16);
+ string out;
+ DWORD code;
+ wstring cmd = _T("--batch -a --export-secret-keys ");
+ cmd += fp;
+ gpg_execution_params params;
+ pxResult result;
+ params.cmd = &cmd;
+ params.useless = "";
+ params.out = &out;
+ params.code = &code;
+ params.result = &result;
+ boost::thread gpg_thread(boost::bind(&pxEexcute_thread, &params));
+ if(!gpg_thread.timed_join(boost::posix_time::seconds(10)))
+ {
+ gpg_thread.~thread();
+ TerminateProcess(params.hProcess, 1);
+ params.hProcess = NULL;
+ if(bDebugLog)
+ debuglog<<std::string(time_str()+": GPG execution timed out, aborted");
+ break;
+ }
+ if(result == pxNotFound)
+ break;
+ boost::algorithm::erase_all(out, "\r");
+ file<<out;
+ if(file.is_open())
+ file.close();
+ }
+ break;
}
break;
@@ -720,6 +823,8 @@ static INT_PTR CALLBACK DlgProcFirstRun(HWND hwndDlg,UINT msg,WPARAM wParam,LPAR
if(hdr->hdr.code == NM_CLICK)
{
EnableWindow(GetDlgItem(hwndDlg, ID_OK), 1);
+ EnableWindow(GetDlgItem(hwndDlg, IDC_COPY_PUBKEY), 1);
+ EnableWindow(GetDlgItem(hwndDlg, IDC_EXPORT_PRIVATE), 1);
itemnum = hdr->iItem;
}
}
diff --git a/new_gpg.rc b/new_gpg.rc
index 1a36922..caf8096 100755
--- a/new_gpg.rc
+++ b/new_gpg.rc
@@ -56,31 +56,33 @@ CAPTION "Load Public GPG key"
FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN
DEFPUSHBUTTON "ОК",ID_OK,7,169,50,14
- PUSHBUTTON "Load from file",ID_LOAD_FROM_FILE,273,169,58,14
+ PUSHBUTTON "Load from file",ID_LOAD_FROM_FILE,256,169,75,14
EDITTEXT IDC_PUBLIC_KEY_EDIT,7,7,324,134,ES_MULTILINE | ES_AUTOVSCROLL | ES_AUTOHSCROLL | WS_VSCROLL,WS_EX_STATICEDGE
PUSHBUTTON "Select existing",IDC_SELECT_EXISTING,113,169,97,14
CONTROL "Turn on encryption",IDC_ENABLE_ENCRYPTION,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,143,196,10
PUSHBUTTON "Import key from keyserver",IDC_IMPORT,140,152,188,14,WS_DISABLED
END
-IDD_FIRST_RUN DIALOGEX 0, 0, 291, 230
+IDD_FIRST_RUN DIALOGEX 0, 0, 291, 241
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "Set own key"
FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN
- DEFPUSHBUTTON "ОК",ID_OK,12,209,50,14,WS_DISABLED
+ DEFPUSHBUTTON "ОК",ID_OK,12,220,50,14,WS_DISABLED
CONTROL "",IDC_KEY_LIST,"SysListView32",LVS_REPORT | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP,7,44,277,105
- PUSHBUTTON "Generate key",IDC_GENERATE_KEY,8,152,74,14
+ PUSHBUTTON "Generate key",IDC_GENERATE_KEY,7,152,74,14
LTEXT "Select key for use",IDC_STATIC,16,33,186,8
- EDITTEXT IDC_KEY_PASSWORD,94,168,77,14,ES_PASSWORD | ES_AUTOHSCROLL
- RTEXT "Key password:",IDC_STATIC,12,170,76,8
- PUSHBUTTON "Load other",IDC_OTHER,83,152,64,14
- PUSHBUTTON "Delete key",IDC_DELETE_KEY,149,152,70,14
- PUSHBUTTON "Generate and use random key",IDC_GENERATE_RANDOM,40,184,141,14
+ EDITTEXT IDC_KEY_PASSWORD,94,187,77,14,ES_PASSWORD | ES_AUTOHSCROLL
+ RTEXT "Key password:",IDC_STATIC,12,191,76,8
+ PUSHBUTTON "Load other",IDC_OTHER,117,152,64,14
+ PUSHBUTTON "Delete key",IDC_DELETE_KEY,214,152,70,14
+ PUSHBUTTON "Generate and use random key",IDC_GENERATE_RANDOM,143,220,141,14
LTEXT "",IDC_GENERATING_KEY,82,207,174,8
LTEXT "Account:",IDC_STATIC,15,12,42,8
LTEXT "key id: ",IDC_KEY_ID,178,12,99,8
COMBOBOX IDC_ACCOUNT,66,9,104,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
+ PUSHBUTTON "Copy public key",IDC_COPY_PUBKEY,7,169,101,14
+ PUSHBUTTON "Export private key",IDC_EXPORT_PRIVATE,182,169,102,14
END
IDD_BIN_PATH DIALOGEX 0, 0, 354, 108
@@ -107,8 +109,8 @@ BEGIN
DEFPUSHBUTTON "Import key",ID_IMPORT,9,47,46,14
PUSHBUTTON "Accept and enable encryption",IDC_IMPORT_AND_USE,156,47,119,14
PUSHBUTTON "Ignore",IDC_IGNORE_KEY,368,47,52,14
- CTEXT "Статический",IDC_MESSAGE,18,25,392,8
- CTEXT "Статический",IDC_KEY_FROM,16,12,395,8
+ CTEXT "Static",IDC_MESSAGE,18,25,392,8
+ CTEXT "Static",IDC_KEY_FROM,16,12,395,8
END
IDD_KEY_GEN DIALOGEX 0, 0, 284, 169
@@ -188,7 +190,7 @@ STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_VISIBLE | WS_CAPT
CAPTION "Choose which keys to export"
FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN
- GROUPBOX "Статический",IDC_STATIC,7,7,267,63
+ GROUPBOX "Static",IDC_STATIC,7,7,267,63
PUSHBUTTON "Ok",IDC_OK,7,71,50,14
PUSHBUTTON "Cancel",IDC_CANCEL,224,71,50,14
CONTROL "Export public keys (only set for contacts)",IDC_PUBLIC,
@@ -220,8 +222,10 @@ BEGIN
RIGHTMARGIN, 284
VERTGUIDE, 15
TOPMARGIN, 7
- BOTTOMMARGIN, 223
+ BOTTOMMARGIN, 234
HORZGUIDE, 20
+ HORZGUIDE, 166
+ HORZGUIDE, 183
END
IDD_BIN_PATH, DIALOG
@@ -368,7 +372,7 @@ BEGIN
CONTROL "Turn on debug log",IDC_DEBUG_LOG,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,181,159,89,10
EDITTEXT IDC_LOG_FILE_EDIT,11,157,98,14,ES_AUTOHSCROLL
PUSHBUTTON "Browse",IDC_LOG_FILE_SET,119,156,50,14
- CONTROL "Use jabber api on Miranda IM >= 0.9 (recomended)",IDC_JABBER_API,
+ CONTROL "Use jabber api on Miranda NG (recomended)",IDC_JABBER_API,
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,11,175,251,10
LTEXT "Default key",IDC_CURRENT_KEY,12,196,110,8
CONTROL "Encrypt file transfers",IDC_FILE_TRANSFERS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,11,185,137,10
diff --git a/options.cpp b/options.cpp
index 6fb37bb..8360a26 100755
--- a/options.cpp
+++ b/options.cpp
@@ -381,8 +381,7 @@ static INT_PTR CALLBACK DlgProcGpgOpts(HWND hwndDlg, UINT msg, WPARAM wParam, LP
char *szKey = UniGetContactSettingUtf(NULL, szGPGModuleName, "GPGPubKey", "");
std::string str = szKey;;
mir_free(szKey);
- for(std::string::size_type i = str.find("\n"); i != std::string::npos; i = str.find("\n", i+2))
- str.replace(i, 1, "\r\n");
+ boost::algorithm::replace_all(str, "\n", "\r\n");
HGLOBAL hMem = GlobalAlloc(GMEM_MOVEABLE, str.size() +1);
if(!hMem)
{
diff --git a/resource.h b/resource.h
index 7ffd83c..38f790f 100755
--- a/resource.h
+++ b/resource.h
@@ -82,6 +82,7 @@
#define IDC_AUT_EXCHANGE 1065
#define IDC_BUTTON3 1066
#define IDC_COPY_KEY 1066
+#define IDC_COPY_PUBKEY 1066
#define IDC_STRIP_TAGS 1067
#define IDC_CHECK1 1068
#define IDC_PRESCENSE_SUBSCRIPTION 1068
@@ -95,6 +96,7 @@
#define IDC_PUBLIC 1073
#define IDC_PRIVATE 1074
#define IDC_ALL 1075
+#define IDC_EXPORT_PRIVATE 1076
// Next default values for new objects
//
@@ -102,7 +104,7 @@
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 115
#define _APS_NEXT_COMMAND_VALUE 40001
-#define _APS_NEXT_CONTROL_VALUE 1076
+#define _APS_NEXT_CONTROL_VALUE 1077
#define _APS_NEXT_SYMED_VALUE 101
#endif
#endif