in Source/RiderSourceCodeAccess/Private/RiderPathLocator/Common/RiderPathLocator.cpp [126:165]
void FRiderPathLocator::ParseProductInfoJson(FInstallInfo& Info, const FString& ProductInfoJsonPath)
{
FString JsonStr;
FFileHelper::LoadFileToString(JsonStr, *ProductInfoJsonPath);
TSharedRef<TJsonReader<TCHAR>> JsonReader = TJsonReaderFactory<TCHAR>::Create(JsonStr);
TSharedPtr<FJsonObject> JsonObject = MakeShareable(new FJsonObject());
if (FJsonSerializer::Deserialize(JsonReader, JsonObject) && JsonObject.IsValid())
{
FString VersionString;
JsonObject->TryGetStringField(TEXT("buildNumber"), VersionString);
Info.Version = VersionString;
if(Info.Version.Major() >= 221)
{
Info.SupportUprojectState = FInstallInfo::ESupportUproject::Release;
return;
}
const TArray< TSharedPtr<FJsonValue> >* CustomProperties;
if(!JsonObject->TryGetArrayField(TEXT("customProperties"), CustomProperties)) return;
for (const TSharedPtr<FJsonValue>& CustomProperty : *CustomProperties)
{
const TSharedPtr<FJsonObject> Item = CustomProperty->AsObject();
if(!Item.IsValid()) continue;
FString SupportUprojectStateKey;
const bool bIsValidKey = Item->TryGetStringField(TEXT("key"), SupportUprojectStateKey);
if(!bIsValidKey) continue;
if( !SupportUprojectStateKey.Equals(TEXT("SupportUproject")) &&
!SupportUprojectStateKey.Equals(TEXT("SupportUprojectState"))) continue;
FString SupportUprojectStateValue;
const bool bIsValidValue = Item->TryGetStringField(TEXT("value"), SupportUprojectStateValue);
if(!bIsValidValue) continue;
if(SupportUprojectStateValue.Equals(TEXT("Beta"))) Info.SupportUprojectState = FInstallInfo::ESupportUproject::Beta;
if(SupportUprojectStateValue.Equals(TEXT("Release"))) Info.SupportUprojectState = FInstallInfo::ESupportUproject::Release;
}
}
}