OLS/Plugins/Developer/RiderLink/Source/RiderBlueprint/Private/RiderBlueprint.cpp

108 lines
3.9 KiB
C++
Raw Normal View History

2024-09-22 21:11:19 +00:00
#include "RiderBlueprint.hpp"
#include "BlueprintProvider.hpp"
#include "IRiderLink.hpp"
#include "Model/RdEditorProtocol/RdEditorModel/RdEditorModel.Pregenerated.h"
#include "Engine/Blueprint.h"
#include "Framework/Docking/TabManager.h"
#include "HAL/PlatformProcess.h"
#include "MessageEndpoint.h"
#include "MessageEndpointBuilder.h"
#include "Modules/ModuleManager.h"
#include "Runtime/Launch/Resources/Version.h"
#if ENGINE_MAJOR_VERSION < 5
#include "AssetRegistryModule.h"
#else
#include "AssetRegistry/AssetRegistryModule.h"
#endif
#define LOCTEXT_NAMESPACE "RiderBlueprint"
DEFINE_LOG_CATEGORY(FLogRiderBlueprintModule);
IMPLEMENT_MODULE(FRiderBlueprintModule, RiderBlueprint);
static void AllowSetForeGroundForEditor(JetBrains::EditorPlugin::RdEditorModel const & unrealToBackendModel) {
static const int32 CurrentProcessId = FPlatformProcess::GetCurrentProcessId();
try {
const rd::WiredRdTask<bool> Task = unrealToBackendModel.get_allowSetForegroundWindow().sync(CurrentProcessId);
if (Task.is_faulted()) {
UE_LOG(FLogRiderBlueprintModule, Error, TEXT("AllowSetForeGroundForEditor failed: %hs "), rd::to_string(Task.value_or_throw()).c_str());
}
else if (Task.is_succeeded()) {
if (!(Task.value_or_throw().unwrap())) {
UE_LOG(FLogRiderBlueprintModule, Error, TEXT("AllowSetForeGroundForEditor failed: %hs "), rd::to_string(Task.value_or_throw()).c_str());
}
}
}
catch (std::exception const &e) {
UE_LOG(FLogRiderBlueprintModule, Error, TEXT("AllowSetForeGroundForEditor failed: %hs "), rd::to_string(e).c_str());
}
}
void FRiderBlueprintModule::StartupModule()
{
UE_LOG(FLogRiderBlueprintModule, Verbose, TEXT("STARTUP START"));
IRiderLinkModule& RiderLinkModule = IRiderLinkModule::Get();
ModuleLifetimeDef = RiderLinkModule.CreateNestedLifetimeDefinition();
const FAssetRegistryModule* AssetRegistryModule = &FModuleManager::LoadModuleChecked<FAssetRegistryModule>
(AssetRegistryConstants::ModuleName);
MessageEndpoint = FMessageEndpoint::Builder(FName("FAssetEditorManager")).Build();
AssetRegistryModule->Get().OnAssetAdded().AddLambda([](const FAssetData& AssetData) {
// TO-DO: Fix loading uasset's on 4.23-
// BluePrintProvider::AddAsset(AssetData);
});
RiderLinkModule.ViewModel(ModuleLifetimeDef.lifetime, [this] (rd::Lifetime ModelLifetime, JetBrains::EditorPlugin::RdEditorModel const& UnrealToBackendModel)
{
UnrealToBackendModel.get_openBlueprint().advise(
ModelLifetime,
[this, &UnrealToBackendModel](
JetBrains::EditorPlugin::BlueprintReference const& s)
{
try
{
AllowSetForeGroundForEditor(UnrealToBackendModel);
auto Window = FGlobalTabmanager::Get()->GetRootWindow();
if (!Window.IsValid()) return;
if (Window->IsWindowMinimized())
{
Window->Restore();
}
else
{
Window->HACK_ForceToFront();
}
BluePrintProvider::OpenBlueprint(s, MessageEndpoint);
}
catch (std::exception const& e)
{
std::cerr << rd::to_string(e);
}
}
);
UnrealToBackendModel.get_isBlueprintPathName().set([](FString const& pathName) -> bool
{
return BluePrintProvider::IsBlueprint(pathName);
});
});
UE_LOG(FLogRiderBlueprintModule, Verbose, TEXT("STARTUP FINISH"));
}
void FRiderBlueprintModule::ShutdownModule()
{
UE_LOG(FLogRiderBlueprintModule, Verbose, TEXT("SHUTDOWN START"));
ModuleLifetimeDef.terminate();
UE_LOG(FLogRiderBlueprintModule, Verbose, TEXT("SHUTDOWN FINISH"));
}
#undef LOCTEXT_NAMESPACE