Files
featherVoice/TUIKit/TUICore/OfflinePushExtInfo.m
2025-08-08 10:49:36 +08:00

101 lines
2.8 KiB
Objective-C

//
// OfflinePushExtInfo.m
// TUICore
//
// Created by cologne on 2024/3/19.
// Copyright © 2024 Tencent. All rights reserved.
#import "OfflinePushExtInfo.h"
@implementation OfflinePushExtInfo
+ (nonnull OfflinePushExtInfo *)createWithExtString:(nonnull NSString *)ext {
if (ext == nil || ![ext isKindOfClass:NSString.class] || ext.length == 0) {
return nil;
}
NSDictionary *extDict = nil;
BOOL flag = [self.class convertJsonString:ext toObject:&extDict];
if (!flag || extDict == nil ||
![extDict isKindOfClass:NSDictionary.class] ||
![extDict.allKeys containsObject:@"entity"]) {
return nil;
}
OfflinePushExtInfo * extInfo = [[OfflinePushExtInfo alloc] init];
OfflinePushExtBusinessInfo * entity = extInfo.entity;
OfflinePushExtConfigInfo * timPushFeatures = extInfo.timPushFeatures;
NSDictionary *entityDic = extDict[@"entity"];
if (entityDic) {
[entity configWithEntityDic:entityDic];
}
NSDictionary *featuresDic = extDict[@"timPushFeatures"];
if (featuresDic) {
[timPushFeatures configWithTIMPushFeaturesDic:featuresDic];
}
return extInfo;
}
- (OfflinePushExtBusinessInfo *)entity {
if (!_entity) {
_entity = [[OfflinePushExtBusinessInfo alloc] init];
}
return _entity;
}
- (OfflinePushExtConfigInfo *)timPushFeatures {
if (!_timPushFeatures) {
_timPushFeatures = [[OfflinePushExtConfigInfo alloc] init];
}
return _timPushFeatures;
}
- (NSDictionary *)toReportData {
NSMutableDictionary *extDic = [NSMutableDictionary dictionary];
NSDictionary *entityDict = nil;
if (_entity) {
entityDict = [_entity toReportData];
[extDic setValue:entityDict forKey:@"entity"];
}
NSDictionary *timPushFeaturesDict = nil;
if (_timPushFeatures) {
timPushFeaturesDict = [_timPushFeatures toReportData];
[extDic setValue:timPushFeaturesDict forKey:@"timPushFeatures"];
}
if (extDic) {
return extDic;
}
return nil;
}
- (NSString *)toReportExtString {
NSDictionary * extDic = [self toReportData];
NSData *data = [NSJSONSerialization dataWithJSONObject:extDic options:NSJSONWritingPrettyPrinted error:nil];
NSString *ext = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
return ext;
}
+ (BOOL)convertJsonString:(NSString *)jsonString toObject:(NSObject **)object {
if (jsonString == nil) {
return NO;
}
NSData *data = [jsonString dataUsingEncoding:NSUTF8StringEncoding];
NSError *err = nil;
*object = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:&err];
if (err) {
NSLog(@"json decode failed, error:%@, json:%@", err, jsonString);
}
return (err == nil);
}
@end