mirror of
https://github.com/ONLYOFFICE/core.git
synced 2026-04-07 13:55:33 +08:00
новая схема (несколько скриптов)
This commit is contained in:
committed by
Alexander Trofimov
parent
65d37bb2d3
commit
1ae20da785
@ -203,9 +203,9 @@ namespace NSDoctRenderer
|
|||||||
std::wstring m_strConfigPath;
|
std::wstring m_strConfigPath;
|
||||||
CArray<std::wstring> m_arrFiles;
|
CArray<std::wstring> m_arrFiles;
|
||||||
|
|
||||||
std::wstring m_strDoctSDK;
|
std::vector<std::wstring> m_arDoctSDK;
|
||||||
std::wstring m_strPpttSDK;
|
std::vector<std::wstring> m_arPpttSDK;
|
||||||
std::wstring m_strXlstSDK;
|
std::vector<std::wstring> m_arXlstSDK;
|
||||||
|
|
||||||
std::wstring m_strEditorType;
|
std::wstring m_strEditorType;
|
||||||
std::wstring m_strFilePath;
|
std::wstring m_strFilePath;
|
||||||
@ -250,30 +250,17 @@ namespace NSDoctRenderer
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
m_strDoctSDK = L"";
|
|
||||||
m_strPpttSDK = L"";
|
|
||||||
m_strXlstSDK = L"";
|
|
||||||
|
|
||||||
XmlUtils::CXmlNode oNodeSdk = oNode.ReadNode(L"DoctSdk");
|
XmlUtils::CXmlNode oNodeSdk = oNode.ReadNode(L"DoctSdk");
|
||||||
if (oNodeSdk.IsValid())
|
if (oNodeSdk.IsValid())
|
||||||
m_strDoctSDK = oNodeSdk.GetText();
|
LoadSDK_scripts(oNodeSdk, m_arDoctSDK);
|
||||||
|
|
||||||
oNodeSdk = oNode.ReadNode(L"PpttSdk");
|
oNodeSdk = oNode.ReadNode(L"PpttSdk");
|
||||||
if (oNodeSdk.IsValid())
|
if (oNodeSdk.IsValid())
|
||||||
m_strPpttSDK = oNodeSdk.GetText();
|
LoadSDK_scripts(oNodeSdk, m_arPpttSDK);
|
||||||
|
|
||||||
oNodeSdk = oNode.ReadNode(L"XlstSdk");
|
oNodeSdk = oNode.ReadNode(L"XlstSdk");
|
||||||
if (oNodeSdk.IsValid())
|
if (oNodeSdk.IsValid())
|
||||||
m_strXlstSDK = oNodeSdk.GetText();
|
LoadSDK_scripts(oNodeSdk, m_arXlstSDK);
|
||||||
|
|
||||||
if (!NSFile::CFileBinary::Exists(m_strDoctSDK))
|
|
||||||
m_strDoctSDK = m_strConfigDir + m_strDoctSDK;
|
|
||||||
|
|
||||||
if (!NSFile::CFileBinary::Exists(m_strPpttSDK))
|
|
||||||
m_strPpttSDK = m_strConfigDir + m_strPpttSDK;
|
|
||||||
|
|
||||||
if (!NSFile::CFileBinary::Exists(m_strXlstSDK))
|
|
||||||
m_strXlstSDK = m_strConfigDir + m_strXlstSDK;
|
|
||||||
|
|
||||||
m_sConsoleLogFile = L"";
|
m_sConsoleLogFile = L"";
|
||||||
m_sErrorsLogFile = L"";
|
m_sErrorsLogFile = L"";
|
||||||
@ -299,6 +286,37 @@ namespace NSDoctRenderer
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void LoadSDK_scripts(XmlUtils::CXmlNode& oNode, std::vector<std::wstring>& _files)
|
||||||
|
{
|
||||||
|
XmlUtils::CXmlNodes oNodes;
|
||||||
|
if (oNode.GetNodes(L"file", oNodes))
|
||||||
|
{
|
||||||
|
int nCount = oNodes.GetCount();
|
||||||
|
XmlUtils::CXmlNode _node;
|
||||||
|
for (int i = 0; i < nCount; ++i)
|
||||||
|
{
|
||||||
|
oNodes.GetAt(i, _node);
|
||||||
|
std::wstring strFilePath = _node.GetText();
|
||||||
|
|
||||||
|
if (NSFile::CFileBinary::Exists(strFilePath) &&
|
||||||
|
!NSFile::CFileBinary::Exists(m_strConfigDir + strFilePath))
|
||||||
|
_files.push_back(strFilePath);
|
||||||
|
else
|
||||||
|
_files.push_back(m_strConfigDir + strFilePath);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
std::wstring strFilePath = oNode.GetText();
|
||||||
|
|
||||||
|
if (NSFile::CFileBinary::Exists(strFilePath) &&
|
||||||
|
!NSFile::CFileBinary::Exists(m_strConfigDir + strFilePath))
|
||||||
|
_files.push_back(strFilePath);
|
||||||
|
else
|
||||||
|
_files.push_back(m_strConfigDir + strFilePath);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
static void _LOGGING_ERROR_(const std::wstring& strType, const std::wstring& strError)
|
static void _LOGGING_ERROR_(const std::wstring& strType, const std::wstring& strError)
|
||||||
@ -960,7 +978,7 @@ namespace NSDoctRenderer
|
|||||||
m_pInternal->m_oParams.FromXml(strXml);
|
m_pInternal->m_oParams.FromXml(strXml);
|
||||||
m_pInternal->m_arImagesInChanges.clear();
|
m_pInternal->m_arImagesInChanges.clear();
|
||||||
|
|
||||||
std::wstring sResourceFile;
|
std::vector<std::wstring>* arSdkFiles = NULL;
|
||||||
switch (m_pInternal->m_oParams.m_eSrcFormat)
|
switch (m_pInternal->m_oParams.m_eSrcFormat)
|
||||||
{
|
{
|
||||||
case DoctRendererFormat::DOCT:
|
case DoctRendererFormat::DOCT:
|
||||||
@ -971,7 +989,7 @@ namespace NSDoctRenderer
|
|||||||
case DoctRendererFormat::PDF:
|
case DoctRendererFormat::PDF:
|
||||||
case DoctRendererFormat::HTML:
|
case DoctRendererFormat::HTML:
|
||||||
{
|
{
|
||||||
sResourceFile = m_pInternal->m_strDoctSDK;
|
arSdkFiles = &m_pInternal->m_arDoctSDK;
|
||||||
m_pInternal->m_strEditorType = L"document";
|
m_pInternal->m_strEditorType = L"document";
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -987,7 +1005,7 @@ namespace NSDoctRenderer
|
|||||||
case DoctRendererFormat::PPTT:
|
case DoctRendererFormat::PPTT:
|
||||||
case DoctRendererFormat::PDF:
|
case DoctRendererFormat::PDF:
|
||||||
{
|
{
|
||||||
sResourceFile = m_pInternal->m_strPpttSDK;
|
arSdkFiles = &m_pInternal->m_arPpttSDK;
|
||||||
m_pInternal->m_strEditorType = L"presentation";
|
m_pInternal->m_strEditorType = L"presentation";
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -1003,7 +1021,7 @@ namespace NSDoctRenderer
|
|||||||
case DoctRendererFormat::XLST:
|
case DoctRendererFormat::XLST:
|
||||||
case DoctRendererFormat::PDF:
|
case DoctRendererFormat::PDF:
|
||||||
{
|
{
|
||||||
sResourceFile = m_pInternal->m_strXlstSDK;
|
arSdkFiles = &m_pInternal->m_arXlstSDK;
|
||||||
m_pInternal->m_strEditorType = L"spreadsheet";
|
m_pInternal->m_strEditorType = L"spreadsheet";
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -1037,9 +1055,15 @@ namespace NSDoctRenderer
|
|||||||
strScript += "\n\n";
|
strScript += "\n\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
// теперь оборачиваем сами
|
if (NULL != arSdkFiles)
|
||||||
//strScript += ("(function(){" + m_pInternal->ReadScriptFile(sResourceFile) + "})();");
|
{
|
||||||
strScript += m_pInternal->ReadScriptFile(sResourceFile);
|
for (std::vector<std::wstring>::iterator i = arSdkFiles->begin(); i != arSdkFiles->end(); i++)
|
||||||
|
{
|
||||||
|
strScript += m_pInternal->ReadScriptFile(*i);
|
||||||
|
strScript += "\n\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (m_pInternal->m_strEditorType == L"spreadsheet")
|
if (m_pInternal->m_strEditorType == L"spreadsheet")
|
||||||
strScript += "\n$.ready();";
|
strScript += "\n$.ready();";
|
||||||
|
|
||||||
|
|||||||
@ -117,13 +117,36 @@ static void GetScriptsPath(NSStringUtils::CStringBuilder& oBuilder)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
std::wstring sPath = oNode.ReadValueString(L"DoctSdk");
|
XmlUtils::CXmlNode oNodeSdk = oNode.ReadNode(L"DoctSdk");
|
||||||
if (!NSFile::CFileBinary::Exists(sPath) || NSFile::CFileBinary::Exists(sProcess + sPath))
|
XmlUtils::CXmlNodes oNodes;
|
||||||
sPath = sProcess + sPath;
|
if (oNodeSdk.GetNodes(L"file", oNodes))
|
||||||
|
{
|
||||||
|
int nCount = oNodes.GetCount();
|
||||||
|
XmlUtils::CXmlNode _node;
|
||||||
|
for (int i = 0; i < nCount; ++i)
|
||||||
|
{
|
||||||
|
oNodes.GetAt(i, _node);
|
||||||
|
std::wstring sPath = _node.GetText();
|
||||||
|
|
||||||
oBuilder.WriteString(L"<sdk>");
|
if (!NSFile::CFileBinary::Exists(sPath) || NSFile::CFileBinary::Exists(sProcess + sPath))
|
||||||
oBuilder.WriteEncodeXmlString(CorrectHtmlPath(sPath));
|
sPath = sProcess + sPath;
|
||||||
oBuilder.WriteString(L"</sdk>");
|
|
||||||
|
oBuilder.WriteString(L"<sdk>");
|
||||||
|
oBuilder.WriteEncodeXmlString(CorrectHtmlPath(sPath));
|
||||||
|
oBuilder.WriteString(L"</sdk>");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
std::wstring sPath = oNodeSdk.GetText();
|
||||||
|
|
||||||
|
if (!NSFile::CFileBinary::Exists(sPath) || NSFile::CFileBinary::Exists(sProcess + sPath))
|
||||||
|
sPath = sProcess + sPath;
|
||||||
|
|
||||||
|
oBuilder.WriteString(L"<sdk>");
|
||||||
|
oBuilder.WriteEncodeXmlString(CorrectHtmlPath(sPath));
|
||||||
|
oBuilder.WriteString(L"</sdk>");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int CHtmlFile::Convert(const std::vector<std::wstring>& arFiles, const std::wstring& sDstfolder, const std::wstring& sPathInternal)
|
int CHtmlFile::Convert(const std::vector<std::wstring>& arFiles, const std::wstring& sDstfolder, const std::wstring& sPathInternal)
|
||||||
@ -214,11 +237,31 @@ int CHtmlFile::Convert(const std::vector<std::wstring>& arFiles, const std::wstr
|
|||||||
NULL, NULL, TRUE, CREATE_UNICODE_ENVIRONMENT, (LPVOID)pCommandLineEnv, NULL, &sturtupinfo, &processinfo);
|
NULL, NULL, TRUE, CREATE_UNICODE_ENVIRONMENT, (LPVOID)pCommandLineEnv, NULL, &sturtupinfo, &processinfo);
|
||||||
#else
|
#else
|
||||||
|
|
||||||
|
HANDLE ghJob = CreateJobObject(NULL, NULL);
|
||||||
|
|
||||||
|
if (ghJob)
|
||||||
|
{
|
||||||
|
JOBOBJECT_EXTENDED_LIMIT_INFORMATION jeli = { 0 };
|
||||||
|
|
||||||
|
// Configure all child processes associated with the job to terminate when the
|
||||||
|
jeli.BasicLimitInformation.LimitFlags = JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE;
|
||||||
|
if ( 0 == SetInformationJobObject( ghJob, JobObjectExtendedLimitInformation, &jeli, sizeof(jeli)))
|
||||||
|
{
|
||||||
|
CloseHandle(ghJob);
|
||||||
|
ghJob = NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
PROCESS_INFORMATION processinfo;
|
PROCESS_INFORMATION processinfo;
|
||||||
ZeroMemory(&processinfo,sizeof(PROCESS_INFORMATION));
|
ZeroMemory(&processinfo,sizeof(PROCESS_INFORMATION));
|
||||||
BOOL bResult = CreateProcessW(sInternal.c_str(), pCommandLine,
|
BOOL bResult = CreateProcessW(sInternal.c_str(), pCommandLine,
|
||||||
NULL, NULL, TRUE, NULL, NULL, NULL, &sturtupinfo, &processinfo);
|
NULL, NULL, TRUE, NULL, NULL, NULL, &sturtupinfo, &processinfo);
|
||||||
|
|
||||||
|
if (bResult && ghJob)
|
||||||
|
{
|
||||||
|
AssignProcessToJobObject(ghJob, processinfo.hProcess);
|
||||||
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
::WaitForSingleObject(processinfo.hProcess, INFINITE);
|
::WaitForSingleObject(processinfo.hProcess, INFINITE);
|
||||||
|
|||||||
@ -24,7 +24,7 @@ CONFIG += c++11
|
|||||||
TEMPLATE = app
|
TEMPLATE = app
|
||||||
|
|
||||||
############### destination path ###############
|
############### destination path ###############
|
||||||
DESTINATION_SDK_PATH = $$PWD/../../SDK/lib
|
DESTINATION_SDK_PATH = $$PWD/../../build/lib
|
||||||
|
|
||||||
# WINDOWS
|
# WINDOWS
|
||||||
win32:contains(QMAKE_TARGET.arch, x86_64):{
|
win32:contains(QMAKE_TARGET.arch, x86_64):{
|
||||||
@ -56,8 +56,8 @@ LIBS += -L$$DESTINATION_SDK_PATH -lgraphics
|
|||||||
linux-g++ | linux-g++-64 | linux-g++-32 {
|
linux-g++ | linux-g++-64 | linux-g++-32 {
|
||||||
QMAKE_LFLAGS += -Wl,--rpath=./
|
QMAKE_LFLAGS += -Wl,--rpath=./
|
||||||
|
|
||||||
LIBS += $$PWD/../../UnicodeConverter/icubuilds/linux64/usr/local/lib/libicuuc.so.55
|
LIBS += $$PWD/../../build/bin/icu/linux_64/libicuuc.so.55
|
||||||
LIBS += $$PWD/../../UnicodeConverter/icubuilds/linux64/usr/local/lib/libicudata.so.55
|
LIBS += $$PWD/../../build/bin/icu/linux_64/libicudata.so.55
|
||||||
message(linux)
|
message(linux)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user