108 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Objective-C
		
	
	
	
			
		
		
	
	
			108 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Objective-C
		
	
	
	
| //
 | |
| //  TASuperProperty.m
 | |
| //  ThinkingSDK
 | |
| //
 | |
| //  Created by Yangxiongon 2022/6/10.
 | |
| //
 | |
| 
 | |
| #import "TDSuperProperty.h"
 | |
| #import "TDPropertyValidator.h"
 | |
| #import "TDLogging.h"
 | |
| #import "TDFile.h"
 | |
| 
 | |
| @interface TDSuperProperty ()
 | |
| ///multi-instance identifier
 | |
| @property (nonatomic, copy) NSString *token;
 | |
| /// static public property
 | |
| @property (atomic, strong) NSDictionary *superProperties;
 | |
| /// dynamic public properties
 | |
| @property (nonatomic, copy) NSDictionary<NSString *, id> *(^dynamicSuperProperties)(void);
 | |
| @property (nonatomic, strong) TDFile *file;
 | |
| @property (nonatomic, assign) BOOL isLight;
 | |
| 
 | |
| @end
 | |
| 
 | |
| @implementation TDSuperProperty
 | |
| 
 | |
| - (instancetype)initWithToken:(NSString *)token isLight:(BOOL)isLight {
 | |
|     if (self = [super init]) {
 | |
|         NSAssert(token.length > 0, @"token cant empty");
 | |
|         self.token = token;
 | |
|         self.isLight = isLight;
 | |
|         if (!isLight) {
 | |
|             
 | |
|             self.file = [[TDFile alloc] initWithAppid:token];
 | |
|             self.superProperties = [self.file unarchiveSuperProperties];
 | |
|         }
 | |
|     }
 | |
|     return self;
 | |
| }
 | |
| 
 | |
| - (void)registerSuperProperties:(NSDictionary *)properties {
 | |
|     properties = [properties copy];
 | |
|     properties = [TDPropertyValidator validateProperties:properties];
 | |
|     if (properties.count <= 0) {
 | |
|         TDLogError(@"%@ propertieDict error.", properties);
 | |
|         return;
 | |
|     }
 | |
| 
 | |
|     
 | |
|     NSMutableDictionary *tmp = [NSMutableDictionary dictionaryWithDictionary:self.superProperties];
 | |
|     
 | |
|     [tmp addEntriesFromDictionary:properties];
 | |
|     self.superProperties = [NSDictionary dictionaryWithDictionary:tmp];
 | |
| 
 | |
|     
 | |
|     [self.file archiveSuperProperties:self.superProperties];
 | |
|     TDLogInfo(@"set super properties success");
 | |
| }
 | |
| 
 | |
| - (void)unregisterSuperProperty:(NSString *)property {
 | |
|     NSError *error = nil;
 | |
|     [TDPropertyValidator validateEventOrPropertyName:property withError:&error];
 | |
|     if (error) {
 | |
|         return;
 | |
|     }
 | |
| 
 | |
|     NSMutableDictionary *tmp = [NSMutableDictionary dictionaryWithDictionary:self.superProperties];
 | |
|     tmp[property] = nil;
 | |
|     self.superProperties = [NSDictionary dictionaryWithDictionary:tmp];
 | |
|     
 | |
|     [self.file archiveSuperProperties:self.superProperties];
 | |
|     TDLogInfo(@"unset super properties success");
 | |
| }
 | |
| 
 | |
| - (void)clearSuperProperties {
 | |
|     self.superProperties = @{};
 | |
|     [self.file archiveSuperProperties:self.superProperties];
 | |
|     TDLogInfo(@"clear super properties success");
 | |
| }
 | |
| 
 | |
| - (NSDictionary *)currentSuperProperties {
 | |
|     if (self.superProperties) {
 | |
|         return [TDPropertyValidator validateProperties:[self.superProperties copy]];
 | |
|     } else {
 | |
|         return @{};
 | |
|     }
 | |
| }
 | |
| 
 | |
| - (void)registerDynamicSuperProperties:(NSDictionary<NSString *, id> *(^ _Nullable)(void))dynamicSuperProperties {
 | |
|     @synchronized (self) {
 | |
|         self.dynamicSuperProperties = dynamicSuperProperties;
 | |
|     }
 | |
| }
 | |
| 
 | |
| 
 | |
| - (NSDictionary *)obtainDynamicSuperProperties {
 | |
|     @synchronized (self) {
 | |
|         if (self.dynamicSuperProperties) {
 | |
|             NSDictionary *properties = self.dynamicSuperProperties();
 | |
|             NSDictionary *validProperties = [TDPropertyValidator validateProperties:[properties copy]];
 | |
|             return validProperties;
 | |
|         }
 | |
|         return nil;
 | |
|     }
 | |
| }
 | |
| 
 | |
| @end
 |