You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cordova.apache.org by sh...@apache.org on 2012/08/24 02:19:42 UTC

[5/7] ios commit: Restore backups if they exist, then remove them (for upgrade from 5.1)

Restore backups if they exist, then remove them (for upgrade from 5.1)


Project: http://git-wip-us.apache.org/repos/asf/incubator-cordova-ios/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-cordova-ios/commit/09883f80
Tree: http://git-wip-us.apache.org/repos/asf/incubator-cordova-ios/tree/09883f80
Diff: http://git-wip-us.apache.org/repos/asf/incubator-cordova-ios/diff/09883f80

Branch: refs/heads/master
Commit: 09883f80dbd92d04b56642fe22960aab5a3ae1d0
Parents: b7741dc
Author: Michal Mocny <mm...@gmail.com>
Authored: Wed Aug 22 10:42:20 2012 -0400
Committer: Michal Mocny <mm...@gmail.com>
Committed: Wed Aug 22 10:42:20 2012 -0400

----------------------------------------------------------------------
 CordovaLib/Classes/CDVLocalStorage.h   |    2 +-
 CordovaLib/Classes/CDVLocalStorage.m   |  146 +++++++++++++++------------
 CordovaLib/Classes/CDVViewController.m |   12 ++-
 3 files changed, 89 insertions(+), 71 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-cordova-ios/blob/09883f80/CordovaLib/Classes/CDVLocalStorage.h
----------------------------------------------------------------------
diff --git a/CordovaLib/Classes/CDVLocalStorage.h b/CordovaLib/Classes/CDVLocalStorage.h
index 9abb9a2..02ae2c5 100644
--- a/CordovaLib/Classes/CDVLocalStorage.h
+++ b/CordovaLib/Classes/CDVLocalStorage.h
@@ -30,13 +30,13 @@
 - (BOOL) shouldRestore;
 - (void) backup:(CDVInvokedUrlCommand*)command;
 - (void) restore:(CDVInvokedUrlCommand*)command;
-- (void) verifyAndFixDatabaseLocations:(CDVInvokedUrlCommand*)command;
 
 + (void) __verifyAndFixDatabaseLocations;
 // Visible for testing.
 + (BOOL) __verifyAndFixDatabaseLocationsWithAppPlistDict:(NSMutableDictionary*)appPlistDict
                                               bundlePath:(NSString*)bundlePath
                                              fileManager:(NSFileManager*)fileManager;
++ (void) __restoreThenRemoveBackupLocations;
 @end
 
 @interface CDVBackupInfo : NSObject

http://git-wip-us.apache.org/repos/asf/incubator-cordova-ios/blob/09883f80/CordovaLib/Classes/CDVLocalStorage.m
----------------------------------------------------------------------
diff --git a/CordovaLib/Classes/CDVLocalStorage.m b/CordovaLib/Classes/CDVLocalStorage.m
index 37352ca..6e74270 100644
--- a/CordovaLib/Classes/CDVLocalStorage.m
+++ b/CordovaLib/Classes/CDVLocalStorage.m
@@ -41,79 +41,83 @@
         [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(onResignActive) 
                                                      name:UIApplicationWillResignActiveNotification object:nil];
         
