2014-07-30 08:05:36 +02:00
|
|
|
//
|
2019-01-08 17:25:03 +01:00
|
|
|
// Copyright (c) 2019 Open Whisper Systems. All rights reserved.
|
2014-07-30 08:05:36 +02:00
|
|
|
//
|
|
|
|
|
|
|
|
#import "VersionMigrations.h"
|
2016-09-28 18:21:14 +02:00
|
|
|
#import "OWSDatabaseMigrationRunner.h"
|
2020-11-20 04:04:56 +01:00
|
|
|
#import <SessionUtilitiesKit/AppContext.h>
|
2020-11-11 01:50:01 +01:00
|
|
|
#import <SignalUtilitiesKit/AppVersion.h>
|
2020-11-25 06:15:16 +01:00
|
|
|
#import <SessionUtilitiesKit/NSUserDefaults+OWS.h>
|
|
|
|
#import <SessionMessagingKit/TSAccountManager.h>
|
|
|
|
#import <SessionMessagingKit/TSThread.h>
|
|
|
|
#import <SessionMessagingKit/TSGroupThread.h>
|
2017-12-19 03:42:50 +01:00
|
|
|
#import <YapDatabase/YapDatabase.h>
|
2020-11-11 06:30:54 +01:00
|
|
|
#import <SignalUtilitiesKit/SignalUtilitiesKit-Swift.h>
|
2015-03-12 00:46:31 +01:00
|
|
|
|
2018-01-30 17:27:44 +01:00
|
|
|
NS_ASSUME_NONNULL_BEGIN
|
|
|
|
|
2015-12-22 12:45:09 +01:00
|
|
|
#define NEEDS_TO_REGISTER_PUSH_KEY @"Register For Push"
|
2015-08-23 00:00:39 +02:00
|
|
|
#define NEEDS_TO_REGISTER_ATTRIBUTES @"Register Attributes"
|
2015-03-12 00:46:31 +01:00
|
|
|
|
2014-07-30 08:05:36 +02:00
|
|
|
@implementation VersionMigrations
|
|
|
|
|
2018-11-26 16:24:36 +01:00
|
|
|
#pragma mark - Dependencies
|
|
|
|
|
|
|
|
+ (TSAccountManager *)tsAccountManager
|
|
|
|
{
|
|
|
|
OWSAssertDebug(SSKEnvironment.shared.tsAccountManager);
|
|
|
|
|
|
|
|
return SSKEnvironment.shared.tsAccountManager;
|
|
|
|
}
|
|
|
|
|
|
|
|
#pragma mark - Utility methods
|
2015-04-25 16:59:32 +02:00
|
|
|
|
2018-01-30 17:27:44 +01:00
|
|
|
+ (void)performUpdateCheckWithCompletion:(VersionMigrationCompletion)completion
|
2016-08-01 00:25:07 +02:00
|
|
|
{
|
2018-08-27 18:09:39 +02:00
|
|
|
OWSLogInfo(@"");
|
2018-04-23 21:49:20 +02:00
|
|
|
|
2017-03-13 14:33:58 +01:00
|
|
|
// performUpdateCheck must be invoked after Environment has been initialized because
|
|
|
|
// upgrade process may depend on Environment.
|
2018-08-31 19:16:31 +02:00
|
|
|
OWSAssertDebug(Environment.shared);
|
2018-09-06 19:01:24 +02:00
|
|
|
OWSAssertDebug(completion);
|
2017-03-13 14:33:58 +01:00
|
|
|
|
2018-08-02 21:18:40 +02:00
|
|
|
NSString *previousVersion = AppVersion.sharedInstance.lastAppVersion;
|
|
|
|
NSString *currentVersion = AppVersion.sharedInstance.currentAppVersion;
|
2016-11-14 18:47:23 +01:00
|
|
|
|
2018-08-27 18:51:32 +02:00
|
|
|
OWSLogInfo(@"Checking migrations. currentVersion: %@, lastRanVersion: %@", currentVersion, previousVersion);
|
2016-11-14 18:47:23 +01:00
|
|
|
|
2015-04-25 16:59:32 +02:00
|
|
|
if (!previousVersion) {
|
2022-02-02 06:59:56 +01:00
|
|
|
// Note: We need to run the migrations here anyway to ensure that they don't run on subsequent launches
|
|
|
|
// and result in unexpected data changes (eg. 'MessageRequestsMigration' auto-approves all threads
|
|
|
|
// if this happens on the 2nd launch then any threads created during the 1st launch which haven't
|
|
|
|
// been approved would get auto-approved, allowing the user to use contacts which haven't approved
|
|
|
|
// comms to appear as options when creating closed groups)
|
|
|
|
OWSLogInfo(@"No previous version found. Probably first launch since install - running migrations so they don't run on second launch.");
|
2021-01-22 04:25:23 +01:00
|
|
|
|
2022-02-02 06:59:56 +01:00
|
|
|
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
|
|
|
|
[[[OWSDatabaseMigrationRunner alloc] init] runAllOutstandingWithCompletion:completion];
|
2018-01-30 17:27:44 +01:00
|
|
|
});
|
2015-04-25 16:59:32 +02:00
|
|
|
return;
|
|
|
|
}
|
2015-12-22 12:45:09 +01:00
|
|
|
|
2018-11-26 16:24:36 +01:00
|
|
|
if ([self isVersion:previousVersion atLeast:@"2.0.0" andLessThan:@"2.1.70"] && [self.tsAccountManager isRegistered]) {
|
2015-04-25 16:59:32 +02:00
|
|
|
[self clearVideoCache];
|
2015-04-28 14:41:50 +02:00
|
|
|
}
|
2015-12-22 12:45:09 +01:00
|
|
|
|
2018-11-26 16:24:36 +01:00
|
|
|
if ([self isVersion:previousVersion atLeast:@"2.0.0" andLessThan:@"2.3.0"] && [self.tsAccountManager isRegistered]) {
|
2016-04-18 20:17:08 +02:00
|
|
|
[self clearBloomFilterCache];
|
2015-11-29 01:14:49 +01:00
|
|
|
}
|
2016-08-01 00:25:07 +02:00
|
|
|
|
2018-04-24 19:15:11 +02:00
|
|
|
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
|
2018-11-27 22:59:38 +01:00
|
|
|
[[[OWSDatabaseMigrationRunner alloc] init] runAllOutstandingWithCompletion:completion];
|
2018-04-24 19:15:11 +02:00
|
|
|
});
|
2017-06-15 19:43:18 +02:00
|
|
|
}
|
|
|
|
|
2015-12-22 12:45:09 +01:00
|
|
|
+ (BOOL)isVersion:(NSString *)thisVersionString
|
|
|
|
atLeast:(NSString *)openLowerBoundVersionString
|
2017-12-04 18:38:44 +01:00
|
|
|
andLessThan:(NSString *)closedUpperBoundVersionString
|
|
|
|
{
|
2015-12-22 12:45:09 +01:00
|
|
|
return [self isVersion:thisVersionString atLeast:openLowerBoundVersionString] &&
|
2017-12-04 18:38:44 +01:00
|
|
|
[self isVersion:thisVersionString lessThan:closedUpperBoundVersionString];
|
2015-04-25 16:59:32 +02:00
|
|
|
}
|
|
|
|
|
2017-12-04 18:38:44 +01:00
|
|
|
+ (BOOL)isVersion:(NSString *)thisVersionString atLeast:(NSString *)thatVersionString
|
|
|
|
{
|
2015-04-25 16:59:32 +02:00
|
|
|
return [thisVersionString compare:thatVersionString options:NSNumericSearch] != NSOrderedAscending;
|
|
|
|
}
|
|
|
|
|
2017-12-04 18:38:44 +01:00
|
|
|
+ (BOOL)isVersion:(NSString *)thisVersionString lessThan:(NSString *)thatVersionString
|
|
|
|
{
|
2015-04-25 16:59:32 +02:00
|
|
|
return [thisVersionString compare:thatVersionString options:NSNumericSearch] == NSOrderedAscending;
|
|
|
|
}
|
|
|
|
|
2017-07-24 17:06:19 +02:00
|
|
|
#pragma mark Upgrading to 2.1 - Removing video cache folder
|
2015-03-12 00:46:31 +01:00
|
|
|
|
2017-12-04 18:38:44 +01:00
|
|
|
+ (void)clearVideoCache
|
|
|
|
{
|
|
|
|
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
|
2015-04-25 16:59:32 +02:00
|
|
|
NSString *basePath = ([paths count] > 0) ? [paths objectAtIndex:0] : nil;
|
2017-12-04 18:38:44 +01:00
|
|
|
basePath = [basePath stringByAppendingPathComponent:@"videos"];
|
2015-12-22 12:45:09 +01:00
|
|
|
|
2015-04-25 16:59:32 +02:00
|
|
|
NSError *error;
|
2015-12-22 12:45:09 +01:00
|
|
|
if ([[NSFileManager defaultManager] fileExistsAtPath:basePath]) {
|
2015-04-25 16:59:32 +02:00
|
|
|
[NSFileManager.defaultManager removeItemAtPath:basePath error:&error];
|
|
|
|
}
|
2015-12-22 12:45:09 +01:00
|
|
|
|
2015-08-23 00:00:39 +02:00
|
|
|
if (error) {
|
2018-08-27 18:00:28 +02:00
|
|
|
OWSLogError(
|
2017-12-04 18:38:44 +01:00
|
|
|
@"An error occured while removing the videos cache folder from old location: %@", error.debugDescription);
|
2015-08-23 00:00:39 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2016-04-18 20:17:08 +02:00
|
|
|
#pragma mark Upgrading to 2.3.0
|
|
|
|
|
|
|
|
// We removed bloom filter contact discovery. Clean up any local bloom filter data.
|
2017-12-04 18:38:44 +01:00
|
|
|
+ (void)clearBloomFilterCache
|
|
|
|
{
|
|
|
|
NSFileManager *fm = [NSFileManager defaultManager];
|
|
|
|
NSArray *cachesDir = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
|
2016-04-18 20:17:08 +02:00
|
|
|
NSString *bloomFilterPath = [[cachesDir objectAtIndex:0] stringByAppendingPathComponent:@"bloomfilter"];
|
|
|
|
|
|
|
|
if ([fm fileExistsAtPath:bloomFilterPath]) {
|
|
|
|
NSError *deleteError;
|
|
|
|
if ([fm removeItemAtPath:bloomFilterPath error:&deleteError]) {
|
2018-08-27 18:00:28 +02:00
|
|
|
OWSLogInfo(@"Successfully removed bloom filter cache.");
|
2020-06-11 05:25:48 +02:00
|
|
|
[LKStorage writeSyncWithBlock:^(YapDatabaseReadWriteTransaction *_Nonnull transaction) {
|
|
|
|
[transaction removeAllObjectsInCollection:@"TSRecipient"];
|
2020-11-04 01:46:30 +01:00
|
|
|
}];
|
2018-08-27 18:00:28 +02:00
|
|
|
OWSLogInfo(@"Removed all TSRecipient records - will be replaced by SignalRecipients at next address sync.");
|
2016-04-18 20:17:08 +02:00
|
|
|
} else {
|
2018-08-27 18:00:28 +02:00
|
|
|
OWSLogError(@"Failed to remove bloom filter cache with error: %@", deleteError.localizedDescription);
|
2016-04-18 20:17:08 +02:00
|
|
|
}
|
|
|
|
} else {
|
2018-08-27 18:00:28 +02:00
|
|
|
OWSLogDebug(@"No bloom filter cache to remove.");
|
2016-04-18 20:17:08 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2014-07-30 08:05:36 +02:00
|
|
|
@end
|
2018-01-30 17:27:44 +01:00
|
|
|
|
|
|
|
NS_ASSUME_NONNULL_END
|