From 5130bb69d3eb8f0c0be4bb2a9fdb5017d0652601 Mon Sep 17 00:00:00 2001 From: elexis Date: Sun, 5 Feb 2017 02:18:33 +0000 Subject: [PATCH] Use std::time_t in the replay menu (as 64bit integer conversion are implemented now) and remove the unused filemoddate fallback. Differential Revision: https://code.wildfiregames.com/D112 Reviewed By: echotangoecho This was SVN commit r19200. --- .../mods/public/gui/replaymenu/replay_filters.js | 4 ++-- .../data/mods/public/gui/replaymenu/replay_menu.js | 6 ++---- source/ps/Replay.cpp | 12 ++++++------ source/ps/VisualReplay.cpp | 6 ++---- 4 files changed, 12 insertions(+), 16 deletions(-) diff --git a/binaries/data/mods/public/gui/replaymenu/replay_filters.js b/binaries/data/mods/public/gui/replaymenu/replay_filters.js index 723234b282..ca28c139ac 100644 --- a/binaries/data/mods/public/gui/replaymenu/replay_filters.js +++ b/binaries/data/mods/public/gui/replaymenu/replay_filters.js @@ -189,8 +189,8 @@ function filterReplays() switch (sortKey) { case 'months': - cmpA = +a.timestamp; - cmpB = +b.timestamp; + cmpA = +a.attribs.timestamp; + cmpB = +b.attribs.timestamp; break; case 'duration': cmpA = +a.duration; diff --git a/binaries/data/mods/public/gui/replaymenu/replay_menu.js b/binaries/data/mods/public/gui/replaymenu/replay_menu.js index c4db73d415..cf789f93e5 100644 --- a/binaries/data/mods/public/gui/replaymenu/replay_menu.js +++ b/binaries/data/mods/public/gui/replaymenu/replay_menu.js @@ -87,8 +87,6 @@ function loadReplays(replaySelectionData) for (let replay of g_Replays) { let nonAIPlayers = 0; - // Use time saved in file, otherwise file mod date - replay.timestamp = replay.attribs.timestamp ? +replay.attribs.timestamp : +replay.filemod_timestamp-replay.duration; // Check replay for compatibility replay.isCompatible = isReplayCompatible(replay); @@ -300,7 +298,7 @@ function greyout(text, isCompatible) */ function getReplayDateTime(replay) { - return Engine.FormatMillisecondsIntoDateStringLocal(replay.timestamp * 1000, translate("yyyy-MM-dd HH:mm")); + return Engine.FormatMillisecondsIntoDateStringLocal(replay.attribs.timestamp * 1000, translate("yyyy-MM-dd HH:mm")); } /** @@ -330,7 +328,7 @@ function getReplayMapName(replay) */ function getReplayMonth(replay) { - return Engine.FormatMillisecondsIntoDateStringLocal(replay.timestamp * 1000, translate("yyyy-MM")); + return Engine.FormatMillisecondsIntoDateStringLocal(replay.attribs.timestamp * 1000, translate("yyyy-MM")); } /** diff --git a/source/ps/Replay.cpp b/source/ps/Replay.cpp index 17c139fe2a..de573acccc 100644 --- a/source/ps/Replay.cpp +++ b/source/ps/Replay.cpp @@ -1,4 +1,4 @@ -/* Copyright (C) 2016 Wildfire Games. +/* Copyright (C) 2017 Wildfire Games. * This file is part of 0 A.D. * * 0 A.D. is free software: you can redistribute it and/or modify @@ -54,7 +54,7 @@ CReplayLogger::~CReplayLogger() void CReplayLogger::StartGame(JS::MutableHandleValue attribs) { // Add timestamp, since the file-modification-date can change - m_ScriptInterface.SetProperty(attribs, "timestamp", std::to_string(std::time(nullptr))); + m_ScriptInterface.SetProperty(attribs, "timestamp", std::time(nullptr)); // Add engine version and currently loaded mods for sanity checks when replaying m_ScriptInterface.SetProperty(attribs, "engine_version", CStr(engine_version)); @@ -73,10 +73,10 @@ void CReplayLogger::Turn(u32 n, u32 turnLength, std::vector& JSAutoRequest rq(cx); *m_Stream << "turn " << n << " " << turnLength << "\n"; - for (size_t i = 0; i < commands.size(); ++i) - { - *m_Stream << "cmd " << commands[i].player << " " << m_ScriptInterface.StringifyJSON(&commands[i].data, false) << "\n"; - } + + for (SimulationCommand& command : commands) + *m_Stream << "cmd " << command.player << " " << m_ScriptInterface.StringifyJSON(&command.data, false) << "\n"; + *m_Stream << "end\n"; m_Stream->flush(); } diff --git a/source/ps/VisualReplay.cpp b/source/ps/VisualReplay.cpp index a2c6c38e27..b4eb10e72c 100644 --- a/source/ps/VisualReplay.cpp +++ b/source/ps/VisualReplay.cpp @@ -1,4 +1,4 @@ -/* Copyright (C) 2016 Wildfire Games. +/* Copyright (C) 2017 Wildfire Games. * This file is part of 0 A.D. * * 0 A.D. is free software: you can redistribute it and/or modify @@ -129,7 +129,7 @@ inline int goBackToLineBeginning(std::istream* replayStream, const CStr& fileNam } /** - * Compute game duration. Assume constant turn length. + * Compute game duration in seconds. Assume constant turn length. * Find the last line that starts with "turn" by reading the file backwards. * * @return seconds or -1 on error @@ -184,7 +184,6 @@ JS::Value VisualReplay::LoadReplayData(ScriptInterface& scriptInterface, OsPath& // Get file size and modification date CFileInfo fileInfo; GetFileInfo(replayFile, &fileInfo); - const u64 fileTime = (u64)fileInfo.MTime() & ~1; // skip lowest bit, since zip and FAT don't preserve it (according to CCacheLoader::LooseCachePath) const u64 fileSize = (u64)fileInfo.Size(); if (fileSize == 0) @@ -251,7 +250,6 @@ JS::Value VisualReplay::LoadReplayData(ScriptInterface& scriptInterface, OsPath& scriptInterface.Eval("({})", &replayData); scriptInterface.SetProperty(replayData, "file", replayFile); scriptInterface.SetProperty(replayData, "directory", directory); - scriptInterface.SetProperty(replayData, "filemod_timestamp", std::to_string(fileTime)); scriptInterface.SetProperty(replayData, "attribs", attribs); scriptInterface.SetProperty(replayData, "duration", duration); return replayData;