75 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
		
		
			
		
	
	
			75 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| 
								 | 
							
								// Copyright (c) 2022 Sentry. All Rights Reserved.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include "SentryEventApple.h"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include "Infrastructure/SentryConvertorsApple.h"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include "Convenience/SentryInclude.h"
							 | 
						||
| 
								 | 
							
								#include "Convenience/SentryMacro.h"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								SentryEventApple::SentryEventApple()
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									EventApple = [[SENTRY_APPLE_CLASS(SentryEvent) alloc] init];
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								SentryEventApple::SentryEventApple(SentryEvent* event)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									EventApple = event;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								SentryEventApple::~SentryEventApple()
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									// Put custom destructor logic here if needed
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								SentryEvent* SentryEventApple::GetNativeObject()
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									return EventApple;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void SentryEventApple::SetMessage(const FString& message)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									SentryMessage* msg = [SENTRY_APPLE_CLASS(SentryMessage) alloc];
							 | 
						||
| 
								 | 
							
									msg.message = message.GetNSString();
							 | 
						||
| 
								 | 
							
									EventApple.message = msg;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								FString SentryEventApple::GetMessage() const
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									SentryMessage* msg = EventApple.message;
							 | 
						||
| 
								 | 
							
									return FString(msg.message);
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void SentryEventApple::SetLevel(ESentryLevel level)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									EventApple.level = SentryConvertorsApple::SentryLevelToNative(level);
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								ESentryLevel SentryEventApple::GetLevel() const
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									return SentryConvertorsApple::SentryLevelToUnreal(EventApple.level);
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								bool SentryEventApple::IsCrash() const
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									return EventApple.error != nullptr;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								bool SentryEventApple::IsAnr() const
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									bool isErrorLevel = EventApple.level == kSentryLevelError;
							 | 
						||
| 
								 | 
							
									bool isAppHangException = false;
							 | 
						||
| 
								 | 
							
									bool isAppHangMechanism = false;
							 | 
						||
| 
								 | 
							
									bool isAppHangMessage = false;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									if (EventApple.exceptions != nil && EventApple.exceptions.count == 1)
							 | 
						||
| 
								 | 
							
									{
							 | 
						||
| 
								 | 
							
										SentryException *exception = EventApple.exceptions[0];
							 | 
						||
| 
								 | 
							
										isAppHangException = [exception.type isEqualToString:@"App Hanging"];
							 | 
						||
| 
								 | 
							
										isAppHangMechanism = exception.mechanism != nil && [exception.mechanism.type isEqualToString:@"AppHang"];
							 | 
						||
| 
								 | 
							
										isAppHangMessage = [exception.value hasPrefix:@"App hanging for at least"];
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									return isErrorLevel && isAppHangException && isAppHangMechanism && isAppHangMessage;
							 | 
						||
| 
								 | 
							
								}
							 |