Add auto-updater module.

This commit is contained in:
Cheng Zhao 2013-06-03 17:59:34 +08:00
parent 7f605c8442
commit 1f8fd40195
5 changed files with 119 additions and 0 deletions

View file

@ -11,6 +11,7 @@
'coffee_sources': [ 'coffee_sources': [
'browser/api/lib/app.coffee', 'browser/api/lib/app.coffee',
'browser/api/lib/atom-delegate.coffee', 'browser/api/lib/atom-delegate.coffee',
'browser/api/lib/auto-updater.coffee',
'browser/api/lib/browser-window.coffee', 'browser/api/lib/browser-window.coffee',
'browser/api/lib/crash-reporter.coffee', 'browser/api/lib/crash-reporter.coffee',
'browser/api/lib/dialog.coffee', 'browser/api/lib/dialog.coffee',
@ -35,6 +36,8 @@
'browser/accelerator_util_mac.mm', 'browser/accelerator_util_mac.mm',
'browser/api/atom_api_app.cc', 'browser/api/atom_api_app.cc',
'browser/api/atom_api_app.h', 'browser/api/atom_api_app.h',
'browser/api/atom_api_auto_updater.cc',
'browser/api/atom_api_auto_updater.h',
'browser/api/atom_api_browser_ipc.cc', 'browser/api/atom_api_browser_ipc.cc',
'browser/api/atom_api_browser_ipc.h', 'browser/api/atom_api_browser_ipc.h',
'browser/api/atom_api_crash_reporter.h', 'browser/api/atom_api_crash_reporter.h',

View file

@ -4,6 +4,7 @@
#include "browser/api/atom_api_auto_updater.h" #include "browser/api/atom_api_auto_updater.h"
#include "base/values.h"
#include "browser/auto_updater.h" #include "browser/auto_updater.h"
namespace atom { namespace atom {
@ -12,14 +13,104 @@ namespace api {
AutoUpdater::AutoUpdater(v8::Handle<v8::Object> wrapper) AutoUpdater::AutoUpdater(v8::Handle<v8::Object> wrapper)
: EventEmitter(wrapper) { : EventEmitter(wrapper) {
auto_updater::AutoUpdater::SetDelegate(this);
auto_updater::AutoUpdater::Init();
} }
AutoUpdater::~AutoUpdater() { AutoUpdater::~AutoUpdater() {
auto_updater::AutoUpdater::SetDelegate(NULL);
}
void AutoUpdater::WillInstallUpdate(const std::string& version,
const base::Closure& install) {
base::ListValue args;
args.AppendString(version);
bool prevent_default = Emit("will-install-update", &args);
if (prevent_default)
continue_update_ = install;
else
install.Run();
}
// static
v8::Handle<v8::Value> AutoUpdater::New(const v8::Arguments &args) {
v8::HandleScope scope;
if (!args.IsConstructCall())
return node::ThrowError("Require constructor call");
new AutoUpdater(args.This());
return args.This();
}
// static
v8::Handle<v8::Value> AutoUpdater::SetFeedURL(const v8::Arguments &args) {
auto_updater::AutoUpdater::SetFeedURL(*v8::String::Utf8Value(args[0]));
return v8::Undefined();
}
// static
v8::Handle<v8::Value> AutoUpdater::SetAutomaticallyChecksForUpdates(
const v8::Arguments &args) {
auto_updater::AutoUpdater::SetAutomaticallyChecksForUpdates(
args[0]->BooleanValue());
return v8::Undefined();
}
// static
v8::Handle<v8::Value> AutoUpdater::SetAutomaticallyDownloadsUpdates(
const v8::Arguments &args) {
auto_updater::AutoUpdater::SetAutomaticallyDownloadsUpdates(
args[0]->BooleanValue());
return v8::Undefined();
}
// static
v8::Handle<v8::Value> AutoUpdater::CheckForUpdates(const v8::Arguments &args) {
auto_updater::AutoUpdater::CheckForUpdates();
return v8::Undefined();
}
// static
v8::Handle<v8::Value> AutoUpdater::CheckForUpdatesInBackground(
const v8::Arguments &args) {
auto_updater::AutoUpdater::CheckForUpdatesInBackground();
return v8::Undefined();
}
// static
v8::Handle<v8::Value> AutoUpdater::ContinueUpdate(const v8::Arguments &args) {
AutoUpdater* self = AutoUpdater::Unwrap<AutoUpdater>(args.This());
self->continue_update_.Run();
return v8::Undefined();
} }
// static // static
void AutoUpdater::Initialize(v8::Handle<v8::Object> target) { void AutoUpdater::Initialize(v8::Handle<v8::Object> target) {
v8::HandleScope scope; v8::HandleScope scope;
v8::Local<v8::FunctionTemplate> t(
v8::FunctionTemplate::New(AutoUpdater::New));
t->InstanceTemplate()->SetInternalFieldCount(1);
t->SetClassName(v8::String::NewSymbol("AutoUpdater"));
NODE_SET_PROTOTYPE_METHOD(t, "setFeedUrl", SetFeedURL);
NODE_SET_PROTOTYPE_METHOD(t,
"setAutomaticallyChecksForUpdates",
SetAutomaticallyChecksForUpdates);
NODE_SET_PROTOTYPE_METHOD(t,
"setAutomaticallyDownloadsUpdates",
SetAutomaticallyDownloadsUpdates);
NODE_SET_PROTOTYPE_METHOD(t, "checkForUpdates", CheckForUpdates);
NODE_SET_PROTOTYPE_METHOD(t,
"checkForUpdatesInBackground",
CheckForUpdatesInBackground);
NODE_SET_PROTOTYPE_METHOD(t, "continueUpdate", ContinueUpdate);
target->Set(v8::String::NewSymbol("AutoUpdater"), t->GetFunction());
} }
} // namespace api } // namespace api

View file

@ -5,6 +5,8 @@
#ifndef ATOM_BROWSER_API_ATOM_API_AUTO_UPDATER_H_ #ifndef ATOM_BROWSER_API_ATOM_API_AUTO_UPDATER_H_
#define ATOM_BROWSER_API_ATOM_API_AUTO_UPDATER_H_ #define ATOM_BROWSER_API_ATOM_API_AUTO_UPDATER_H_
#include "base/callback.h"
#include "base/memory/scoped_ptr.h"
#include "browser/api/atom_api_event_emitter.h" #include "browser/api/atom_api_event_emitter.h"
#include "browser/auto_updater_delegate.h" #include "browser/auto_updater_delegate.h"
@ -22,9 +24,25 @@ class AutoUpdater : public EventEmitter,
protected: protected:
explicit AutoUpdater(v8::Handle<v8::Object> wrapper); explicit AutoUpdater(v8::Handle<v8::Object> wrapper);
virtual void WillInstallUpdate(const std::string& version,
const base::Closure& install) OVERRIDE;
private: private:
static v8::Handle<v8::Value> New(const v8::Arguments &args); static v8::Handle<v8::Value> New(const v8::Arguments &args);
static v8::Handle<v8::Value> SetFeedURL(const v8::Arguments &args);
static v8::Handle<v8::Value> SetAutomaticallyChecksForUpdates(
const v8::Arguments &args);
static v8::Handle<v8::Value> SetAutomaticallyDownloadsUpdates(
const v8::Arguments &args);
static v8::Handle<v8::Value> CheckForUpdates(const v8::Arguments &args);
static v8::Handle<v8::Value> CheckForUpdatesInBackground(
const v8::Arguments &args);
static v8::Handle<v8::Value> ContinueUpdate(const v8::Arguments &args);
base::Closure continue_update_;
DISALLOW_COPY_AND_ASSIGN(AutoUpdater); DISALLOW_COPY_AND_ASSIGN(AutoUpdater);
}; };

View file

@ -0,0 +1,6 @@
AutoUpdater = process.atomBinding('auto_updater').AutoUpdater
EventEmitter = require('events').EventEmitter
AutoUpdater::__proto__ = EventEmitter.prototype
module.exports = new AutoUpdater

View file

@ -10,6 +10,7 @@ NODE_EXT_LIST_START
// Module names start with `atom_browser_` can only be used by browser process. // Module names start with `atom_browser_` can only be used by browser process.
NODE_EXT_LIST_ITEM(atom_browser_app) NODE_EXT_LIST_ITEM(atom_browser_app)
NODE_EXT_LIST_ITEM(atom_browser_auto_updater)
NODE_EXT_LIST_ITEM(atom_browser_crash_reporter) NODE_EXT_LIST_ITEM(atom_browser_crash_reporter)
NODE_EXT_LIST_ITEM(atom_browser_dialog) NODE_EXT_LIST_ITEM(atom_browser_dialog)
NODE_EXT_LIST_ITEM(atom_browser_ipc) NODE_EXT_LIST_ITEM(atom_browser_ipc)