Reset sync daemon local state if the client version has changed
authorMiltiadis Vasilakis <mvasilak@gmail.com>
Sun, 24 Feb 2013 15:20:54 +0000 (17:20 +0200)
committerMiltiadis Vasilakis <mvasilak@gmail.com>
Sun, 24 Feb 2013 15:20:54 +0000 (17:20 +0200)
The change from "shared to me" to "shared with me" breaks stored local states. Reset local state to fix this.

pithos-macos/PithosAccount.h
pithos-macos/PithosAccount.m

index 9a4e188..dea922f 100644 (file)
@@ -46,6 +46,7 @@
     NSString *uniqueName;
     BOOL active;
     NSString *name;
+    NSString *clientVersion;
     
     BOOL syncActive;
     NSString *syncDirectoryPath;
@@ -89,6 +90,7 @@
 @property (nonatomic, strong) NSString *uniqueName;
 @property (assign) BOOL active;
 @property (nonatomic, strong) NSString *name;
+@property (nonatomic, strong) NSString *clientVersion;
 
 @property (nonatomic, assign) BOOL syncActive;
 @property (nonatomic, strong) NSString *syncDirectoryPath;
index 1edfbc3..fe5ca8d 100644 (file)
@@ -49,7 +49,7 @@
 @end
 
 @implementation PithosAccount
-@synthesize uniqueName, active, name;
+@synthesize uniqueName, active, name, clientVersion;
 @synthesize syncActive, syncDirectoryPath, syncAccountsDictionary, syncSkipHidden, syncLastCompleted, syncDaemon;
 @synthesize serverURL, versionResource, loginResource, publicResource, userCatalogResource;
 @synthesize authUser, authToken, storageURLPrefix, authURL, loginURLPrefix, publicURLPrefix, userCatalogURL, userCatalog;
 + (id)pithosAccount {
     PithosAccount *pithosAccount = [[self alloc] init];
     pithosAccount.uniqueName = [NSString stringWithFormat:@"pithosAccount-%f", [NSDate timeIntervalSinceReferenceDate]];
+    pithosAccount.clientVersion = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleVersion"];
     pithosAccount.syncSkipHidden = YES;
     return pithosAccount;
 }
 
 
 - (NSString *)description {
-    return [NSString stringWithFormat:@"uniqueName: %@, active: %d, name: %@, syncActive: %d, syncDirectoryPath: %@, syncAccountsDictionary: %@, syncSkipHidden: %d, syncLastCompleted: %@, serverURL: %@, versionResource: %@, loginResource: %@, publicResource: %@, userCatalogResource: %@, authUser: %@, authToken: %@, storageURLPrefix: %@, authURL: %@, loginURLPrefix: %@, publicURLPrefix: %@, userCatalogResource: %@",
-            uniqueName, active, name, syncActive, syncDirectoryPath, syncAccountsDictionary, syncSkipHidden, syncLastCompleted, serverURL, versionResource, loginResource, publicResource, userCatalogResource, authUser, authToken, storageURLPrefix, authURL, loginURLPrefix, publicURLPrefix, userCatalogResource];
+    return [NSString stringWithFormat:@"uniqueName: %@, active: %d, name: %@, clientVersion: %@, syncActive: %d, syncDirectoryPath: %@, syncAccountsDictionary: %@, syncSkipHidden: %d, syncLastCompleted: %@, serverURL: %@, versionResource: %@, loginResource: %@, publicResource: %@, userCatalogResource: %@, authUser: %@, authToken: %@, storageURLPrefix: %@, authURL: %@, loginURLPrefix: %@, publicURLPrefix: %@, userCatalogResource: %@",
+            uniqueName, active, name, clientVersion, syncActive, syncDirectoryPath, syncAccountsDictionary, syncSkipHidden, syncLastCompleted, serverURL, versionResource, loginResource, publicResource, userCatalogResource, authUser, authToken, storageURLPrefix, authURL, loginURLPrefix, publicURLPrefix, userCatalogResource];
 }
 
 #pragma mark -
         self.uniqueName = [decoder decodeObjectForKey:@"uniqueName"];
         self.active = [decoder decodeBoolForKey:@"active"];
         name = [decoder decodeObjectForKey:@"name"];
+        self.clientVersion = [decoder decodeObjectForKey:@"clientVersion"];
 
         self.syncActive = [decoder decodeBoolForKey:@"syncActive"];
         self.syncDirectoryPath = [decoder decodeObjectForKey:@"syncDirectoryPath"];
         if (![authUser length] || ![authToken length] || ![self.storageURLPrefix length])
             self.active = NO;
         
-        resetSyncDaemonLocalState = NO;
+        NSString *currentVersion = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleVersion"];
+        if (!clientVersion || ![clientVersion isEqualToString:currentVersion]) {
+            resetSyncDaemonLocalState = YES;
+            self.clientVersion = currentVersion;
+        } else {
+            resetSyncDaemonLocalState = NO;
+        }
     }
     return self;
 }
     [encoder encodeObject:uniqueName forKey:@"uniqueName"];
     [encoder encodeBool:active forKey:@"active"];
     [encoder encodeObject:name forKey:@"name"];
+    [encoder encodeObject:clientVersion forKey:@"clientVersion"];
     
     [encoder encodeBool:syncActive forKey:@"syncActive"];
     [encoder encodeObject:syncDirectoryPath forKey:@"syncDirectoryPath"];