51 lines
1.5 KiB
C++
51 lines
1.5 KiB
C++
#pragma once
|
|
|
|
#include "CoreMinimal.h"
|
|
#include "MCPHandler.h"
|
|
#include "MCPUtils.h"
|
|
#include "Misc/PackageName.h"
|
|
#include "HAL/FileManager.h"
|
|
#include "UMCPHandler_BackupAsset.generated.h"
|
|
|
|
|
|
// ---------------------------------------------------------------------------
|
|
// ---------------------------------------------------------------------------
|
|
// ---------------------------------------------------------------------------
|
|
|
|
UCLASS()
|
|
class UMCPHandler_BackupAsset : public UObject, public IMCPHandler
|
|
{
|
|
GENERATED_BODY()
|
|
|
|
public:
|
|
UPROPERTY(meta=(Description="Full package path of the asset (e.g. /Game/Widgets/WB_Hotkeys)"))
|
|
FString AssetPath;
|
|
|
|
virtual FString GetDescription() const override
|
|
{
|
|
return TEXT("Copy an asset's .uasset file to a .uasset.bak backup.");
|
|
}
|
|
|
|
virtual void Handle(const FJsonObject* Json, FStringBuilderBase& Result) override
|
|
{
|
|
FString Filename = FPaths::ConvertRelativePathToFull(
|
|
FPackageName::LongPackageNameToFilename(AssetPath, FPackageName::GetAssetPackageExtension()));
|
|
|
|
if (!IFileManager::Get().FileExists(*Filename))
|
|
{
|
|
Result.Appendf(TEXT("ERROR: Asset file not found: %s\n"), *Filename);
|
|
return;
|
|
}
|
|
|
|
FString BackupFilename = Filename + TEXT(".bak");
|
|
uint32 CopyResult = IFileManager::Get().Copy(*BackupFilename, *Filename, true);
|
|
if (CopyResult != COPY_OK)
|
|
{
|
|
Result.Appendf(TEXT("ERROR: Failed to copy %s to %s\n"), *Filename, *BackupFilename);
|
|
return;
|
|
}
|
|
|
|
Result.Appendf(TEXT("Backed up to %s\n"), *BackupFilename);
|
|
}
|
|
};
|