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.
		
		
		
		
		
			
		
			
	
	
		
			131 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			Matlab
		
	
		
		
			
		
	
	
			131 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			Matlab
		
	
| 
								 
											5 years ago
										 
									 | 
							
								//
							 | 
						||
| 
								 | 
							
								//  Copyright (c) 2018 Open Whisper Systems. All rights reserved.
							 | 
						||
| 
								 | 
							
								//
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#import "OWSDisappearingMessagesConfiguration.h"
							 | 
						||
| 
								 
											5 years ago
										 
									 | 
							
								#import <SignalCoreKit/NSDate+OWS.h>
							 | 
						||
| 
								 | 
							
								#import <SignalCoreKit/NSString+OWS.h>
							 | 
						||
| 
								 
											5 years ago
										 
									 | 
							
								
							 | 
						||
| 
								 | 
							
								NS_ASSUME_NONNULL_BEGIN
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								@interface OWSDisappearingMessagesConfiguration ()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// Transient record lifecycle attributes.
							 | 
						||
| 
								 | 
							
								@property (atomic) NSDictionary *originalDictionaryValue;
							 | 
						||
| 
								 | 
							
								@property (atomic, getter=isNewRecord) BOOL newRecord;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								@end
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								@implementation OWSDisappearingMessagesConfiguration
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								- (instancetype)initDefaultWithThreadId:(NSString *)threadId
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    return [self initWithThreadId:threadId
							 | 
						||
| 
								 | 
							
								                          enabled:NO
							 | 
						||
| 
								 
											5 years ago
										 
									 | 
							
								                  durationSeconds:(NSTimeInterval)OWSDisappearingMessagesConfigurationDefaultExpirationDuration];
							 | 
						||
| 
								 
											5 years ago
										 
									 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								- (nullable instancetype)initWithCoder:(NSCoder *)coder
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    self = [super initWithCoder:coder];
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    _originalDictionaryValue = [self dictionaryValue];
							 | 
						||
| 
								 | 
							
								    _newRecord = NO;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    return self;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								- (instancetype)initWithThreadId:(NSString *)threadId enabled:(BOOL)isEnabled durationSeconds:(uint32_t)seconds
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    self = [super initWithUniqueId:threadId];
							 | 
						||
| 
								 | 
							
								    if (!self) {
							 | 
						||
| 
								 | 
							
								        return self;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    _enabled = isEnabled;
							 | 
						||
| 
								 | 
							
								    _durationSeconds = seconds;
							 | 
						||
| 
								 | 
							
								    _newRecord = YES;
							 | 
						||
| 
								 | 
							
								    _originalDictionaryValue = self.dictionaryValue;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    return self;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								+ (instancetype)fetchOrBuildDefaultWithThreadId:(NSString *)threadId
							 | 
						||
| 
								 | 
							
								                                    transaction:(YapDatabaseReadTransaction *)transaction
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    OWSDisappearingMessagesConfiguration *savedConfiguration =
							 | 
						||
| 
								 | 
							
								        [self fetchObjectWithUniqueID:threadId transaction:transaction];
							 | 
						||
| 
								 | 
							
								    if (savedConfiguration) {
							 | 
						||
| 
								 | 
							
								        return savedConfiguration;
							 | 
						||
| 
								 | 
							
								    } else {
							 | 
						||
| 
								 | 
							
								        return [[self alloc] initDefaultWithThreadId:threadId];
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								+ (NSArray<NSNumber *> *)validDurationsSeconds
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    return @[
							 | 
						||
| 
								 | 
							
								        @(5 * kSecondInterval),
							 | 
						||
| 
								 | 
							
								        @(10 * kSecondInterval),
							 | 
						||
| 
								 | 
							
								        @(30 * kSecondInterval),
							 | 
						||
| 
								 | 
							
								        @(1 * kMinuteInterval),
							 | 
						||
| 
								 | 
							
								        @(5 * kMinuteInterval),
							 | 
						||
| 
								 | 
							
								        @(30 * kMinuteInterval),
							 | 
						||
| 
								 | 
							
								        @(1 * kHourInterval),
							 | 
						||
| 
								 | 
							
								        @(6 * kHourInterval),
							 | 
						||
| 
								 | 
							
								        @(12 * kHourInterval),
							 | 
						||
| 
								 | 
							
								        @(24 * kHourInterval),
							 | 
						||
| 
								 | 
							
								        @(1 * kWeekInterval)
							 | 
						||
| 
								 | 
							
								    ];
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								+ (uint32_t)maxDurationSeconds
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    static uint32_t max;
							 | 
						||
| 
								 | 
							
								    static dispatch_once_t onceToken;
							 | 
						||
| 
								 | 
							
								    dispatch_once(&onceToken, ^{
							 | 
						||
| 
								 | 
							
								        max = [[self.validDurationsSeconds valueForKeyPath:@"@max.intValue"] unsignedIntValue];
							 | 
						||
| 
								 | 
							
								    });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    return max;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								- (NSUInteger)durationIndex
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    return [[self.class validDurationsSeconds] indexOfObject:@(self.durationSeconds)];
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								- (NSString *)durationString
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    return [NSString formatDurationSeconds:self.durationSeconds useShortFormat:NO];
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#pragma mark - Dirty Tracking
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								+ (MTLPropertyStorage)storageBehaviorForPropertyWithKey:(NSString *)propertyKey
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    // Don't persist transient properties
							 | 
						||
| 
								 | 
							
								    if ([propertyKey isEqualToString:@"originalDictionaryValue"]
							 | 
						||
| 
								 | 
							
								        ||[propertyKey isEqualToString:@"newRecord"]) {
							 | 
						||
| 
								 | 
							
								        return MTLPropertyStorageNone;
							 | 
						||
| 
								 | 
							
								    } else {
							 | 
						||
| 
								 | 
							
								        return [super storageBehaviorForPropertyWithKey:propertyKey];
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								- (BOOL)dictionaryValueDidChange
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    return ![self.originalDictionaryValue isEqual:[self dictionaryValue]];
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								- (void)saveWithTransaction:(YapDatabaseReadWriteTransaction *)transaction
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    [super saveWithTransaction:transaction];
							 | 
						||
| 
								 | 
							
								    self.originalDictionaryValue = [self dictionaryValue];
							 | 
						||
| 
								 | 
							
								    self.newRecord = NO;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								@end
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								NS_ASSUME_NONNULL_END
							 |