From b6e741c4a5ef32619d84057f22ca9269ee82a419 Mon Sep 17 00:00:00 2001 From: Oleg Korshul Date: Fri, 21 Apr 2023 01:19:40 +0300 Subject: [PATCH] Refactoring --- DesktopEditor/doctrenderer/common_deploy.h | 1 + .../docbuilder.com/src/docbuilder.h | 48 ++----------------- .../docbuilder.com/src/docbuilder_midl.h | 32 +++++++++++++ DesktopEditor/doctrenderer/docbuilder.cpp | 4 ++ DesktopEditor/doctrenderer/docbuilder.h | 2 + .../docbuilder.net/src/docbuilder.net.cpp | 3 +- DesktopEditor/doctrenderer/docbuilder_p.cpp | 13 +++++ DesktopEditor/doctrenderer/docbuilder_p.h | 39 +++++++++++++++ 8 files changed, 96 insertions(+), 46 deletions(-) diff --git a/DesktopEditor/doctrenderer/common_deploy.h b/DesktopEditor/doctrenderer/common_deploy.h index e0daad100e..7386bfc9d8 100644 --- a/DesktopEditor/doctrenderer/common_deploy.h +++ b/DesktopEditor/doctrenderer/common_deploy.h @@ -15,6 +15,7 @@ #define OFFICESTUDIO_FILE_DOCUMENT_TXT OFFICESTUDIO_FILE_DOCUMENT + 0x0005 #define OFFICESTUDIO_FILE_DOCUMENT_DOTX OFFICESTUDIO_FILE_DOCUMENT + 0x000c #define OFFICESTUDIO_FILE_DOCUMENT_OTT OFFICESTUDIO_FILE_DOCUMENT + 0x000f +#define OFFICESTUDIO_FILE_DOCUMENT_HTML OFFICESTUDIO_FILE_DOCUMENT + 0x0012 #define OFFICESTUDIO_FILE_PRESENTATION 0x0080 #define OFFICESTUDIO_FILE_PRESENTATION_PPTX OFFICESTUDIO_FILE_PRESENTATION + 0x0001 diff --git a/DesktopEditor/doctrenderer/docbuilder.com/src/docbuilder.h b/DesktopEditor/doctrenderer/docbuilder.com/src/docbuilder.h index c36e77d309..7f8456c21a 100644 --- a/DesktopEditor/doctrenderer/docbuilder.com/src/docbuilder.h +++ b/DesktopEditor/doctrenderer/docbuilder.com/src/docbuilder.h @@ -787,14 +787,7 @@ public: if (NULL == m_pBuilder) return S_FALSE; - int nType = AVS_OFFICESTUDIO_FILE_DOCUMENT_DOCX; - CStringW sType = (CString)type; - if (L"pptx" == sType) - nType = AVS_OFFICESTUDIO_FILE_PRESENTATION_PPTX; - else if (L"xlsx" == sType) - nType = AVS_OFFICESTUDIO_FILE_SPREADSHEET_XLSX; - - bool bRet = m_pBuilder->CreateFile(nType); + bool bRet = m_pBuilder->CreateFile(type); *result = bRet ? VARIANT_TRUE : VARIANT_FALSE; return S_OK; } @@ -811,43 +804,8 @@ public: if (NULL == m_pBuilder) return S_FALSE; - int nType = AVS_OFFICESTUDIO_FILE_DOCUMENT_DOCX; - CStringW sType = (CString)type; - if (L"docx" == sType) - nType = AVS_OFFICESTUDIO_FILE_DOCUMENT_DOCX; - else if (L"doc" == sType) - nType = AVS_OFFICESTUDIO_FILE_DOCUMENT_DOC; - else if (L"odt" == sType) - nType = AVS_OFFICESTUDIO_FILE_DOCUMENT_ODT; - else if (L"rtf" == sType) - nType = AVS_OFFICESTUDIO_FILE_DOCUMENT_RTF; - else if (L"txt" == sType) - nType = AVS_OFFICESTUDIO_FILE_DOCUMENT_TXT; - else if (L"pptx" == sType) - nType = AVS_OFFICESTUDIO_FILE_PRESENTATION_PPTX; - else if (L"odp" == sType) - nType = AVS_OFFICESTUDIO_FILE_PRESENTATION_ODP; - else if (L"xlsx" == sType) - nType = AVS_OFFICESTUDIO_FILE_SPREADSHEET_XLSX; - else if (L"xls" == sType) - nType = AVS_OFFICESTUDIO_FILE_SPREADSHEET_XLS; - else if (L"ods" == sType) - nType = AVS_OFFICESTUDIO_FILE_SPREADSHEET_ODS; - else if (L"csv" == sType) - nType = AVS_OFFICESTUDIO_FILE_SPREADSHEET_CSV; - else if (L"pdf" == sType) - nType = AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_PDF; - else if (L"image" == sType) - nType = AVS_OFFICESTUDIO_FILE_IMAGE; - else if (L"jpg" == sType) - nType = AVS_OFFICESTUDIO_FILE_IMAGE; - else if (L"png" == sType) - nType = AVS_OFFICESTUDIO_FILE_IMAGE; - else if (L"html" == sType) - nType = AVS_OFFICESTUDIO_FILE_DOCUMENT_HTML_IN_CONTAINER; - - bool bRet = m_pBuilder->SaveFile(nType, path); - *result = bRet ? VARIANT_TRUE : VARIANT_FALSE; + int nRet = m_pBuilder->SaveFile(type, path); + *result = (nRet == 0) ? VARIANT_TRUE : VARIANT_FALSE; return S_OK; } STDMETHOD(CloseFile)() diff --git a/DesktopEditor/doctrenderer/docbuilder.com/src/docbuilder_midl.h b/DesktopEditor/doctrenderer/docbuilder.com/src/docbuilder_midl.h index fee831a2ce..c2390119f4 100644 --- a/DesktopEditor/doctrenderer/docbuilder.com/src/docbuilder_midl.h +++ b/DesktopEditor/doctrenderer/docbuilder.com/src/docbuilder_midl.h @@ -1,3 +1,35 @@ +/* + * (c) Copyright Ascensio System SIA 2010-2023 + * + * This program is a free software product. You can redistribute it and/or + * modify it under the terms of the GNU Affero General Public License (AGPL) + * version 3 as published by the Free Software Foundation. In accordance with + * Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect + * that Ascensio System SIA expressly excludes the warranty of non-infringement + * of any third-party rights. + * + * This program is distributed WITHOUT ANY WARRANTY; without even the implied + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For + * details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html + * + * You can contact Ascensio System SIA at 20A-6 Ernesta Birznieka-Upish + * street, Riga, Latvia, EU, LV-1050. + * + * The interactive user interfaces in modified source and object code versions + * of the Program must display Appropriate Legal Notices, as required under + * Section 5 of the GNU AGPL version 3. + * + * Pursuant to Section 7(b) of the License you must retain the original Product + * logo when distributing the program. Pursuant to Section 7(e) we decline to + * grant you any rights under trademark law for use of our trademarks. + * + * All the Product's GUI elements, including illustrations and icon sets, as + * well as technical writing content are licensed under the terms of the + * Creative Commons Attribution-ShareAlike 4.0 International. See the License + * terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode + * + */ + #pragma once #ifndef __cplusplus diff --git a/DesktopEditor/doctrenderer/docbuilder.cpp b/DesktopEditor/doctrenderer/docbuilder.cpp index b97a17fc8a..b0e4dd7bb6 100644 --- a/DesktopEditor/doctrenderer/docbuilder.cpp +++ b/DesktopEditor/doctrenderer/docbuilder.cpp @@ -59,6 +59,10 @@ namespace NSDoctRenderer { return m_pInternal->SaveFile(type, path, params); } + int CDocBuilder::SaveFile(const wchar_t* extension, const wchar_t* path, const wchar_t* params) + { + return m_pInternal->SaveFile(extension, path, params); + } bool CDocBuilder::ExecuteCommand(const wchar_t* command, CDocBuilderValue* retValue) { return m_pInternal->ExecuteCommand(command, retValue); diff --git a/DesktopEditor/doctrenderer/docbuilder.h b/DesktopEditor/doctrenderer/docbuilder.h index 8e7e82e224..476c1b36f5 100644 --- a/DesktopEditor/doctrenderer/docbuilder.h +++ b/DesktopEditor/doctrenderer/docbuilder.h @@ -355,6 +355,7 @@ namespace NSDoctRenderer * @return True if the operation is successful */ bool CreateFile(const int& type); + bool CreateFile(const wchar_t* extension); /** * Sets the path to the folder where the program will temporarily save files needed for the program correct work. * After the successful document file creation, all the files will be deleted from the folder. If no temporary folder is set, the system one will be used. @@ -380,6 +381,7 @@ namespace NSDoctRenderer * @return Process x2t return code */ int SaveFile(const int& type, const wchar_t* path, const wchar_t* params = 0); + int SaveFile(const wchar_t* extension, const wchar_t* path, const wchar_t* params = 0); /** * Closes the file to stop working with it. You can use a single ONLYOFFICE Document Builder instance * to work with all your files, but you need to close the previous file before you can diff --git a/DesktopEditor/doctrenderer/docbuilder.net/src/docbuilder.net.cpp b/DesktopEditor/doctrenderer/docbuilder.net/src/docbuilder.net.cpp index 31f32507c9..3566813328 100644 --- a/DesktopEditor/doctrenderer/docbuilder.net/src/docbuilder.net.cpp +++ b/DesktopEditor/doctrenderer/docbuilder.net/src/docbuilder.net.cpp @@ -49,7 +49,8 @@ namespace docbuilder_net RTF = MASK + 0x0004, TXT = MASK + 0x0005, DOTX = MASK + 0x000c, - OTT = MASK + 0x000f + OTT = MASK + 0x000f, + HTML = MASK + 0x0012 }; public enum class Spreadsheet : int diff --git a/DesktopEditor/doctrenderer/docbuilder_p.cpp b/DesktopEditor/doctrenderer/docbuilder_p.cpp index 00810816c7..b7240b8053 100644 --- a/DesktopEditor/doctrenderer/docbuilder_p.cpp +++ b/DesktopEditor/doctrenderer/docbuilder_p.cpp @@ -1106,6 +1106,19 @@ namespace NSDoctRenderer return m_pInternal->CreateFile(type); } + bool CDocBuilder::CreateFile(const wchar_t* extension) + { + std::wstring sType = (NULL != extension) ? std::wstring(extension) : L"docx"; + int type = AVS_OFFICESTUDIO_FILE_DOCUMENT; + + if (L"pptx" == sType) + type = AVS_OFFICESTUDIO_FILE_PRESENTATION; + else if (L"xlsx" == sType) + type = AVS_OFFICESTUDIO_FILE_SPREADSHEET; + + return CreateFile(type); + } + void CDocBuilder::SetTmpFolder(const wchar_t* folder) { if (m_pInternal->m_bIsServerSafeVersion) diff --git a/DesktopEditor/doctrenderer/docbuilder_p.h b/DesktopEditor/doctrenderer/docbuilder_p.h index a5c9682b2b..46a7ce69ab 100644 --- a/DesktopEditor/doctrenderer/docbuilder_p.h +++ b/DesktopEditor/doctrenderer/docbuilder_p.h @@ -1202,6 +1202,45 @@ namespace NSDoctRenderer return true; } + int SaveFile(const std::wstring& ext, const std::wstring& path, const wchar_t* params = NULL) + { + int nType = -1; + if (L"docx" == ext) + nType = AVS_OFFICESTUDIO_FILE_DOCUMENT_DOCX; + else if (L"doc" == ext) + nType = AVS_OFFICESTUDIO_FILE_DOCUMENT_DOC; + else if (L"odt" == ext) + nType = AVS_OFFICESTUDIO_FILE_DOCUMENT_ODT; + else if (L"rtf" == ext) + nType = AVS_OFFICESTUDIO_FILE_DOCUMENT_RTF; + else if (L"txt" == ext) + nType = AVS_OFFICESTUDIO_FILE_DOCUMENT_TXT; + else if (L"pptx" == ext) + nType = AVS_OFFICESTUDIO_FILE_PRESENTATION_PPTX; + else if (L"odp" == ext) + nType = AVS_OFFICESTUDIO_FILE_PRESENTATION_ODP; + else if (L"xlsx" == ext) + nType = AVS_OFFICESTUDIO_FILE_SPREADSHEET_XLSX; + else if (L"xls" == ext) + nType = AVS_OFFICESTUDIO_FILE_SPREADSHEET_XLS; + else if (L"ods" == ext) + nType = AVS_OFFICESTUDIO_FILE_SPREADSHEET_ODS; + else if (L"csv" == ext) + nType = AVS_OFFICESTUDIO_FILE_SPREADSHEET_CSV; + else if (L"pdf" == ext) + nType = AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_PDF; + else if (L"image" == ext) + nType = AVS_OFFICESTUDIO_FILE_IMAGE; + else if (L"jpg" == ext) + nType = AVS_OFFICESTUDIO_FILE_IMAGE; + else if (L"png" == ext) + nType = AVS_OFFICESTUDIO_FILE_IMAGE; + else if (L"html" == ext) + nType = AVS_OFFICESTUDIO_FILE_DOCUMENT_HTML_IN_CONTAINER; + + return SaveFile(nType, path, params); + } + bool ExecuteCommand(const std::wstring& command, CDocBuilderValue* retValue = NULL) { if (command.length() < 7 && !retValue) // minimum command (!!!)