114 lines
4.0 KiB
Objective-C
114 lines
4.0 KiB
Objective-C
// Copyright © 2019 650 Industries. All rights reserved.
|
|
|
|
#import <EXUpdates/EXUpdatesBareUpdate.h>
|
|
#import <EXUpdates/EXUpdatesDatabase.h>
|
|
#import <EXUpdates/EXUpdatesLegacyUpdate.h>
|
|
#import <EXUpdates/EXUpdatesNewUpdate.h>
|
|
#import <EXUpdates/EXUpdatesUpdate+Private.h>
|
|
|
|
NS_ASSUME_NONNULL_BEGIN
|
|
|
|
@interface EXUpdatesUpdate ()
|
|
|
|
@property (nonatomic, strong, readwrite) NSDictionary *rawManifest;
|
|
|
|
@end
|
|
|
|
@implementation EXUpdatesUpdate
|
|
|
|
- (instancetype)initWithRawManifest:(NSDictionary *)manifest
|
|
config:(EXUpdatesConfig *)config
|
|
database:(nullable EXUpdatesDatabase *)database
|
|
{
|
|
if (self = [super init]) {
|
|
_rawManifest = manifest;
|
|
_config = config;
|
|
_database = database;
|
|
_scopeKey = config.scopeKey;
|
|
_isDevelopmentMode = NO;
|
|
}
|
|
return self;
|
|
}
|
|
|
|
+ (instancetype)updateWithId:(NSUUID *)updateId
|
|
scopeKey:(NSString *)scopeKey
|
|
commitTime:(NSDate *)commitTime
|
|
runtimeVersion:(NSString *)runtimeVersion
|
|
metadata:(nullable NSDictionary *)metadata
|
|
status:(EXUpdatesUpdateStatus)status
|
|
keep:(BOOL)keep
|
|
config:(EXUpdatesConfig *)config
|
|
database:(EXUpdatesDatabase *)database
|
|
{
|
|
// for now, we store the entire managed manifest in the metadata field
|
|
EXUpdatesUpdate *update = [[self alloc] initWithRawManifest:metadata ?: @{}
|
|
config:config
|
|
database:database];
|
|
update.updateId = updateId;
|
|
update.scopeKey = scopeKey;
|
|
update.commitTime = commitTime;
|
|
update.runtimeVersion = runtimeVersion;
|
|
update.metadata = metadata;
|
|
update.status = status;
|
|
update.keep = keep;
|
|
return update;
|
|
}
|
|
|
|
+ (instancetype)updateWithManifest:(NSDictionary *)manifest
|
|
config:(EXUpdatesConfig *)config
|
|
database:(EXUpdatesDatabase *)database
|
|
{
|
|
if (config.usesLegacyManifest) {
|
|
return [EXUpdatesLegacyUpdate updateWithLegacyManifest:manifest
|
|
config:config
|
|
database:database];
|
|
} else {
|
|
return [EXUpdatesNewUpdate updateWithNewManifest:manifest
|
|
config:config
|
|
database:database];
|
|
}
|
|
}
|
|
|
|
+ (instancetype)updateWithEmbeddedManifest:(NSDictionary *)manifest
|
|
config:(EXUpdatesConfig *)config
|
|
database:(nullable EXUpdatesDatabase *)database
|
|
{
|
|
if (config.usesLegacyManifest) {
|
|
if (manifest[@"releaseId"]) {
|
|
return [EXUpdatesLegacyUpdate updateWithLegacyManifest:manifest
|
|
config:config
|
|
database:database];
|
|
} else {
|
|
return [EXUpdatesBareUpdate updateWithBareManifest:manifest
|
|
config:config
|
|
database:database];
|
|
}
|
|
} else {
|
|
if (manifest[@"runtimeVersion"]) {
|
|
return [EXUpdatesNewUpdate updateWithNewManifest:manifest
|
|
config:config
|
|
database:database];
|
|
} else {
|
|
return [EXUpdatesBareUpdate updateWithBareManifest:manifest
|
|
config:config
|
|
database:database];
|
|
}
|
|
}
|
|
}
|
|
|
|
- (NSArray<EXUpdatesAsset *> *)assets
|
|
{
|
|
if (!_assets && _database) {
|
|
dispatch_sync(_database.databaseQueue, ^{
|
|
NSError *error;
|
|
self->_assets = [self->_database assetsWithUpdateId:self->_updateId error:&error];
|
|
NSAssert(self->_assets, @"Assets should be nonnull when selected from DB: %@", error.localizedDescription);
|
|
});
|
|
}
|
|
return _assets;
|
|
}
|
|
|
|
@end
|
|
|
|
NS_ASSUME_NONNULL_END
|