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.
		
		
		
		
		
			
		
			
	
	
		
			155 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			Matlab
		
	
		
		
			
		
	
	
			155 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			Matlab
		
	
| 
								 
											5 years ago
										 
									 | 
							
								//
							 | 
						||
| 
								 | 
							
								//  Copyright (c) 2019 Open Whisper Systems. All rights reserved.
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#import "YapDatabaseConnection+OWS.h"
							 | 
						||
| 
								 | 
							
								#import <Curve25519Kit/Curve25519.h>
							 | 
						||
| 
								 | 
							
								#import <YapDatabase/YapDatabaseTransaction.h>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								NS_ASSUME_NONNULL_BEGIN
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								@implementation YapDatabaseConnection (OWS)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								- (BOOL)hasObjectForKey:(NSString *)key inCollection:(NSString *)collection
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    return nil != [self objectForKey:key inCollection:collection];
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								- (nullable id)objectForKey:(NSString *)key inCollection:(NSString *)collection
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    __block NSString *_Nullable object;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    [self readWithBlock:^(YapDatabaseReadTransaction *transaction) {
							 | 
						||
| 
								 | 
							
								        object = [transaction objectForKey:key inCollection:collection];
							 | 
						||
| 
								 | 
							
								    }];
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    return object;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								- (nullable id)objectForKey:(NSString *)key inCollection:(NSString *)collection ofExpectedType:(Class)class
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    id _Nullable value = [self objectForKey:key inCollection:collection];
							 | 
						||
| 
								 | 
							
								    return value;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								- (nullable NSDictionary *)dictionaryForKey:(NSString *)key inCollection:(NSString *)collection
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    return [self objectForKey:key inCollection:collection ofExpectedType:[NSDictionary class]];
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								- (nullable NSString *)stringForKey:(NSString *)key inCollection:(NSString *)collection
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    return [self objectForKey:key inCollection:collection ofExpectedType:[NSString class]];
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								- (BOOL)boolForKey:(NSString *)key inCollection:(NSString *)collection defaultValue:(BOOL)defaultValue
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    NSNumber *_Nullable value = [self objectForKey:key inCollection:collection ofExpectedType:[NSNumber class]];
							 | 
						||
| 
								 | 
							
								    return value ? [value boolValue] : defaultValue;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								- (double)doubleForKey:(NSString *)key inCollection:(NSString *)collection defaultValue:(double)defaultValue
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    NSNumber *_Nullable value = [self objectForKey:key inCollection:collection ofExpectedType:[NSNumber class]];
							 | 
						||
| 
								 | 
							
								    return value ? [value doubleValue] : defaultValue;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								- (nullable NSData *)dataForKey:(NSString *)key inCollection:(NSString *)collection
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    return [self objectForKey:key inCollection:collection ofExpectedType:[NSData class]];
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								- (nullable ECKeyPair *)keyPairForKey:(NSString *)key inCollection:(NSString *)collection
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    return [self objectForKey:key inCollection:collection ofExpectedType:[ECKeyPair class]];
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								- (int)intForKey:(NSString *)key inCollection:(NSString *)collection
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    NSNumber *_Nullable number = [self objectForKey:key inCollection:collection ofExpectedType:[NSNumber class]];
							 | 
						||
| 
								 | 
							
								    return [number intValue];
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								- (nullable NSDate *)dateForKey:(NSString *)key inCollection:(NSString *)collection
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    NSNumber *_Nullable value = [self objectForKey:key inCollection:collection ofExpectedType:[NSNumber class]];
							 | 
						||
| 
								 | 
							
								    if (value) {
							 | 
						||
| 
								 | 
							
								        return [NSDate dateWithTimeIntervalSince1970:value.doubleValue];
							 | 
						||
| 
								 | 
							
								    } else {
							 | 
						||
| 
								 | 
							
								        return nil;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#pragma mark -
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								- (NSUInteger)numberOfKeysInCollection:(NSString *)collection
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    __block NSUInteger result;
							 | 
						||
| 
								 | 
							
								    [self readWithBlock:^(YapDatabaseReadTransaction *transaction) {
							 | 
						||
| 
								 | 
							
								        result = [transaction numberOfKeysInCollection:collection];
							 | 
						||
| 
								 | 
							
								    }];
							 | 
						||
| 
								 | 
							
								    return result;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								- (void)purgeCollection:(NSString *)collection
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    [self readWriteWithBlock:^(YapDatabaseReadWriteTransaction *transaction) {
							 | 
						||
| 
								 | 
							
								        [transaction removeAllObjectsInCollection:collection];
							 | 
						||
| 
								 | 
							
								    }];
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								- (void)setObject:(id)object forKey:(NSString *)key inCollection:(NSString *)collection
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    [self readWriteWithBlock:^(YapDatabaseReadWriteTransaction *transaction) {
							 | 
						||
| 
								 | 
							
								        [transaction setObject:object forKey:key inCollection:collection];
							 | 
						||
| 
								 | 
							
								    }];
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								- (void)setBool:(BOOL)value forKey:(NSString *)key inCollection:(NSString *)collection
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    NSNumber *_Nullable oldValue = [self objectForKey:key inCollection:collection ofExpectedType:[NSNumber class]];
							 | 
						||
| 
								 | 
							
								    if (oldValue && [@(value) isEqual:oldValue]) {
							 | 
						||
| 
								 | 
							
								        // Skip redundant writes.
							 | 
						||
| 
								 | 
							
								        return;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    [self setObject:@(value) forKey:key inCollection:collection];
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								- (void)setDouble:(double)value forKey:(NSString *)key inCollection:(NSString *)collection
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    [self setObject:@(value) forKey:key inCollection:collection];
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								- (void)removeObjectForKey:(NSString *)key inCollection:(NSString *)collection
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    [self readWriteWithBlock:^(YapDatabaseReadWriteTransaction *transaction) {
							 | 
						||
| 
								 | 
							
								        [transaction removeObjectForKey:key inCollection:collection];
							 | 
						||
| 
								 | 
							
								    }];
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								- (void)setInt:(int)value forKey:(NSString *)key inCollection:(NSString *)collection
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    [self setObject:@(value) forKey:key inCollection:collection];
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								- (int)incrementIntForKey:(NSString *)key inCollection:(NSString *)collection
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    __block int value = 0;
							 | 
						||
| 
								 | 
							
								    [self readWriteWithBlock:^(YapDatabaseReadWriteTransaction *transaction) {
							 | 
						||
| 
								 | 
							
								        value = [[transaction objectForKey:key inCollection:collection] intValue];
							 | 
						||
| 
								 | 
							
								        value++;
							 | 
						||
| 
								 | 
							
								        [transaction setObject:@(value) forKey:key inCollection:collection];
							 | 
						||
| 
								 | 
							
								    }];
							 | 
						||
| 
								 | 
							
								    return value;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								- (void)setDate:(NSDate *)value forKey:(NSString *)key inCollection:(NSString *)collection
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    [self setObject:@(value.timeIntervalSince1970) forKey:key inCollection:collection];
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								@end
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								NS_ASSUME_NONNULL_END
							 |