Changeset View
Changeset View
Standalone View
Standalone View
source/ps/VisualReplay.cpp
Show First 20 Lines • Show All 184 Lines • ▼ Show 20 Lines | if (isNew) | ||||
JS::RootedValue replayData(cx, LoadReplayData(scriptInterface, directory)); | JS::RootedValue replayData(cx, LoadReplayData(scriptInterface, directory)); | ||||
if (replayData.isNull()) | if (replayData.isNull()) | ||||
{ | { | ||||
if (!FileExists(replayFile)) | if (!FileExists(replayFile)) | ||||
continue; | continue; | ||||
CFileInfo fileInfo; | CFileInfo fileInfo; | ||||
GetFileInfo(replayFile, &fileInfo); | GetFileInfo(replayFile, &fileInfo); | ||||
scriptInterface.CreateObject( | ScriptInterface::CreateObject( | ||||
cx, | |||||
&replayData, | &replayData, | ||||
"directory", directory.string(), | "directory", directory.string(), | ||||
"fileSize", static_cast<double>(fileInfo.Size())); | "fileSize", static_cast<double>(fileInfo.Size())); | ||||
} | } | ||||
JS_SetElement(cx, replays, i++, replayData); | JS_SetElement(cx, replays, i++, replayData); | ||||
newReplays = true; | newReplays = true; | ||||
} | } | ||||
else | else | ||||
Show All 28 Lines | |||||
JS::Value VisualReplay::GetReplays(const ScriptInterface& scriptInterface, bool compareFiles) | JS::Value VisualReplay::GetReplays(const ScriptInterface& scriptInterface, bool compareFiles) | ||||
{ | { | ||||
TIMER(L"GetReplays"); | TIMER(L"GetReplays"); | ||||
JSContext* cx = scriptInterface.GetContext(); | JSContext* cx = scriptInterface.GetContext(); | ||||
JSAutoRequest rq(cx); | JSAutoRequest rq(cx); | ||||
JS::RootedObject replays(cx, ReloadReplayCache(scriptInterface, compareFiles)); | JS::RootedObject replays(cx, ReloadReplayCache(scriptInterface, compareFiles)); | ||||
// Only take entries with data | // Only take entries with data | ||||
JS::RootedValue replaysWithoutNullEntries(cx); | JS::RootedValue replaysWithoutNullEntries(cx); | ||||
scriptInterface.CreateArray(&replaysWithoutNullEntries); | ScriptInterface::CreateArray(cx, &replaysWithoutNullEntries); | ||||
u32 replaysLength = 0; | u32 replaysLength = 0; | ||||
JS_GetArrayLength(cx, replays, &replaysLength); | JS_GetArrayLength(cx, replays, &replaysLength); | ||||
for (u32 j = 0, i = 0; j < replaysLength; ++j) | for (u32 j = 0, i = 0; j < replaysLength; ++j) | ||||
{ | { | ||||
JS::RootedValue replay(cx); | JS::RootedValue replay(cx); | ||||
JS_GetElement(cx, replays, j, &replay); | JS_GetElement(cx, replays, j, &replay); | ||||
if (scriptInterface.HasProperty(replay, "attribs")) | if (scriptInterface.HasProperty(replay, "attribs")) | ||||
▲ Show 20 Lines • Show All 153 Lines • ▼ Show 20 Lines | JS::Value VisualReplay::LoadReplayData(const ScriptInterface& scriptInterface, const OsPath& directory) | ||||
// Ensure minimum duration | // Ensure minimum duration | ||||
if (duration < minimumReplayDuration) | if (duration < minimumReplayDuration) | ||||
return JS::NullValue(); | return JS::NullValue(); | ||||
// Return the actual data | // Return the actual data | ||||
JS::RootedValue replayData(cx); | JS::RootedValue replayData(cx); | ||||
scriptInterface.CreateObject( | ScriptInterface::CreateObject( | ||||
cx, | |||||
&replayData, | &replayData, | ||||
"directory", directory.string(), | "directory", directory.string(), | ||||
"fileSize", static_cast<double>(fileSize), | "fileSize", static_cast<double>(fileSize), | ||||
"duration", static_cast<u32>(duration)); | "duration", duration); | ||||
scriptInterface.SetProperty(replayData, "attribs", attribs); | scriptInterface.SetProperty(replayData, "attribs", attribs); | ||||
return replayData; | return replayData; | ||||
} | } | ||||
bool VisualReplay::DeleteReplay(const OsPath& replayDirectory) | bool VisualReplay::DeleteReplay(const OsPath& replayDirectory) | ||||
{ | { | ||||
if (replayDirectory.empty()) | if (replayDirectory.empty()) | ||||
return false; | return false; | ||||
const OsPath directory = GetDirectoryPath() / replayDirectory; | const OsPath directory = GetDirectoryPath() / replayDirectory; | ||||
return DirectoryExists(directory) && DeleteDirectory(directory) == INFO::OK; | return DirectoryExists(directory) && DeleteDirectory(directory) == INFO::OK; | ||||
} | } | ||||
JS::Value VisualReplay::GetReplayAttributes(ScriptInterface::CxPrivate* pCxPrivate, const OsPath& directoryName) | JS::Value VisualReplay::GetReplayAttributes(ScriptInterface::CxPrivate* pCxPrivate, const OsPath& directoryName) | ||||
{ | { | ||||
// Create empty JS object | // Create empty JS object | ||||
JSContext* cx = pCxPrivate->pScriptInterface->GetContext(); | JSContext* cx = pCxPrivate->pScriptInterface->GetContext(); | ||||
JSAutoRequest rq(cx); | JSAutoRequest rq(cx); | ||||
JS::RootedValue attribs(cx); | JS::RootedValue attribs(cx); | ||||
pCxPrivate->pScriptInterface->CreateObject(&attribs); | ScriptInterface::CreateObject(cx, &attribs); | ||||
// Return empty object if file doesn't exist | // Return empty object if file doesn't exist | ||||
const OsPath replayFile = GetDirectoryPath() / directoryName / L"commands.txt"; | const OsPath replayFile = GetDirectoryPath() / directoryName / L"commands.txt"; | ||||
if (!FileExists(replayFile)) | if (!FileExists(replayFile)) | ||||
return attribs; | return attribs; | ||||
// Open file | // Open file | ||||
std::istream* replayStream = new std::ifstream(OsString(replayFile).c_str()); | std::istream* replayStream = new std::ifstream(OsString(replayFile).c_str()); | ||||
▲ Show 20 Lines • Show All 87 Lines • Show Last 20 Lines |
Wildfire Games · Phabricator