Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/kornelski/7z.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'CPP/7zip/UI/FileManager/PanelItemOpen.cpp')
-rw-r--r--CPP/7zip/UI/FileManager/PanelItemOpen.cpp97
1 files changed, 74 insertions, 23 deletions
diff --git a/CPP/7zip/UI/FileManager/PanelItemOpen.cpp b/CPP/7zip/UI/FileManager/PanelItemOpen.cpp
index b47a30a3..5ff605f4 100644
--- a/CPP/7zip/UI/FileManager/PanelItemOpen.cpp
+++ b/CPP/7zip/UI/FileManager/PanelItemOpen.cpp
@@ -157,12 +157,6 @@ public:
}
};
-static bool IsNameVirus(const UString &name)
-{
- // return (name.Find(L" ") >= 0);
- return (wcsstr(name, L" ") != NULL);
-}
-
struct CTmpProcessInfo: public CTempFileInfo
{
CChildProcesses Processes;
@@ -320,12 +314,12 @@ HRESULT CPanel::OpenItemAsArchive(const UString &relPath, const UString &arcForm
return OpenItemAsArchive(NULL, tfi, fullPath, arcFormat, encrypted);
}
-HRESULT CPanel::OpenItemAsArchive(int index)
+HRESULT CPanel::OpenItemAsArchive(int index, const wchar_t *type)
{
CDisableTimerProcessing disableTimerProcessing1(*this);
CDisableNotify disableNotify(*this);
bool encrypted;
- HRESULT res = OpenItemAsArchive(GetItemRelPath2(index), UString(), encrypted);
+ HRESULT res = OpenItemAsArchive(GetItemRelPath2(index), type ? type : L"", encrypted);
if (res != S_OK)
{
RefreshTitle(true); // in case of error we must refresh changed title of 7zFM
@@ -600,19 +594,77 @@ void CPanel::OpenFolderExternal(int index)
StartApplicationDontWait(fsPrefix, name, (HWND)*this);
}
-void CPanel::OpenItem(int index, bool tryInternal, bool tryExternal)
+bool CPanel::IsVirus_Message(const UString &name)
+{
+ UString name2;
+
+ const wchar_t cRLO = (wchar_t)0x202E;
+ bool isVirus = false;
+ bool isSpaceError = false;
+ name2 = name;
+
+ if (name2.Find(cRLO) >= 0)
+ {
+ UString badString = cRLO;
+ name2.Replace(badString, L"[RLO]");
+ isVirus = true;
+ }
+ {
+ const wchar_t *kVirusSpaces = L" ";
+ // const unsigned kNumSpaces = strlen(kVirusSpaces);
+ for (;;)
+ {
+ int pos = name2.Find(kVirusSpaces);
+ if (pos < 0)
+ break;
+ isVirus = true;
+ isSpaceError = true;
+ name2.Replace(kVirusSpaces, L" ");
+ }
+ }
+
+ if (!isVirus)
+ return false;
+
+ UString s = LangString(IDS_VIRUS);
+
+ if (!isSpaceError)
+ {
+ int pos1 = s.Find(L'(');
+ if (pos1 >= 0)
+ {
+ int pos2 = s.Find(L')', pos1 + 1);
+ if (pos2 >= 0)
+ {
+ s.Delete(pos1, pos2 + 1 - pos1);
+ if (pos1 > 0 && s[pos1 - 1] == ' ' && s[pos1] == '.')
+ s.Delete(pos1 - 1);
+ }
+ }
+ }
+
+ UString name3 = name;
+ name3.Replace(L'\n', L'_');
+ name2.Replace(L'\n', L'_');
+
+ s.Add_LF(); s += name2;
+ s.Add_LF(); s += name3;
+
+ MessageBoxMyError(s);
+ return true;
+}
+
+void CPanel::OpenItem(int index, bool tryInternal, bool tryExternal, const wchar_t *type)
{
CDisableTimerProcessing disableTimerProcessing(*this);
UString name = GetItemRelPath2(index);
- if (IsNameVirus(name))
- {
- MessageBoxErrorLang(IDS_VIRUS);
+
+ if (IsVirus_Message(name))
return;
- }
if (!_parentFolders.IsEmpty())
{
- OpenItemInArchive(index, tryInternal, tryExternal, false, false);
+ OpenItemInArchive(index, tryInternal, tryExternal, false, false, type);
return;
}
@@ -623,7 +675,7 @@ void CPanel::OpenItem(int index, bool tryInternal, bool tryExternal)
if (tryInternal)
if (!tryExternal || !DoItemAlwaysStart(name))
{
- HRESULT res = OpenItemAsArchive(index);
+ HRESULT res = OpenItemAsArchive(index, type);
disableNotify.Restore(); // we must restore to allow text notification update
InvalidateList();
if (res == S_OK || res == E_ABORT)
@@ -634,6 +686,7 @@ void CPanel::OpenItem(int index, bool tryInternal, bool tryExternal)
return;
}
}
+
if (tryExternal)
{
// SetCurrentDirectory opens HANDLE to folder!!!
@@ -939,16 +992,13 @@ static HRESULT GetTime(IFolderFolder *folder, UInt32 index, PROPID propID, FILET
}
*/
-void CPanel::OpenItemInArchive(int index, bool tryInternal, bool tryExternal, bool editMode, bool useEditor)
+void CPanel::OpenItemInArchive(int index, bool tryInternal, bool tryExternal, bool editMode, bool useEditor, const wchar_t *type)
{
const UString name = GetItemName(index);
const UString relPath = GetItemRelPath(index);
- if (IsNameVirus(name))
- {
- MessageBoxErrorLang(IDS_VIRUS);
+ if (IsVirus_Message(name))
return;
- }
if (!_folderOperations)
{
@@ -966,6 +1016,7 @@ void CPanel::OpenItemInArchive(int index, bool tryInternal, bool tryExternal, bo
MessageBoxLastError();
return;
}
+
FString tempDir = tempDirectory.GetPath();
FString tempDirNorm = tempDir;
NName::NormalizeDirPathPrefix(tempDirNorm);
@@ -993,7 +1044,7 @@ void CPanel::OpenItemInArchive(int index, bool tryInternal, bool tryExternal, bo
if (subStream)
{
bool encrypted;
- HRESULT res = OpenItemAsArchive(subStream, tempFileInfo, fullVirtPath, UString(), encrypted);
+ HRESULT res = OpenItemAsArchive(subStream, tempFileInfo, fullVirtPath, type ? type : L"", encrypted);
if (res == S_OK)
{
tempDirectory.DisableDeleting();
@@ -1104,7 +1155,7 @@ void CPanel::OpenItemInArchive(int index, bool tryInternal, bool tryExternal, bo
CMyComPtr<IInStream> bufInStream = bufInStreamSpec;
bufInStreamSpec->Init(file.Data, streamSize, virtFileSystem);
bool encrypted;
- if (OpenItemAsArchive(bufInStream, tempFileInfo, fullVirtPath, UString(), encrypted) == S_OK)
+ if (OpenItemAsArchive(bufInStream, tempFileInfo, fullVirtPath, type ? type : L"", encrypted) == S_OK)
{
tempDirectory.DisableDeleting();
RefreshListCtrl();
@@ -1130,7 +1181,7 @@ void CPanel::OpenItemInArchive(int index, bool tryInternal, bool tryExternal, bo
if (tryAsArchive)
{
bool encrypted;
- if (OpenItemAsArchive(NULL, tempFileInfo, fullVirtPath, UString(), encrypted) == S_OK)
+ if (OpenItemAsArchive(NULL, tempFileInfo, fullVirtPath, type ? type : L"", encrypted) == S_OK)
{
tempDirectory.DisableDeleting();
RefreshListCtrl();