-        NSString *original, *backup;
-        self.backupInfo = [NSMutableArray arrayWithCapacity:3];
-        
-        // set up common folders
-        NSString* appLibraryFolder = [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES)objectAtIndex:0];
-        NSString* appDocumentsFolder = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
-        NSString* backupsFolder = [appDocumentsFolder stringByAppendingPathComponent:@"Backups"];
-        
-        // create the backups folder
-        [[NSFileManager defaultManager] createDirectoryAtPath:backupsFolder withIntermediateDirectories:YES attributes:nil error:nil];
-
-        //////////// LOCALSTORAGE
-        
-        original = [[appLibraryFolder stringByAppendingPathComponent:
-                                 (IsAtLeastiOSVersion(@"5.1")) ? @"Caches" : @"WebKit/LocalStorage"]
-                                 stringByAppendingPathComponent:@"file__0.localstorage"]; 
-                                   
-        backup = [backupsFolder stringByAppendingPathComponent:@"localstorage.appdata.db"];
-        
-        CDVBackupInfo* backupItem = [[CDVBackupInfo alloc] init];
-        backupItem.backup = backup;
-        backupItem.original = original;
-        backupItem.label = @"localStorage database";
-        
-        [self.backupInfo addObject:backupItem];
-        
-        //////////// WEBSQL MAIN DB
-
-        original = [[appLibraryFolder stringByAppendingPathComponent:
-                     (IsAtLeastiOSVersion(@"5.1")) ? @"Caches" : @"WebKit/Databases"]
-                    stringByAppendingPathComponent:@"Databases.db"]; 
-        
-        backup = [backupsFolder stringByAppendingPathComponent:@"websqlmain.appdata.db"];
-        
-        backupItem = [[CDVBackupInfo alloc] init];
-        backupItem.backup = backup;
-        backupItem.original = original;
-        backupItem.label = @"websql main database";
-        
-        [self.backupInfo addObject:backupItem];
-        
-        //////////// WEBSQL DATABASES
-        
-        original = [[appLibraryFolder stringByAppendingPathComponent:
-                     (IsAtLeastiOSVersion(@"5.1")) ? @"Caches" : @"WebKit/Databases"]
-                    stringByAppendingPathComponent:@"file__0"]; 
-        
-        backup = [backupsFolder stringByAppendingPathComponent:@"websqldbs.appdata.db"];
-        
-        backupItem = [[CDVBackupInfo alloc] init];
-        backupItem.backup = backup;
-        backupItem.original = original;
-        backupItem.label = @"websql databases";
-        
-        [self.backupInfo addObject:backupItem];
-
-        ////////////
+        self.backupInfo = [[self class] createBackupInfo];
         
         // over-ride current webview delegate (for restore reasons)
         self.webviewDelegate = theWebView.delegate;
         theWebView.delegate = self;
         
         // verify the and fix the iOS 5.1 database locations once
-        [self verifyAndFixDatabaseLocations:nil];
+        [[self class] __verifyAndFixDatabaseLocations];
     }
     
     return self;
 }
 
++ (NSMutableArray*) createBackupInfo
+{
+    NSMutableArray* backupInfo = [NSMutableArray arrayWithCapacity:3];
+    
+    // set up common folders
+    NSString* appLibraryFolder = [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES)objectAtIndex:0];
+    NSString* appDocumentsFolder = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
+    NSString* backupsFolder = [appDocumentsFolder stringByAppendingPathComponent:@"Backups"];
+    
+    // create the backups folder
+    [[NSFileManager defaultManager] createDirectoryAtPath:backupsFolder withIntermediateDirectories:YES attributes:nil error:nil];
+    
+    //////////// LOCALSTORAGE
+    
+    NSString *original = [[appLibraryFolder stringByAppendingPathComponent:
+                           (IsAtLeastiOSVersion(@"5.1")) ? @"Caches" : @"WebKit/LocalStorage"]
+                          stringByAppendingPathComponent:@"file__0.localstorage"];
+    
+    NSString *backup = [backupsFolder stringByAppendingPathComponent:@"localstorage.appdata.db"];
+    
+    CDVBackupInfo* backupItem = [[CDVBackupInfo alloc] init];
+    backupItem.backup = backup;
+    backupItem.original = original;
+    backupItem.label = @"localStorage database";
+    
+    [backupInfo addObject:backupItem];
+    
+    //////////// WEBSQL MAIN DB
+    
+    original = [[appLibraryFolder stringByAppendingPathComponent:
+                 (IsAtLeastiOSVersion(@"5.1")) ? @"Caches" : @"WebKit/Databases"]
+                stringByAppendingPathComponent:@"Databases.db"];
+    
+    backup = [backupsFolder stringByAppendingPathComponent:@"websqlmain.appdata.db"];
+    
+    backupItem = [[CDVBackupInfo alloc] init];
+    backupItem.backup = backup;
+    backupItem.original = original;
+    backupItem.label = @"websql main database";
+    
+    [backupInfo addObject:backupItem];
+    
+    //////////// WEBSQL DATABASES
+    
+    original = [[appLibraryFolder stringByAppendingPathComponent:
+                 (IsAtLeastiOSVersion(@"5.1")) ? @"Caches" : @"WebKit/Databases"]
+                stringByAppendingPathComponent:@"file__0"];
+    
+    backup = [backupsFolder stringByAppendingPathComponent:@"websqldbs.appdata.db"];
+    
+    backupItem = [[CDVBackupInfo alloc] init];
+    backupItem.backup = backup;
+    backupItem.original = original;
+    backupItem.label = @"websql databases";
+    
+    [backupInfo addObject:backupItem];
+    
+    return backupInfo;
+}
+
 #pragma mark -
 #pragma mark Plugin interface methods
 
