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

89 lines
2.3 KiB
C++

// Fill out your copyright notice in the Description page of Project Settings.
#include "FileDownloader.h"
#include "BeatSaberEditor.h"
#include "PlatformFilemanager.h"
#include "GenericPlatform/GenericPlatformFile.h"
#include "Paths.h"
UFileDownloader::UFileDownloader():
FileUrl(TEXT(""))
, FileSavePath(TEXT(""))
{
}
UFileDownloader::~UFileDownloader()
{
}
UFileDownloader* UFileDownloader::MakeDownloader()
{
UFileDownloader* Downloader = NewObject<UFileDownloader>();
return Downloader;
}
UFileDownloader* UFileDownloader::DownloadFile(const FString& Url, FString SavePath)
{
FileUrl = Url;
FileSavePath = SavePath;
TSharedRef< IHttpRequest > HttpRequest = FHttpModule::Get().CreateRequest();
HttpRequest->SetVerb("GET");
HttpRequest->SetURL(Url);
HttpRequest->OnProcessRequestComplete().BindUObject(this, &UFileDownloader::OnReady);
HttpRequest->OnRequestProgress().BindUObject(this, &UFileDownloader::OnProgress_Internal);
// Execute the request
HttpRequest->ProcessRequest();
AddToRoot();
return this;
}
void UFileDownloader::OnReady(FHttpRequestPtr Request, FHttpResponsePtr Response, bool bWasSuccessful)
{
RemoveFromRoot();
Request->OnProcessRequestComplete().Unbind();
if (Response.IsValid() && EHttpResponseCodes::IsOk(Response->GetResponseCode()))
{
// SAVE FILE
IPlatformFile & PlatformFile = FPlatformFileManager::Get().GetPlatformFile();
// create save directory if not existent
FString Path, Filename, Extension;
FPaths::Split(FileSavePath, Path, Filename, Extension);
if (!PlatformFile.DirectoryExists(*Path))
{
if(!PlatformFile.CreateDirectoryTree(*Path))
{
OnResult.Broadcast(EDownloadResult::DirectoryCreationFailed);
return;
}
}
// open/create the file
IFileHandle* FileHandle = PlatformFile.OpenWrite(*FileSavePath);
if (FileHandle)
{
// write the file
FileHandle->Write(Response->GetContent().GetData(), Response->GetContentLength());
// Close the file
delete FileHandle;
OnResult.Broadcast(EDownloadResult::Success);
}
else
{
OnResult.Broadcast(EDownloadResult::SaveFailed);
}
}
else
{
OnResult.Broadcast(EDownloadResult::DownloadFailed);
}
}
void UFileDownloader::OnProgress_Internal(FHttpRequestPtr Request, int32 BytesSent, int32 BytesReceived)
{
int32 FullSize = Request->GetContentLength();
OnProgress.Broadcast(BytesSent, BytesReceived, FullSize);
}