Replay menu cleanups. Fixes #3440.

Hides the summary-button in the replaymenu in case the summary wasn't
saved.
Corrects the timestamp for incompatible replays.
Remove unused UNUSED from header files.
Use string8() instead of OsString().
Mention a reported compiler warning.
Use const& instead of a copy in StartVisualReplay().

This was SVN commit r17356.
This commit is contained in:
elexis
2015-12-02 13:53:44 +00:00
parent 0553a74884
commit a1e57aaeaf
5 changed files with 30 additions and 13 deletions
@@ -57,7 +57,7 @@ function loadReplays()
for (let replay of g_Replays)
{
// Use time saved in file, otherwise file mod date
replay.timestamp = replay.attribs.timestamp ? +replay.attribs.timestamp : +replay.filemod_timestamp;
replay.timestamp = replay.attribs.timestamp ? +replay.attribs.timestamp : +replay.filemod_timestamp-replay.duration;
// Check replay for compability
replay.isCompatible = isReplayCompatible(replay);
@@ -187,7 +187,7 @@ function displayReplayDetails()
Engine.GetGUIObjectByName("replayInfoEmpty").hidden = replaySelected;
Engine.GetGUIObjectByName("startReplayButton").enabled = replaySelected;
Engine.GetGUIObjectByName("deleteReplayButton").enabled = replaySelected;
Engine.GetGUIObjectByName("summaryButton").enabled = replaySelected;
Engine.GetGUIObjectByName("summaryButton").hidden = true;
if (!replaySelected)
return;
@@ -204,6 +204,7 @@ function displayReplayDetails()
Engine.GetGUIObjectByName("sgPlayersNames").caption = getReplayTeamText(replay);
Engine.GetGUIObjectByName("sgMapDescription").caption = mapData.description;
Engine.GetGUIObjectByName("sgMapPreview").sprite = "cropped:(0.7812,0.5859)session/icons/mappreview/" + mapData.preview;
Engine.GetGUIObjectByName("summaryButton").hidden = !Engine.HasReplayMetadata(replay.directory);
}
/**
+11 -7
View File
@@ -46,7 +46,7 @@ OsPath VisualReplay::GetDirectoryName()
return OsPath(psLogDir() / L"sim_log");
}
void VisualReplay::StartVisualReplay(CStrW directory)
void VisualReplay::StartVisualReplay(const CStrW& directory)
{
ENSURE(!g_NetServer);
ENSURE(!g_NetClient);
@@ -142,6 +142,7 @@ inline int getReplayDuration(std::istream *replayStream, const CStr& fileName, c
return -1;
if (debugParser)
// TODO: throws a compiler warning on some systems
debug_printf("At position %i of %lu after %i lines reads.\n", currentPosition, fileSize, linesRead);
if (!replayStream->good())
@@ -293,23 +294,26 @@ void VisualReplay::SaveReplayMetadata(const CStrW& data)
const OsPath fileName = g_Game->GetReplayLogger().GetDirectory() / L"metadata.json";
CreateDirectories(fileName.Parent(), 0700);
std::ofstream stream (OsString(fileName).c_str(), std::ofstream::out | std::ofstream::trunc);
std::ofstream stream (fileName.string8().c_str(), std::ofstream::out | std::ofstream::trunc);
stream << utf8_from_wstring(data);
stream.close();
}
bool VisualReplay::HasReplayMetadata(const CStrW& directoryName)
{
return FileExists(GetDirectoryName() / directoryName / L"metadata.json");
}
JS::Value VisualReplay::GetReplayMetadata(ScriptInterface::CxPrivate* pCxPrivate, const CStrW& directoryName)
{
const OsPath filePath = GetDirectoryName() / directoryName / L"metadata.json";
if (!HasReplayMetadata(directoryName))
return JSVAL_NULL;
JSContext* cx = pCxPrivate->pScriptInterface->GetContext();
JSAutoRequest rq(cx);
JS::RootedValue metadata(cx);
if (!FileExists(filePath))
return JSVAL_NULL;
std::ifstream* stream = new std::ifstream(OsString(filePath).c_str());
std::ifstream* stream = new std::ifstream(OsPath(GetDirectoryName() / directoryName / L"metadata.json").string8());
ENSURE(stream->good());
CStr line;
std::getline(*stream, line);
+6 -1
View File
@@ -39,7 +39,7 @@ OsPath GetDirectoryName();
/**
* Replays the commands.txt file in the given subdirectory visually.
*/
void StartVisualReplay(CStrW directory);
void StartVisualReplay(const CStrW& directory);
/**
* Get a list of replays to display in the GUI.
@@ -68,6 +68,11 @@ bool DeleteReplay(const CStrW& replayFile);
*/
JS::Value GetReplayAttributes(ScriptInterface::CxPrivate* pCxPrivate, const CStrW& directoryName);
/**
* Returns whether or not the metadata / summary screen data has been saved properly when the game ended.
*/
bool HasReplayMetadata(const CStrW& directoryName);
/**
* Returns the metadata of a replay.
*/
@@ -40,6 +40,11 @@ JS::Value JSI_VisualReplay::GetReplayAttributes(ScriptInterface::CxPrivate* pCxP
return VisualReplay::GetReplayAttributes(pCxPrivate, directoryName);
}
bool JSI_VisualReplay::HasReplayMetadata(ScriptInterface::CxPrivate* UNUSED(pCxPrivate), CStrW directoryName)
{
return VisualReplay::HasReplayMetadata(directoryName);
}
JS::Value JSI_VisualReplay::GetReplayMetadata(ScriptInterface::CxPrivate* pCxPrivate, CStrW directoryName)
{
return VisualReplay::GetReplayMetadata(pCxPrivate, directoryName);
@@ -57,5 +62,6 @@ void JSI_VisualReplay::RegisterScriptFunctions(ScriptInterface& scriptInterface)
scriptInterface.RegisterFunction<void, CStrW, &StartVisualReplay>("StartVisualReplay");
scriptInterface.RegisterFunction<JS::Value, CStrW, &GetReplayAttributes>("GetReplayAttributes");
scriptInterface.RegisterFunction<JS::Value, CStrW, &GetReplayMetadata>("GetReplayMetadata");
scriptInterface.RegisterFunction<bool, CStrW, &HasReplayMetadata>("HasReplayMetadata");
scriptInterface.RegisterFunction<void, CStrW, &SaveReplayMetadata>("SaveReplayMetadata");
}
@@ -23,12 +23,13 @@
namespace JSI_VisualReplay
{
void StartVisualReplay(ScriptInterface::CxPrivate* UNUSED(pCxPrivate), CStrW directory);
bool DeleteReplay(ScriptInterface::CxPrivate* UNUSED(pCxPrivate), CStrW replayFile);
void StartVisualReplay(ScriptInterface::CxPrivate* pCxPrivate, CStrW directory);
bool DeleteReplay(ScriptInterface::CxPrivate* pCxPrivate, CStrW replayFile);
JS::Value GetReplays(ScriptInterface::CxPrivate* pCxPrivate);
JS::Value GetReplayAttributes(ScriptInterface::CxPrivate* pCxPrivate, CStrW directoryName);
bool HasReplayMetadata(ScriptInterface::CxPrivate* pCxPrivate, CStrW directoryName);
JS::Value GetReplayMetadata(ScriptInterface::CxPrivate* pCxPrivate, CStrW directoryName);
void SaveReplayMetadata(ScriptInterface::CxPrivate* UNUSED(pCxPrivate), CStrW data);
void SaveReplayMetadata(ScriptInterface::CxPrivate* pCxPrivate, CStrW data);
void RegisterScriptFunctions(ScriptInterface& scriptInterface);
}