// Copyright (c) 2013 GitHub, Inc. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "browser/api/atom_api_auto_updater.h" #include "base/time/time.h" #include "base/values.h" #include "browser/auto_updater.h" #include "common/v8/native_type_conversions.h" #include "common/v8/node_common.h" namespace atom { namespace api { AutoUpdater::AutoUpdater(v8::Handle wrapper) : EventEmitter(wrapper) { auto_updater::AutoUpdater::SetDelegate(this); } AutoUpdater::~AutoUpdater() { auto_updater::AutoUpdater::SetDelegate(NULL); } void AutoUpdater::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) { quit_and_install_ = quit_and_install; base::ListValue args; args.AppendString(release_notes); args.AppendString(release_name); args.AppendDouble(release_date.ToJsTime()); args.AppendString(update_url); Emit("update-downloaded-raw", &args); } // static void AutoUpdater::New(const v8::FunctionCallbackInfo& args) { v8::HandleScope handle_scope(args.GetIsolate()); if (!args.IsConstructCall()) return node::ThrowError("Require constructor call"); new AutoUpdater(args.This()); } // static void AutoUpdater::SetFeedURL(const v8::FunctionCallbackInfo& args) { auto_updater::AutoUpdater::SetFeedURL(FromV8Value(args[0])); } // static void AutoUpdater::CheckForUpdates( const v8::FunctionCallbackInfo& args) { auto_updater::AutoUpdater::CheckForUpdates(); } // static void AutoUpdater::QuitAndInstall( const v8::FunctionCallbackInfo& args) { AutoUpdater* self = AutoUpdater::Unwrap(args.This()); self->quit_and_install_.Run(); } // static void AutoUpdater::Initialize(v8::Handle target) { v8::HandleScope handle_scope(v8::Isolate::GetCurrent()); v8::Local 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 atom NODE_MODULE(atom_browser_auto_updater, atom::api::AutoUpdater::Initialize)