From 5a6a2f800f43be795224ca3f56cb2f3eac6f3e96 Mon Sep 17 00:00:00 2001 From: Oleg Korshul Date: Sat, 2 Nov 2024 15:21:53 +0300 Subject: [PATCH] Fix bug 65824 --- .../embed/NativeBuilderDocumentEmbed.cpp | 11 ++++++ DesktopEditor/doctrenderer/nativecontrol.cpp | 5 ++- DesktopEditor/doctrenderer/server.h | 34 +++++++++++++++++++ 3 files changed, 49 insertions(+), 1 deletion(-) diff --git a/DesktopEditor/doctrenderer/embed/NativeBuilderDocumentEmbed.cpp b/DesktopEditor/doctrenderer/embed/NativeBuilderDocumentEmbed.cpp index 40c05ada63..d33417f987 100644 --- a/DesktopEditor/doctrenderer/embed/NativeBuilderDocumentEmbed.cpp +++ b/DesktopEditor/doctrenderer/embed/NativeBuilderDocumentEmbed.cpp @@ -2,6 +2,7 @@ #include "./../docbuilder_p.h" #include "../../common/Directory.h" +#include "../server.h" JSSmart CBuilderDocumentEmbed::IsValid() { @@ -68,13 +69,23 @@ void CBuilderDocumentEmbed::_OpenFile(const std::wstring& sFile, const std::wstr int nConvertResult = pBuilder->ConvertToInternalFormat(m_sFolder, sFileCopy, sParams); if (0 == nConvertResult) + { + if (CServerInstance::getInstance().IsEnable()) + CServerInstance::getInstance().AddTmpFile(m_sFolder); m_bIsValid = true; + } } void CBuilderDocumentEmbed::_CloseFile() { if (!m_sFolder.empty()) + { NSDirectory::DeleteDirectory(m_sFolder); + + if (m_bIsValid && CServerInstance::getInstance().IsEnable()) + CServerInstance::getInstance().RemoveTmpFile(m_sFolder); + } + m_bIsValid = false; m_sFolder = L""; } diff --git a/DesktopEditor/doctrenderer/nativecontrol.cpp b/DesktopEditor/doctrenderer/nativecontrol.cpp index be8f1d93fd..81b9a66ab7 100644 --- a/DesktopEditor/doctrenderer/nativecontrol.cpp +++ b/DesktopEditor/doctrenderer/nativecontrol.cpp @@ -44,7 +44,10 @@ CImagesWorker::CImagesWorker(const std::wstring& sFolder) std::wstring CImagesWorker::GetImageLocal(const std::wstring& sUrl) { if (CServerInstance::getInstance().IsEnable()) - return L"error"; + { + if (!CServerInstance::getInstance().CheckTmpDirectory(sUrl)) + return L"error"; + } std::wstring sExt = NSFile::GetFileExtention(sUrl); std::wstring sRet = L"image" + std::to_wstring(m_nIndex++) + L"." + sExt; m_mapImages.insert(std::make_pair(sUrl, sRet)); diff --git a/DesktopEditor/doctrenderer/server.h b/DesktopEditor/doctrenderer/server.h index 5243eff4d0..1599e41fd9 100644 --- a/DesktopEditor/doctrenderer/server.h +++ b/DesktopEditor/doctrenderer/server.h @@ -32,11 +32,19 @@ #ifndef SERVER_SETTINGS_H #define SERVER_SETTINGS_H +#include +#include +#include "../common/File.h" +#include "../common/StringBuilder.h" +#include + // class for server version (disable local files and etc) class CServerInstance { private: bool m_bIsEnabled; + std::map m_arMapTmpFiles; + CServerInstance() { m_bIsEnabled = false; @@ -58,6 +66,32 @@ public: { return m_bIsEnabled; } + + void AddTmpFile(const std::wstring& sFolder) + { + std::wstring sDirectory = sFolder + L"/media"; + NSStringUtils::string_replace(sDirectory, L"\\", L"/"); + std::map::iterator findDir = m_arMapTmpFiles.find(sDirectory); + if (findDir == m_arMapTmpFiles.end()) + m_arMapTmpFiles.insert(std::make_pair(sDirectory, true)); + } + + void RemoveTmpFile(const std::wstring& sFolder) + { + std::wstring sDirectory = sFolder + L"/media"; + NSStringUtils::string_replace(sDirectory, L"\\", L"/"); + std::map::iterator findDir = m_arMapTmpFiles.find(sDirectory); + if (findDir != m_arMapTmpFiles.end()) + m_arMapTmpFiles.erase(findDir); + } + + bool CheckTmpDirectory(const std::wstring& sFile) + { + std::wstring sDirectory = NSFile::GetDirectoryName(sFile); + NSStringUtils::string_replace(sDirectory, L"\\", L"/"); + std::map::iterator findDir = m_arMapTmpFiles.find(sDirectory); + return (findDir != m_arMapTmpFiles.end()) ? true : false; + } };