131 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			131 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
// Copyright (c) 2022 Sentry. All Rights Reserved.
 | 
						|
 | 
						|
#include "SentryLibrary.h"
 | 
						|
#include "SentryEvent.h"
 | 
						|
#include "SentryBreadcrumb.h"
 | 
						|
#include "SentryUser.h"
 | 
						|
#include "SentryUserFeedback.h"
 | 
						|
#include "SentryId.h"
 | 
						|
#include "SentryAttachment.h"
 | 
						|
#include "SentryTransactionContext.h"
 | 
						|
 | 
						|
#include "HAL/FileManager.h"
 | 
						|
#include "Misc/FileHelper.h"
 | 
						|
#include "Misc/Paths.h"
 | 
						|
 | 
						|
USentryEvent* USentryLibrary::CreateSentryEvent(const FString& Message, ESentryLevel Level)
 | 
						|
{
 | 
						|
	USentryEvent* Event = NewObject<USentryEvent>();
 | 
						|
 | 
						|
	if(!Message.IsEmpty())
 | 
						|
		Event->SetMessage(Message);
 | 
						|
 | 
						|
	Event->SetLevel(Level);
 | 
						|
 | 
						|
	return Event;
 | 
						|
}
 | 
						|
 | 
						|
USentryUser* USentryLibrary::CreateSentryUser(const FString& Email, const FString& Id, const FString& Username, const FString& IpAddress, const TMap<FString, FString>& Data)
 | 
						|
{
 | 
						|
	USentryUser* User = NewObject<USentryUser>();
 | 
						|
 | 
						|
	if(!Email.IsEmpty())
 | 
						|
		User->SetEmail(Email);
 | 
						|
	if(!Id.IsEmpty())
 | 
						|
		User->SetId(Id);
 | 
						|
	if(!Username.IsEmpty())
 | 
						|
		User->SetUsername(Username);
 | 
						|
	if(!IpAddress.IsEmpty())
 | 
						|
		User->SetIpAddress(IpAddress);
 | 
						|
 | 
						|
	if(Data.Num() > 0)
 | 
						|
		User->SetData(Data);
 | 
						|
 | 
						|
	return User;
 | 
						|
}
 | 
						|
 | 
						|
USentryUserFeedback* USentryLibrary::CreateSentryUserFeedback(USentryId* EventId, const FString& Name, const FString& Email, const FString& Comments)
 | 
						|
{
 | 
						|
	USentryUserFeedback* UserFeedback = NewObject<USentryUserFeedback>();
 | 
						|
 | 
						|
	UserFeedback->Initialize(EventId);
 | 
						|
 | 
						|
	if(!Name.IsEmpty())
 | 
						|
		UserFeedback->SetName(Name);
 | 
						|
	if(!Email.IsEmpty())
 | 
						|
		UserFeedback->SetEmail(Email);
 | 
						|
	if(!Comments.IsEmpty())
 | 
						|
		UserFeedback->SetComment(Comments);
 | 
						|
 | 
						|
	return UserFeedback;
 | 
						|
}
 | 
						|
 | 
						|
USentryBreadcrumb* USentryLibrary::CreateSentryBreadcrumb(const FString& Message, const FString& Type, const FString& Category,
 | 
						|
	const TMap<FString, FString>& Data, ESentryLevel Level)
 | 
						|
{
 | 
						|
	USentryBreadcrumb* Breadcrumb = NewObject<USentryBreadcrumb>();
 | 
						|
 | 
						|
	Breadcrumb->SetMessage(Message);
 | 
						|
	Breadcrumb->SetCategory(Category);
 | 
						|
	Breadcrumb->SetType(Type);
 | 
						|
	Breadcrumb->SetData(Data);
 | 
						|
	Breadcrumb->SetLevel(Level);
 | 
						|
 | 
						|
	return Breadcrumb;
 | 
						|
}
 | 
						|
 | 
						|
USentryAttachment* USentryLibrary::CreateSentryAttachmentWithData(const TArray<uint8>& Data, const FString& Filename, const FString& ContentType)
 | 
						|
{
 | 
						|
	USentryAttachment* Attachment = NewObject<USentryAttachment>();
 | 
						|
	Attachment->InitializeWithData(Data, Filename, ContentType);
 | 
						|
	return Attachment;
 | 
						|
}
 | 
						|
 | 
						|
USentryAttachment* USentryLibrary::CreateSentryAttachmentWithPath(const FString& Path, const FString& Filename, const FString& ContentType)
 | 
						|
{
 | 
						|
	USentryAttachment* Attachment = NewObject<USentryAttachment>();
 | 
						|
	Attachment->InitializeWithPath(Path, Filename, ContentType);
 | 
						|
	return Attachment;
 | 
						|
}
 | 
						|
 | 
						|
USentryTransactionContext* USentryLibrary::CreateSentryTransactionContext(const FString& Name, const FString& Operation)
 | 
						|
{
 | 
						|
	USentryTransactionContext* TransactionContext = NewObject<USentryTransactionContext>();
 | 
						|
	TransactionContext->Initialize(Name, Operation);
 | 
						|
	return TransactionContext;
 | 
						|
}
 | 
						|
 | 
						|
TArray<uint8> USentryLibrary::StringToBytesArray(const FString& InString)
 | 
						|
{
 | 
						|
	TArray<uint8> byteArray;
 | 
						|
	byteArray.AddUninitialized(InString.Len());
 | 
						|
 | 
						|
	uint8* byteArrayPtr = byteArray.GetData();
 | 
						|
 | 
						|
	int32 NumBytes = 0;
 | 
						|
	const TCHAR* CharPos = *InString;
 | 
						|
 | 
						|
	while( *CharPos && NumBytes < TNumericLimits<int16>::Max())
 | 
						|
	{
 | 
						|
		byteArrayPtr[ NumBytes ] = (int8)(*CharPos);
 | 
						|
		CharPos++;
 | 
						|
		++NumBytes;
 | 
						|
	}
 | 
						|
 | 
						|
	return byteArray;
 | 
						|
}
 | 
						|
 | 
						|
FString USentryLibrary::ByteArrayToString(const TArray<uint8>& Array)
 | 
						|
{
 | 
						|
	return BytesToString(Array.GetData(), Array.Num());
 | 
						|
}
 | 
						|
 | 
						|
FString USentryLibrary::SaveStringToFile(const FString& InString, const FString& Filename)
 | 
						|
{
 | 
						|
	FString filePath = FPaths::Combine(FPaths::ProjectPersistentDownloadDir(), Filename);
 | 
						|
 | 
						|
	FFileHelper::SaveStringToFile(InString, *filePath);
 | 
						|
 | 
						|
	return IFileManager::Get().ConvertToAbsolutePathForExternalAppForRead(*filePath);
 | 
						|
}
 |