macosx: Check for older preferences and ask to delete them.
authorPierre d'Herbemont <pdherbemont@videolan.org>
Mon, 15 Sep 2008 22:40:58 +0000 (00:40 +0200)
committerPierre d'Herbemont <pdherbemont@videolan.org>
Mon, 15 Sep 2008 22:42:29 +0000 (00:42 +0200)
modules/gui/macosx/intf.m

index 4aacd00..1d5d36d 100644 (file)
@@ -212,6 +212,11 @@ static int InteractCallback( vlc_object_t *p_this, const char *psz_variable,
 }
 
 #pragma mark -
+#pragma mark Private
+
+@interface VLCMain ()
+- (void)_removeOldPreferences;
+@end
 
 /*****************************************************************************
  * VLCMain implementation
@@ -460,6 +465,8 @@ static VLCMain *_o_sharedMainInstance = nil;
 
 - (void)applicationDidFinishLaunching:(NSNotification *)aNotification
 {
+    [self _removeOldPreferences];
+
 #ifdef UPDATE_CHECK
     /* Check for update silently on startup */
     if( !nib_update_loaded )
@@ -2219,6 +2226,49 @@ end:
     }
 }
 
+#pragma mark -
+#pragma mark Remove old prefs
+
+- (void)_removeOldPreferences
+{
+    static NSString * kVLCPreferencesVersion = @"VLCPreferencesVersion";
+    static const int kCurrentPreferencesVersion = 1;
+    int version = [[NSUserDefaults standardUserDefaults] integerForKey:kVLCPreferencesVersion];
+    if( version >= kCurrentPreferencesVersion ) return;
+
+    NSArray *libraries = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, 
+        NSUserDomainMask, YES);
+    if( !libraries || [libraries count] == 0) return;
+    NSString * preferences = [[libraries objectAtIndex:0] stringByAppendingPathComponent:@"Preferences"];
+
+    /* File not found, don't attempt anything */
+    if(![[NSFileManager defaultManager] fileExistsAtPath:[preferences stringByAppendingPathComponent:@"VLC"]] &&
+       ![[NSFileManager defaultManager] fileExistsAtPath:[preferences stringByAppendingPathComponent:@"org.videolan.vlc.plist"]] )
+    {
+        [[NSUserDefaults standardUserDefaults] setInteger:kCurrentPreferencesVersion forKey:kVLCPreferencesVersion];
+        return;
+    }
+
+    int res = NSRunInformationalAlertPanel(_NS("Remove old preferences?"),
+                _NS("We just found an older version of VLC's preferences files."),
+                _NS("Move To Trash and Relaunch VLC"), _NS("Ignore"), nil, nil);
+    if( res != NSOKButton ) return;
+
+    NSArray * ourPreferences = [NSArray arrayWithObjects:@"org.videolan.vlc.plist", @"VLC"];
+
+    /* Move the file to trash so that user can find them later */
+    [[NSWorkspace sharedWorkspace] performFileOperation:NSWorkspaceRecycleOperation source:preferences destination:nil files:ourPreferences tag:0];
+
+    /* really reset the defaults from now on */
+    [NSUserDefaults resetStandardUserDefaults];
+
+    [[NSUserDefaults standardUserDefaults] setInteger:kCurrentPreferencesVersion forKey:kVLCPreferencesVersion];
+
+    /* Relaunch now */
+    [[NSWorkspace sharedWorkspace] launchApplication:[[NSBundle mainBundle] bundlePath]];
+    exit(0);
+}
+
 #pragma mark -
 #pragma mark Errors, warnings and messages