From ff34af8edad99fae99b59def8a3d5cce92085a9c Mon Sep 17 00:00:00 2001 From: Gluzskiy Alexandr Date: Wed, 11 Aug 2010 02:52:42 +0300 Subject: modified: commonheaders.h modified: gpg_wrapper.cpp modified: gpg_wrapper.h modified: init.cpp modified: main.cpp modified: messages.cpp modified: options.cpp modified: utilities.cpp modified: utilities.h --- options.cpp | 76 ++++++++++++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 68 insertions(+), 8 deletions(-) (limited to 'options.cpp') diff --git a/options.cpp b/options.cpp index b5c690d..e1ce214 100644 --- a/options.cpp +++ b/options.cpp @@ -126,7 +126,49 @@ static BOOL CALLBACK DlgProcGpgOpts(HWND hwndDlg, UINT msg, WPARAM wParam, LPARA return TRUE; case IDC_DELETE_KEY_BUTTON: DBDeleteContactSetting(user_data[item_num+1], szModuleName, "GPGPubKey"); + DBDeleteContactSetting(user_data[item_num+1], szModuleName, "KeyFingerprint"); + DBDeleteContactSetting(user_data[item_num+1], szModuleName, "KeyMainName"); + DBDeleteContactSetting(user_data[item_num+1], szModuleName, "KeyType"); + DBDeleteContactSetting(user_data[item_num+1], szModuleName, "KeyMainEmail"); + DBDeleteContactSetting(user_data[item_num+1], szModuleName, "KeyComment"); ListView_SetItemText(hwndList, item_num, 2, _T("not set")); + { //gpg execute block + TCHAR cmd[40960] = {0}; + TCHAR tmp2[MAX_PATH] = {0}; + TCHAR *ptmp; + char *tmp; + bool keep = false; + tmp = GetContactSettingStringA(user_data[item_num+1], szModuleName, "KeyFingerprint", ""); + for(HANDLE hContact = (HANDLE)CallService(MS_DB_CONTACT_FINDFIRST, 0, 0); hContact != NULL; hContact = (HANDLE)CallService(MS_DB_CONTACT_FINDNEXT, (WPARAM)hContact, 0)) + { + if(hContact != user_data[item_num+1]) + { + char *tmp2 = GetContactSettingStringA(hContact, szModuleName, "KeyFingerprint", ""); + if(!strcmp(tmp, tmp2)) + { + mir_free(tmp2); + keep = true; + break; + } + mir_free(tmp2); + } + } + if(keep) + { + mir_free(tmp); + break; + } + string output; + DWORD exitcode; + _tcscat(cmd, _T(" --batch")); + _tcscat(cmd, _T(" --yes")); + _tcscat(cmd, _T(" --delete-key ")); + ptmp = mir_a2t(tmp); + _tcscat(cmd, ptmp); + mir_free(ptmp); + pxResult pxresult=pxExecute(cmd,"",&output,&exitcode); + mir_free(tmp); + } break; default: break; @@ -301,16 +343,9 @@ static BOOL CALLBACK DlgProcLoadPublicKey(HWND hwndDlg,UINT msg,WPARAM wParam,LP TCHAR *ptmp; string output; DWORD exitcode; - ptmp = UniGetContactSettingUtf(NULL, szModuleName, "szGpgBinPath", _T("")); - _tcscpy(cmd, ptmp); - mir_free(ptmp); - _tcscat(cmd, _T(" --homedir ")); - _tcscat(cmd, _T("\"")); - ptmp = UniGetContactSettingUtf(NULL, szModuleName, "szHomePath", _T("")); - _tcscat(cmd, ptmp); - _tcscat(cmd, _T("\"")); _tcscat(cmd, _T(" --import ")); { + ptmp = UniGetContactSettingUtf(NULL, szModuleName, "szHomePath", _T("")); _tcscpy(tmp2, ptmp); mir_free(ptmp); _tcscat(tmp2, _T("\\")); @@ -332,6 +367,31 @@ static BOOL CALLBACK DlgProcLoadPublicKey(HWND hwndDlg,UINT msg,WPARAM wParam,LP } pxResult pxresult=pxExecute(cmd,"",&output,&exitcode); cp866_to_cp1251(&output); + { + string::size_type s = output.find("gpg: key ") + strlen("gpg: key "); + string::size_type s2 = output.find(":", s); + DBWriteContactSettingString(user_data[item_num+1], szModuleName, "KeyFingerprint", output.substr(s,s2-s).c_str()); + s2+=2; + s = output.find("\"", s2)-1; + if(s != s2-1) + DBWriteContactSettingString(user_data[item_num+1], szModuleName, "KeyType", output.substr(s2,s-s2).c_str()); + s+=2; + if((s2 = output.find("(", s)) == string::npos) + s2 = output.find("<", s); + DBWriteContactSettingString(user_data[item_num+1], szModuleName, "KeyMainName", output.substr(s,s2-s-1).c_str()); + if((s = output.find(")", s2)) == string::npos) + s = output.find(">", s2); + s2++; + if(output[s] == ')') + { + DBWriteContactSettingString(user_data[item_num+1], szModuleName, "KeyComment", output.substr(s2,s-s2).c_str()); + s+=3; + s2 = output.find(">", s); + DBWriteContactSettingString(user_data[item_num+1], szModuleName, "KeyMainEmail", output.substr(s,s2-s).c_str()); + } + else + DBWriteContactSettingString(user_data[item_num+1], szModuleName, "KeyMainEmail", output.substr(s2,s-s2).c_str()); + } MessageBoxA(0, output.c_str(), "", MB_OK); DeleteFile(tmp2); } -- cgit v1.2.3