#include "NativeControlEmbed.h" #include "../server.h" JSSmart CNativeControlEmbed::SetFilePath(JSSmart path) { m_pInternal->SetFilePath(path->toStringW()); return NULL; } JSSmart CNativeControlEmbed::GetFilePath() { return CJSContext::createString(m_pInternal->GetFilePath()); } JSSmart CNativeControlEmbed::SetFileId(JSSmart fileId) { m_pInternal->SetFileId(fileId->toStringW()); return NULL; } JSSmart CNativeControlEmbed::GetFileId() { return CJSContext::createString(m_pInternal->GetFileId()); } JSSmart CNativeControlEmbed::GetFileBinary(JSSmart file) { std::wstring sFilePath = file->toStringW(); if (CServerInstance::getInstance().IsEnable()) { std::wstring sFileFolder = NSFile::GetDirectoryName(m_pInternal->GetFilePath()); if (0 == sFilePath.find(sFileFolder)) return CJSContext::createUint8Array(sFilePath); return CJSContext::createNull(); } return CJSContext::createUint8Array(sFilePath); } JSSmart CNativeControlEmbed::GetFontBinary(JSSmart file) { // TODO: // по идее файлы могут совпадать по имени, но лежать в разных директориях. // и поэтому в AllFonts.js надо бы писать пути полные. // пока оставим поддержку старой версии тоже std::wstring sFile = file->toStringW(); bool bIsFullFilePath = (std::wstring::npos != sFile.find('\\') || std::wstring::npos != sFile.find('/')); if (bIsFullFilePath) { bIsFullFilePath = NSFile::CFileBinary::Exists(sFile); } if (!bIsFullFilePath) { std::map::iterator pair = m_pInternal->m_map_fonts.find(sFile); if (pair != m_pInternal->m_map_fonts.end()) sFile = pair->second; else sFile = m_pInternal->m_sDefaultFont; } return CJSContext::createUint8Array(sFile); } JSSmart CNativeControlEmbed::GetFontsDirectory() { return CJSContext::createString(m_pInternal->m_strFontsDirectory); } JSSmart CNativeControlEmbed::GetFileString(JSSmart file) { if (CServerInstance::getInstance().IsEnable()) return CJSContext::createNull(); return CJSContext::createUint8Array(file->toStringW()); } JSSmart CNativeControlEmbed::GetEditorType() { return CJSContext::createString(m_pInternal->m_strEditorType); } JSSmart CNativeControlEmbed::CheckNextChange() { m_pInternal->m_nCurrentChangesNumber++; if (-1 != m_pInternal->m_nMaxChangesNumber) { if (m_pInternal->m_nCurrentChangesNumber >= m_pInternal->m_nMaxChangesNumber) { return CJSContext::createBool(false); } } return CJSContext::createBool(true); } JSSmart CNativeControlEmbed::GetCountChanges() { int nCount = 0; if (m_pInternal->m_pChanges != NULL) { nCount = (int)m_pInternal->m_pChanges->size(); } return CJSContext::createInt(nCount); } JSSmart CNativeControlEmbed::GetChangesFile(JSSmart index) { int nIndex = index->toInt32(); std::wstring strFile = L""; if (m_pInternal->m_pChanges != NULL) strFile = (*m_pInternal->m_pChanges)[nIndex]; return CJSContext::createString(strFile); } JSSmart CNativeControlEmbed::Save_AllocNative(JSSmart nLen) { int Len = nLen->toInt32(); m_pInternal->Save_Alloc(Len); return CJSContext::createUint8Array(m_pInternal->m_pSaveBinary, m_pInternal->m_nSaveLen, true); } JSSmart CNativeControlEmbed::Save_ReAllocNative(JSSmart pos, JSSmart len) { int _pos = pos->toInt32(); int _len = len->toInt32(); m_pInternal->Save_ReAlloc(_pos, _len); return CJSContext::createUint8Array(m_pInternal->m_pSaveBinary, m_pInternal->m_nSaveLen, true); } JSSmart CNativeControlEmbed::Save_End(JSSmart pos, JSSmart len) { std::string sHeader = pos->toStringA(); int _len = len->toInt32(); m_pInternal->Save_End(sHeader, _len); return NULL; } JSSmart CNativeControlEmbed::AddImageInChanges(JSSmart img) { std::wstring sImage = img->toStringW(); if (sImage.empty()) return NULL; std::map::const_iterator iter = m_pInternal->m_mapImagesInChanges.find(sImage); if (iter == m_pInternal->m_mapImagesInChanges.end()) m_pInternal->m_mapImagesInChanges.insert(std::pair(sImage, true)); return NULL; } JSSmart CNativeControlEmbed::ConsoleLog(JSSmart message) { m_pInternal->ConsoleLog(message->toStringA()); return NULL; } JSSmart CNativeControlEmbed::SaveChanges(JSSmart sParam, JSSmart nDeleteIndex, JSSmart nCount) { m_pInternal->DumpChanges(sParam->toStringA(), nDeleteIndex->toInt32(), nCount->toInt32()); return NULL; } JSSmart CNativeControlEmbed::ZipOpen(JSSmart name) { bool bIsOpen = m_pInternal->m_oZipWorker.Open(name->toStringW()); if (!bIsOpen) return CJSContext::createNull(); JSSmart obj = CJSContext::createObject(); for (std::vector::iterator i = m_pInternal->m_oZipWorker.m_arFiles.begin(); i != m_pInternal->m_oZipWorker.m_arFiles.end(); i++) { std::string sFile = NSFile::CUtf8Converter::GetUtf8StringFromUnicode(*i); obj->set(sFile.c_str(), CJSContext::createString(sFile)); } return obj->toValue(); } JSSmart CNativeControlEmbed::ZipOpenBase64(JSSmart name) { bool bIsOpen = m_pInternal->m_oZipWorker.OpenBase64(name->toStringA()); if (!bIsOpen) return CJSContext::createNull(); JSSmart obj = CJSContext::createObject(); for (std::vector::iterator i = m_pInternal->m_oZipWorker.m_arFiles.begin(); i != m_pInternal->m_oZipWorker.m_arFiles.end(); i++) { std::string sFile = NSFile::CUtf8Converter::GetUtf8StringFromUnicode(*i); obj->set(sFile.c_str(), CJSContext::createString(sFile)); } return obj->toValue(); } JSSmart CNativeControlEmbed::ZipFileAsString(JSSmart name) { if (m_pInternal->m_oZipWorker.m_sTmpFolder.empty()) return CJSContext::createUndefined(); BYTE* pData = NULL; DWORD len = 0; m_pInternal->m_oZipWorker.GetFileData(name->toStringW(), pData, len); return CJSContext::createString((char*)pData, len); } JSSmart CNativeControlEmbed::ZipFileAsBinary(JSSmart name) { if (m_pInternal->m_oZipWorker.m_sTmpFolder.empty()) return CJSContext::createUndefined(); return CJSContext::createUint8Array(m_pInternal->m_oZipWorker.m_sTmpFolder + L"/" + name->toStringW()); } JSSmart CNativeControlEmbed::ZipClose() { m_pInternal->m_oZipWorker.Close(); return NULL; } JSSmart CNativeControlEmbed::GetImageUrl(JSSmart sUrl) { std::wstring Url = sUrl->toStringW(); if (!m_pInternal->m_pWorker) m_pInternal->m_pWorker = new CImagesWorker(m_pInternal->m_strImagesDirectory); std::wstring sRet = m_pInternal->m_pWorker->GetImage(Url); return CJSContext::createString(sRet); } JSSmart CNativeControlEmbed::GetImagesPath() { return CJSContext::createString(m_pInternal->m_strImagesDirectory); } #include "./../../graphics/MetafileToRenderer.h" #include "./../../raster/BgraFrame.h" JSSmart CNativeControlEmbed::GetImageOriginalSize(JSSmart sUrl) { IMetafileToRenderter oRenderer(NULL); oRenderer.SetMediaDirectory(NSDirectory::GetFolderPath(m_pInternal->m_strImagesDirectory)); std::wstring sPath = oRenderer.GetImagePath(sUrl->toStringW()); CBgraFrame oFrame; if (oFrame.OpenFile(sPath)) { JSSmart ret = CJSContext::createObject(); ret->set("W", oFrame.get_Width()); ret->set("H", oFrame.get_Height()); return ret->toValue(); } return CJSContext::createUndefined(); }