Retry failed sync service requests that may have an updated URL in the service catalog master v1.3
authorMiltiadis Vasilakis <mvasilak@gmail.com>
Sun, 7 Jul 2013 13:54:04 +0000 (16:54 +0300)
committerMiltiadis Vasilakis <mvasilak@gmail.com>
Sun, 7 Jul 2013 13:54:04 +0000 (16:54 +0300)
For requests that use a URL from the service catalog,
if they return status code 401 or 404 or unknown,
retry after you update the service catalog and the request URL.
Update version.

pithos-macos/PithosSyncDaemon.m
pithos-macos/pithos-macos-Info.plist

index 937a48c..0619dce 100644 (file)
 }
 
 - (void)setPithos:(ASIPithos *)aPithos {
-    if (!pithos) {
+    if (!aPithos) {
+        return;
+    } else if (!pithos) {
         pithos = [ASIPithos pithos];
-        pithos.authToken = [aPithos.authToken copy];
-        pithos.authUser = [aPithos.authUser copy];
-        pithos.ignoreSSLErrors = aPithos.ignoreSSLErrors;
-        pithos.tokensURL = [aPithos.tokensURL copy];
-        pithos.storageURLPrefix = [aPithos.storageURLPrefix copy];
-        pithos.publicURLPrefix = [aPithos.publicURLPrefix copy];
-        pithos.userCatalogURL = [aPithos.userCatalogURL copy];
-    }
-    if (aPithos && 
-        (![aPithos.authUser isEqualToString:pithos.authUser] || 
-         ![aPithos.authToken isEqualToString:pithos.authToken] ||
-         ![aPithos.storageURLPrefix isEqual:pithos.storageURLPrefix])) {
+    } else if (![aPithos.tokensURL isEqualToString:pithos.tokensURL] || ![aPithos.authUser isEqualToString:pithos.authUser]) {
+        // If the authURL or the authUser actually changed, reset daemon and local state.
         [self resetDaemon];
-        if (![aPithos.authUser isEqualToString:pithos.authUser] || 
-            ![aPithos.storageURLPrefix isEqual:pithos.storageURLPrefix])
-            [self resetLocalStateWithAll:YES];
-        pithos.authToken = [aPithos.authToken copy];
-        pithos.authUser = [aPithos.authUser copy];
-        pithos.ignoreSSLErrors = aPithos.ignoreSSLErrors;
-        pithos.tokensURL = [aPithos.tokensURL copy];
-        pithos.storageURLPrefix = [aPithos.storageURLPrefix copy];
-        pithos.publicURLPrefix = [aPithos.publicURLPrefix copy];
-        pithos.userCatalogURL = [aPithos.userCatalogURL copy];
+        [self resetLocalStateWithAll:YES];
     }
+    pithos.authToken = [aPithos.authToken copy];
+    pithos.authUser = [aPithos.authUser copy];
+    pithos.ignoreSSLErrors = aPithos.ignoreSSLErrors;
+    pithos.tokensURL = [aPithos.tokensURL copy];
+    pithos.storageURLPrefix = [aPithos.storageURLPrefix copy];
+    pithos.publicURLPrefix = [aPithos.publicURLPrefix copy];
+    pithos.userCatalogURL = [aPithos.userCatalogURL copy];
 }
 
 #pragma mark -
         // If the server listing fails, the sync should start over, so just retrying is enough
         NSUInteger retries = [[containerRequest.userInfo objectForKey:@"retries"] unsignedIntegerValue];
         if (retries > 0) {
-            ASIPithosContainerRequest *newContainerRequest = (ASIPithosContainerRequest *)[PithosUtilities copyRequest:containerRequest];
+            ASIPithosContainerRequest *newContainerRequest = (ASIPithosContainerRequest *)[PithosUtilities retryWithUpdatedURLRequest:containerRequest
+                                                                                                              andPithosAccountManager:pithosAccount];
             [(NSMutableDictionary *)(newContainerRequest.userInfo)setObject:[NSNumber numberWithUnsignedInteger:(--retries)] forKey:@"retries"];
             [networkQueue addOperation:[PithosUtilities prepareRequest:newContainerRequest priority:[[newContainerRequest.userInfo objectForKey:@"priority"] integerValue]]];
         } else {
         }
         NSUInteger retries = [[request.userInfo objectForKey:@"retries"] unsignedIntegerValue];
         if (retries > 0) {
-            ASIPithosRequest *newRequest = (ASIPithosRequest *)[PithosUtilities copyRequest:request];
+            ASIPithosRequest *newRequest = (ASIPithosRequest *)[PithosUtilities retryWithUpdatedURLRequest:request
+                                                                                   andPithosAccountManager:pithosAccount];
             [(NSMutableDictionary *)(newRequest.userInfo)setObject:[NSNumber numberWithUnsignedInteger:(--retries)] forKey:@"retries"];
             [networkQueue addOperation:[PithosUtilities prepareRequest:newRequest priority:[[newRequest.userInfo objectForKey:@"priority"] integerValue]]];
         } else {
index 81eb564..3fd0f7e 100644 (file)
@@ -17,7 +17,7 @@
        <key>CFBundlePackageType</key>
        <string>APPL</string>
        <key>CFBundleShortVersionString</key>
-       <string>1.2.9</string>
+       <string>1.3</string>
        <key>CFBundleSignature</key>
        <string>????</string>
        <key>CFBundleURLTypes</key>
@@ -32,7 +32,7 @@
                </dict>
        </array>
        <key>CFBundleVersion</key>
-       <string>20130319.1</string>
+       <string>20130707.0</string>
        <key>LSMinimumSystemVersion</key>
        <string>${MACOSX_DEPLOYMENT_TARGET}</string>
        <key>NSMainNibFile</key>