From 728d102e547378a2d2baec15c473ab0ddc9ea0dc Mon Sep 17 00:00:00 2001 From: George Hazan Date: Mon, 17 Jul 2023 22:38:24 +0300 Subject: File transfer options not to use g_plugin.* functions anymore, because there's no more StdFile --- src/mir_app/res/resource.rc | 84 ++++++++++------ src/mir_app/src/file.cpp | 7 ++ src/mir_app/src/file.h | 3 + src/mir_app/src/fileopts.cpp | 206 +++++++++++++++++++++++----------------- src/mir_app/src/filerecvdlg.cpp | 10 +- src/mir_app/src/filexferdlg.cpp | 51 +++++----- src/mir_app/src/resource.h | 13 ++- 7 files changed, 219 insertions(+), 155 deletions(-) diff --git a/src/mir_app/res/resource.rc b/src/mir_app/res/resource.rc index 301cd47f9f..00ae85f211 100644 --- a/src/mir_app/res/resource.rc +++ b/src/mir_app/res/resource.rc @@ -815,13 +815,11 @@ EXSTYLE WS_EX_CONTROLPARENT FONT 8, "MS Shell Dlg", 0, 0, 0x1 BEGIN GROUPBOX "Default settings for known event types",IDC_STATIC,7,5,293,153 - CONTROL "Window",IDC_ICON1,"MButtonClass",WS_TABSTOP,109,13,16,16,WS_EX_NOACTIVATE | 0x10000000L CONTROL "Popup",IDC_ICON2,"MButtonClass",WS_TABSTOP,149,13,16,16,WS_EX_NOACTIVATE | 0x10000000L CONTROL "Tray",IDC_ICON3,"MButtonClass",WS_TABSTOP,189,13,16,16,WS_EX_NOACTIVATE | 0x10000000L CONTROL "Sound",IDC_ICON4,"MButtonClass",WS_TABSTOP,229,13,16,16,WS_EX_NOACTIVATE | 0x10000000L CONTROL "Log to file",IDC_ICON5,"MButtonClass",WS_TABSTOP,269,13,16,16,WS_EX_NOACTIVATE | 0x10000000L - LTEXT "Actions",IDC_STATIC,22,28,80,10 LTEXT "Messages",IDC_STATIC,22,38,80,10 LTEXT "Nick changes",IDC_STATIC,22,48,80,10 @@ -834,7 +832,6 @@ BEGIN LTEXT "User kicks",IDC_STATIC,22,118,80,10 LTEXT "Notices",IDC_STATIC,22,128,80,10 LTEXT "Highlight event",IDC_STATIC,22,138,80,10 - CONTROL "",IDC_1,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,113,28,21,10 CONTROL "",IDC_2,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,113,38,21,10 CONTROL "",IDC_3,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,113,48,21,10 @@ -1125,44 +1122,55 @@ FONT 8, "MS Shell Dlg", 400, 0, 0x1 BEGIN END -IDD_OPT_FILETRANSFER DIALOGEX 0, 0, 313, 243 +IDD_OPT_FILEGENERAL DIALOGEX 0, 0, 313, 243 STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD EXSTYLE WS_EX_CONTROLPARENT FONT 8, "MS Shell Dlg", 0, 0, 0x1 BEGIN - GROUPBOX "Receiving files",IDC_STATIC,0,0,313,99 - LTEXT "Received files folder:",IDC_STATIC,8,15,82,8 - EDITTEXT IDC_FILEDIR,92,13,190,12,ES_AUTOHSCROLL + GROUPBOX "Receiving files",IDC_STATIC,5,2,302,131 + LTEXT "Received files folder:",IDC_STATIC,12,15,82,8 + EDITTEXT IDC_FILEDIR,95,13,190,12,ES_AUTOHSCROLL PUSHBUTTON "...",IDC_FILEDIRBROWSE,287,12,15,13 - LTEXT "Variables allowed: %userid%, %nick%, %proto%, %miranda_path%, %userprofile%",IDC_STATIC,8,26,294,11,WS_DISABLED + LTEXT "Variables allowed: %userid%, %nick%, %proto%, %miranda_path%, %userprofile%",IDC_STATIC,12,26,291,11,WS_DISABLED CONTROL "Auto-accept incoming files from people on my contact list",IDC_AUTOACCEPT, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,36,294,10 - CONTROL "Minimize the file transfer window",IDC_AUTOMIN,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,17,48,285,10 + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,36,287,10 + CONTROL "Minimize the file transfer window",IDC_AUTOMIN,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,20,48,279,10 CONTROL "Close window when transfer completes",IDC_AUTOCLOSE, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,60,294,10 + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,60,289,10 CONTROL "Clear completed transfers on window closing",IDC_AUTOCLEAR, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,72,294,10 + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,72,289,10 CONTROL "Sort file transfers in the reverse order",IDC_REVERSE_ORDER, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,84,286,10 - GROUPBOX "Virus scanner",IDC_VIRUSSCANNERGROUP,0,100,313,93 - LTEXT "Scan files:",IDC_STATIC,8,112,43,9,SS_CENTERIMAGE - CONTROL "Never, do not use virus scanning",IDC_NOSCANNER,"Button",BS_AUTORADIOBUTTON,52,112,250,10 + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,84,287,10 + LTEXT "You will always be asked about files from people not on your contact list",IDC_STATIC,13,117,296,10 + LTEXT "If incoming files already exist",IDC_STATIC,14,102,172,8 + COMBOBOX IDC_FILEEXISTS,193,100,100,30,CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP + GROUPBOX "Offline files",IDC_STATIC,5,134,302,43 + CONTROL "Download offline files automatically",IDC_OFFLINE_AUTO, + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,148,288,10 + RTEXT "Only if their size is less than",IDC_STATIC,12,162,153,8 + EDITTEXT IDC_OFFLINE_AUTOSIZE,169,160,40,12,ES_AUTOHSCROLL + LTEXT "KBytes (0 - always)",IDC_STATIC,212,162,91,8 + CONTROL "",IDC_OFFLINE_AUTOSIZE_SPIN,"msctls_updown32",UDS_ARROWKEYS,198,159,11,14 +END + +IDD_OPT_FILESECURITY DIALOGEX 0, 0, 313, 243 +STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD +EXSTYLE WS_EX_CONTROLPARENT +FONT 8, "MS Shell Dlg", 0, 0, 0x1 +BEGIN + GROUPBOX "Virus scanner",IDC_STATIC,0,1,313,93 + LTEXT "Scan files:",IDC_STATIC,8,13,43,9,SS_CENTERIMAGE + CONTROL "Never, do not use virus scanning",IDC_NOSCANNER,"Button",BS_AUTORADIOBUTTON,52,13,250,10 CONTROL "When all files have been downloaded",IDC_SCANAFTERDL, - "Button",BS_AUTORADIOBUTTON,52,124,250,10 + "Button",BS_AUTORADIOBUTTON,52,25,250,10 CONTROL "As each file finishes downloading",IDC_SCANDURINGDL, - "Button",BS_AUTORADIOBUTTON,52,136,250,10 - LTEXT "Command line:",IDC_ST_CMDLINE,7,152,62,8 - COMBOBOX IDC_SCANCMDLINE,70,151,213,71,CBS_DROPDOWN | CBS_AUTOHSCROLL | CBS_SORT | WS_VSCROLL | WS_TABSTOP - PUSHBUTTON "...",IDC_SCANCMDLINEBROWSE,287,151,15,13 - LTEXT "%f will be replaced by the file or folder name to be scanned",IDC_ST_CMDLINEHELP,70,165,232,8 + "Button",BS_AUTORADIOBUTTON,52,37,250,10 + LTEXT "Command line:",IDC_ST_CMDLINE,7,53,62,8 + COMBOBOX IDC_SCANCMDLINE,70,52,213,71,CBS_DROPDOWN | CBS_AUTOHSCROLL | CBS_SORT | WS_VSCROLL | WS_TABSTOP + PUSHBUTTON "...",IDC_SCANCMDLINEBROWSE,287,52,15,13 + LTEXT "%f will be replaced by the file or folder name to be scanned",IDC_ST_CMDLINEHELP,70,66,232,8 CONTROL "Warn me before opening a file that has not been scanned",IDC_WARNBEFOREOPENING, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,178,294,10 - GROUPBOX "If incoming files already exist",IDC_STATIC,0,197,313,41 - CONTROL "Ask me",IDC_ASK,"Button",BS_AUTORADIOBUTTON,8,210,73,10 - CONTROL "Resume",IDC_RESUME,"Button",BS_AUTORADIOBUTTON,82,210,125,10 - CONTROL "Overwrite",IDC_OVERWRITE,"Button",BS_AUTORADIOBUTTON,8,222,73,10 - CONTROL "Rename (append "" (1)"", etc.)",IDC_RENAME,"Button",BS_AUTORADIOBUTTON,82,222,125,10 - LTEXT "You will always be asked about files from people not on your contact list",IDC_STATIC,212,208,90,24 + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,79,294,10 END @@ -1406,6 +1414,14 @@ BEGIN BEGIN BOTTOMMARGIN, 194 END + + IDD_OPT_FILEGENERAL, DIALOG + BEGIN + END + + IDD_OPT_FILESECURITY, DIALOG + BEGIN + END END #endif // APSTUDIO_INVOKED @@ -1818,6 +1834,16 @@ BEGIN 0 END +IDD_OPT_FILESECURITY AFX_DIALOG_LAYOUT +BEGIN + 0 +END + +IDD_OPT_FILEGENERAL AFX_DIALOG_LAYOUT +BEGIN + 0 +END + #endif // English (United States) resources ///////////////////////////////////////////////////////////////////////////// diff --git a/src/mir_app/src/file.cpp b/src/mir_app/src/file.cpp index a53d57f5a8..b72149de8e 100644 --- a/src/mir_app/src/file.cpp +++ b/src/mir_app/src/file.cpp @@ -36,6 +36,13 @@ CMOption File::bAutoClear(SRFILEMODULE, "AutoClear", true); CMOption File::bAutoClose(SRFILEMODULE, "AutoClose", false); CMOption File::bAutoAccept(SRFILEMODULE, "AutoAccept", false); CMOption File::bReverseOrder(SRFILEMODULE, "ReverseOrder", false); +CMOption File::bWarnBeforeOpening(SRFILEMODULE, "WarnBeforeOpening", true); + +CMOption File::iUseScanner(SRFILEMODULE, "UseScanner", VIRUSSCAN_DISABLE); +CMOption File::iIfExists(SRFILEMODULE, "IfExists", FILERESUME_ASK); + +CMOption File::wszSaveDir(SRFILEMODULE, "RecvFilesDirAdv", L""); +CMOption File::wszScanCmdLine(SRFILEMODULE, "ScanCmdLine", L""); static HGENMENU hSRFileMenuItem; diff --git a/src/mir_app/src/file.h b/src/mir_app/src/file.h index f2d90e12ca..b807c4bc5b 100644 --- a/src/mir_app/src/file.h +++ b/src/mir_app/src/file.h @@ -137,4 +137,7 @@ extern MWindowList g_hFileWindows; namespace File { extern CMOption bAutoMin, bAutoClear, bAutoClose, bAutoAccept, bReverseOrder; + extern CMOption bWarnBeforeOpening; + extern CMOption iIfExists, iUseScanner; + extern CMOption wszSaveDir, wszScanCmdLine; }; diff --git a/src/mir_app/src/fileopts.cpp b/src/mir_app/src/fileopts.cpp index b511bd6c79..c8bca065e2 100644 --- a/src/mir_app/src/fileopts.cpp +++ b/src/mir_app/src/fileopts.cpp @@ -24,58 +24,26 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include "stdafx.h" #include "file.h" -#define VSCAN_MCAFEE 1 -#define VSCAN_DRSOLOMON 2 -#define VSCAN_NORTON 3 -#define VSCAN_CA 4 - -struct { - const wchar_t *szProductName; - const wchar_t *szExeRegPath; - const wchar_t *szExeRegValue; - const wchar_t *szCommandLine; -} -static virusScanners[] = -{ - {L"Network Associates/McAfee VirusScan", L"SOFTWARE\\McAfee\\VirusScan", L"Scan32EXE", L"\"%s\" %%f /nosplash /comp /autoscan /autoexit /noboot"}, - {L"Dr Solomon's VirusScan (Network Associates)", L"SOFTWARE\\Network Associates\\TVD\\VirusScan\\AVConsol\\General", L"szScannerExe", L"\"%s\" %%f /uinone /noboot /comp /prompt /autoexit"}, - {L"Norton AntiVirus", L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\App Paths\\Navw32.exe", nullptr, L"\"%s\" %%f /b- /m- /s+ /noresults"}, - {L"Computer Associates/Inoculate IT", L"Software\\Antivirus", L"ImageFilename", L"\"%s\" %%f /display = progress /exit"}, - {L"Computer Associates eTrust", L"SOFTWARE\\ComputerAssociates\\Anti-Virus\\Resident", L"VetPath", L"\"%s\" %%f /display = progress /exit"}, - {L"Kaspersky Anti-Virus", L"SOFTWARE\\KasperskyLab\\Components\\101", L"EXEName", L"\"%s\" /S /Q %%f"}, - {L"Kaspersky Anti-Virus", L"SOFTWARE\\KasperskyLab\\SetupFolders", L"KAV8", L"\"%savp.exe\" SCAN %%f"}, - {L"Kaspersky Anti-Virus", L"SOFTWARE\\KasperskyLab\\SetupFolders", L"KAV9", L"\"%savp.exe\" SCAN %%f"}, - {L"AntiVir PersonalEdition Classic", L"SOFTWARE\\Avira\\AntiVir PersonalEdition Classic", L"Path", L"\"%savscan.exe\" /GUIMODE = 2 /PATH = \"%%f\""}, - {L"ESET NOD32 Antivirus", L"SOFTWARE\\ESET\\ESET Security\\CurrentVersion\\Info", L"InstallDir", L"\"%secls.exe\" /log-all /aind /no-boots /adware /sfx /unsafe /unwanted /heur /adv-heur /action = clean \"%%f\""}, -}; - #ifndef SHACF_FILESYS_DIRS #define SHACF_FILESYS_DIRS 0x00000020 #endif -class CFileOptsDlg : public CDlgBase +class CFileGeneralOptsDlg : public CDlgBase { - CCtrlButton btnFileDir, btnScanCmdLine; + CCtrlButton btnFileDir; CCtrlCheck chkAutoMin, chkAutoClear, chkAutoClose, chkAutoAccept, chkReverseOrder; - CCtrlCheck chkNoScanner, chkScanDuringDl, chkScanAfterDl; - CCtrlCombo cmbScanCmdLine; + CCtrlCombo cmbFileExists; public: - CFileOptsDlg() : - CDlgBase(g_plugin, IDD_OPT_FILETRANSFER), + CFileGeneralOptsDlg() : + CDlgBase(g_plugin, IDD_OPT_FILEGENERAL), btnFileDir(this, IDC_FILEDIRBROWSE), - btnScanCmdLine(this, IDC_SCANCMDLINEBROWSE), chkAutoMin(this, IDC_AUTOMIN), chkAutoClear(this, IDC_AUTOCLEAR), chkAutoClose(this, IDC_AUTOCLOSE), chkAutoAccept(this, IDC_AUTOACCEPT), - chkReverseOrder(this, IDC_REVERSE_ORDER), - - chkNoScanner(this, IDC_NOSCANNER), - chkScanAfterDl(this, IDC_SCANAFTERDL), - chkScanDuringDl(this, IDC_SCANDURINGDL), - - cmbScanCmdLine(this, IDC_SCANCMDLINE) + cmbFileExists(this, IDC_FILEEXISTS), + chkReverseOrder(this, IDC_REVERSE_ORDER) { CreateLink(chkAutoMin, File::bAutoMin); CreateLink(chkAutoClear, File::bAutoClear); @@ -83,79 +51,140 @@ public: CreateLink(chkAutoAccept, File::bAutoAccept); CreateLink(chkReverseOrder, File::bReverseOrder); - btnFileDir.OnClick = Callback(this, &CFileOptsDlg::onClick_FileDir); - btnScanCmdLine.OnClick = Callback(this, &CFileOptsDlg::onClick_ScanCmdLine); + btnFileDir.OnClick = Callback(this, &CFileGeneralOptsDlg::onClick_FileDir); - chkNoScanner.OnChange = Callback(this, &CFileOptsDlg::onChange_NoScanner); - chkAutoAccept.OnChange = Callback(this, &CFileOptsDlg::onChange_AutoAccept); - cmbScanCmdLine.OnSelChanged = Callback(this, &CFileOptsDlg::onSelChanged_Combo); + chkAutoAccept.OnChange = Callback(this, &CFileGeneralOptsDlg::onChange_AutoAccept); } bool OnInitDialog() override { SHAutoComplete(GetDlgItem(m_hwnd, IDC_FILEDIR), SHACF_FILESYS_DIRS); + cmbFileExists.AddString(TranslateT("Ask me"), 0); + cmbFileExists.AddString(TranslateT("Resume"), FILERESUME_RESUMEALL); + cmbFileExists.AddString(TranslateT("Overwrite"), FILERESUME_OVERWRITEALL); + cmbFileExists.AddString(TranslateT("Rename (append \" (1)\", etc.)"), FILERESUME_RENAMEALL); + cmbFileExists.SelectData(File::iIfExists); + wchar_t str[MAX_PATH]; GetContactReceivedFilesDir(NULL, str, _countof(str), FALSE); SetDlgItemText(m_hwnd, IDC_FILEDIR, str); + return true; + } + + bool OnApply() override + { + wchar_t str[512]; + GetDlgItemText(m_hwnd, IDC_FILEDIR, str, _countof(str)); + RemoveInvalidPathChars(str); + File::wszSaveDir = str; + + File::iIfExists = cmbFileExists.GetCurData(); + return TRUE; + } + + void onChange_AutoAccept(CCtrlCheck *) + { + chkAutoMin.Enable(chkAutoAccept.GetState()); + } + + void onClick_FileDir(CCtrlButton*) + { + wchar_t str[MAX_PATH]; + GetDlgItemText(m_hwnd, IDC_FILEDIR, str, _countof(str)); + if (BrowseForFolder(m_hwnd, str)) + SetDlgItemText(m_hwnd, IDC_FILEDIR, str); + } +}; + +///////////////////////////////////////////////////////////////////////////////////////// +// File security options + +#define VSCAN_MCAFEE 1 +#define VSCAN_DRSOLOMON 2 +#define VSCAN_NORTON 3 +#define VSCAN_CA 4 + +struct +{ + const wchar_t *szProductName; + const wchar_t *szExeRegPath; + const wchar_t *szExeRegValue; + const wchar_t *szCommandLine; +} +static virusScanners[] = +{ + { L"Network Associates/McAfee VirusScan", L"SOFTWARE\\McAfee\\VirusScan", L"Scan32EXE", L"\"%s\" %%f /nosplash /comp /autoscan /autoexit /noboot" }, + { L"Dr Solomon's VirusScan (Network Associates)", L"SOFTWARE\\Network Associates\\TVD\\VirusScan\\AVConsol\\General", L"szScannerExe", L"\"%s\" %%f /uinone /noboot /comp /prompt /autoexit" }, + { L"Norton AntiVirus", L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\App Paths\\Navw32.exe", nullptr, L"\"%s\" %%f /b- /m- /s+ /noresults" }, + { L"Computer Associates/Inoculate IT", L"Software\\Antivirus", L"ImageFilename", L"\"%s\" %%f /display = progress /exit" }, + { L"Computer Associates eTrust", L"SOFTWARE\\ComputerAssociates\\Anti-Virus\\Resident", L"VetPath", L"\"%s\" %%f /display = progress /exit" }, + { L"Kaspersky Anti-Virus", L"SOFTWARE\\KasperskyLab\\Components\\101", L"EXEName", L"\"%s\" /S /Q %%f" }, + { L"Kaspersky Anti-Virus", L"SOFTWARE\\KasperskyLab\\SetupFolders", L"KAV8", L"\"%savp.exe\" SCAN %%f" }, + { L"Kaspersky Anti-Virus", L"SOFTWARE\\KasperskyLab\\SetupFolders", L"KAV9", L"\"%savp.exe\" SCAN %%f" }, + { L"AntiVir PersonalEdition Classic", L"SOFTWARE\\Avira\\AntiVir PersonalEdition Classic", L"Path", L"\"%savscan.exe\" /GUIMODE = 2 /PATH = \"%%f\"" }, + { L"ESET NOD32 Antivirus", L"SOFTWARE\\ESET\\ESET Security\\CurrentVersion\\Info", L"InstallDir", L"\"%secls.exe\" /log-all /aind /no-boots /adware /sfx /unsafe /unwanted /heur /adv-heur /action = clean \"%%f\"" }, +}; - switch (g_plugin.getByte("UseScanner", VIRUSSCAN_DISABLE)) { +class CFileSecurityOptsDlg : public CDlgBase +{ + CCtrlButton btnScanCmdLine; + CCtrlCheck chkNoScanner, chkScanDuringDl, chkScanAfterDl, chkWarnBeforeOpening; + CCtrlCombo cmbScanCmdLine; + +public: + CFileSecurityOptsDlg() : + CDlgBase(g_plugin, IDD_OPT_FILESECURITY), + chkNoScanner(this, IDC_NOSCANNER), + chkScanAfterDl(this, IDC_SCANAFTERDL), + chkScanDuringDl(this, IDC_SCANDURINGDL), + cmbScanCmdLine(this, IDC_SCANCMDLINE), + btnScanCmdLine(this, IDC_SCANCMDLINEBROWSE), + chkWarnBeforeOpening(this, IDC_WARNBEFOREOPENING) + { + CreateLink(chkWarnBeforeOpening, File::bWarnBeforeOpening); + + btnScanCmdLine.OnClick = Callback(this, &CFileSecurityOptsDlg::onClick_ScanCmdLine); + + chkNoScanner.OnChange = Callback(this, &CFileSecurityOptsDlg::onChange_NoScanner); + + cmbScanCmdLine.OnSelChanged = Callback(this, &CFileSecurityOptsDlg::onSelChanged_Combo); + } + + bool OnInitDialog() override + { + switch (File::iUseScanner) { case VIRUSSCAN_AFTERDL: chkScanAfterDl.SetState(true); break; case VIRUSSCAN_DURINGDL: chkScanDuringDl.SetState(true); break; default: chkNoScanner.SetState(true); break; } - CheckDlgButton(m_hwnd, IDC_WARNBEFOREOPENING, g_plugin.getByte("WarnBeforeOpening", 1) ? BST_CHECKED : BST_UNCHECKED); for (int i = 0; i < _countof(virusScanners); i++) { wchar_t szScanExe[MAX_PATH]; if (SRFile_GetRegValue(HKEY_LOCAL_MACHINE, virusScanners[i].szExeRegPath, virusScanners[i].szExeRegValue, szScanExe, _countof(szScanExe))) cmbScanCmdLine.AddString(virusScanners[i].szProductName, i); } - + if (!cmbScanCmdLine.GetCount()) cmbScanCmdLine.AddString(L"", -1); - DBVARIANT dbv; - if (g_plugin.getWString("ScanCmdLine", &dbv) == 0) { - cmbScanCmdLine.SetText(dbv.pwszVal); - db_free(&dbv); + if (mir_wstrlen(File::wszScanCmdLine)) { + cmbScanCmdLine.SetText(File::wszScanCmdLine); } else if (cmbScanCmdLine.GetCount()) { cmbScanCmdLine.SetCurSel(0); onSelChanged_Combo(0); } - switch (g_plugin.getByte("IfExists", FILERESUME_ASK)) { - case FILERESUME_RESUMEALL: CheckDlgButton(m_hwnd, IDC_RESUME, BST_CHECKED); break; - case FILERESUME_OVERWRITEALL: CheckDlgButton(m_hwnd, IDC_OVERWRITE, BST_CHECKED); break; - case FILERESUME_RENAMEALL: CheckDlgButton(m_hwnd, IDC_RENAME, BST_CHECKED); break; - default: CheckDlgButton(m_hwnd, IDC_ASK, BST_CHECKED); break; - } - return true; } bool OnApply() override { - wchar_t str[512]; - GetDlgItemText(m_hwnd, IDC_FILEDIR, str, _countof(str)); - RemoveInvalidPathChars(str); - g_plugin.setWString("RecvFilesDirAdv", str); - - cmbScanCmdLine.GetText(str, _countof(str)); - g_plugin.setWString("ScanCmdLine", str); - - g_plugin.setByte("UseScanner", chkScanAfterDl.GetState() ? VIRUSSCAN_AFTERDL : (chkScanDuringDl.GetState() ? VIRUSSCAN_DURINGDL : VIRUSSCAN_DISABLE)); - g_plugin.setByte("WarnBeforeOpening", (uint8_t)IsDlgButtonChecked(m_hwnd, IDC_WARNBEFOREOPENING)); - g_plugin.setByte("IfExists", (uint8_t)(IsDlgButtonChecked(m_hwnd, IDC_ASK) ? FILERESUME_ASK : - (IsDlgButtonChecked(m_hwnd, IDC_RESUME) ? FILERESUME_RESUMEALL : - (IsDlgButtonChecked(m_hwnd, IDC_OVERWRITE) ? FILERESUME_OVERWRITEALL : FILERESUME_RENAMEALL)))); - return TRUE; - } + File::wszScanCmdLine = ptrW(cmbScanCmdLine.GetText()); - void onChange_AutoAccept(CCtrlCheck *) - { - chkAutoMin.Enable(chkAutoAccept.GetState()); + File::iUseScanner = chkScanAfterDl.GetState() ? VIRUSSCAN_AFTERDL : (chkScanDuringDl.GetState() ? VIRUSSCAN_DURINGDL : VIRUSSCAN_DISABLE); + return true; } void onChange_NoScanner(CCtrlCheck *) @@ -167,7 +196,7 @@ public: EnableWindow(GetDlgItem(m_hwnd, IDC_ST_CMDLINEHELP), bEnabled); } - void onSelChanged_Combo(CCtrlCombo*) + void onSelChanged_Combo(CCtrlCombo *) { int iScanner = cmbScanCmdLine.GetCurData(); if (iScanner >= _countof(virusScanners) || iScanner < 0) @@ -181,15 +210,7 @@ public: cmbScanCmdLine.SetText(str); } - void onClick_FileDir(CCtrlButton*) - { - wchar_t str[MAX_PATH]; - GetDlgItemText(m_hwnd, IDC_FILEDIR, str, _countof(str)); - if (BrowseForFolder(m_hwnd, str)) - SetDlgItemText(m_hwnd, IDC_FILEDIR, str); - } - - void onClick_ScanCmdLine(CCtrlButton*) + void onClick_ScanCmdLine(CCtrlButton *) { wchar_t str[MAX_PATH + 2]; cmbScanCmdLine.GetText(str, _countof(str)); @@ -228,14 +249,23 @@ public: } }; +///////////////////////////////////////////////////////////////////////////////////////// +// Module entry point + int SRFileOptInitialise(WPARAM wParam, LPARAM) { OPTIONSDIALOGPAGE odp = {}; + odp.flags = ODPF_BOLDGROUPS; odp.position = 900000000; odp.szTitle.a = LPGEN("File transfers"); odp.szGroup.a = LPGEN("Events"); - odp.pDialog = new CFileOptsDlg(); - odp.flags = ODPF_BOLDGROUPS; + + odp.szTab.a = LPGEN("General"); + odp.pDialog = new CFileGeneralOptsDlg(); + g_plugin.addOptions(wParam, &odp); + + odp.szTab.a = LPGEN("Security"); + odp.pDialog = new CFileSecurityOptsDlg(); g_plugin.addOptions(wParam, &odp); return 0; } diff --git a/src/mir_app/src/filerecvdlg.cpp b/src/mir_app/src/filerecvdlg.cpp index 7dfa5c8a41..e069b55b77 100644 --- a/src/mir_app/src/filerecvdlg.cpp +++ b/src/mir_app/src/filerecvdlg.cpp @@ -125,9 +125,8 @@ void GetContactReceivedFilesDir(MCONTACT hContact, wchar_t *szDir, int cchDir, B { wchar_t tszTemp[MAX_PATH]; - ptrW tszRecvPath(g_plugin.getWStringA("RecvFilesDirAdv")); - if (tszRecvPath) - wcsncpy_s(tszTemp, tszRecvPath, _TRUNCATE); + if (mir_wstrlen(File::wszSaveDir)) + wcsncpy_s(tszTemp, File::wszSaveDir, _TRUNCATE); else mir_snwprintf(tszTemp, L"%%mydocuments%%\\%s\\%%userid%%", TranslateT("My received files")); @@ -165,9 +164,8 @@ void GetReceivedFilesDir(wchar_t *szDir, int cchDir) { wchar_t tszTemp[MAX_PATH]; - ptrW tszRecvPath(g_plugin.getWStringA("RecvFilesDirAdv")); - if (tszRecvPath) - wcsncpy_s(tszTemp, tszRecvPath, _TRUNCATE); + if (mir_wstrlen(File::wszSaveDir)) + wcsncpy_s(tszTemp, File::wszSaveDir, _TRUNCATE); else mir_snwprintf(tszTemp, L"%%mydocuments%%\\%s\\%%userid%%", TranslateT("My received files")); diff --git a/src/mir_app/src/filexferdlg.cpp b/src/mir_app/src/filexferdlg.cpp index 9f6f042ef7..957afd243d 100644 --- a/src/mir_app/src/filexferdlg.cpp +++ b/src/mir_app/src/filexferdlg.cpp @@ -80,32 +80,29 @@ static void SetOpenFileButtonStyle(HWND hwndButton, int enabled) static void __cdecl RunVirusScannerThread(virusscanthreadstartinfo *info) { - DBVARIANT dbv; - if (!g_plugin.getWString("ScanCmdLine", &dbv)) { - if (dbv.pwszVal[0]) { - STARTUPINFO si = { 0 }; - si.cb = sizeof(si); - wchar_t *pszReplace = wcsstr(dbv.pwszVal, L"%f"); - wchar_t szCmdLine[768]; - if (pszReplace) { - if (info->szFile[mir_wstrlen(info->szFile) - 1] == '\\') - info->szFile[mir_wstrlen(info->szFile) - 1] = '\0'; - *pszReplace = 0; - mir_snwprintf(szCmdLine, L"%s\"%s\"%s", dbv.pwszVal, info->szFile, pszReplace + 2); - } - else - wcsncpy_s(szCmdLine, dbv.pwszVal, _TRUNCATE); - - PROCESS_INFORMATION pi; - if (CreateProcess(nullptr, szCmdLine, nullptr, nullptr, FALSE, 0, nullptr, nullptr, &si, &pi)) { - if (WaitForSingleObject(pi.hProcess, 3600 * 1000) == WAIT_OBJECT_0) - PostMessage(info->hwndReply, M_VIRUSSCANDONE, info->returnCode, 0); - CloseHandle(pi.hProcess); - CloseHandle(pi.hThread); - } + ptrW pwszScanLine(File::wszScanCmdLine); + if (mir_wstrlen(pwszScanLine)) { + STARTUPINFO si = { 0 }; + si.cb = sizeof(si); + wchar_t *pszReplace = wcsstr(pwszScanLine, L"%f"); + wchar_t szCmdLine[768]; + if (pszReplace) { + if (info->szFile[mir_wstrlen(info->szFile) - 1] == '\\') + info->szFile[mir_wstrlen(info->szFile) - 1] = '\0'; + *pszReplace = 0; + mir_snwprintf(szCmdLine, L"%s\"%s\"%s", pwszScanLine.get(), info->szFile, pszReplace + 2); + } + else wcsncpy_s(szCmdLine, pwszScanLine, _TRUNCATE); + + PROCESS_INFORMATION pi; + if (CreateProcess(nullptr, szCmdLine, nullptr, nullptr, FALSE, 0, nullptr, nullptr, &si, &pi)) { + if (WaitForSingleObject(pi.hProcess, 3600 * 1000) == WAIT_OBJECT_0) + PostMessage(info->hwndReply, M_VIRUSSCANDONE, info->returnCode, 0); + CloseHandle(pi.hProcess); + CloseHandle(pi.hThread); } - db_free(&dbv); } + mir_free(info->szFile); mir_free(info); } @@ -245,7 +242,7 @@ INT_PTR CALLBACK DlgProcFileTransfer(HWND hwndDlg, UINT msg, WPARAM wParam, LPAR if (!Contact::OnList(dat->hContact)) dat->resumeBehaviour = FILERESUME_ASK; else - dat->resumeBehaviour = g_plugin.getByte("IfExists", FILERESUME_ASK); + dat->resumeBehaviour = File::iIfExists; SetFtStatus(hwndDlg, LPGENW("Waiting for connection..."), FTS_TEXT); } @@ -505,7 +502,7 @@ INT_PTR CALLBACK DlgProcFileTransfer(HWND hwndDlg, UINT msg, WPARAM wParam, LPAR SetDlgItemTextA(hwndDlg, IDC_FILENAME, ""); if (dat->transferStatus.currentFileNumber == 1 && dat->transferStatus.totalFiles > 1 && !dat->send) SetOpenFileButtonStyle(GetDlgItem(hwndDlg, IDC_OPENFILE), 1); - if (dat->transferStatus.currentFileNumber != -1 && dat->files && !dat->send && g_plugin.getByte("UseScanner", VIRUSSCAN_DISABLE) == VIRUSSCAN_DURINGDL) { + if (dat->transferStatus.currentFileNumber != -1 && dat->files && !dat->send && File::iUseScanner == VIRUSSCAN_DURINGDL) { if (GetFileAttributes(dat->files[dat->transferStatus.currentFileNumber]) & FILE_ATTRIBUTE_DIRECTORY) PostMessage(hwndDlg, M_VIRUSSCANDONE, dat->transferStatus.currentFileNumber, 0); else { @@ -642,7 +639,7 @@ INT_PTR CALLBACK DlgProcFileTransfer(HWND hwndDlg, UINT msg, WPARAM wParam, LPAR LPGENW("Transfer completed, open folder."), FTS_OPEN); - int useScanner = g_plugin.getByte("UseScanner", VIRUSSCAN_DISABLE); + int useScanner = File::iUseScanner; if (useScanner != VIRUSSCAN_DISABLE) { auto *vstsi = (virusscanthreadstartinfo *)mir_alloc(sizeof(virusscanthreadstartinfo)); vstsi->hwndReply = hwndDlg; diff --git a/src/mir_app/src/resource.h b/src/mir_app/src/resource.h index 8e7469954b..1cd7434f37 100644 --- a/src/mir_app/src/resource.h +++ b/src/mir_app/src/resource.h @@ -131,8 +131,9 @@ #define IDD_OPT_NETLIB 246 #define IDD_NETLIBLOGOPTS 247 #define IDD_FILETRANSFERINFO 249 -#define IDD_OPT_FILETRANSFER 250 -#define IDD_FILEEXISTS 251 +#define IDD_OPT_FILEGENERAL 250 +#define IDD_OPT_FILESECURITY 251 +#define IDD_FILEEXISTS 253 #define IDD_DELETECONTACT 254 #define IDD_ADDCONTACT 257 #define IDD_OPT_CONTACT 261 @@ -504,8 +505,6 @@ #define IDC_SAVEAS 1513 #define IDC_AUTORENAME 1514 #define IDC_ASK 1516 -#define IDC_RENAME 1519 -#define IDC_VIRUSSCANNERGROUP 1520 #define IDC_HIDE 1534 #define IDC_TOPLINE 1535 #define IDC_MYHANDLE 1540 @@ -602,6 +601,10 @@ #define IDC_TREE 1753 #define IDC_BKG 1754 #define IDC_TEXT 1755 +#define IDC_FILEEXISTS 1755 +#define IDC_OFFLINE_AUTO 1756 +#define IDC_OFFLINE_AUTOSIZE 1757 +#define IDC_OFFLINE_AUTOSIZE_SPIN 1758 #define IDC_EFFECT_COLOUR_TEXT1 1853 #define IDC_EFFECT_COLOUR_SPIN1 1854 #define IDC_EXTRAORDER 1889 @@ -708,7 +711,7 @@ #ifndef APSTUDIO_READONLY_SYMBOLS #define _APS_NEXT_RESOURCE_VALUE 336 #define _APS_NEXT_COMMAND_VALUE 40018 -#define _APS_NEXT_CONTROL_VALUE 1755 +#define _APS_NEXT_CONTROL_VALUE 1759 #define _APS_NEXT_SYMED_VALUE 101 #endif #endif -- cgit v1.2.3