Files
BeatLanguageMapper/Source/MediocreMapper/FileDownloader.h
squeaksies daa08984d1 Mk2
uh stuff. i'm putting it in the readme.
2018-10-30 22:18:39 -07:00

81 lines
2.3 KiB
C++

// Fill out your copyright notice in the Description page of Project Settings.
#pragma once
#include "Http.h"
#include "FileDownloader.generated.h"
/**
* Possible results from a download request.
*/
UENUM(BlueprintType, Category = "HTTP")
enum class EDownloadResult : uint8
{
Success,
DownloadFailed,
SaveFailed,
DirectoryCreationFailed
};
DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FOnResult, const EDownloadResult, Result);
DECLARE_DYNAMIC_MULTICAST_DELEGATE_ThreeParams(FOnProgress, const int32, BytesSent, const int32, BytesReceived, const int32, ContentLength);
/**
* Download a file from a URL and save it locally.
*/
UCLASS(BlueprintType, Category = "HTTP")
class MEDIOCREMAPPER_API UFileDownloader : public UObject
{
GENERATED_BODY()
public:
/**
* Bind to know when the download is complete (even if it fails).
*/
UPROPERTY(BlueprintAssignable, Category = "HTTP")
FOnResult OnResult;
/**
* Bind to know when the download is complete (even if it fails).
*/
UPROPERTY(BlueprintAssignable, Category = "HTTP")
FOnProgress OnProgress;
/**
* The URL used to start this download.
*/
UPROPERTY(BlueprintReadOnly, Category = "HTTP")
FString FileUrl;
/**
* The path set to save the downloaded file.
*/
UPROPERTY(BlueprintReadOnly, Category = "HTTP")
FString FileSavePath;
UFileDownloader();
~UFileDownloader();
/**
* Instantiates a FileDownloader object, starts downloading and saves it when done.
*
* @return The FileDownloader object. Bind to it's OnResult event to know when it's done downloading.
*/
UFUNCTION(BlueprintCallable, Meta = (DisplayName = "Create Downloader"), Category = "HTTP")
static UFileDownloader* MakeDownloader();
/**
* Starts downloading a file and saves it when done. Bind to the OnResult
* event to know when the download is done (preferrably, before calling this function).
*
* @param Url The file Url to be downloaded.
* @param SavePath The absolute path and file name to save the downloaded file.
* @return Returns itself.
*/
UFUNCTION(BlueprintCallable, Category = "HTTP")
UFileDownloader* DownloadFile(const FString& Url, FString SavePath);
private:
void OnReady(FHttpRequestPtr Request, FHttpResponsePtr Response, bool bWasSuccessful);
void OnProgress_Internal(FHttpRequestPtr Request, int32 BytesSent, int32 BytesReceived);
};