170103ccdSEric Samelson// Copyright 2020-present 650 Industries. All rights reserved. 270103ccdSEric Samelson 370103ccdSEric Samelson#import "EXUpdatesDatabaseManager.h" 470103ccdSEric Samelson 519aed303SWill Schurman@import EXUpdates; 619aed303SWill Schurman 770103ccdSEric SamelsonNS_ASSUME_NONNULL_BEGIN 870103ccdSEric Samelson 970103ccdSEric Samelson@interface EXUpdatesDatabaseManager () 1070103ccdSEric Samelson 1170103ccdSEric Samelson@property (nonatomic, strong) NSURL *updatesDirectory; 1270103ccdSEric Samelson@property (nonatomic, strong) EXUpdatesDatabase *database; 1370103ccdSEric Samelson@property (nonatomic, assign) BOOL isDatabaseOpen; 1470103ccdSEric Samelson@property (nonatomic, strong, nullable) NSError *error; 1570103ccdSEric Samelson 1670103ccdSEric Samelson@end 1770103ccdSEric Samelson 1870103ccdSEric Samelson@implementation EXUpdatesDatabaseManager 1970103ccdSEric Samelson 2070103ccdSEric Samelson- (instancetype)init 2170103ccdSEric Samelson{ 2270103ccdSEric Samelson if (self = [super init]) { 2370103ccdSEric Samelson _database = [[EXUpdatesDatabase alloc] init]; 2470103ccdSEric Samelson _isDatabaseOpen = NO; 2570103ccdSEric Samelson } 2670103ccdSEric Samelson return self; 2770103ccdSEric Samelson} 2870103ccdSEric Samelson 2970103ccdSEric Samelson- (NSURL *)updatesDirectory 3070103ccdSEric Samelson{ 3170103ccdSEric Samelson if (!_updatesDirectory) { 3270103ccdSEric Samelson NSError *fsError; 33*a87dd437SWill Schurman _updatesDirectory = [EXUpdatesUtils initializeUpdatesDirectoryAndReturnError:&fsError]; 3470103ccdSEric Samelson if (fsError) { 3570103ccdSEric Samelson _error = fsError; 3670103ccdSEric Samelson } 3770103ccdSEric Samelson } 3870103ccdSEric Samelson return _updatesDirectory; 3970103ccdSEric Samelson} 4070103ccdSEric Samelson 4170103ccdSEric Samelson- (BOOL)openDatabase 4270103ccdSEric Samelson{ 4370103ccdSEric Samelson if (!self.updatesDirectory) { 4470103ccdSEric Samelson return NO; 4570103ccdSEric Samelson } 4670103ccdSEric Samelson 4770103ccdSEric Samelson __block BOOL success = NO; 4870103ccdSEric Samelson __block NSError *dbError; 4970103ccdSEric Samelson dispatch_sync(self.database.databaseQueue, ^{ 5019aed303SWill Schurman success = [self.database openDatabaseInDirectory:self.updatesDirectory error:&dbError]; 5170103ccdSEric Samelson }); 5270103ccdSEric Samelson 5370103ccdSEric Samelson if (dbError) { 5470103ccdSEric Samelson _error = dbError; 5570103ccdSEric Samelson } 5670103ccdSEric Samelson _isDatabaseOpen = success; 5770103ccdSEric Samelson 5870103ccdSEric Samelson return success; 5970103ccdSEric Samelson} 6070103ccdSEric Samelson 6170103ccdSEric Samelson@end 6270103ccdSEric Samelson 6370103ccdSEric SamelsonNS_ASSUME_NONNULL_END 64