mirror of
https://github.com/Theaninova/BeatLanguageMapper.git
synced 2026-01-10 04:12:50 +00:00
Mk2
uh stuff. i'm putting it in the readme.
This commit is contained in:
89
Source/MediocreMapper/FileDownloader.cpp
Normal file
89
Source/MediocreMapper/FileDownloader.cpp
Normal file
@@ -0,0 +1,89 @@
|
||||
// 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);
|
||||
}
|
||||
Reference in New Issue
Block a user