57 lines
1.8 KiB
C++
57 lines
1.8 KiB
C++
#pragma once
|
|
|
|
#include "CoreMinimal.h"
|
|
#include "MCPHandler.h"
|
|
#include "MCPAssetFinder.h"
|
|
#include "MCPUtils.h"
|
|
#include "Engine/Blueprint.h"
|
|
#include "Kismet2/BlueprintEditorUtils.h"
|
|
#include "UObject/SavePackage.h"
|
|
#include "Misc/PackageName.h"
|
|
#include "AssetRegistry/AssetRegistryModule.h"
|
|
#include "AssetRegistry/IAssetRegistry.h"
|
|
#include "AssetToolsModule.h"
|
|
#include "IAssetTools.h"
|
|
#include "FileHelpers.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, FJsonObject* Result) override
|
|
{
|
|
FString Filename = FPaths::ConvertRelativePathToFull(
|
|
FPackageName::LongPackageNameToFilename(AssetPath, FPackageName::GetAssetPackageExtension()));
|
|
|
|
if (!IFileManager::Get().FileExists(*Filename))
|
|
{
|
|
return MCPUtils::MakeErrorJson(Result, FString::Printf(TEXT("Asset file not found: %s"), *Filename));
|
|
}
|
|
|
|
FString BackupFilename = Filename + TEXT(".bak");
|
|
uint32 CopyResult = IFileManager::Get().Copy(*BackupFilename, *Filename, true);
|
|
if (CopyResult != COPY_OK)
|
|
{
|
|
return MCPUtils::MakeErrorJson(Result, FString::Printf(TEXT("Failed to back up %s"), *Filename));
|
|
}
|
|
|
|
Result->SetStringField(TEXT("backupFile"), BackupFilename);
|
|
}
|
|
};
|