A modded EditSaber for making beat saber maps.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

90 lines
2.3 KiB

// 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);
}