Swiftgram/submodules/HockeySDK-iOS/Classes/BITTelemetryContext.m
Peter 76e5a7fab6 Add 'submodules/HockeySDK-iOS/' from commit 'c7d0c7026303253e2ac576c02655691e5d314fe2'
git-subtree-dir: submodules/HockeySDK-iOS
git-subtree-mainline: 085acd26c4432939403765234266e3c1be0f3dd9
git-subtree-split: c7d0c7026303253e2ac576c02655691e5d314fe2
2019-06-11 18:53:14 +01:00

381 lines
8.9 KiB
Objective-C

#import <Foundation/Foundation.h>
#import "BITTelemetryContext.h"
#if HOCKEYSDK_FEATURE_METRICS
#import "BITMetricsManagerPrivate.h"
#import "BITHockeyHelper.h"
#import "BITPersistence.h"
#import "BITPersistencePrivate.h"
static NSString *const kBITUserMetaData = @"BITUserMetaData";
static char *const BITContextOperationsQueue = "net.hockeyapp.telemetryContextQueue";
@implementation BITTelemetryContext
@synthesize appIdentifier = _appIdentifier;
@synthesize persistence = _persistence;
#pragma mark - Initialisation
-(instancetype)init {
if((self = [super init])) {
_operationsQueue = dispatch_queue_create(BITContextOperationsQueue, DISPATCH_QUEUE_CONCURRENT);
}
return self;
}
- (instancetype)initWithAppIdentifier:(NSString *)appIdentifier persistence:(BITPersistence *)persistence {
if ((self = [self init])) {
_persistence = persistence;
_appIdentifier = appIdentifier;
BITDevice *deviceContext = [BITDevice new];
deviceContext.model = bit_devicePlatform();
deviceContext.type = bit_deviceType();
deviceContext.osVersion = bit_osVersionBuild();
deviceContext.os = bit_osName();
deviceContext.deviceId = bit_appAnonID(NO);
deviceContext.locale = bit_deviceLocale();
deviceContext.language = bit_deviceLanguage();
deviceContext.screenResolution = bit_screenSize();
deviceContext.oemName = @"Apple";
BITInternal *internalContext = [BITInternal new];
internalContext.sdkVersion = bit_sdkVersion();
BITApplication *applicationContext = [BITApplication new];
applicationContext.version = bit_appVersion();
BITUser *userContext = [self loadUser];
if (!userContext) {
userContext = [self newUser];
[self saveUser:userContext];
}
BITSession *sessionContext = [BITSession new];
_application = applicationContext;
_device = deviceContext;
_user = userContext;
_internal = internalContext;
_session = sessionContext;
_tags = [self tags];
}
return self;
}
- (void)dealloc {
[[NSNotificationCenter defaultCenter] removeObserver:self];
}
#pragma mark - User
- (BITUser *)newUser {
return ({
BITUser *user = [BITUser new];
user.userId = bit_appAnonID(NO);
user;
});
}
- (void)saveUser:(BITUser *)user{
NSDictionary *userMetaData = @{kBITUserMetaData : user};
[self.persistence persistMetaData:userMetaData];
}
- (nullable BITUser *)loadUser{
NSDictionary *metaData =[self.persistence metaData];
BITUser *user = [metaData objectForKey:kBITUserMetaData];
return user;
}
#pragma mark - Network
#pragma mark - Getter/Setter properties
- (NSString *)appIdentifier {
__block NSString *tmp;
dispatch_sync(self.operationsQueue, ^{
tmp = self->_appIdentifier;
});
return tmp;
}
- (void)setAppIdentifier:(NSString *)appIdentifier {
NSString* tmp = [appIdentifier copy];
dispatch_barrier_async(self.operationsQueue, ^{
self->_appIdentifier = tmp;
});
}
- (NSString *)screenResolution {
__block NSString *tmp;
dispatch_sync(self.operationsQueue, ^{
tmp = self.device.screenResolution;
});
return tmp;
}
- (void)setScreenResolution:(NSString *)screenResolution {
NSString* tmp = [screenResolution copy];
dispatch_barrier_async(self.operationsQueue, ^{
self.device.screenResolution = tmp;
});
}
- (NSString *)appVersion {
__block NSString *tmp;
dispatch_sync(self.operationsQueue, ^{
tmp = self.application.version;
});
return tmp;
}
- (void)setAppVersion:(NSString *)appVersion {
NSString* tmp = [appVersion copy];
dispatch_barrier_async(self.operationsQueue, ^{
self.application.version = tmp;
});
}
- (NSString *)anonymousUserId {
__block NSString *tmp;
dispatch_sync(self.operationsQueue, ^{
tmp = self.user.userId;
});
return tmp;
}
- (void)setAnonymousUserId:(NSString *)userId {
NSString* tmp = [userId copy];
dispatch_barrier_async(self.operationsQueue, ^{
self.user.userId = tmp;
});
}
- (NSString *)anonymousUserAquisitionDate {
__block NSString *tmp;
dispatch_sync(self.operationsQueue, ^{
tmp = self.user.anonUserAcquisitionDate;
});
return tmp;
}
- (void)setAnonymousUserAquisitionDate:(NSString *)anonymousUserAquisitionDate {
NSString* tmp = [anonymousUserAquisitionDate copy];
dispatch_barrier_async(self.operationsQueue, ^{
self.user.anonUserAcquisitionDate = tmp;
});
}
- (NSString *)sdkVersion {
__block NSString *tmp;
dispatch_sync(self.operationsQueue, ^{
tmp = self.internal.sdkVersion;
});
return tmp;
}
- (void)setSdkVersion:(NSString *)sdkVersion {
NSString* tmp = [sdkVersion copy];
dispatch_barrier_async(self.operationsQueue, ^{
self.internal.sdkVersion = tmp;
});
}
- (NSString *)sessionId {
__block NSString *tmp;
dispatch_sync(self.operationsQueue, ^{
tmp = self.session.sessionId;
});
return tmp;
}
- (void)setSessionId:(NSString *)sessionId {
NSString* tmp = [sessionId copy];
dispatch_barrier_async(self.operationsQueue, ^{
self.session.sessionId = tmp;
});
}
- (NSString *)isFirstSession {
__block NSString *tmp;
dispatch_sync(self.operationsQueue, ^{
tmp = self.session.isFirst;
});
return tmp;
}
- (void)setIsFirstSession:(NSString *)isFirstSession {
NSString* tmp = [isFirstSession copy];
dispatch_barrier_async(self.operationsQueue, ^{
self.session.isFirst = tmp;
});
}
- (NSString *)isNewSession {
__block NSString *tmp;
dispatch_sync(self.operationsQueue, ^{
tmp = self.session.isNew;
});
return tmp;
}
- (void)setIsNewSession:(NSString *)isNewSession {
NSString* tmp = [isNewSession copy];
dispatch_barrier_async(self.operationsQueue, ^{
self.session.isNew = tmp;
});
}
- (NSString *)osVersion {
__block NSString *tmp;
dispatch_sync(self.operationsQueue, ^{
tmp = self.device.osVersion;
});
return tmp;
}
- (void)setOsVersion:(NSString *)osVersion {
NSString* tmp = [osVersion copy];
dispatch_barrier_async(self.operationsQueue, ^{
self.device.osVersion = tmp;
});
}
- (NSString *)osName {
__block NSString *tmp;
dispatch_sync(self.operationsQueue, ^{
tmp = self.device.os;
});
return tmp;
}
- (void)setOsName:(NSString *)osName {
NSString* tmp = [osName copy];
dispatch_barrier_async(self.operationsQueue, ^{
self.device.os = tmp;
});
}
- (NSString *)deviceModel {
__block NSString *tmp;
dispatch_sync(self.operationsQueue, ^{
tmp = self.device.model;
});
return tmp;
}
- (void)setDeviceModel:(NSString *)deviceModel {
NSString* tmp = [deviceModel copy];
dispatch_barrier_async(self.operationsQueue, ^{
self.device.model = tmp;
});
}
- (NSString *)deviceOemName {
__block NSString *tmp;
dispatch_sync(self.operationsQueue, ^{
tmp = self.device.oemName;
});
return tmp;
}
- (void)setDeviceOemName:(NSString *)oemName {
NSString* tmp = [oemName copy];
dispatch_barrier_async(self.operationsQueue, ^{
self.device.oemName = tmp;
});
}
- (NSString *)osLocale {
__block NSString *tmp;
dispatch_sync(self.operationsQueue, ^{
tmp = self.device.locale;
});
return tmp;
}
- (void)setOsLocale:(NSString *)osLocale {
NSString* tmp = [osLocale copy];
dispatch_barrier_async(self.operationsQueue, ^{
self.device.locale = tmp;
});
}
- (NSString *)osLanguage {
__block NSString *tmp;
dispatch_sync(self.operationsQueue, ^{
tmp = self.device.language;
});
return tmp;
}
- (void)setOsLanguage:(NSString *)osLanguage {
NSString* tmp = [osLanguage copy];
dispatch_barrier_async(self.operationsQueue, ^{
self.device.language = tmp;
});
}
- (NSString *)deviceId {
__block NSString *tmp;
dispatch_sync(self.operationsQueue, ^{
tmp = self.device.deviceId;
});
return tmp;
}
- (void)setDeviceId:(NSString *)deviceId {
NSString* tmp = [deviceId copy];
dispatch_barrier_async(self.operationsQueue, ^{
self.device.deviceId = tmp;
});
}
- (NSString *)deviceType {
__block NSString *tmp;
dispatch_sync(self.operationsQueue, ^{
tmp = self.device.type;
});
return tmp;
}
- (void)setDeviceType:(NSString *)deviceType {
NSString* tmp = [deviceType copy];
dispatch_barrier_async(self.operationsQueue, ^{
self.device.type = tmp;
});
}
#pragma mark - Custom getter
#pragma mark - Helper
- (NSDictionary *)contextDictionary {
__block NSMutableDictionary *tmp = [NSMutableDictionary new];
dispatch_sync(self.operationsQueue, ^{
[tmp addEntriesFromDictionary:self.tags];
[tmp addEntriesFromDictionary:[self.session serializeToDictionary]];
[tmp addEntriesFromDictionary:[self.user serializeToDictionary]];
});
return tmp;
}
- (NSDictionary *)tags {
if(!_tags){
NSMutableDictionary *tags = [self.application serializeToDictionary].mutableCopy;
[tags addEntriesFromDictionary:[self.application serializeToDictionary]];
[tags addEntriesFromDictionary:[self.internal serializeToDictionary]];
[tags addEntriesFromDictionary:[self.device serializeToDictionary]];
_tags = tags;
}
return _tags;
}
@end
#endif /* HOCKEYSDK_FEATURE_METRICS */