1
0
forked from 0ad/0ad

Fix replay cache performance (broken by ea250b3d25). Also remove a TODO fixed by fca844eef6.

Reviewed by elexis.

This was SVN commit r19875.
This commit is contained in:
Imarok 2017-07-06 16:20:18 +00:00
parent d5a15384cc
commit 5c6f3505e8
6 changed files with 24 additions and 13 deletions

View File

@ -57,8 +57,12 @@ function startReplay()
*/
function reallyStartVisualReplay(replayDirectory)
{
// TODO: enhancement: restore filter settings and selected replay when returning from the summary screen.
Engine.StartVisualReplay(replayDirectory);
if (!Engine.StartVisualReplay(replayDirectory))
{
warn('Replay "' + escapeText(Engine.GetReplayDirectoryName(replayDirectory)) + '" not found! Please click on reload cache.');
return;
}
Engine.SwitchGuiPage("page_loading.xml", {
"attribs": Engine.GetReplayAttributes(replayDirectory),
"isNetworked": false,

View File

@ -390,7 +390,12 @@ function startReplay()
if (Engine.HasXmppClient())
Engine.StopXmppClient();
Engine.StartVisualReplay(g_GameData.gui.replayDirectory);
if (!Engine.StartVisualReplay(g_GameData.gui.replayDirectory))
{
warn("Replay file not found!");
return;
}
Engine.SwitchGuiPage("page_loading.xml", {
"attribs": Engine.GetReplayAttributes(g_GameData.gui.replayDirectory),
"isNetworked": false,

View File

@ -49,7 +49,7 @@ OsPath VisualReplay::GetDirectoryName()
return OsPath(paths.UserData() / "replays" / engine_version);
}
void VisualReplay::StartVisualReplay(const OsPath& directory)
bool VisualReplay::StartVisualReplay(const OsPath& directory)
{
ENSURE(!g_NetServer);
ENSURE(!g_NetClient);
@ -58,10 +58,10 @@ void VisualReplay::StartVisualReplay(const OsPath& directory)
const OsPath replayFile = VisualReplay::GetDirectoryName() / directory / L"commands.txt";
if (!FileExists(replayFile))
return;
return false;
g_Game = new CGame(false, false);
g_Game->StartVisualReplay(replayFile);
return g_Game->StartVisualReplay(replayFile);
}
bool VisualReplay::ReadCacheFile(ScriptInterface& scriptInterface, JS::MutableHandleObject cachedReplaysObject)
@ -154,8 +154,6 @@ JS::HandleObject VisualReplay::ReloadReplayCache(ScriptInterface& scriptInterfac
break;
const OsPath replayFile = GetDirectoryName() / directory / L"commands.txt";
if (!FileExists(replayFile))
continue;
bool isNew = true;
replayCacheMap::iterator it = fileList.find(directory);
@ -163,6 +161,8 @@ JS::HandleObject VisualReplay::ReloadReplayCache(ScriptInterface& scriptInterfac
{
if (compareFiles)
{
if (!FileExists(replayFile))
continue;
CFileInfo fileInfo;
GetFileInfo(replayFile, &fileInfo);
if (fileInfo.Size() == it->second.second)
@ -177,6 +177,8 @@ JS::HandleObject VisualReplay::ReloadReplayCache(ScriptInterface& scriptInterfac
JS::RootedValue replayData(cx, LoadReplayData(scriptInterface, directory));
if (replayData.isNull())
{
if (!FileExists(replayFile))
continue;
CFileInfo fileInfo;
GetFileInfo(replayFile, &fileInfo);
scriptInterface.Eval("({})", &replayData);

View File

@ -39,7 +39,7 @@ OsPath GetDirectoryName();
/**
* Replays the commands.txt file in the given subdirectory visually.
*/
void StartVisualReplay(const OsPath& directory);
bool StartVisualReplay(const OsPath& directory);
/**
* Reads the replay Cache file and parses it into a jsObject

View File

@ -23,9 +23,9 @@
#include "ps/Profile.h"
#include "ps/VisualReplay.h"
void JSI_VisualReplay::StartVisualReplay(ScriptInterface::CxPrivate* UNUSED(pCxPrivate), const CStrW& directory)
bool JSI_VisualReplay::StartVisualReplay(ScriptInterface::CxPrivate* UNUSED(pCxPrivate), const CStrW& directory)
{
VisualReplay::StartVisualReplay(directory);
return VisualReplay::StartVisualReplay(directory);
}
bool JSI_VisualReplay::DeleteReplay(ScriptInterface::CxPrivate* UNUSED(pCxPrivate), const CStrW& replayFile)
@ -67,7 +67,7 @@ void JSI_VisualReplay::RegisterScriptFunctions(ScriptInterface& scriptInterface)
{
scriptInterface.RegisterFunction<JS::Value, bool, &GetReplays>("GetReplays");
scriptInterface.RegisterFunction<bool, CStrW, &DeleteReplay>("DeleteReplay");
scriptInterface.RegisterFunction<void, CStrW, &StartVisualReplay>("StartVisualReplay");
scriptInterface.RegisterFunction<bool, CStrW, &StartVisualReplay>("StartVisualReplay");
scriptInterface.RegisterFunction<JS::Value, CStrW, &GetReplayAttributes>("GetReplayAttributes");
scriptInterface.RegisterFunction<JS::Value, CStrW, &GetReplayMetadata>("GetReplayMetadata");
scriptInterface.RegisterFunction<bool, CStrW, &HasReplayMetadata>("HasReplayMetadata");

View File

@ -23,7 +23,7 @@
namespace JSI_VisualReplay
{
void StartVisualReplay(ScriptInterface::CxPrivate* pCxPrivate, const CStrW& directory);
bool StartVisualReplay(ScriptInterface::CxPrivate* pCxPrivate, const CStrW& directory);
bool DeleteReplay(ScriptInterface::CxPrivate* pCxPrivate, const CStrW& replayFile);
JS::Value GetReplays(ScriptInterface::CxPrivate* pCxPrivate, bool compareFiles);
JS::Value GetReplayAttributes(ScriptInterface::CxPrivate* pCxPrivate, const CStrW& directoryName);