[Release]wrt-installer_0.1.6
[framework/web/wrt-installer.git] / src / pkg-manager / backendlib.cpp
index 685f371..37952c1 100644 (file)
@@ -23,6 +23,7 @@
  *             to package manager
  */
 #include "package-manager-plugin.h"
+#include <regex.h>
 #include <dlog.h>
 #include <dpl/wrt-dao-ro/global_config.h>
 #include <vcore/VCore.h>
@@ -43,7 +44,7 @@ using namespace WrtDB;
 #undef FALSE
 #define TRUE 0
 #define FALSE -1
-#define GET_DIRECTORY_SIZE_KB(x)    (x)/1024
+#define GET_DIRECTORY_SIZE_KB(x)    (x) / 1024
 
 #ifdef __cplusplus
 extern "C"
@@ -53,11 +54,17 @@ extern "C"
 static void pkg_native_plugin_on_unload();
 static int pkg_plugin_app_is_installed(const char *pkg_name);
 static int pkg_plugin_get_installed_apps_list(const char *category,
-        const char *option, package_manager_pkg_info_t **list, int *count);
-static int pkg_plugin_get_app_detail_info(const char *pkg_name,
-        package_manager_pkg_detail_info_t *pkg_detail_info);
-static int pkg_plugin_get_app_detail_info_from_package(const char *pkg_path,
-        package_manager_pkg_detail_info_t *pkg_detail_info);
+                                              const char *option,
+                                              package_manager_pkg_info_t **list,
+                                              int *count);
+static int pkg_plugin_get_app_detail_info(
+    const char *pkg_name,
+    package_manager_pkg_detail_info_t *
+    pkg_detail_info);
+static int pkg_plugin_get_app_detail_info_from_package(
+    const char *pkg_path,
+    package_manager_pkg_detail_info_t
+    *pkg_detail_info);
 
 static void pkg_native_plugin_on_unload()
 {
@@ -66,12 +73,28 @@ static void pkg_native_plugin_on_unload()
 
 static int pkg_plugin_app_is_installed(const char *pkg_name)
 {
+    const char* REG_PKGID_PATTERN = "^[a-zA-Z0-9]{10}$";
     LogDebug("pkg_plugin_app_is_installed() is called");
 
     WrtDB::WrtDatabase::attachToThreadRO();
 
-    bool result = WidgetDAOReadOnly::isWidgetInstalled(
-                    DPL::FromUTF8String(pkg_name));
+    regex_t reg;
+    if (regcomp(&reg, REG_PKGID_PATTERN, REG_NOSUB | REG_EXTENDED) != 0) {
+        LogDebug("Regcomp failed");
+    }
+
+    WrtDB::TizenAppId appid;
+
+    if ((regexec(&reg, pkg_name,
+                    static_cast<size_t>(0), NULL, 0) == 0))
+    {
+        WrtDB::TizenPkgId pkgid(DPL::FromUTF8String(pkg_name));
+        appid = WidgetDAOReadOnly::getTzAppId(pkgid);
+    } else {
+        appid = DPL::FromUTF8String(pkg_name);
+    }
+
+    bool result = WidgetDAOReadOnly::isWidgetInstalled(appid);
     WrtDB::WrtDatabase::detachFromThread();
 
     if (result) {
@@ -82,19 +105,20 @@ static int pkg_plugin_app_is_installed(const char *pkg_name)
 }
 
 static int pkg_plugin_get_installed_apps_list(const char * /*category*/,
-        const char * /*option*/, package_manager_pkg_info_t **list, int *count)
+                                              const char * /*option*/,
+                                              package_manager_pkg_info_t **list,
+                                              int *count)
 {
     LogDebug("pkg_plugin_get_installed_apps_list() is called");
 
     package_manager_pkg_info_t *pkg_list = NULL;
     package_manager_pkg_info_t *pkg_last = NULL;
 
-
     WrtDB::WrtDatabase::attachToThreadRO();
-    WidgetPkgNameList_TEMPORARY_API pkgnameslList = WidgetDAOReadOnly::getPkgnameList_TEMPORARY_API();
+    TizenAppIdList tizenAppidList = WidgetDAOReadOnly::getTizenAppidList();
     *count = 0;
 
-    FOREACH(iterator, pkgnameslList) {
+    FOREACH(iterator, tizenAppidList) {
         package_manager_pkg_info_t *pkg_info =
             static_cast<package_manager_pkg_info_t*>
             (malloc(sizeof(package_manager_pkg_info_t)));
@@ -106,11 +130,11 @@ static int pkg_plugin_get_installed_apps_list(const char * /*category*/,
             pkg_last->next = pkg_info;
         }
 
-        WidgetPkgName pkgname = *iterator;
-        WidgetDAOReadOnly widget(pkgname);
+        TizenAppId tzAppid = *iterator;
+        WidgetDAOReadOnly widget(tzAppid);
         strncpy(pkg_info->pkg_type, "wgt", PKG_TYPE_STRING_LEN_MAX);
         snprintf(pkg_info->pkg_name, PKG_NAME_STRING_LEN_MAX, "%s",
-                DPL::ToUTF8String(pkgname).c_str());
+                 DPL::ToUTF8String(tzAppid).c_str());
 
         DPL::Optional<DPL::String> version = widget.getVersion();
         if (!version.IsNull()) {
@@ -128,15 +152,16 @@ static int pkg_plugin_get_installed_apps_list(const char * /*category*/,
     return TRUE;
 }
 
-static int pkg_plugin_get_app_detail_info(const char *pkg_name,
-        package_manager_pkg_detail_info_t *pkg_detail_info)
+static int pkg_plugin_get_app_detail_info(
+    const char *pkg_name,
+    package_manager_pkg_detail_info_t *
+    pkg_detail_info)
 {
     LogDebug("pkg_plugin_get_app_detail_info() is called");
 
-
     WrtDB::WrtDatabase::attachToThreadRO();
     int handle = WidgetDAOReadOnly::getHandle(
-                    DPL::FromUTF8String(pkg_name));
+            DPL::FromUTF8String(pkg_name));
     WidgetDAOReadOnly widget(handle);
 
     DPL::Optional<DPL::String> version = widget.getVersion();
@@ -149,7 +174,7 @@ static int pkg_plugin_get_app_detail_info(const char *pkg_name,
                 PKG_VERSION_STRING_LEN_MAX - 1);
     }
     snprintf(pkg_detail_info->optional_id, PKG_NAME_STRING_LEN_MAX, "%d",
-           handle);
+             handle);
     WidgetLocalizedInfo localizedInfo;
 
     if (locale.IsNull()) {
@@ -197,8 +222,8 @@ static int pkg_plugin_get_app_detail_info(const char *pkg_name,
 }
 
 static int pkg_plugin_get_app_detail_info_from_package(
-        const char * /*pkg_path*/,
-        package_manager_pkg_detail_info_t * /*pkg_detail_info*/)
+    const char * /*pkg_path*/,
+    package_manager_pkg_detail_info_t * /*pkg_detail_info*/)
 {
     LogDebug("pkg_plugin_get_app_detail_info_from_package() is called");