Files
UnrealEngineUWP/Engine/Plugins/Runtime/nDisplay/Source/DisplayClusterConfiguration/Private/VersionChecker/DisplayClusterConfigurationVersionChecker.cpp
andrey yamashev e96a2275ba nDisplay: various updates
- got rid of master/slave terminology
- new JSON 500 config scheme
- removed old CFG config scheme

#jira UE-133179
#rb Alejandro.Arango, Patrick.Hardy
#preflight 61bbb2ae372f4dbf43856a61

#ROBOMERGE-AUTHOR: andrey.yamashev
#ROBOMERGE-SOURCE: CL 18489261 in //UE5/Release-5.0/... via CL 18489267
#ROBOMERGE-BOT: STARSHIP (Release-Engine-Staging -> Release-Engine-Test) (v899-18417669)

[CL 18489272 by andrey yamashev in ue5-release-engine-test branch]
2021-12-20 15:33:45 -05:00

82 lines
2.9 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#include "VersionChecker/DisplayClusterConfigurationVersionChecker.h"
#include "VersionChecker/DisplayClusterConfigurationVersionCheckerTypes.h"
#include "DisplayClusterConfigurationLog.h"
#include "DisplayClusterConfigurationStrings.h"
#include "JsonObjectConverter.h"
#include "Misc/FileHelper.h"
#include "Misc/Paths.h"
EDisplayClusterConfigurationVersion FDisplayClusterConfigurationVersionChecker::GetConfigVersion(const FString& FilePath) const
{
// First, detect either it's an old text based file or a newer JSON
EConfigFileType FileType = GetConfigFileType(FilePath);
switch (FileType)
{
case EConfigFileType::Json:
return GetConfigVersionJson(FilePath);
default:
return EDisplayClusterConfigurationVersion::Unknown;
}
}
EDisplayClusterConfigurationVersion FDisplayClusterConfigurationVersionChecker::GetConfigVersionJson(const FString& FilePath) const
{
FString JsonText;
// Load json text to the string object
if (!FFileHelper::LoadFileToString(JsonText, *FilePath))
{
UE_LOG(LogDisplayClusterConfiguration, Error, TEXT("Couldn't read file: %s"), *FilePath);
return EDisplayClusterConfigurationVersion::Unknown;
}
// Parse the string object
FDisplayClusterConfigurationVersionContainer JsonData;
if (!FJsonObjectConverter::JsonObjectStringToUStruct<FDisplayClusterConfigurationVersionContainer>(JsonText, &JsonData, 0, 0))
{
UE_LOG(LogDisplayClusterConfiguration, Error, TEXT("Couldn't deserialize json file: %s"), *FilePath);
return EDisplayClusterConfigurationVersion::Unknown;
}
// Now detect the JSON config version
if (JsonData.nDisplay.Version.Equals(TEXT("23")) || // 426 was exporting .ndisplay configs with version "23"
JsonData.nDisplay.Version.Equals(TEXT("4.23")) || // This and the following are just in case somebody manually has changed the version field
JsonData.nDisplay.Version.Equals(TEXT("26")) ||
JsonData.nDisplay.Version.Equals(TEXT("4.26")))
{
return EDisplayClusterConfigurationVersion::Version_426;
}
else if (JsonData.nDisplay.Version.Equals(TEXT("4.27")))
{
return EDisplayClusterConfigurationVersion::Version_427;
}
else if (JsonData.nDisplay.Version.Equals(TEXT("5.00")))
{
return EDisplayClusterConfigurationVersion::Version_500;
}
// Otherwise it's something unknown
return EDisplayClusterConfigurationVersion::Unknown;
}
FDisplayClusterConfigurationVersionChecker::EConfigFileType FDisplayClusterConfigurationVersionChecker::GetConfigFileType(const FString& InConfigPath) const
{
const FString Extension = FPaths::GetExtension(InConfigPath).ToLower();
if (Extension.Equals(FString(DisplayClusterConfigurationStrings::file::FileExtJson), ESearchCase::IgnoreCase))
{
UE_LOG(LogDisplayClusterConfiguration, Log, TEXT("JSON config: %s"), *InConfigPath);
return EConfigFileType::Json;
}
UE_LOG(LogDisplayClusterConfiguration, Warning, TEXT("Unknown file extension: %s"), *Extension);
return EConfigFileType::Unknown;
}