-- (BOOL) copyFrom:(NSString*)src to:(NSString*)dest error:(NSError* __autoreleasing*)error
++ (BOOL) copyFrom:(NSString*)src to:(NSString*)dest error:(NSError* __autoreleasing*)error
 {
     NSFileManager* fileManager = [NSFileManager defaultManager];
     
@@ -200,7 +204,7 @@
     {
         if ([info shouldBackup])
         {
-            [self copyFrom:info.original to:info.backup error:&error];
+            [[self class] copyFrom:info.original to:info.backup error:&error];
             
             if (callbackId) {
                 if (error == nil) {
@@ -235,7 +239,7 @@
     {
         if ([info shouldRestore])
         {
-            [self copyFrom:info.backup to:info.original error:&error];
+            [[self class] copyFrom:info.backup to:info.original error:&error];
             
             if (error == nil) {
                 message = [NSString stringWithFormat:@"Restored: %@", info.label];
@@ -255,11 +259,6 @@
     }
 }
 
-- (void) verifyAndFixDatabaseLocations:(CDVInvokedUrlCommand*)command
-{
-    [[self class] __verifyAndFixDatabaseLocations];
-}
-
 + (void) __verifyAndFixDatabaseLocations
 {
     NSBundle* mainBundle = [NSBundle mainBundle];
@@ -312,6 +311,21 @@
     return dirty;    
 }
 
++ (void) __restoreThenRemoveBackupLocations
+{
+    NSMutableArray* backupInfo = [CDVLocalStorage createBackupInfo];
+    NSFileManager* manager = [NSFileManager defaultManager];
+    
+    for (CDVBackupInfo* info in backupInfo)
+    {
+        if ([manager fileExistsAtPath:info.backup]) {
+            [self copyFrom:info.backup to:info.original error:nil];
+            [manager removeItemAtPath:info.backup error:nil];
+            NSLog(@"Removing old webstorage backup locations: %@", info.backup);
+        }
+    }
+}
+
 #pragma mark -
 #pragma mark Notification handlers
 

http://git-wip-us.apache.org/repos/asf/incubator-cordova-ios/blob/09883f80/CordovaLib/Classes/CDVViewController.m
----------------------------------------------------------------------
diff --git a/CordovaLib/Classes/CDVViewController.m b/CordovaLib/Classes/CDVViewController.m
index 9ce1d45..fae4b76 100644
--- a/CordovaLib/Classes/CDVViewController.m
+++ b/CordovaLib/Classes/CDVViewController.m
@@ -222,11 +222,15 @@
     /*
      * Fire up CDVLocalStorage on iOS 5.1 to work-around WebKit storage limitations, or adjust set user defaults on iOS 6.0+
      */
-    if (backupWebStorage) {
-        if (IsAtLeastiOSVersion(@"6.0")) {
-            [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"WebKitStoreWebDataForBackup"];
-        } else {
+    if (IsAtLeastiOSVersion(@"6.0")) {
+        [[NSUserDefaults standardUserDefaults] setBool:backupWebStorage forKey:@"WebKitStoreWebDataForBackup"];
+        // We don't manually back anything up in 6.0 and so we should remove any old backups.
+        [CDVLocalStorage __restoreThenRemoveBackupLocations];
+    } else {
+        if (backupWebStorage) {
             [self.commandDelegate registerPlugin:[[CDVLocalStorage alloc] initWithWebView:self.webView] withClassName:NSStringFromClass([CDVLocalStorage class])];
+        } else {
+            [CDVLocalStorage __restoreThenRemoveBackupLocations];
         }
     }