// Copyright 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. // SPDX-License-Identifier: Apache-2.0 #pragma once // Unreal #include "Containers/UnrealString.h" #include "Templates/SharedPointer.h" #include "HttpModule.h" // Unreal forward declarations class SImage; class GameKitImage : public SImage { public: const FSlateBrush* brush; }; class IImageDownloader { public: IImageDownloader() {} virtual ~IImageDownloader() {} virtual void SetImageFromUrl(const FString& iconUrl, const TSharedPtr& iconImg, int retryCount) {}; virtual void HandleImageDownload(FHttpRequestPtr request, FHttpResponsePtr response, bool succeeded) {}; }; typedef TSharedPtr IImageDownloaderPtr; struct ImageResource { TSharedPtr iconImg; int attempts; }; class AWSGAMEKITEDITOR_API ImageDownloader : public TSharedFromThis, public IImageDownloader { private: FCriticalSection downloadMutex; TMap imageDownloads; public: static const int DOWNLOAD_MAX_ATTEMPTS = 5; static const int DOWNLOAD_RETRY_DELAY_IN_SECONDS = 1; static IImageDownloaderPtr MakeInstance(); virtual void SetImageFromUrl(const FString& iconUrl, const TSharedPtr& iconImg, int retryCount) override; virtual void HandleImageDownload(FHttpRequestPtr request, FHttpResponsePtr response, bool succeeded) override; };