Still subscribe to "updates" for update notifications.
authorCheng Zhao <zcbenz@gmail.com>
Fri, 31 Jan 2014 13:47:59 +0000 (21:47 +0800)
committerCheng Zhao <zcbenz@gmail.com>
Fri, 31 Jan 2014 13:47:59 +0000 (21:47 +0800)
It seems that we should subscribeError to checkForUpdatesCommand to
catch all errors, and the "updates" would only work when there is no
error happened.

browser/auto_updater_mac.mm

index 111dcdcf13e456846130fd0d55c9a9495c3f5d9f..be383ab47367bbd82fa751401b89ce275cba7bf1 100644 (file)
@@ -37,6 +37,31 @@ void AutoUpdater::SetFeedURL(const std::string& feed) {
     NSURL* url = [NSURL URLWithString:base::SysUTF8ToNSString(feed)];
     NSURLRequest* urlRequest = [NSURLRequest requestWithURL:url];
     g_updater = [[SQRLUpdater alloc] initWithUpdateRequest:urlRequest];
+
+    AutoUpdaterDelegate* delegate = GetDelegate();
+    if (!delegate)
+      return;
+
+    // Subscribe to events.
+    __block bool has_update = false;
+    [g_updater.updates subscribeNext:^(SQRLDownloadedUpdate* downloadedUpdate) {
+      has_update = true;
+
+      // There is a new update that has been downloaded.
+      SQRLUpdate* update = downloadedUpdate.update;
+      delegate->OnUpdateDownloaded(
+          base::SysNSStringToUTF8(update.releaseNotes),
+          base::SysNSStringToUTF8(update.releaseName),
+          base::Time::FromDoubleT(update.releaseDate.timeIntervalSince1970),
+          base::SysNSStringToUTF8(update.updateURL.absoluteString),
+          base::Bind(RelaunchToInstallUpdate));
+    } completed:^() {
+      // When the completed event is sent with no update, then we know there
+      // is no update available.
+      if (!has_update)
+        delegate->OnUpdateNotAvailable();
+      has_update = false;
+    }];
   }
 }
 
@@ -48,28 +73,9 @@ void AutoUpdater::CheckForUpdates() {
   if (!delegate)
     return;
 
-  // Subscribe to events.
-  __block bool has_update = false;
-  [signal subscribeNext:^(SQRLDownloadedUpdate* downloadedUpdate) {
-    has_update = true;
-
-    // There is a new update that has been downloaded.
-    SQRLUpdate* update = downloadedUpdate.update;
-    delegate->OnUpdateDownloaded(
-        base::SysNSStringToUTF8(update.releaseNotes),
-        base::SysNSStringToUTF8(update.releaseName),
-        base::Time::FromDoubleT(update.releaseDate.timeIntervalSince1970),
-        base::SysNSStringToUTF8(update.updateURL.absoluteString),
-        base::Bind(RelaunchToInstallUpdate));
-  } error:^(NSError* error) {
+  [signal subscribeError:^(NSError* error) {
     // Something wrong happened.
     delegate->OnError(base::SysNSStringToUTF8(error.localizedDescription));
-  } completed:^() {
-    // When the completed event is sent with no update, then we know there
-    // is no update available.
-    if (!has_update)
-      delegate->OnUpdateNotAvailable();
-    has_update = false;
   }];
 }