Files
LayaNative2.0/Conch/source/conch/JSWrapper/LayaWrap/JSFileSystem.cpp
T
2020-11-11 16:17:13 +08:00

179 lines
4.9 KiB
C++

/**
@file JSFileSystem.cpp
@brief
@author James
@version 1.0
@date 2017_11_28
*/
#include "JSFileSystem.h"
#include "../JSInterface/JSInterface.h"
#include <util/Log.h>
#include <fileSystem/JCFileSystem.h>
namespace laya
{
bool JSFileSystem::exists(const char* p_pszPath )
{
bool bret = false;
try {
bret = fs::exists(p_pszPath);
}
catch (...) {
return false;
}
return bret;
}
bool JSFileSystem::mkdir( const char* p_pszPath )
{
bool bret = false;
try
{
bret = fs::create_directories(p_pszPath);
}
catch (...)
{
return false;
}
return bret;
}
bool ChkPermission( const char* p_pszFile, const char* p_pszDesc )
{
return true;
}
bool JSFileSystem::rm(const char* p_pszFile)
{
if(!ChkPermission(p_pszFile,"rm is forbidden!"))
{
return false;
}
try
{
return fs::remove(p_pszFile);
}
catch (...)
{
return false;
}
}
bool JSFileSystem::rmDir(const char* p_pszPath, JSValueAsParam onprogress, JSValueAsParam oncomplete, JSValueAsParam onerror)
{
return true;
}
bool JSFileSystem::rmDirSync(const char* p_pszPath)
{
return true;
}
JsValue JSFileSystem::readdirSync(const char* pPath)
{
std::vector < std::string> paths;
std::string path = pPath;
if (!fs::exists(path))
return JSP_TO_JS_NULL;
fs::directory_iterator item_begin(path);
fs::directory_iterator item_end;
for (; item_begin != item_end; item_begin++) {
auto pp = (*item_begin).path().filename();
paths.push_back(pp.generic_string());
}
return __TransferToJs<std::vector<std::string> >::ToJs(paths);
}
JsValue JSFileSystem::lstatSync(const char* pPath)
{
std::vector < std::string> paths;
std::string path = pPath;
if (!fs::exists(path))
return JSP_TO_JS_NULL;
try {
auto st = fs::status(path);
std::time_t wtime;
#ifdef WIN32
wtime = std::chrono::system_clock::to_time_t(fs::last_write_time(path));
#else
wtime = fs::last_write_time(path);
#endif
bool isDir = fs::is_directory(st);
bool isFile = fs::is_regular_file(st);
int sz = 0;
if (!isDir)sz = (int)fs::file_size(path);
#ifdef JS_V8
//st.type;
v8::Isolate* pIso = v8::Isolate::GetCurrent();
//v8::HandleScope scope(pIso); 不用了,还得想办法escape
v8::Local<v8::Object> retobj = v8::Object::New(pIso);
retobj->Set(Js_Str(pIso, "isDirectory"), v8::Boolean::New(pIso, isDir));
retobj->Set(Js_Str(pIso, "isFile"), v8::Boolean::New(pIso, isFile));
retobj->Set(Js_Str(pIso, "size"), v8::Number::New(pIso, sz));
retobj->Set(Js_Str(pIso, "mtime"), v8::Date::New(pIso, (double)(wtime*1000)));
return retobj;
#elif JS_JSC
JSContextRef ctx = laya::__TlsData::GetInstance()->GetCurContext();
JSObjectRef retobj = JSObjectMake(ctx, nullptr, nullptr);
JSObjectSetProperty(ctx, retobj, JSStringCreateWithUTF8CString("isDirectory"), JSValueMakeBoolean(ctx, isDir), kJSPropertyAttributeNone, nullptr);
JSObjectSetProperty(ctx, retobj, JSStringCreateWithUTF8CString("isFile"), JSValueMakeBoolean(ctx,isFile), kJSPropertyAttributeNone, nullptr);
JSObjectSetProperty(ctx, retobj, JSStringCreateWithUTF8CString("size"), JSValueMakeNumber(ctx,sz), kJSPropertyAttributeNone, nullptr);
JSObjectSetProperty(ctx, retobj, JSStringCreateWithUTF8CString("mtime"), laya::__TransferToJs<long>::ToJsDate(wtime*1000), kJSPropertyAttributeNone, nullptr);
return retobj;
#endif
}
catch (...)
{
JSP_THROW("lstatSync error!");
}
return JSP_TO_JS_NULL;
}
bool JSFileSystem::JSWriteFileSync(const char* p_sUrl, JSValueAsParam args)
{
if (!p_sUrl) return false;
char* pABPtr = NULL;
int nABLen = 0;
bool bisab = extractJSAB(args, pABPtr, nABLen);
bool bret = false;
if (bisab)
{
if (pABPtr && nABLen > 0)
{
bret = writeFileSync1(p_sUrl, pABPtr, nABLen, 0);
}
}
else
{
if (__TransferToCpp<char *>::is(args))
{
char* pData = JS_TO_CPP(char*, args);
if ( pData )
{
int len = strlen(pData);
JCBuffer buf((char*)pData, len, false, false);
bret = writeFileSync( p_sUrl, buf, JCBuffer::utf8);
}
}
}
return bret;
}
JsValue JSFileSystem::readBinFileSync(const char* p_pszFile)
{
if(!ChkPermission(p_pszFile,"readBinFileSync is forbidden!"))
{
return JSP_TO_JS_NULL;
}
JCBuffer buf;
if (readFileSync(p_pszFile, buf, JCBuffer::raw))
{
return laya::createJSAB(buf.m_pPtr, buf.m_nLen);
}
else
{
return JSP_TO_JS_NULL;
}
}
void JSFileSystem::exportJS()
{
}
};
//------------------------------------------------------------------------------
//-----------------------------END FILE--------------------------------