summaryrefslogtreecommitdiff
path: root/options.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'options.cpp')
-rw-r--r--options.cpp76
1 files changed, 68 insertions, 8 deletions
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);
}