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

148 lines
4.5 KiB
C++

/**
@file JSFile.cpp
@brief
@author James
@version 1.0
@date 2017_11_28
*/
#include "JSFile.h"
namespace laya
{
ADDJSCLSINFO(JsBlob, JSObjNode);
ADDJSCLSINFO(JsFile, JsBlob);
JsFile::JsFile()
{
m_pszName = 0;
m_iPos = __IsLocal;
m_bEnableCache = true;
UpdateTime();
AdjustAmountOfExternalAllocatedMemory(301);
JCMemorySurvey::GetInstance()->newClass("JsFile", 301, this);
}
JsFile::JsFile(const char *p_pszName)
{
m_pszName = 0;
m_iPos = __IsLocal;
m_bEnableCache = true;
UpdateTime();
SetName(p_pszName);
AdjustAmountOfExternalAllocatedMemory(301);
JCMemorySurvey::GetInstance()->newClass("JsFile", 301, this);
}
JsFile::JsFile(const char *p_pszName, const char *p_pszType)
{
m_pszName = 0;
m_iPos = __IsLocal;
m_bEnableCache = true;
UpdateTime();
SetName(p_pszName);
SetType(p_pszType);
AdjustAmountOfExternalAllocatedMemory(301);
JCMemorySurvey::GetInstance()->newClass("JsFile", 301, this);
}
JsFile::~JsFile()
{
if (0 != m_pszName)
{
delete[] m_pszName;
m_pszName = 0;
}
JCMemorySurvey::GetInstance()->releaseClass("JsFile", this);
}
void JsFile::UpdateTime(time_t p_tm) // unix timestamp
{
if (0 == p_tm)
{
p_tm = time(0);
}
lastModifiedDate = p_tm;
lastModifiedDate *= 1000;
}
JsValue JsFile::GetlastModifiedDate()
{
return (__TransferToJs<int64_t>::ToJsDate(lastModifiedDate));
}
const char *JsFile::GetName()
{
if (0 == m_pszName)
return "";
else
return m_pszName;
}
//给 m_FullName 和 m_pszName 赋值
void JsFile::SetName(const char *p_pszName)
{
if (0 != m_pszName)
{
delete[] m_pszName;
m_pszName = 0;
}
size_t len;
if (0 == p_pszName || 0 == (len = strlen(p_pszName)))
{
return;
}
if (len > 7 && (strncasecmp(p_pszName, "http://", 7) == 0 || strncasecmp(p_pszName, "https://", 8) == 0))
{
m_iPos = __IsRemote;
//由于在复杂的url中有?:|等很多符号,容易导致非法。所以需要处理一下
m_FullName = p_pszName;
const char* pQpos = strchr(p_pszName, '?');
int len = strlen(p_pszName);
if (pQpos) len = pQpos - p_pszName;
std::string strName = "";
strName.append(p_pszName, len);
std::string strname = fs::path(strName).filename().generic_string();
len = strname.length();
if (len > 0)
{
m_pszName = new char[len + 1];
memcpy(m_pszName, strname.c_str(), len + 1);
}
}
else
{
m_iPos = __IsLocal;
if (len > 7 && strncasecmp(p_pszName, "file://", 7) == 0)
p_pszName += 7;
if (p_pszName[2] == ':') //有盘符
p_pszName++;
const char* pQpos = strchr(p_pszName, '?');
int len = strlen(p_pszName);
if (pQpos) len = pQpos - p_pszName;
std::string strName = "";
strName.append(p_pszName, len);
m_FullName = strName.c_str();
std::string strname = fs::path(m_FullName).filename().generic_string();
len = strname.length();
if (len > 0)
{
m_pszName = new char[len + 1];
memcpy(m_pszName, strname.c_str(), len + 1);
}
}
}
void JsFile::RegisterToJS()
{
JSP_CLASS("File", JsFile);
JSP_ADD_PROPERTY_RO(lastModifiedDate, JsFile, GetlastModifiedDate);
JSP_ADD_PROPERTY_RO(name, JsFile, GetName);
JSP_ADD_PROPERTY_RO(size, JsFile, GetSize);
JSP_ADD_PROPERTY_RO(type, JsFile, GetType);
JSP_ADD_METHOD("close", JsFile::close);
JSP_ADD_METHOD("slice", JsFile::slice);
JSP_ADD_PROPERTY(enableCache, JsFile, getEnableCache, setEnableCache);
JSP_REG_CONSTRUCTOR(JsFile, const char *);
JSP_REG_CONSTRUCTOR(JsFile, const char *, const char *);
JSP_INSTALL_CLASS("File", JsFile);
}
}
//------------------------------------------------------------------------------
//-----------------------------END FILE--------------------------------