mirror of
https://gitea.wildfiregames.com/0ad/0ad.git
synced 2026-06-21 01:04:06 +00:00
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:
@@ -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);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user