summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHeonjae Jang <heonjae.jang@samsung.com>2018-04-06 13:28:12 +0900
committerHeonjae Jang <heonjae.jang@samsung.com>2018-04-06 13:28:12 +0900
commit96a8a3e1d043677b8ca2449bb7d6bbd5431daa74 (patch)
treef955277d618a9790cd0f5f6774e58c1263eb2026
parentbb05c1ebd62f2b28d4ea465dbeb934c50d0ea33d (diff)
downloadttsd-worker-package-96a8a3e1d043677b8ca2449bb7d6bbd5431daa74.tar.gz
ttsd-worker-package-96a8a3e1d043677b8ca2449bb7d6bbd5431daa74.tar.bz2
ttsd-worker-package-96a8a3e1d043677b8ca2449bb7d6bbd5431daa74.zip
Implements Installer
-rwxr-xr-xCMakeLists.txt1
-rw-r--r--inc/installer.h6
-rwxr-xr-xorg.tizen.package-manager-worker.xml1
-rw-r--r--src/downloader.c4
-rw-r--r--src/installer.c43
5 files changed, 54 insertions, 1 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 7994d82..122a218 100755
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -27,6 +27,7 @@ INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/inc)
SET(SRCS
src/package-manager-worker.c
src/downloader.c
+ src/installer.c
)
ADD_EXECUTABLE(${PROJECT_NAME} ${SRCS})
diff --git a/inc/installer.h b/inc/installer.h
new file mode 100644
index 0000000..fdf22b4
--- /dev/null
+++ b/inc/installer.h
@@ -0,0 +1,6 @@
+#ifndef __INSTALLER_H__
+#define __INSTALLER_H__
+
+void installer_install(char *path);
+
+#endif /* __INSTALLER_H__ */
diff --git a/org.tizen.package-manager-worker.xml b/org.tizen.package-manager-worker.xml
index 753ec97..3c3add5 100755
--- a/org.tizen.package-manager-worker.xml
+++ b/org.tizen.package-manager-worker.xml
@@ -9,5 +9,6 @@
<privilege>http://tizen.org/privilege/network.get</privilege>
<privilege>http://tizen.org/privilege/internet</privilege>
<privilege>http://tizen.org/privilege/externalstorage</privilege>
+ <privilege>http://tizen.org/privilege/packagemanager.admin</privilege>
</privileges>
</manifest>
diff --git a/src/downloader.c b/src/downloader.c
index 5b23491..6dc4340 100644
--- a/src/downloader.c
+++ b/src/downloader.c
@@ -1,4 +1,5 @@
#include "downloader.h"
+#include "installer.h"
#include <app_common.h>
#include <curl/curl.h>
#include <dlog.h>
@@ -28,7 +29,6 @@ void downloader_download(char *path) {
snprintf(downloaded_path, sizeof(downloaded_path) - 1, "%s%s",
data_path, file_name);
free(data_path);
- free(file_name);
data_path = NULL;
file_name = NULL;
@@ -53,5 +53,7 @@ void downloader_download(char *path) {
curl_easy_cleanup(curl);
fclose(fp);
+
+ installer_install(downloaded_path);
}
}
diff --git a/src/installer.c b/src/installer.c
new file mode 100644
index 0000000..176bbf8
--- /dev/null
+++ b/src/installer.c
@@ -0,0 +1,43 @@
+#include "installer.h"
+#include <dlog.h>
+#include <package_manager.h>
+#include <stdio.h>
+#include <tizen.h>
+
+static package_manager_request_h handle;
+
+static void _install_cb(int id, const char *type, const char *package,
+ package_manager_event_type_e event_type,
+ package_manager_event_state_e event_state, int progress,
+ package_manager_error_e error, void *user_data) {
+ if (event_type == PACKAGE_MANAGER_EVENT_TYPE_INSTALL ||
+ event_type == PACKAGE_MANAGER_EVENT_TYPE_UPDATE) {
+ if (event_state == PACKAGE_MANAGER_EVENT_STATE_COMPLETED) {
+ dlog_print(DLOG_DEBUG, "package-manager-worker", "Success");
+ package_manager_request_destroy(handle);
+ } else if (event_state == PACKAGE_MANAGER_EVENT_STATE_FAILED) {
+ dlog_print(DLOG_DEBUG, "package-manager-worker", "Fail");
+ package_manager_request_destroy(handle);
+ }
+ }
+}
+
+void installer_install(char *path) {
+ int ret = 0;
+ int request_id = 0;
+
+ ret = package_manager_request_create(&handle);
+ if (ret != PACKAGE_MANAGER_ERROR_NONE) {
+ dlog_print(DLOG_DEBUG, "package-manager-worker",
+ "Fail create package manager request handle : %d(%s)", ret,
+ get_error_message(ret));
+ return;
+ }
+ ret = package_manager_request_install_with_cb(handle, path, _install_cb,
+ NULL, &request_id);
+ if (ret != PACKAGE_MANAGER_ERROR_NONE) {
+ dlog_print(DLOG_DEBUG, "package-manager-worker",
+ "Fail request package manager install : %d(%s)", ret,
+ get_error_message(ret));
+ }
+} \ No newline at end of file