1 // Copyright (c) 2013 Intel Corporation. All rights reserved.
2 // Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved
3 // Use of this source code is governed by a BSD-style license that can be
4 // found in the LICENSE file.
13 #include "base/at_exit.h"
14 #include "base/files/file_util.h"
15 #include "base/memory/scoped_ptr.h"
16 #include "base/path_service.h"
17 #include "xwalk/application/common/id_util.h"
18 #include "xwalk/application/common/tizen/application_storage.h"
19 #include "xwalk/application/tools/linux/dbus_connection.h"
20 #include "xwalk/application/tools/tizen/xwalk_package_installer.h"
21 #include "xwalk/application/tools/tizen/xwalk_tizen_user.h"
22 #include "xwalk/runtime/common/xwalk_paths.h"
24 using xwalk::application::ApplicationData;
25 using xwalk::application::ApplicationStorage;
29 char* install_path = NULL;
30 char* uninstall_id = NULL;
31 char* reinstall_id = NULL;
32 char* operation_key = NULL;
35 gboolean continue_tasks = FALSE;
37 GOptionEntry entries[] = {
38 { "install", 'i', 0, G_OPTION_ARG_STRING, &install_path,
39 "Path of the application to be installed/updated", "PATH" },
40 { "uninstall", 'd', 0, G_OPTION_ARG_STRING, &uninstall_id,
41 "Uninstall the application with this pkgid", "ID" },
42 { "continue", 'c' , 0, G_OPTION_ARG_NONE, &continue_tasks,
43 "Continue the previous unfinished tasks", NULL},
44 { "reinstall", 'r', 0, G_OPTION_ARG_STRING, &reinstall_id,
45 "Reinstall the application with this pkgid "
46 "(This option is ONLY for SDK to support RDS mode"
47 " (Rapid Development Support)", "ID" },
48 { "key", 'k', 0, G_OPTION_ARG_STRING, &operation_key,
49 "Unique operation key", "KEY" },
50 { "quiet", 'q', 0, G_OPTION_ARG_NONE, &quiet,
57 int main(int argc, char* argv[]) {
59 GOptionContext* context;
62 #if !GLIB_CHECK_VERSION(2, 36, 0)
63 // g_type_init() is deprecated on GLib since 2.36, Tizen has 2.32.
67 if (xwalk_tizen_check_user_for_xwalk_backend())
70 context = g_option_context_new("- Crosswalk Application Management");
72 g_print("g_option_context_new failed\n");
75 g_option_context_add_main_entries(context, entries, NULL);
76 if (!g_option_context_parse(context, &argc, &argv, &error)) {
77 g_print("option parsing failed: %s\n", error->message);
78 g_option_context_free(context);
82 g_option_context_free(context);
84 base::AtExitManager at_exit;
85 base::FilePath data_path;
86 xwalk::RegisterPathProvider();
87 PathService::Get(xwalk::DIR_DATA_PATH, &data_path);
88 scoped_ptr<ApplicationStorage> storage(new ApplicationStorage(data_path));
89 scoped_ptr<PackageInstaller> installer =
90 PackageInstaller::Create(storage.get());
92 installer->SetQuiet(static_cast<bool>(quiet));
94 installer->SetInstallationKey(operation_key);
97 g_print("trying to continue previous unfinished tasks.\n");
98 installer->ContinueUnfinishedTasks();
100 g_print("Previous tasks have been finished.\n");
105 const base::FilePath& path =
106 base::MakeAbsoluteFilePath(base::FilePath(install_path));
107 success = installer->Install(path, &app_id);
108 if (!success && !app_id.empty() && storage->Contains(app_id)) {
109 g_print("trying to update %s\n", app_id.c_str());
110 success = installer->Update(app_id, path);
112 } else if (uninstall_id) {
113 success = installer->Uninstall(uninstall_id);
114 } else if (reinstall_id) {
115 success = installer->Reinstall(reinstall_id);
117 return success ? 0 : 1;