From e42433cf9ae7e2863ce3205bf9dace4183212c53 Mon Sep 17 00:00:00 2001 From: Cheng Zhao Date: Tue, 15 Apr 2014 15:41:26 +0800 Subject: [PATCH] Use native_mate to simplify shell API. --- atom.gyp | 1 - atom/common/api/atom_api_shell.cc | 106 +++++++++++++++--------------- atom/common/api/atom_api_shell.h | 33 ---------- vendor/native_mate | 2 +- 4 files changed, 53 insertions(+), 89 deletions(-) delete mode 100644 atom/common/api/atom_api_shell.h diff --git a/atom.gyp b/atom.gyp index e637a4d691d..b4caea84d89 100644 --- a/atom.gyp +++ b/atom.gyp @@ -153,7 +153,6 @@ 'atom/common/api/atom_api_screen.cc', 'atom/common/api/atom_api_screen.h', 'atom/common/api/atom_api_shell.cc', - 'atom/common/api/atom_api_shell.h', 'atom/common/api/atom_api_v8_util.cc', 'atom/common/api/atom_bindings.cc', 'atom/common/api/atom_bindings.h', diff --git a/atom/common/api/atom_api_shell.cc b/atom/common/api/atom_api_shell.cc index bae608982c8..222e086c833 100644 --- a/atom/common/api/atom_api_shell.cc +++ b/atom/common/api/atom_api_shell.cc @@ -7,68 +7,66 @@ #include #include "atom/common/platform_util.h" -#include "atom/common/v8/native_type_conversions.h" #include "base/files/file_path.h" +#include "native_mate/object_template_builder.h" #include "url/gurl.h" #include "atom/common/v8/node_common.h" -namespace atom { +namespace mate { -namespace api { +template<> +struct Converter { + static v8::Handle ToV8(v8::Isolate* isolate, + const GURL& val) { + return Converter::ToV8(isolate, val.spec()); + } + static bool FromV8(v8::Isolate* isolate, + v8::Handle val, + GURL* out) { + std::string url; + if (Converter::FromV8(isolate, val, &url)) { + *out = GURL(url); + return true; + } else { + return false; + } + } +}; -// static -void Shell::ShowItemInFolder(const v8::FunctionCallbackInfo& args) { - base::FilePath file_path; - if (!FromV8Arguments(args, &file_path)) - return node::ThrowTypeError("Bad argument"); +template<> +struct Converter { + static v8::Handle ToV8(v8::Isolate* isolate, + const base::FilePath& val) { + return Converter::ToV8(isolate, val.AsUTF8Unsafe()); + } + static bool FromV8(v8::Isolate* isolate, + v8::Handle val, + base::FilePath* out) { + std::string path; + if (Converter::FromV8(isolate, val, &path)) { + *out = base::FilePath::FromUTF8Unsafe(path); + return true; + } else { + return false; + } + } +}; - platform_util::ShowItemInFolder(file_path); +} // namespace mate + +namespace { + +void Initialize(v8::Handle exports) { + mate::ObjectTemplateBuilder builder(v8::Isolate::GetCurrent()); + builder.SetMethod("showItemInFolder", &platform_util::ShowItemInFolder) + .SetMethod("openItem", &platform_util::OpenItem) + .SetMethod("openExternal", &platform_util::OpenExternal) + .SetMethod("moveItemToTrash", &platform_util::MoveItemToTrash) + .SetMethod("beep", &platform_util::Beep); + exports->SetPrototype(builder.Build()->NewInstance()); } -// static -void Shell::OpenItem(const v8::FunctionCallbackInfo& args) { - base::FilePath file_path; - if (!FromV8Arguments(args, &file_path)) - return node::ThrowTypeError("Bad argument"); +} // namespace - platform_util::OpenItem(file_path); -} - -// static -void Shell::OpenExternal(const v8::FunctionCallbackInfo& args) { - GURL url; - if (!FromV8Arguments(args, &url)) - return node::ThrowTypeError("Bad argument"); - - platform_util::OpenExternal(url); -} - -// static -void Shell::MoveItemToTrash(const v8::FunctionCallbackInfo& args) { - base::FilePath file_path; - if (!FromV8Arguments(args, &file_path)) - return node::ThrowTypeError("Bad argument"); - - platform_util::MoveItemToTrash(file_path); -} - -// static -void Shell::Beep(const v8::FunctionCallbackInfo& args) { - platform_util::Beep(); -} - -// static -void Shell::Initialize(v8::Handle target) { - NODE_SET_METHOD(target, "showItemInFolder", ShowItemInFolder); - NODE_SET_METHOD(target, "openItem", OpenItem); - NODE_SET_METHOD(target, "openExternal", OpenExternal); - NODE_SET_METHOD(target, "moveItemToTrash", MoveItemToTrash); - NODE_SET_METHOD(target, "beep", Beep); -} - -} // namespace api - -} // namespace atom - -NODE_MODULE(atom_common_shell, atom::api::Shell::Initialize) +NODE_MODULE(atom_common_shell, Initialize) diff --git a/atom/common/api/atom_api_shell.h b/atom/common/api/atom_api_shell.h deleted file mode 100644 index 7a35bb2787a..00000000000 --- a/atom/common/api/atom_api_shell.h +++ /dev/null @@ -1,33 +0,0 @@ -// 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. - -#ifndef ATOM_COMMON_API_ATOM_API_SHELL_H_ -#define ATOM_COMMON_API_ATOM_API_SHELL_H_ - -#include "base/basictypes.h" -#include "v8/include/v8.h" - -namespace atom { - -namespace api { - -class Shell { - public: - static void Initialize(v8::Handle target); - - private: - static void ShowItemInFolder(const v8::FunctionCallbackInfo& args); - static void OpenItem(const v8::FunctionCallbackInfo& args); - static void OpenExternal(const v8::FunctionCallbackInfo& args); - static void MoveItemToTrash(const v8::FunctionCallbackInfo& args); - static void Beep(const v8::FunctionCallbackInfo& args); - - DISALLOW_IMPLICIT_CONSTRUCTORS(Shell); -}; - -} // namespace api - -} // namespace atom - -#endif // ATOM_COMMON_API_ATOM_API_SHELL_H_ diff --git a/vendor/native_mate b/vendor/native_mate index 4cada31f808..78ab726ec7b 160000 --- a/vendor/native_mate +++ b/vendor/native_mate @@ -1 +1 @@ -Subproject commit 4cada31f808994b297439dff429638debc4a4ee9 +Subproject commit 78ab726ec7b14ecea6240a684002c6910561ef5c