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)); } }
void FEpicSurvey::LoadSurveys() { Surveys.Empty(); SurveyIndexCloudFile = FCloudFileHeader(); FilenameToLoadCallbacks.Empty(); InitializationState = EContentInitializationState::Working; if ( TitleCloud.IsValid() ) { TitleCloud->ClearFiles(); TitleCloud->EnumerateFiles(); } else { InitializationState = EContentInitializationState::Failure; } }