Pour tout problème contactez-nous par mail : support@froggit.fr | La FAQ :grey_question: | Rejoignez-nous sur le Chat :speech_balloon:

Skip to content
Snippets Groups Projects
Commit 7295f2be authored by g4m4's avatar g4m4
Browse files

[BUILD] Make FixItLib a private dependency

parent 3a85fbc6
No related branches found
No related tags found
No related merge requests found
......@@ -11,8 +11,7 @@ public class FixItCore : ModuleRules
{
"Core",
"CoreUObject",
"DeveloperSettings",
"FixItLib"
"DeveloperSettings"
}
);
......@@ -21,6 +20,7 @@ public class FixItCore : ModuleRules
new string[]
{
"BuildSettings",
"FixItLib",
"HTTP",
"RHI"
}
......
......@@ -2,14 +2,17 @@
#include "FixItBackend.h"
#include <memory>
#include <string>
THIRD_PARTY_INCLUDES_START
#include "fixit/backend/backend.h"
#include "fixit/data/bug_request_data_base.h"
#include "fixit/data/player_data.h"
#include "fixit/platform/data_module_base.h"
THIRD_PARTY_INCLUDES_END
#include "FixItBugRequestData.h"
#include "FixItCore.h"
#include "FixItDataModule.h"
#include "FixItPlatformData.h"
......@@ -26,7 +29,47 @@ namespace {
static const FString FixItPlatformDataFilePath = FPaths::ProjectSavedDir() / TEXT("FixIt") / TEXT("fixit_platformdata.txt");
return FixItPlatformDataFilePath;
}
}
// The following functions are implemented only here with internal linkage
// so they do not require exposing fixit internal library types anywhere else
#if PLATFORM_WINDOWS
std::unique_ptr<fixit::PlayerDataItem> UFixItPlayerDataItemConvertTo(const UFixItPlayerDataItem* Item) {
std::unique_ptr<char[]> DataCopy = std::make_unique<char[]>(Item->GetSize());
if (!DataCopy) {
UE_LOG(LogFixItCore, Error, TEXT("Could not allocate data for player data item %s"), *Item->Description);
}
// TODO(gama) this makes two copies actually, it could be way better
auto DataPtr = Item->GetData();
std::memcpy(DataCopy.get(), DataPtr.Get()->GetData(), Item->GetSize());
return std::make_unique<fixit::PlayerDataItem>(
FFixItTranslationLayer::ToStd(Item->Description),
FFixItTranslationLayer::ToStd(Item->GetType()),
std::move(DataCopy),
Item->GetSize()
);
}
fixit::PlayerData UFixItPlayerDataBaseConvertTo(const UFixItPlayerDataBase* PlayerData)
{
fixit::PlayerData Out = fixit::PlayerData(FFixItTranslationLayer::ToStd(PlayerData->PrefilledStr));
for (const auto* Item : PlayerData->Items) {
Out.Items.emplace_back(UFixItPlayerDataItemConvertTo(Item));
}
return Out;
}
fixit::BugRequestData FFixItBugRequestDataConvertTo(const FFixItBugRequestData& BugRequestData)
{
return fixit::BugRequestData{
FFixItTranslationLayer::ToStd(BugRequestData.Title),
FFixItTranslationLayer::ToStd(BugRequestData.Content),
FFixItTranslationLayer::ToStd(BugRequestData.Labels),
std::make_unique<fixit::PlayerData>(UFixItPlayerDataBaseConvertTo(BugRequestData.PlayerData))
};
}
#endif // PLATFORM_WINDOWS
} // namespace
#if PLATFORM_WINDOWS
FFixItBackend::FFixItBackend(EFixItBackendType BackendType)
......@@ -75,7 +118,7 @@ bool FFixItBackend::CreateNewBug(
FFixItRequestProgress& OnRequestProgress)
{
return BackendImpl_->CreateNewBug(
Data.ConvertTo(),
FFixItBugRequestDataConvertTo(Data),
[OnRequestCompleted](bool bResult, const std::string& ErrorMessage) {
OnRequestCompleted(bResult, FFixItTranslationLayer::FromStd(ErrorMessage));
},
......
......@@ -2,17 +2,7 @@
#include "FixItBugRequestData.h"
#include "FixItCore.h" // LogFixItCore
#include "FixItPlayerDataBase.h"
#include "FixItSettings.h"
#include "FixItTranslationLayer.h"
THIRD_PARTY_INCLUDES_START
#include <memory>
#include "fixit/data/bug_request_data_base.h"
#include "fixit/data/player_data.h"
THIRD_PARTY_INCLUDES_END
bool FFixItBugRequestData::IsValid() const {
const UFixItSettings* Settings = GetDefault<UFixItSettings>();
......@@ -22,46 +12,3 @@ bool FFixItBugRequestData::IsValid() const {
}
return !Title.IsEmpty() && !Content.IsEmpty();
}
#if PLATFORM_WINDOWS
namespace {
// These methods are implemented only here with internal linkage
// so they do not require exposing fixit internal library types
std::unique_ptr<fixit::PlayerDataItem> UFixItPlayerDataItemConvertTo(const UFixItPlayerDataItem* Item) {
std::unique_ptr<char[]> DataCopy = std::make_unique<char[]>(Item->GetSize());
if (!DataCopy) {
UE_LOG(LogFixItCore, Error, TEXT("Could not allocate data for player data item %s"), *Item->Description);
}
// TODO(gama) this makes two copies actually, it could be way better
auto DataPtr = Item->GetData();
std::memcpy(DataCopy.get(), DataPtr.Get()->GetData(), Item->GetSize());
return std::make_unique<fixit::PlayerDataItem>(
FFixItTranslationLayer::ToStd(Item->Description),
FFixItTranslationLayer::ToStd(Item->GetType()),
std::move(DataCopy),
Item->GetSize()
);
}
fixit::PlayerData UFixItPlayerDataBaseConvertTo(const UFixItPlayerDataBase* PlayerData)
{
fixit::PlayerData Out = fixit::PlayerData(FFixItTranslationLayer::ToStd(PlayerData->PrefilledStr));
for (const auto* Item : PlayerData->Items) {
Out.Items.emplace_back(UFixItPlayerDataItemConvertTo(Item));
}
return Out;
}
} // namespace
fixit::BugRequestData FFixItBugRequestData::ConvertTo() const
{
return fixit::BugRequestData{
FFixItTranslationLayer::ToStd(Title),
FFixItTranslationLayer::ToStd(Content),
FFixItTranslationLayer::ToStd(Labels),
std::make_unique<fixit::PlayerData>(UFixItPlayerDataBaseConvertTo(PlayerData))
};
}
#endif // PLATFORM_WINDOWS
......@@ -3,6 +3,7 @@
#pragma once
#include "CoreMinimal.h"
#include "FixItPlayerDataBase.h"
#include "FixItBugRequestData.generated.h"
......@@ -23,8 +24,4 @@ struct FIXITCORE_API FFixItBugRequestData
UFixItPlayerDataBase* PlayerData = nullptr;
bool IsValid() const;
#if PLATFORM_WINDOWS
fixit::BugRequestData ConvertTo() const;
#endif // PLATFORM_WINDOWS
};
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment