[Scummvm-git-logs] scummvm master -> ebdad0681c48904743e16a47b1abe64b15f64f4b

bluegr bluegr at gmail.com
Tue Oct 12 22:56:46 UTC 2021


This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
ebdad0681c BASE: added --list-records command line option


Commit: ebdad0681c48904743e16a47b1abe64b15f64f4b
    https://github.com/scummvm/scummvm/commit/ebdad0681c48904743e16a47b1abe64b15f64f4b
Author: Martin Gerhardy (martin.gerhardy at gmail.com)
Date: 2021-10-13T01:56:43+03:00

Commit Message:
BASE: added --list-records command line option

Changed paths:
    base/commandLine.cpp


diff --git a/base/commandLine.cpp b/base/commandLine.cpp
index 95db610a22..02c5f7b644 100644
--- a/base/commandLine.cpp
+++ b/base/commandLine.cpp
@@ -35,6 +35,7 @@
 #include "common/config-manager.h"
 #include "common/fs.h"
 #include "common/rendermode.h"
+#include "common/savefile.h"
 #include "common/system.h"
 #include "common/textconsole.h"
 #include "common/tokenizer.h"
@@ -177,6 +178,7 @@ static const char HELP_STRING[] =
 	"                           playback by Event Recorder\n"
 	"  --screenshot-period=NUM  When recording, trigger a screenshot every NUM milliseconds\n"
 	"                           (default: 60000)\n"
+	"  --list-records           Display a list of recordings for the target specified\n"
 #endif
 	"\n"
 #if defined(ENABLE_SKY) || defined(ENABLE_QUEEN)
@@ -661,6 +663,9 @@ Common::String parseCommandLine(Common::StringMap &settings, int argc, const cha
 			DO_LONG_OPTION("record-file-name")
 			END_OPTION
 
+			DO_LONG_COMMAND("list-records")
+			END_COMMAND
+
 			DO_LONG_OPTION_INT("screenshot-period")
 			END_OPTION
 #endif
@@ -1024,26 +1029,79 @@ static void listAllEngineDebugFlags() {
 		printf("ID=%-12s Name=%s\n", metaEngine.getEngineId(), metaEngine.getName());
 		printDebugFlags(metaEngine.getDebugChannels());
 	}
+}
+
+static void assembleTargets(const Common::String &singleTarget, Common::Array<Common::String> &targets) {
+	if (!singleTarget.empty()) {
+		targets.push_back(singleTarget);
+		return;
+	}
 
+	// If no target is specified, list save games for all known targets
+	const Common::ConfigManager::DomainMap &domains = ConfMan.getGameDomains();
+	Common::ConfigManager::DomainMap::const_iterator iter;
+
+	targets.reserve(domains.size());
+	for (iter = domains.begin(); iter != domains.end(); ++iter) {
+		targets.push_back(iter->_key);
+	}
 }
 
-/** List all saves states for the given target. */
-static Common::Error listSaves(const Common::String &singleTarget) {
+#ifdef ENABLE_EVENTRECORDER
+static Common::Error listRecords(const Common::String &singleTarget) {
 	Common::Error result = Common::kNoError;
 
-	// If no target is specified, list save games for all known targets
 	Common::Array<Common::String> targets;
-	if (!singleTarget.empty())
-		targets.push_back(singleTarget);
-	else {
-		const Common::ConfigManager::DomainMap &domains = ConfMan.getGameDomains();
-		Common::ConfigManager::DomainMap::const_iterator iter;
+	assembleTargets(singleTarget, targets);
+
+	// FIXME HACK
+	g_system->initBackend();
+
+	Common::String oldDomain = ConfMan.getActiveDomainName();
+
+	for (Common::Array<Common::String>::const_iterator i = targets.begin(), end = targets.end(); i != end; ++i) {
+		Common::String currentTarget;
+		QualifiedGameDescriptor game;
+
+		if (ConfMan.hasGameDomain(*i)) {
+			// The name is a known target
+			currentTarget = *i;
+			EngineMan.upgradeTargetIfNecessary(*i);
+			const Plugin *metaEnginePlugin = nullptr;
+			game = EngineMan.findTarget(*i, &metaEnginePlugin);
+		} else if (game = findGameMatchingName(*i), !game.gameId.empty()) {
+			currentTarget = createTemporaryTarget(game.engineId, game.gameId);
+		} else {
+			return Common::Error(Common::kEnginePluginNotFound, Common::String::format("target '%s'", singleTarget.c_str()));
+		}
 
-		targets.reserve(domains.size());
-		for (iter = domains.begin(); iter != domains.end(); ++iter)
-			targets.push_back(iter->_key);
+		const Common::String &qualifiedGameId = buildQualifiedGameName(game.engineId, game.gameId);
+		ConfMan.setActiveDomain(currentTarget);
+		Common::String pattern(currentTarget + ".r??");
+		const Common::StringArray &files = g_system->getSavefileManager()->listSavefiles(pattern);
+		if (files.empty()) {
+			continue;
+		}
+		printf("Recordings for target '%s' (gameid '%s'):\n", i->c_str(), qualifiedGameId.c_str());
+		for (Common::StringArray::const_iterator x = files.begin(); x != files.end(); ++x) {
+			printf("  %s\n", x->c_str());
+		}
 	}
 
+	// Revert to the old active domain
+	ConfMan.setActiveDomain(oldDomain);
+
+	return result;
+}
+#endif
+
+/** List all saves states for the given target. */
+static Common::Error listSaves(const Common::String &singleTarget) {
+	Common::Error result = Common::kNoError;
+
+	Common::Array<Common::String> targets;
+	assembleTargets(singleTarget, targets);
+
 	// FIXME HACK
 	g_system->initBackend();
 
@@ -1528,6 +1586,11 @@ bool processSettings(Common::String &command, Common::StringMap &settings, Commo
 	} else if (command == "list-all-engines") {
 		listAllEngines();
 		return true;
+#ifdef ENABLE_EVENTRECORDER
+	} else if (command == "list-records") {
+		err = listRecords(settings["game"]);
+		return true;
+#endif
 	} else if (command == "list-saves") {
 		err = listSaves(settings["game"]);
 		return true;




More information about the Scummvm-git-logs mailing list