192 lines
5.7 KiB
C++
192 lines
5.7 KiB
C++
// Copyright (c) 2022 Sentry. All Rights Reserved.
|
|
|
|
#include "SentryScopeAndroid.h"
|
|
|
|
#include "SentryBreadcrumbAndroid.h"
|
|
#include "SentryAttachmentAndroid.h"
|
|
|
|
#include "Infrastructure/SentryConvertorsAndroid.h"
|
|
#include "Infrastructure/SentryJavaClasses.h"
|
|
|
|
SentryScopeAndroid::SentryScopeAndroid()
|
|
: FSentryJavaObjectWrapper(SentryJavaClasses::Scope, "(Lio/sentry/SentryOptions;)V",
|
|
*FSentryJavaObjectWrapper::CallStaticObjectMethod<jobject>(SentryJavaClasses::SentryBridgeJava, "getOptions", "()Lio/sentry/SentryOptions;"))
|
|
{
|
|
SetupClassMethods();
|
|
}
|
|
|
|
SentryScopeAndroid::SentryScopeAndroid(jobject scope)
|
|
: FSentryJavaObjectWrapper(SentryJavaClasses::Scope, scope)
|
|
{
|
|
SetupClassMethods();
|
|
}
|
|
|
|
void SentryScopeAndroid::SetupClassMethods()
|
|
{
|
|
AddBreadcrumbMethod = GetMethod("addBreadcrumb", "(Lio/sentry/Breadcrumb;)V");
|
|
ClearBreadcrumbsMethod = GetMethod("clearBreadcrumbs", "()V");
|
|
AddAttachmentMethod = GetMethod("addAttachment", "(Lio/sentry/Attachment;)V");
|
|
ClearAttachmentsMethod = GetMethod("clearAttachments", "()V");
|
|
SetTagValueMethod = GetMethod("setTag", "(Ljava/lang/String;Ljava/lang/String;)V");
|
|
RemoveTagMethod = GetMethod("removeTag", "(Ljava/lang/String;)V");
|
|
GetTagsMethod = GetMethod("getTags", "()Ljava/util/Map;");
|
|
SetFingerprintMethod = GetMethod("setFingerprint", "(Ljava/util/List;)V");
|
|
GetFingerprintMethod = GetMethod("getFingerprint", "()Ljava/util/List;");
|
|
SetLevelMethod = GetMethod("setLevel", "(Lio/sentry/SentryLevel;)V");
|
|
GetLevelMethod = GetMethod("getLevel", "()Lio/sentry/SentryLevel;");
|
|
SetContextMethod = GetMethod("setContexts", "(Ljava/lang/String;Ljava/lang/Object;)V");
|
|
RemoveContextMethod = GetMethod("removeContexts", "(Ljava/lang/String;)V");
|
|
SetExtraValueMethod = GetMethod("setExtra", "(Ljava/lang/String;Ljava/lang/String;)V");
|
|
RemoveExtraMethod = GetMethod("removeExtra", "(Ljava/lang/String;)V");
|
|
GetExtrasMethod = GetMethod("getExtras", "()Ljava/util/Map;");
|
|
ClearMethod = GetMethod("clear", "()V");
|
|
}
|
|
|
|
void SentryScopeAndroid::AddBreadcrumb(TSharedPtr<ISentryBreadcrumb> breadcrumb)
|
|
{
|
|
TSharedPtr<SentryBreadcrumbAndroid> breadcrumbAndroid = StaticCastSharedPtr<SentryBreadcrumbAndroid>(breadcrumb);
|
|
CallMethod<void>(AddBreadcrumbMethod, breadcrumbAndroid->GetJObject());
|
|
}
|
|
|
|
void SentryScopeAndroid::ClearBreadcrumbs()
|
|
{
|
|
CallMethod<void>(ClearBreadcrumbsMethod);
|
|
}
|
|
|
|
void SentryScopeAndroid::AddAttachment(TSharedPtr<ISentryAttachment> attachment)
|
|
{
|
|
TSharedPtr<SentryAttachmentAndroid> attachmentAndroid = StaticCastSharedPtr<SentryAttachmentAndroid>(attachment);
|
|
CallMethod<void>(AddAttachmentMethod, attachmentAndroid->GetJObject());
|
|
}
|
|
|
|
void SentryScopeAndroid::ClearAttachments()
|
|
{
|
|
CallMethod<void>(ClearAttachmentsMethod);
|
|
}
|
|
|
|
void SentryScopeAndroid::SetTagValue(const FString& key, const FString& value)
|
|
{
|
|
CallMethod<void>(SetTagValueMethod, *GetJString(key), *GetJString(value));
|
|
}
|
|
|
|
FString SentryScopeAndroid::GetTagValue(const FString& key) const
|
|
{
|
|
TMap<FString, FString> tags = GetTags();
|
|
FString* tagValue = tags.Find(key);
|
|
|
|
if (!tagValue)
|
|
return FString();
|
|
|
|
return *tagValue;
|
|
}
|
|
|
|
void SentryScopeAndroid::RemoveTag(const FString& key)
|
|
{
|
|
CallMethod<void>(RemoveTagMethod, *GetJString(key));
|
|
}
|
|
|
|
void SentryScopeAndroid::SetTags(const TMap<FString, FString>& tags)
|
|
{
|
|
for (const auto& tag : tags)
|
|
{
|
|
SetTagValue(tag.Key, tag.Value);
|
|
}
|
|
}
|
|
|
|
TMap<FString, FString> SentryScopeAndroid::GetTags() const
|
|
{
|
|
auto tags = CallObjectMethod<jobject>(GetTagsMethod);
|
|
return SentryConvertorsAndroid::StringMapToUnreal(*tags);
|
|
}
|
|
|
|
void SentryScopeAndroid::SetDist(const FString& dist)
|
|
{
|
|
SetTagValue("dist", dist);
|
|
}
|
|
|
|
FString SentryScopeAndroid::GetDist() const
|
|
{
|
|
return GetTagValue("dist");
|
|
}
|
|
|
|
void SentryScopeAndroid::SetEnvironment(const FString& environment)
|
|
{
|
|
SetTagValue("environment", environment);
|
|
}
|
|
|
|
FString SentryScopeAndroid::GetEnvironment() const
|
|
{
|
|
return GetTagValue("environment");
|
|
}
|
|
|
|
void SentryScopeAndroid::SetFingerprint(const TArray<FString>& fingerprint)
|
|
{
|
|
CallMethod<void>(SetFingerprintMethod, SentryConvertorsAndroid::StringArrayToNative(fingerprint)->GetJObject());
|
|
}
|
|
|
|
TArray<FString> SentryScopeAndroid::GetFingerprint() const
|
|
{
|
|
auto fingerprint = CallObjectMethod<jobject>(GetFingerprintMethod);
|
|
return SentryConvertorsAndroid::StringListToUnreal(*fingerprint);
|
|
}
|
|
|
|
void SentryScopeAndroid::SetLevel(ESentryLevel level)
|
|
{
|
|
CallMethod<void>(SetLevelMethod, SentryConvertorsAndroid::SentryLevelToNative(level)->GetJObject());
|
|
}
|
|
|
|
ESentryLevel SentryScopeAndroid::GetLevel() const
|
|
{
|
|
auto level = CallObjectMethod<jobject>(GetLevelMethod);
|
|
return SentryConvertorsAndroid::SentryLevelToUnreal(*level);
|
|
}
|
|
|
|
void SentryScopeAndroid::SetContext(const FString& key, const TMap<FString, FString>& values)
|
|
{
|
|
CallMethod<void>(SetContextMethod, *GetJString(key), SentryConvertorsAndroid::StringMapToNative(values)->GetJObject());
|
|
}
|
|
|
|
void SentryScopeAndroid::RemoveContext(const FString& key)
|
|
{
|
|
CallMethod<void>(RemoveContextMethod, *GetJString(key));
|
|
}
|
|
|
|
void SentryScopeAndroid::SetExtraValue(const FString& key, const FString& value)
|
|
{
|
|
CallMethod<void>(SetExtraValueMethod, *GetJString(key), *GetJString(value));
|
|
}
|
|
|
|
FString SentryScopeAndroid::GetExtraValue(const FString& key) const
|
|
{
|
|
TMap<FString, FString> extras = GetTags();
|
|
FString* extraValue = extras.Find(key);
|
|
|
|
if (!extraValue)
|
|
return FString();
|
|
|
|
return *extraValue;
|
|
}
|
|
|
|
void SentryScopeAndroid::RemoveExtra(const FString& key)
|
|
{
|
|
CallMethod<void>(RemoveExtraMethod, *GetJString(key));
|
|
}
|
|
|
|
void SentryScopeAndroid::SetExtras(const TMap<FString, FString>& extras)
|
|
{
|
|
for (const auto& extra : extras)
|
|
{
|
|
SetExtraValue(extra.Key, extra.Value);
|
|
}
|
|
}
|
|
|
|
TMap<FString, FString> SentryScopeAndroid::GetExtras() const
|
|
{
|
|
auto extras = CallObjectMethod<jobject>(GetExtrasMethod);
|
|
return SentryConvertorsAndroid::StringMapToUnreal(*extras);
|
|
}
|
|
|
|
void SentryScopeAndroid::Clear()
|
|
{
|
|
CallMethod<void>(ClearMethod);
|
|
} |