This repository has been archived on 2022-03-12. You can view files and clone it, but cannot push or open issues or pull requests.

114 lines
4.0 KiB
Mathematica
Raw Normal View History

2021-04-02 02:24:13 +03:00
// 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