mirror of https://github.com/oxen-io/session-ios
				
				
				
			
			You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
	
	
		
			117 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			C
		
	
		
		
			
		
	
	
			117 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			C
		
	
| 
								 
											5 years ago
										 
									 | 
							
								//
							 | 
						||
| 
								 | 
							
								//  Copyright (c) 2019 Open Whisper Systems. All rights reserved.
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#import <YapDatabase/YapDatabase.h>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								NS_ASSUME_NONNULL_BEGIN
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								extern NSString *const StorageIsReadyNotification;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								@class YapDatabaseExtension;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								@protocol OWSDatabaseConnectionDelegate <NSObject>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								- (BOOL)areAllRegistrationsComplete;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								@end
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#pragma mark -
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								@interface OWSDatabaseConnection : YapDatabaseConnection
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								@property (atomic, weak) id<OWSDatabaseConnectionDelegate> delegate;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								- (instancetype)init NS_UNAVAILABLE;
							 | 
						||
| 
								 | 
							
								- (instancetype)initWithDatabase:(YapDatabase *)database
							 | 
						||
| 
								 | 
							
								                        delegate:(id<OWSDatabaseConnectionDelegate>)delegate NS_DESIGNATED_INITIALIZER;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								@end
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#pragma mark -
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								@interface OWSDatabase : YapDatabase
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								- (instancetype)init NS_UNAVAILABLE;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								- (id)initWithPath:(NSString *)inPath
							 | 
						||
| 
								 | 
							
								        serializer:(nullable YapDatabaseSerializer)inSerializer
							 | 
						||
| 
								 | 
							
								      deserializer:(YapDatabaseDeserializer)inDeserializer
							 | 
						||
| 
								 | 
							
								           options:(YapDatabaseOptions *)inOptions
							 | 
						||
| 
								 | 
							
								          delegate:(id<OWSDatabaseConnectionDelegate>)delegate NS_DESIGNATED_INITIALIZER;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								@end
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#pragma mark -
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								typedef void (^OWSStorageMigrationBlock)(void);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								@interface OWSStorage : NSObject
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								- (instancetype)init NS_UNAVAILABLE;
							 | 
						||
| 
								 | 
							
								- (instancetype)initStorage NS_DESIGNATED_INITIALIZER;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// Returns YES if _ALL_ storage classes have completed both their
							 | 
						||
| 
								 | 
							
								// sync _AND_ async view registrations.
							 | 
						||
| 
								 | 
							
								+ (BOOL)isStorageReady;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// This object can be used to filter database notifications.
							 | 
						||
| 
								 | 
							
								@property (nonatomic, readonly, nullable) id dbNotificationObject;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// migrationBlock will be invoked _off_ the main thread.
							 | 
						||
| 
								 | 
							
								+ (void)registerExtensionsWithMigrationBlock:(OWSStorageMigrationBlock)migrationBlock;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#ifdef DEBUG
							 | 
						||
| 
								 | 
							
								- (void)closeStorageForTests;
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								+ (void)resetAllStorage;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								- (YapDatabaseConnection *)newDatabaseConnection;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								+ (YapDatabaseOptions *)defaultDatabaseOptions;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#pragma mark - Extension Registration
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								+ (void)incrementVersionOfDatabaseExtension:(NSString *)extensionName;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								- (BOOL)registerExtension:(YapDatabaseExtension *)extension withName:(NSString *)extensionName;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								- (void)asyncRegisterExtension:(YapDatabaseExtension *)extension withName:(NSString *)extensionName;
							 | 
						||
| 
								 | 
							
								- (void)asyncRegisterExtension:(YapDatabaseExtension *)extension
							 | 
						||
| 
								 | 
							
								                      withName:(NSString *)extensionName
							 | 
						||
| 
								 | 
							
								                    completion:(nullable dispatch_block_t)completion;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								- (nullable id)registeredExtension:(NSString *)extensionName;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								- (NSArray<NSString *> *)registeredExtensionNames;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#pragma mark -
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								- (unsigned long long)databaseFileSize;
							 | 
						||
| 
								 | 
							
								- (unsigned long long)databaseWALFileSize;
							 | 
						||
| 
								 | 
							
								- (unsigned long long)databaseSHMFileSize;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								- (YapDatabaseConnection *)registrationConnection;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#pragma mark - Password
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * Returns NO if:
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * - Keychain is locked because device has just been restarted.
							 | 
						||
| 
								 | 
							
								 * - Password could not be retrieved because of a keychain error.
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								+ (BOOL)isDatabasePasswordAccessible;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								+ (nullable NSData *)tryToLoadDatabaseLegacyPassphrase:(NSError **)errorHandle;
							 | 
						||
| 
								 | 
							
								+ (void)removeLegacyPassphrase;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								+ (void)storeDatabaseCipherKeySpec:(NSData *)cipherKeySpecData;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								- (void)logFileSizes;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								@end
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								NS_ASSUME_NONNULL_END
							 |