This commit is contained in:
Yamozha
2021-04-02 02:24:13 +03:00
parent c23950b545
commit 7256d79e2c
31493 changed files with 3036630 additions and 0 deletions

View File

@ -0,0 +1,113 @@
// 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