|
#include "ZipUtilityPrivatePCH.h"
|
|
#include "ZipFileFunctionLibrary.h"
|
|
#include "SevenZipCallbackHandler.h"
|
|
|
|
void SevenZipCallbackHandler::OnProgress(const TString& archivePath, uint64 bytes)
|
|
{
|
|
const UObject* interfaceDelegate = ProgressDelegate;
|
|
const uint64 bytesConst = bytes;
|
|
const FString pathConst = FString(archivePath.c_str());
|
|
|
|
if (bytes > 0) {
|
|
const float ProgressPercentage = ((double)((TotalBytes)-(BytesLeft - bytes)) / (double)TotalBytes) * 100;
|
|
|
|
UZipFileFunctionLibrary::RunLambdaOnGameThread([interfaceDelegate, pathConst, ProgressPercentage, bytesConst]
|
|
{
|
|
//UE_LOG(LogClass, Log, TEXT("Progress: %d bytes"), progress);
|
|
((IZipUtilityInterface*)interfaceDelegate)->Execute_OnProgress((UObject*)interfaceDelegate, pathConst, ProgressPercentage, bytesConst);
|
|
});
|
|
}
|
|
}
|
|
|
|
void SevenZipCallbackHandler::OnDone(const TString& archivePath)
|
|
{
|
|
const UObject* interfaceDelegate = ProgressDelegate;
|
|
const FString pathConst = FString(archivePath.c_str());
|
|
|
|
UZipFileFunctionLibrary::RunLambdaOnGameThread([pathConst, interfaceDelegate]
|
|
{
|
|
//UE_LOG(LogClass, Log, TEXT("All Done!"));
|
|
((IZipUtilityInterface*)interfaceDelegate)->Execute_OnDone((UObject*)interfaceDelegate, pathConst, EZipUtilityCompletionState::SUCCESS);
|
|
});
|
|
}
|
|
|
|
void SevenZipCallbackHandler::OnFileDone(const TString& archivePath, const TString& filePath, uint64 bytes)
|
|
{
|
|
const UObject* interfaceDelegate = ProgressDelegate;
|
|
const FString pathConst = FString(archivePath.c_str());
|
|
const FString filePathConst = FString(filePath.c_str());
|
|
const uint64 bytesConst = bytes;
|
|
|
|
UZipFileFunctionLibrary::RunLambdaOnGameThread([interfaceDelegate, pathConst, filePathConst, bytesConst]
|
|
{
|
|
//UE_LOG(LogClass, Log, TEXT("File Done: %s, %d bytes"), filePathConst.c_str(), bytesConst);
|
|
((IZipUtilityInterface*)interfaceDelegate)->Execute_OnFileDone((UObject*)interfaceDelegate, pathConst, filePathConst);
|
|
});
|
|
|
|
//Handle byte decrementing
|
|
if (bytes > 0) {
|
|
BytesLeft -= bytes;
|
|
const float ProgressPercentage = ((double)(TotalBytes - BytesLeft) / (double)TotalBytes) * 100;
|
|
|
|
UZipFileFunctionLibrary::RunLambdaOnGameThread([interfaceDelegate, pathConst, ProgressPercentage, bytes]
|
|
{
|
|
//UE_LOG(LogClass, Log, TEXT("Progress: %d bytes"), progress);
|
|
((IZipUtilityInterface*)interfaceDelegate)->Execute_OnProgress((UObject*)interfaceDelegate, pathConst, ProgressPercentage, bytes);
|
|
});
|
|
}
|
|
}
|
|
void SevenZipCallbackHandler::OnStartWithTotal(const TString& archivePath, unsigned __int64 totalBytes)
|
|
{
|
|
TotalBytes = totalBytes;
|
|
BytesLeft = TotalBytes;
|
|
|
|
const UObject* interfaceDelegate = ProgressDelegate;
|
|
const uint64 bytesConst = TotalBytes;
|
|
const FString pathConst = FString(archivePath.c_str());
|
|
|
|
UZipFileFunctionLibrary::RunLambdaOnGameThread([interfaceDelegate, pathConst, bytesConst]
|
|
{
|
|
//UE_LOG(LogClass, Log, TEXT("Starting with %d bytes"), bytesConst);
|
|
((IZipUtilityInterface*)interfaceDelegate)->Execute_OnStartProcess((UObject*)interfaceDelegate, pathConst, bytesConst);
|
|
});
|
|
}
|
|
void SevenZipCallbackHandler::OnFileFound(const TString& archivePath, const TString& filePath, int size)
|
|
{
|
|
const UObject* interfaceDelegate = ProgressDelegate;
|
|
const uint64 bytesConst = TotalBytes;
|
|
const FString pathString = FString(archivePath.c_str());
|
|
const FString fileString = FString(filePath.c_str());
|
|
|
|
UZipFileFunctionLibrary::RunLambdaOnGameThread([interfaceDelegate, pathString, fileString, bytesConst]
|
|
{
|
|
((IZipUtilityInterface*)interfaceDelegate)->Execute_OnFileFound((UObject*)interfaceDelegate, pathString, fileString, bytesConst);
|
|
});
|
|
}
|
|
void SevenZipCallbackHandler::OnListingDone(const TString& archivePath)
|
|
{
|
|
const UObject* interfaceDelegate = ProgressDelegate;
|
|
const FString pathString = FString(archivePath.c_str());
|
|
|
|
UZipFileFunctionLibrary::RunLambdaOnGameThread([interfaceDelegate, pathString]
|
|
{
|
|
((IZipUtilityInterface*)interfaceDelegate)->Execute_OnDone((UObject*)interfaceDelegate, pathString, EZipUtilityCompletionState::SUCCESS);
|
|
});
|
|
}
|
|
|
|
bool SevenZipCallbackHandler::OnCheckBreak()
|
|
{
|
|
return bCancelOperation;
|
|
}
|