summaryrefslogtreecommitdiff
path: root/src/utilities.cpp
diff options
context:
space:
mode:
authorGluzskiy Alexandr <sss@sss.chaoslab.ru>2013-01-04 20:28:34 +0200
committerGluzskiy Alexandr <sss@sss.chaoslab.ru>2013-01-04 20:28:34 +0200
commit81bac0208e177b647682b4d115fe47547cd43ab6 (patch)
tree4d267c18a2f9c415f061b8305706c4dcd3294310 /src/utilities.cpp
parent325d78a5cddca0baa55f962ee7e3d2141e0fdc04 (diff)
implemented #83
Diffstat (limited to 'src/utilities.cpp')
-rwxr-xr-xsrc/utilities.cpp93
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);
+}