diff options
Diffstat (limited to 'options.cpp')
-rw-r--r-- | options.cpp | 83 |
1 files changed, 55 insertions, 28 deletions
diff --git a/options.cpp b/options.cpp index d1c26e2..989b443 100644 --- a/options.cpp +++ b/options.cpp @@ -78,7 +78,7 @@ int GpgOptInit(WPARAM wParam,LPARAM lParam) return 0; } -static HWND hwndLoadPublicKey = NULL; +HWND hwndLoadPublicKey = NULL; map<int, HANDLE> user_data; @@ -229,6 +229,7 @@ static BOOL CALLBACK DlgProcGpgOpts(HWND hwndDlg, UINT msg, WPARAM wParam, LPARA 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, 3, _T("not set")); ListView_SetItemText(hwndList, item_num, 2, _T("not set")); ListView_SetItemText(hwndList, item_num, 1, _T("not set")); break; @@ -441,6 +442,7 @@ static BOOL CALLBACK DlgProcGpgMsgOpts(HWND hwndDlg, UINT msg, WPARAM wParam, LP return FALSE; } +HWND hPubKeyEdit = NULL; static BOOL CALLBACK DlgProcLoadPublicKey(HWND hwndDlg,UINT msg,WPARAM wParam,LPARAM lParam) { @@ -457,6 +459,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("")); + hPubKeyEdit = GetDlgItem(hwndDlg, IDC_PUBLIC_KEY_EDIT); return TRUE; } @@ -485,7 +488,6 @@ static BOOL CALLBACK DlgProcLoadPublicKey(HWND hwndDlg,UINT msg,WPARAM wParam,LP DBWriteContactSettingTString(hContact, szModuleName, "GPGPubKey", 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); { //gpg execute block wstring cmd; TCHAR tmp2[MAX_PATH] = {0}; @@ -523,17 +525,26 @@ static BOOL CALLBACK DlgProcLoadPublicKey(HWND hwndDlg,UINT msg,WPARAM wParam,LP cp866_to_cp1251(&output); DBDeleteContactSetting(user_data[item_num+1], szModuleName, "bAlwatsTrust"); { + TCHAR *tmp; 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, "KeyID", output.substr(s,s2-s).c_str()); + tmp = mir_a2t(output.substr(s,s2-s).c_str()); + ListView_SetItemText(hwndList_p, item_num, 1, tmp); + mir_free(tmp); 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()); + tmp = mir_a2t(output.substr(s,s2-s-1).c_str()); + ListView_SetItemText(hwndList_p, item_num, 2, tmp); + mir_free(tmp); if((s = output.find(")", s2)) == string::npos) s = output.find(">", s2); s2++; @@ -543,9 +554,17 @@ static BOOL CALLBACK DlgProcLoadPublicKey(HWND hwndDlg,UINT msg,WPARAM wParam,LP s+=3; s2 = output.find(">", s); DBWriteContactSettingString(user_data[item_num+1], szModuleName, "KeyMainEmail", output.substr(s,s2-s).c_str()); + tmp = mir_a2t(output.substr(s,s2-s).c_str()); + ListView_SetItemText(hwndList_p, item_num, 3, tmp); + mir_free(tmp); } else + { DBWriteContactSettingString(user_data[item_num+1], szModuleName, "KeyMainEmail", output.substr(s2,s-s2).c_str()); + tmp = mir_a2t(output.substr(s2,s-s2).c_str()); + ListView_SetItemText(hwndList_p, item_num, 3, tmp); + mir_free(tmp); + } } MessageBoxA(0, output.c_str(), "", MB_OK); DeleteFile(tmp2); @@ -555,35 +574,41 @@ static BOOL CALLBACK DlgProcLoadPublicKey(HWND hwndDlg,UINT msg,WPARAM wParam,LP 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()) - { - MessageBox(0, _T("Failed to open file"), _T("Error"), MB_OK); - break; - } - while(!f.eof()) { - tmp = new TCHAR [1024]; - f.getline(tmp, 1024, '\n'); - key_buf.append(tmp); - key_buf.append(_T("\n")); + 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()) + { + MessageBox(0, _T("Failed to open file"), _T("Error"), MB_OK); + break; + } + while(!f.eof() && f.is_open()) + { + tmp = new TCHAR [1024]; + f.getline(tmp, 1024, '\n'); + key_buf.append(tmp); + key_buf.append(_T("\n")); + delete [] tmp; + } + f.close(); + 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); + break; + } + ws2 += _tcslen(_T("-----END PGP PUBLIC KEY BLOCK-----")); + SetDlgItemText(hwndDlg, IDC_PUBLIC_KEY_EDIT, key_buf.substr(ws1,ws2-ws1).c_str()); + key_buf.clear(); } - f.close(); - 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); - break; - } - ws2 += _tcslen(_T("-----END PGP PUBLIC KEY BLOCK-----")); - SetDlgItemText(hwndDlg, IDC_PUBLIC_KEY_EDIT, key_buf.substr(ws1,ws2-ws1).c_str()); - key_buf.clear(); + break; + case IDC_SELECT_EXISTING: + void ShowSelectExistingKeyDialog(); + ShowSelectExistingKeyDialog(); break; } break; @@ -613,6 +638,8 @@ static BOOL CALLBACK DlgProcLoadPublicKey(HWND hwndDlg,UINT msg,WPARAM wParam,LP return FALSE; } + + void ShowLoadPublicKeyDialog() { if (hwndLoadPublicKey == NULL) |