Simplify the auto-updater implementations
We used to use Sparkle on OS X, and the design was reserved to be extended to all platforms, which are all wrong now.
This commit is contained in:
parent
d74ef5c078
commit
f89d28a63e
10 changed files with 81 additions and 141 deletions
|
@ -5,8 +5,9 @@
|
||||||
#include "atom/browser/api/atom_api_auto_updater.h"
|
#include "atom/browser/api/atom_api_auto_updater.h"
|
||||||
|
|
||||||
#include "base/time/time.h"
|
#include "base/time/time.h"
|
||||||
#include "atom/browser/auto_updater.h"
|
|
||||||
#include "atom/browser/browser.h"
|
#include "atom/browser/browser.h"
|
||||||
|
#include "atom/browser/native_window.h"
|
||||||
|
#include "atom/browser/window_list.h"
|
||||||
#include "atom/common/node_includes.h"
|
#include "atom/common/node_includes.h"
|
||||||
#include "native_mate/dictionary.h"
|
#include "native_mate/dictionary.h"
|
||||||
#include "native_mate/object_template_builder.h"
|
#include "native_mate/object_template_builder.h"
|
||||||
|
@ -37,7 +38,7 @@ AutoUpdater::AutoUpdater() {
|
||||||
}
|
}
|
||||||
|
|
||||||
AutoUpdater::~AutoUpdater() {
|
AutoUpdater::~AutoUpdater() {
|
||||||
auto_updater::AutoUpdater::SetDelegate(NULL);
|
auto_updater::AutoUpdater::SetDelegate(nullptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
void AutoUpdater::OnError(const std::string& message) {
|
void AutoUpdater::OnError(const std::string& message) {
|
||||||
|
@ -66,25 +67,34 @@ void AutoUpdater::OnUpdateNotAvailable() {
|
||||||
void AutoUpdater::OnUpdateDownloaded(const std::string& release_notes,
|
void AutoUpdater::OnUpdateDownloaded(const std::string& release_notes,
|
||||||
const std::string& release_name,
|
const std::string& release_name,
|
||||||
const base::Time& release_date,
|
const base::Time& release_date,
|
||||||
const std::string& url,
|
const std::string& url) {
|
||||||
const base::Closure& quit_and_install) {
|
|
||||||
quit_and_install_ = quit_and_install;
|
|
||||||
Emit("update-downloaded", release_notes, release_name, release_date, url);
|
Emit("update-downloaded", release_notes, release_name, release_date, url);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void AutoUpdater::OnWindowAllClosed() {
|
||||||
|
QuitAndInstall();
|
||||||
|
}
|
||||||
|
|
||||||
mate::ObjectTemplateBuilder AutoUpdater::GetObjectTemplateBuilder(
|
mate::ObjectTemplateBuilder AutoUpdater::GetObjectTemplateBuilder(
|
||||||
v8::Isolate* isolate) {
|
v8::Isolate* isolate) {
|
||||||
return mate::ObjectTemplateBuilder(isolate)
|
return mate::ObjectTemplateBuilder(isolate)
|
||||||
.SetMethod("setFeedUrl", &auto_updater::AutoUpdater::SetFeedURL)
|
.SetMethod("setFeedUrl", &auto_updater::AutoUpdater::SetFeedURL)
|
||||||
.SetMethod("checkForUpdates", &auto_updater::AutoUpdater::CheckForUpdates)
|
.SetMethod("checkForUpdates", &auto_updater::AutoUpdater::CheckForUpdates)
|
||||||
.SetMethod("_quitAndInstall", &AutoUpdater::QuitAndInstall);
|
.SetMethod("quitAndInstall", &AutoUpdater::QuitAndInstall);
|
||||||
}
|
}
|
||||||
|
|
||||||
void AutoUpdater::QuitAndInstall() {
|
void AutoUpdater::QuitAndInstall() {
|
||||||
if (quit_and_install_.is_null())
|
// If we don't have any window then quitAndInstall immediately.
|
||||||
Browser::Get()->Shutdown();
|
WindowList* window_list = WindowList::GetInstance();
|
||||||
else
|
if (window_list->size() == 0) {
|
||||||
quit_and_install_.Run();
|
auto_updater::AutoUpdater::QuitAndInstall();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Otherwise do the restart after all windows have been closed.
|
||||||
|
window_list->AddObserver(this);
|
||||||
|
for (NativeWindow* window : *window_list)
|
||||||
|
window->Close();
|
||||||
}
|
}
|
||||||
|
|
||||||
// static
|
// static
|
||||||
|
|
|
@ -7,9 +7,9 @@
|
||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
#include "base/callback.h"
|
|
||||||
#include "atom/browser/api/event_emitter.h"
|
#include "atom/browser/api/event_emitter.h"
|
||||||
#include "atom/browser/auto_updater_delegate.h"
|
#include "atom/browser/auto_updater.h"
|
||||||
|
#include "atom/browser/window_list_observer.h"
|
||||||
#include "native_mate/handle.h"
|
#include "native_mate/handle.h"
|
||||||
|
|
||||||
namespace atom {
|
namespace atom {
|
||||||
|
@ -17,7 +17,8 @@ namespace atom {
|
||||||
namespace api {
|
namespace api {
|
||||||
|
|
||||||
class AutoUpdater : public mate::EventEmitter,
|
class AutoUpdater : public mate::EventEmitter,
|
||||||
public auto_updater::AutoUpdaterDelegate {
|
public auto_updater::Delegate,
|
||||||
|
public WindowListObserver {
|
||||||
public:
|
public:
|
||||||
static mate::Handle<AutoUpdater> Create(v8::Isolate* isolate);
|
static mate::Handle<AutoUpdater> Create(v8::Isolate* isolate);
|
||||||
|
|
||||||
|
@ -25,17 +26,18 @@ class AutoUpdater : public mate::EventEmitter,
|
||||||
AutoUpdater();
|
AutoUpdater();
|
||||||
virtual ~AutoUpdater();
|
virtual ~AutoUpdater();
|
||||||
|
|
||||||
// AutoUpdaterDelegate implementations.
|
// Delegate implementations.
|
||||||
void OnError(const std::string& error) override;
|
void OnError(const std::string& error) override;
|
||||||
void OnCheckingForUpdate() override;
|
void OnCheckingForUpdate() override;
|
||||||
void OnUpdateAvailable() override;
|
void OnUpdateAvailable() override;
|
||||||
void OnUpdateNotAvailable() override;
|
void OnUpdateNotAvailable() override;
|
||||||
void OnUpdateDownloaded(
|
void OnUpdateDownloaded(const std::string& release_notes,
|
||||||
const std::string& release_notes,
|
const std::string& release_name,
|
||||||
const std::string& release_name,
|
const base::Time& release_date,
|
||||||
const base::Time& release_date,
|
const std::string& update_url) override;
|
||||||
const std::string& update_url,
|
|
||||||
const base::Closure& quit_and_install) override;
|
// WindowListObserver:
|
||||||
|
void OnWindowAllClosed() override;
|
||||||
|
|
||||||
// mate::Wrappable implementations:
|
// mate::Wrappable implementations:
|
||||||
mate::ObjectTemplateBuilder GetObjectTemplateBuilder(
|
mate::ObjectTemplateBuilder GetObjectTemplateBuilder(
|
||||||
|
@ -44,8 +46,6 @@ class AutoUpdater : public mate::EventEmitter,
|
||||||
private:
|
private:
|
||||||
void QuitAndInstall();
|
void QuitAndInstall();
|
||||||
|
|
||||||
base::Closure quit_and_install_;
|
|
||||||
|
|
||||||
DISALLOW_COPY_AND_ASSIGN(AutoUpdater);
|
DISALLOW_COPY_AND_ASSIGN(AutoUpdater);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -3,18 +3,4 @@
|
||||||
|
|
||||||
autoUpdater.__proto__ = EventEmitter.prototype
|
autoUpdater.__proto__ = EventEmitter.prototype
|
||||||
|
|
||||||
autoUpdater.quitAndInstall = ->
|
|
||||||
# If we don't have any window then quitAndInstall immediately.
|
|
||||||
BrowserWindow = require 'browser-window'
|
|
||||||
windows = BrowserWindow.getAllWindows()
|
|
||||||
if windows.length is 0
|
|
||||||
@_quitAndInstall()
|
|
||||||
return
|
|
||||||
|
|
||||||
# Do the restart after all windows have been closed.
|
|
||||||
app = require 'app'
|
|
||||||
app.removeAllListeners 'window-all-closed'
|
|
||||||
app.once 'window-all-closed', @_quitAndInstall.bind(this)
|
|
||||||
win.close() for win in windows
|
|
||||||
|
|
||||||
module.exports = autoUpdater
|
module.exports = autoUpdater
|
||||||
|
|
|
@ -6,22 +6,25 @@
|
||||||
|
|
||||||
namespace auto_updater {
|
namespace auto_updater {
|
||||||
|
|
||||||
AutoUpdaterDelegate* AutoUpdater::delegate_ = NULL;
|
Delegate* AutoUpdater::delegate_ = nullptr;
|
||||||
|
|
||||||
AutoUpdaterDelegate* AutoUpdater::GetDelegate() {
|
Delegate* AutoUpdater::GetDelegate() {
|
||||||
return delegate_;
|
return delegate_;
|
||||||
}
|
}
|
||||||
|
|
||||||
void AutoUpdater::SetDelegate(AutoUpdaterDelegate* delegate) {
|
void AutoUpdater::SetDelegate(Delegate* delegate) {
|
||||||
delegate_ = delegate;
|
delegate_ = delegate;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(OS_MACOSX) && defined(MAS_BUILD)
|
#if !defined(OS_MACOSX) || defined(MAS_BUILD)
|
||||||
void AutoUpdater::SetFeedURL(const std::string& url) {
|
void AutoUpdater::SetFeedURL(const std::string& url) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void AutoUpdater::CheckForUpdates() {
|
void AutoUpdater::CheckForUpdates() {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void AutoUpdater::QuitAndInstall() {
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
} // namespace auto_updater
|
} // namespace auto_updater
|
||||||
|
|
|
@ -9,21 +9,48 @@
|
||||||
|
|
||||||
#include "base/basictypes.h"
|
#include "base/basictypes.h"
|
||||||
|
|
||||||
|
namespace base {
|
||||||
|
class Time;
|
||||||
|
}
|
||||||
|
|
||||||
namespace auto_updater {
|
namespace auto_updater {
|
||||||
|
|
||||||
class AutoUpdaterDelegate;
|
class Delegate {
|
||||||
|
public:
|
||||||
|
// An error happened.
|
||||||
|
virtual void OnError(const std::string& error) {}
|
||||||
|
|
||||||
|
// Checking to see if there is an update
|
||||||
|
virtual void OnCheckingForUpdate() {}
|
||||||
|
|
||||||
|
// There is an update available and it is being downloaded
|
||||||
|
virtual void OnUpdateAvailable() {}
|
||||||
|
|
||||||
|
// There is no available update.
|
||||||
|
virtual void OnUpdateNotAvailable() {}
|
||||||
|
|
||||||
|
// There is a new update which has been downloaded.
|
||||||
|
virtual void OnUpdateDownloaded(const std::string& release_notes,
|
||||||
|
const std::string& release_name,
|
||||||
|
const base::Time& release_date,
|
||||||
|
const std::string& update_url) {}
|
||||||
|
|
||||||
|
protected:
|
||||||
|
virtual ~Delegate() {}
|
||||||
|
};
|
||||||
|
|
||||||
class AutoUpdater {
|
class AutoUpdater {
|
||||||
public:
|
public:
|
||||||
// Gets/Sets the delegate.
|
// Gets/Sets the delegate.
|
||||||
static AutoUpdaterDelegate* GetDelegate();
|
static Delegate* GetDelegate();
|
||||||
static void SetDelegate(AutoUpdaterDelegate* delegate);
|
static void SetDelegate(Delegate* delegate);
|
||||||
|
|
||||||
static void SetFeedURL(const std::string& url);
|
static void SetFeedURL(const std::string& url);
|
||||||
static void CheckForUpdates();
|
static void CheckForUpdates();
|
||||||
|
static void QuitAndInstall();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static AutoUpdaterDelegate* delegate_;
|
static Delegate* delegate_;
|
||||||
|
|
||||||
DISALLOW_IMPLICIT_CONSTRUCTORS(AutoUpdater);
|
DISALLOW_IMPLICIT_CONSTRUCTORS(AutoUpdater);
|
||||||
};
|
};
|
||||||
|
|
|
@ -1,45 +0,0 @@
|
||||||
// Copyright (c) 2013 GitHub, Inc.
|
|
||||||
// Use of this source code is governed by the MIT license that can be
|
|
||||||
// found in the LICENSE file.
|
|
||||||
|
|
||||||
#ifndef ATOM_BROWSER_AUTO_UPDATER_DELEGATE_H_
|
|
||||||
#define ATOM_BROWSER_AUTO_UPDATER_DELEGATE_H_
|
|
||||||
|
|
||||||
#include <string>
|
|
||||||
|
|
||||||
#include "base/callback_forward.h"
|
|
||||||
|
|
||||||
namespace base {
|
|
||||||
class Time;
|
|
||||||
}
|
|
||||||
|
|
||||||
namespace auto_updater {
|
|
||||||
|
|
||||||
class AutoUpdaterDelegate {
|
|
||||||
public:
|
|
||||||
// An error happened.
|
|
||||||
virtual void OnError(const std::string& error) {}
|
|
||||||
|
|
||||||
// Checking to see if there is an update
|
|
||||||
virtual void OnCheckingForUpdate() {}
|
|
||||||
|
|
||||||
// There is an update available and it is being downloaded
|
|
||||||
virtual void OnUpdateAvailable() {}
|
|
||||||
|
|
||||||
// There is no available update.
|
|
||||||
virtual void OnUpdateNotAvailable() {}
|
|
||||||
|
|
||||||
// There is a new update which has been downloaded.
|
|
||||||
virtual void OnUpdateDownloaded(const std::string& release_notes,
|
|
||||||
const std::string& release_name,
|
|
||||||
const base::Time& release_date,
|
|
||||||
const std::string& update_url,
|
|
||||||
const base::Closure& quit_and_install) {}
|
|
||||||
|
|
||||||
protected:
|
|
||||||
virtual ~AutoUpdaterDelegate() {}
|
|
||||||
};
|
|
||||||
|
|
||||||
} // namespace auto_updater
|
|
||||||
|
|
||||||
#endif // ATOM_BROWSER_AUTO_UPDATER_DELEGATE_H_
|
|
|
@ -1,17 +0,0 @@
|
||||||
// Copyright (c) 2013 GitHub, Inc.
|
|
||||||
// Use of this source code is governed by the MIT license that can be
|
|
||||||
// found in the LICENSE file.
|
|
||||||
|
|
||||||
#include "atom/browser/auto_updater.h"
|
|
||||||
|
|
||||||
namespace auto_updater {
|
|
||||||
|
|
||||||
// static
|
|
||||||
void AutoUpdater::SetFeedURL(const std::string& url) {
|
|
||||||
}
|
|
||||||
|
|
||||||
// static
|
|
||||||
void AutoUpdater::CheckForUpdates() {
|
|
||||||
}
|
|
||||||
|
|
||||||
} // namespace auto_updater
|
|
|
@ -12,9 +12,6 @@
|
||||||
#include "base/bind.h"
|
#include "base/bind.h"
|
||||||
#include "base/time/time.h"
|
#include "base/time/time.h"
|
||||||
#include "base/strings/sys_string_conversions.h"
|
#include "base/strings/sys_string_conversions.h"
|
||||||
#include "atom/browser/auto_updater_delegate.h"
|
|
||||||
|
|
||||||
#include <iostream>
|
|
||||||
|
|
||||||
namespace auto_updater {
|
namespace auto_updater {
|
||||||
|
|
||||||
|
@ -23,20 +20,12 @@ namespace {
|
||||||
// The gloal SQRLUpdater object.
|
// The gloal SQRLUpdater object.
|
||||||
SQRLUpdater* g_updater = nil;
|
SQRLUpdater* g_updater = nil;
|
||||||
|
|
||||||
void RelaunchToInstallUpdate() {
|
|
||||||
[[g_updater relaunchToInstallUpdate] subscribeError:^(NSError* error) {
|
|
||||||
AutoUpdaterDelegate* delegate = AutoUpdater::GetDelegate();
|
|
||||||
if (delegate)
|
|
||||||
delegate->OnError(base::SysNSStringToUTF8(error.localizedDescription));
|
|
||||||
}];
|
|
||||||
}
|
|
||||||
|
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|
||||||
// static
|
// static
|
||||||
void AutoUpdater::SetFeedURL(const std::string& feed) {
|
void AutoUpdater::SetFeedURL(const std::string& feed) {
|
||||||
if (g_updater == nil) {
|
if (g_updater == nil) {
|
||||||
AutoUpdaterDelegate* delegate = GetDelegate();
|
Delegate* delegate = GetDelegate();
|
||||||
if (!delegate)
|
if (!delegate)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
@ -67,7 +56,7 @@ void AutoUpdater::SetFeedURL(const std::string& feed) {
|
||||||
|
|
||||||
// static
|
// static
|
||||||
void AutoUpdater::CheckForUpdates() {
|
void AutoUpdater::CheckForUpdates() {
|
||||||
AutoUpdaterDelegate* delegate = GetDelegate();
|
Delegate* delegate = GetDelegate();
|
||||||
if (!delegate)
|
if (!delegate)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
@ -86,8 +75,7 @@ void AutoUpdater::CheckForUpdates() {
|
||||||
base::SysNSStringToUTF8(update.releaseNotes),
|
base::SysNSStringToUTF8(update.releaseNotes),
|
||||||
base::SysNSStringToUTF8(update.releaseName),
|
base::SysNSStringToUTF8(update.releaseName),
|
||||||
base::Time::FromDoubleT(update.releaseDate.timeIntervalSince1970),
|
base::Time::FromDoubleT(update.releaseDate.timeIntervalSince1970),
|
||||||
base::SysNSStringToUTF8(update.updateURL.absoluteString),
|
base::SysNSStringToUTF8(update.updateURL.absoluteString));
|
||||||
base::Bind(RelaunchToInstallUpdate));
|
|
||||||
} else {
|
} else {
|
||||||
// When the completed event is sent with no update, then we know there
|
// When the completed event is sent with no update, then we know there
|
||||||
// is no update available.
|
// is no update available.
|
||||||
|
@ -100,4 +88,12 @@ void AutoUpdater::CheckForUpdates() {
|
||||||
}];
|
}];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void AutoUpdater::QuitAndInstall() {
|
||||||
|
[[g_updater relaunchToInstallUpdate] subscribeError:^(NSError* error) {
|
||||||
|
Delegate* delegate = AutoUpdater::GetDelegate();
|
||||||
|
if (delegate)
|
||||||
|
delegate->OnError(base::SysNSStringToUTF8(error.localizedDescription));
|
||||||
|
}];
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace auto_updater
|
} // namespace auto_updater
|
||||||
|
|
|
@ -1,17 +0,0 @@
|
||||||
// Copyright (c) 2013 GitHub, Inc.
|
|
||||||
// Use of this source code is governed by the MIT license that can be
|
|
||||||
// found in the LICENSE file.
|
|
||||||
|
|
||||||
#include "atom/browser/auto_updater.h"
|
|
||||||
|
|
||||||
namespace auto_updater {
|
|
||||||
|
|
||||||
// static
|
|
||||||
void AutoUpdater::SetFeedURL(const std::string& url) {
|
|
||||||
}
|
|
||||||
|
|
||||||
// static
|
|
||||||
void AutoUpdater::CheckForUpdates() {
|
|
||||||
}
|
|
||||||
|
|
||||||
} // namespace auto_updater
|
|
|
@ -115,10 +115,7 @@
|
||||||
'atom/browser/api/save_page_handler.h',
|
'atom/browser/api/save_page_handler.h',
|
||||||
'atom/browser/auto_updater.cc',
|
'atom/browser/auto_updater.cc',
|
||||||
'atom/browser/auto_updater.h',
|
'atom/browser/auto_updater.h',
|
||||||
'atom/browser/auto_updater_delegate.h',
|
|
||||||
'atom/browser/auto_updater_linux.cc',
|
|
||||||
'atom/browser/auto_updater_mac.mm',
|
'atom/browser/auto_updater_mac.mm',
|
||||||
'atom/browser/auto_updater_win.cc',
|
|
||||||
'atom/browser/atom_access_token_store.cc',
|
'atom/browser/atom_access_token_store.cc',
|
||||||
'atom/browser/atom_access_token_store.h',
|
'atom/browser/atom_access_token_store.h',
|
||||||
'atom/browser/atom_browser_client.cc',
|
'atom/browser/atom_browser_client.cc',
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue