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