void FOnlineUserCloudOculus::RequestEnumeratePagedBuckets(TSharedPtr<const FUniqueNetId> UserId, ovrCloudStorageMetadataArrayHandle previousPage)
{
	auto Delegate = FOculusMessageOnCompleteDelegate::CreateLambda([this, UserId](ovrMessageHandle Message, bool bIsError)
	{
		const FString& BucketName(Buckets[EnumerateBucketsCounter]);

		if (bIsError)
		{
			// NOTE: this may be too harsh.  depending on the error we might be able to keep going.
			// check when better error handling is enabled in t11136437
			UE_LOG_ONLINE(Warning, TEXT("Failed to Enumerate bucket: %s"), *BucketName);
			EnumerateBucketsCounter = -1;
			EnumerateCache.Reset();
			TriggerOnEnumerateUserFilesCompleteDelegates(false, *UserId);
			return;
		}

		ovrCloudStorageMetadataArrayHandle response = ovr_Message_GetCloudStorageMetadataArray(Message);

		// adds all the keys to the cache in the format: BucketName / Key
		for (size_t i = 0; i < ovr_CloudStorageMetadataArray_GetSize(response); i++) {
			ovrCloudStorageMetadataHandle Metadatum = ovr_CloudStorageMetadataArray_GetElement(response, i);
			FString Key = ovr_CloudStorageMetadata_GetKey(Metadatum);
			FString Filename = FString::Printf(TEXT("%s%s%s"), *BucketName, *SEPARATOR, *Key);
			unsigned int Size = ovr_CloudStorageMetadata_GetDataSize(Metadatum);
			EnumerateCache.Add(FCloudFileHeader("", Filename, Size));
		}

		// First check to see if we need to get another page of entires for this Bucket
		if (ovr_CloudStorageMetadataArray_HasNextPage(response))
		{
			RequestEnumeratePagedBuckets(UserId, response);
		}
		// see if we need to move on to the next bucket
		else if (EnumerateBucketsCounter < (Buckets.Num() - 1))
		{
			EnumerateBucketsCounter++;
			RequestEnumeratePagedBuckets(UserId, nullptr);
		}
		// Otherwise we are done - notify the App
		else
		{
			EnumerateBucketsCounter = -1;
			TriggerOnEnumerateUserFilesCompleteDelegates(true, *UserId);
		}
	});

	if (previousPage)
	{
		OculusSubsystem.AddRequestDelegate(ovr_CloudStorage_GetNextCloudStorageMetadataArrayPage(previousPage), std::move(Delegate));
	}
	else
	{
		OculusSubsystem.AddRequestDelegate(ovr_CloudStorage_LoadBucketMetadata(TCHAR_TO_UTF8(*Buckets[EnumerateBucketsCounter])), std::move(Delegate));
	}
}
Beispiel #2
0
void FEpicSurvey::LoadSurveys()
{
	Surveys.Empty();
	SurveyIndexCloudFile = FCloudFileHeader();
	FilenameToLoadCallbacks.Empty();

	InitializationState = EContentInitializationState::Working;

	if ( TitleCloud.IsValid() )
	{
		TitleCloud->ClearFiles();
		TitleCloud->EnumerateFiles();
	}
	else
	{
		InitializationState = EContentInitializationState::Failure;
	}
}