diff options
author | Gluzskiy Alexandr <sss@sss.chaoslab.ru> | 2013-01-04 20:28:34 +0200 |
---|---|---|
committer | Gluzskiy Alexandr <sss@sss.chaoslab.ru> | 2013-01-04 20:28:34 +0200 |
commit | 81bac0208e177b647682b4d115fe47547cd43ab6 (patch) | |
tree | 4d267c18a2f9c415f061b8305706c4dcd3294310 /src/utilities.cpp | |
parent | 325d78a5cddca0baa55f962ee7e3d2141e0fdc04 (diff) |
implemented #83
Diffstat (limited to 'src/utilities.cpp')
-rwxr-xr-x | src/utilities.cpp | 93 |
1 files changed, 86 insertions, 7 deletions
diff --git a/src/utilities.cpp b/src/utilities.cpp index a430964..ab9b776 100755 --- a/src/utilities.cpp +++ b/src/utilities.cpp @@ -328,14 +328,15 @@ int OnPreBuildContactMenu(WPARAM w, LPARAM l) list<wstring> transfers; -extern bool bFileTransfers; +
+DWORD file_msg_state = -1;
int onProtoAck(WPARAM w, LPARAM l) { ACKDATA *ack=(ACKDATA*)l; CCSDATA *ccs=(CCSDATA*)ack->lParam; - if(ack->type == ACKTYPE_FILE && bFileTransfers) + if(ack->type == ACKTYPE_FILE)
{ switch(ack->result) { @@ -363,6 +364,15 @@ int onProtoAck(WPARAM w, LPARAM l) } if(_tcsstr(filename, _T(".gpg"))) //decrypt it
{ //process encrypted file
+ if(!bFileTransfers && !bSameAction)
+ {
+ void ShowEncryptedFileMsgBox();
+ ShowEncryptedFileMsgBox();
+ }
+ if(!bFileTransfers && bSameAction)
+ return 0;
+ if(file_msg_state < 1)
+ return 0;
HistoryLog(ack->hContact, db_event("Recieved encrypted file, trying to decrypt", 0,0, 0));
if(_waccess(f->tszCurrentFile, 0) == -1)
{ @@ -473,7 +483,7 @@ int onProtoAck(WPARAM w, LPARAM l) }
out.clear();
gpg_execution_params params;
- pxResult result;
+ //pxResult result;
params.cmd = &cmd2;
params.useless = "";
params.out = &out;
@@ -486,16 +496,17 @@ int onProtoAck(WPARAM w, LPARAM l) TerminateProcess(params.hProcess, 1);
params.hProcess = NULL;
debuglog<<time_str()<<": GPG execution timed out, aborted\n";
- DeleteFile(filename);
+ //DeleteFile(filename);
return 0;
}
if(result == pxNotFound)
{
- DeleteFile(filename);
+ //DeleteFile(filename);
return 0;
}
} - DeleteFile(filename);
+ if(result == pxSuccess)
+ DeleteFile(filename);
mir_free(filename);
}
} @@ -1964,4 +1975,72 @@ void strip_tags(std::wstring &str) for(p = str.find(outclosetag); p != std::wstring::npos; p = str.find(outclosetag)) str.erase(p, _tcslen(outclosetag)); } -}
\ No newline at end of file +} +
+
+static INT_PTR CALLBACK DlgProcEncryptedFileMsgBox(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam)
+{
+ char *inkeyid = NULL;
+ switch (msg)
+ {
+ case WM_INITDIALOG:
+ {
+ TranslateDialogDefault(hwndDlg);
+ file_msg_state = -1;
+ return TRUE;
+ }
+
+
+ case WM_COMMAND:
+ {
+ switch (LOWORD(wParam))
+ {
+ case IDC_IGNORE:
+ if(IsDlgButtonChecked(hwndDlg, IDC_REMEMBER))
+ {
+ DBWriteContactSettingByte(NULL, szGPGModuleName, "bSameAction", 1);
+ bSameAction = true;
+ }
+ DestroyWindow(hwndDlg);
+ break;
+
+ case IDC_DECRYPT:
+ file_msg_state = 1;
+ if(IsDlgButtonChecked(hwndDlg, IDC_REMEMBER))
+ {
+ DBWriteContactSettingByte(NULL, szGPGModuleName, "bFileTransfers", 1);
+ bFileTransfers = true;
+ DBWriteContactSettingByte(NULL, szGPGModuleName, "bSameAction", 0);
+ bSameAction = false;
+ }
+
+ DestroyWindow(hwndDlg);
+ break;
+
+ default:
+ break;
+ }
+
+ break;
+ }
+
+ case WM_NOTIFY:
+ {
+ }
+ break;
+ case WM_CLOSE:
+ DestroyWindow(hwndDlg);
+ break;
+ case WM_DESTROY:
+ {
+ }
+ break;
+ }
+ return FALSE;
+}
+
+void ShowEncryptedFileMsgBox()
+{
+ extern HINSTANCE hInst;
+ DialogBox(hInst, MAKEINTRESOURCE(IDD_ENCRYPTED_FILE_MSG_BOX), NULL, DlgProcEncryptedFileMsgBox);
+}
|