Simpilfy auto_updater api.

This commit is contained in:
Cheng Zhao 2014-04-17 17:26:21 +08:00
parent f36569c3b9
commit 8f2b998718
3 changed files with 45 additions and 62 deletions

View file

@ -7,7 +7,8 @@
#include "base/time/time.h" #include "base/time/time.h"
#include "base/values.h" #include "base/values.h"
#include "atom/browser/auto_updater.h" #include "atom/browser/auto_updater.h"
#include "atom/common/v8/native_type_conversions.h" #include "native_mate/dictionary.h"
#include "native_mate/object_template_builder.h"
#include "atom/common/node_includes.h" #include "atom/common/node_includes.h"
@ -15,8 +16,7 @@ namespace atom {
namespace api { namespace api {
AutoUpdater::AutoUpdater(v8::Handle<v8::Object> wrapper) AutoUpdater::AutoUpdater() {
: EventEmitter(wrapper) {
auto_updater::AutoUpdater::SetDelegate(this); auto_updater::AutoUpdater::SetDelegate(this);
} }
@ -27,7 +27,7 @@ AutoUpdater::~AutoUpdater() {
void AutoUpdater::OnError(const std::string& error) { void AutoUpdater::OnError(const std::string& error) {
base::ListValue args; base::ListValue args;
args.AppendString(error); args.AppendString(error);
Emit("error", &args); Emit("error", args);
} }
void AutoUpdater::OnCheckingForUpdate() { void AutoUpdater::OnCheckingForUpdate() {
@ -54,53 +54,40 @@ void AutoUpdater::OnUpdateDownloaded(const std::string& release_notes,
args.AppendString(release_name); args.AppendString(release_name);
args.AppendDouble(release_date.ToJsTime()); args.AppendDouble(release_date.ToJsTime());
args.AppendString(update_url); args.AppendString(update_url);
Emit("update-downloaded-raw", &args); Emit("update-downloaded-raw", args);
}
mate::ObjectTemplateBuilder AutoUpdater::GetObjectTemplateBuilder(
v8::Isolate* isolate) {
return mate::ObjectTemplateBuilder(isolate)
.SetMethod("setFeedUrl", &auto_updater::AutoUpdater::SetFeedURL)
.SetMethod("checkForUpdates", &auto_updater::AutoUpdater::CheckForUpdates)
.SetMethod("quitAndInstall", &AutoUpdater::QuitAndInstall);
}
void AutoUpdater::QuitAndInstall() {
if (!quit_and_install_.is_null())
quit_and_install_.Run();
} }
// static // static
void AutoUpdater::New(const v8::FunctionCallbackInfo<v8::Value>& args) { mate::Handle<AutoUpdater> AutoUpdater::Create(v8::Isolate* isolate) {
if (!args.IsConstructCall()) return CreateHandle(isolate, new AutoUpdater);
return node::ThrowError("Require constructor call");
new AutoUpdater(args.This());
}
// static
void AutoUpdater::SetFeedURL(const v8::FunctionCallbackInfo<v8::Value>& args) {
auto_updater::AutoUpdater::SetFeedURL(FromV8Value(args[0]));
}
// static
void AutoUpdater::CheckForUpdates(
const v8::FunctionCallbackInfo<v8::Value>& args) {
auto_updater::AutoUpdater::CheckForUpdates();
}
// static
void AutoUpdater::QuitAndInstall(
const v8::FunctionCallbackInfo<v8::Value>& args) {
AutoUpdater* self = AutoUpdater::Unwrap<AutoUpdater>(args.This());
if (!self->quit_and_install_.is_null())
self->quit_and_install_.Run();
}
// static
void AutoUpdater::Initialize(v8::Handle<v8::Object> target) {
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, "checkForUpdates", CheckForUpdates);
NODE_SET_PROTOTYPE_METHOD(t, "quitAndInstall", QuitAndInstall);
target->Set(v8::String::NewSymbol("AutoUpdater"), t->GetFunction());
} }
} // namespace api } // namespace api
} // namespace atom } // namespace atom
NODE_MODULE(atom_browser_auto_updater, atom::api::AutoUpdater::Initialize)
namespace {
void Initialize(v8::Handle<v8::Object> exports) {
v8::Isolate* isolate = v8::Isolate::GetCurrent();
mate::Dictionary dict(isolate, exports);
dict.Set("autoUpdater", atom::api::AutoUpdater::Create(isolate));
}
} // namespace
NODE_MODULE(atom_browser_auto_updater, Initialize)

View file

@ -8,23 +8,22 @@
#include <string> #include <string>
#include "base/callback.h" #include "base/callback.h"
#include "base/memory/scoped_ptr.h" #include "atom/browser/api/event_emitter.h"
#include "atom/browser/auto_updater_delegate.h" #include "atom/browser/auto_updater_delegate.h"
#include "atom/common/api/atom_api_event_emitter.h" #include "native_mate/handle.h"
namespace atom { namespace atom {
namespace api { namespace api {
class AutoUpdater : public EventEmitter, class AutoUpdater : public mate::EventEmitter,
public auto_updater::AutoUpdaterDelegate { public auto_updater::AutoUpdaterDelegate {
public: public:
virtual ~AutoUpdater(); static mate::Handle<AutoUpdater> Create(v8::Isolate* isolate);
static void Initialize(v8::Handle<v8::Object> target);
protected: protected:
explicit AutoUpdater(v8::Handle<v8::Object> wrapper); AutoUpdater();
virtual ~AutoUpdater();
// AutoUpdaterDelegate implementations. // AutoUpdaterDelegate implementations.
virtual void OnError(const std::string& error) OVERRIDE; virtual void OnError(const std::string& error) OVERRIDE;
@ -38,14 +37,12 @@ class AutoUpdater : public EventEmitter,
const std::string& update_url, const std::string& update_url,
const base::Closure& quit_and_install) OVERRIDE; const base::Closure& quit_and_install) OVERRIDE;
// mate::Wrappable implementations:
virtual mate::ObjectTemplateBuilder GetObjectTemplateBuilder(
v8::Isolate* isolate);
private: private:
static void New(const v8::FunctionCallbackInfo<v8::Value>& args); void QuitAndInstall();
static void SetFeedURL(const v8::FunctionCallbackInfo<v8::Value>& args);
static void CheckForUpdates(const v8::FunctionCallbackInfo<v8::Value>& args);
static void ContinueUpdate(const v8::FunctionCallbackInfo<v8::Value>& args);
static void QuitAndInstall(const v8::FunctionCallbackInfo<v8::Value>& args);
base::Closure quit_and_install_; base::Closure quit_and_install_;

View file

@ -1,9 +1,8 @@
AutoUpdater = process.atomBinding('auto_updater').AutoUpdater autoUpdater = process.atomBinding('auto_updater').autoUpdater
EventEmitter = require('events').EventEmitter EventEmitter = require('events').EventEmitter
AutoUpdater::__proto__ = EventEmitter.prototype autoUpdater.__proto__ = EventEmitter.prototype
autoUpdater = new AutoUpdater
autoUpdater.on 'update-downloaded-raw', (args...) -> autoUpdater.on 'update-downloaded-raw', (args...) ->
args[3] = new Date(args[3]) # releaseDate args[3] = new Date(args[3]) # releaseDate
@emit 'update-downloaded', args..., => @quitAndInstall() @emit 'update-downloaded', args..., => @quitAndInstall()