Files
UnrealEngineUWP/Engine/Plugins/Runtime/nDisplay/Source/DisplayClusterConfiguration/Private/VersionChecker/DisplayClusterConfigurationVersionChecker.cpp
aurel cordonnier 02c0f425e8 Copy up from Release-Engine-Staging @ 16738359
This represents UE4/Main @ 16738161 and Dev-PerfTest @ 16737719

[CL 16738582 by aurel cordonnier in ue5-release-engine-test branch]
2021-06-22 00:27:54 -04:00

85 lines
3.1 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::Text:
return EDisplayClusterConfigurationVersion::Version_CFG;
case EConfigFileType::Json:
return GetConfigVersionJson(FilePath);
}
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;
}
// 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;
}
else if (Extension.Equals(FString(DisplayClusterConfigurationStrings::file::FileExtCfg), ESearchCase::IgnoreCase))
{
UE_LOG(LogDisplayClusterConfiguration, Log, TEXT("TXT config: %s"), *InConfigPath);
return EConfigFileType::Text;
}
UE_LOG(LogDisplayClusterConfiguration, Warning, TEXT("Unknown file extension: %s"), *Extension);
return EConfigFileType::Unknown;
}