1// Copyright 2020-present 650 Industries. All rights reserved.
2
3#import "EXUpdatesDatabaseManager.h"
4#import <EXUpdates/EXUpdatesUtils.h>
5
6@import EXUpdates;
7
8NS_ASSUME_NONNULL_BEGIN
9
10@interface EXUpdatesDatabaseManager ()
11
12@property (nonatomic, strong) NSURL *updatesDirectory;
13@property (nonatomic, strong) EXUpdatesDatabase *database;
14@property (nonatomic, assign) BOOL isDatabaseOpen;
15@property (nonatomic, strong, nullable) NSError *error;
16
17@end
18
19@implementation EXUpdatesDatabaseManager
20
21- (instancetype)init
22{
23  if (self = [super init]) {
24    _database = [[EXUpdatesDatabase alloc] init];
25    _isDatabaseOpen = NO;
26  }
27  return self;
28}
29
30- (NSURL *)updatesDirectory
31{
32  if (!_updatesDirectory) {
33    NSError *fsError;
34    _updatesDirectory = [EXUpdatesUtils initializeUpdatesDirectoryWithError:&fsError];
35    if (fsError) {
36      _error = fsError;
37    }
38  }
39  return _updatesDirectory;
40}
41
42- (BOOL)openDatabase
43{
44  if (!self.updatesDirectory) {
45    return NO;
46  }
47
48  __block BOOL success = NO;
49  __block NSError *dbError;
50  dispatch_sync(self.database.databaseQueue, ^{
51    success = [self.database openDatabaseInDirectory:self.updatesDirectory error:&dbError];
52  });
53
54  if (dbError) {
55    _error = dbError;
56  }
57  _isDatabaseOpen = success;
58
59  return success;
60}
61
62@end
63
64NS_ASSUME_NONNULL_END
65