[Release] wrt-installer_0.1.37
[framework/web/wrt-installer.git] / src / pkg-manager / backendlib.cpp
index 60eb9b0..497bf3f 100644 (file)
@@ -98,23 +98,23 @@ static int pkg_plugin_app_is_installed(const char *pkg_name)
 
     WrtDB::TizenAppId appid;
 
-    if ((regexec(&reg, pkg_name,
+    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);
+        LogError("Invalid argument : " << pkg_name);
+        return FALSE;
     }
 
-    bool result = WidgetDAOReadOnly::isWidgetInstalled(appid);
-    WrtDB::WrtDatabase::detachFromThread();
-
-    if (result) {
-        return TRUE;
-    } else {
+    Try {
+        WrtDB::TizenPkgId pkgid(DPL::FromUTF8String(pkg_name));
+        appid = WidgetDAOReadOnly::getTzAppId(pkgid);
+        LogDebug("appid : " << appid);
+    } Catch(WidgetDAOReadOnly::Exception::WidgetNotExist) {
+        WrtDB::WrtDatabase::detachFromThread();
         return FALSE;
     }
+    WrtDB::WrtDatabase::detachFromThread();
+    return TRUE;
 }
 
 static int pkg_plugin_get_installed_apps_list(const char * /*category*/,
@@ -173,9 +173,18 @@ static int pkg_plugin_get_app_detail_info(
     LogDebug("pkg_plugin_get_app_detail_info() is called");
 
     WrtDB::WrtDatabase::attachToThreadRO();
-    int handle = WidgetDAOReadOnly::getHandle(
-            DPL::FromUTF8String(pkg_name));
-    WidgetDAOReadOnly widget(handle);
+
+    WrtDB::TizenAppId appid;
+    Try {
+        WrtDB::TizenPkgId pkgid(DPL::FromUTF8String(pkg_name));
+        appid = WidgetDAOReadOnly::getTzAppId(pkgid);
+        LogDebug("appid : " << appid);
+    } Catch(WidgetDAOReadOnly::Exception::WidgetNotExist) {
+        WrtDB::WrtDatabase::detachFromThread();
+        return FALSE;
+    }
+
+    WidgetDAOReadOnly widget(appid);
 
     DPL::Optional<DPL::String> version = widget.getVersion();
     DPL::Optional<DPL::String> id = widget.getGUID();
@@ -186,12 +195,14 @@ static int pkg_plugin_get_app_detail_info(
                 DPL::ToUTF8String(*version).c_str(),
                 PKG_VERSION_STRING_LEN_MAX - 1);
     }
-    snprintf(pkg_detail_info->optional_id, PKG_NAME_STRING_LEN_MAX, "%d",
-             handle);
+    snprintf(pkg_detail_info->pkgid, PKG_NAME_STRING_LEN_MAX, "%s",
+             pkg_name);
+    snprintf(pkg_detail_info->optional_id, PKG_NAME_STRING_LEN_MAX, "%s",
+             DPL::ToUTF8String(appid).c_str());
     WidgetLocalizedInfo localizedInfo;
 
     if (locale.IsNull()) {
-        LogError("is NULL");
+        LogDebug("locale is NULL");
         DPL::String languageTag(L"");
         localizedInfo = widget.getLocalizedInfo(languageTag);
     } else {
@@ -207,6 +218,11 @@ static int pkg_plugin_get_app_detail_info(
     strncpy(pkg_detail_info->pkg_type, "wgt", PKG_TYPE_STRING_LEN_MAX);
     strncpy(pkg_detail_info->pkg_name, pkg_name, PKG_NAME_STRING_LEN_MAX - 1);
 
+    std::string min_version = DPL::ToUTF8String((*widget.getMinimumWacVersion()));
+
+    strncpy(pkg_detail_info->min_platform_version, min_version.c_str(),
+            PKG_VERSION_STRING_LEN_MAX - 1);
+
     /* set installed time */
     pkg_detail_info->installed_time = widget.getInstallTime();
 
@@ -349,6 +365,11 @@ int getWidgetDetailInfoFromPackage(const char* pkgPath,
         strncpy(pkg_detail_info->pkgid,
                 DPL::ToUTF8String(*configInfo.tizenPkgId).c_str(), PKG_TYPE_STRING_LEN_MAX - 1);
     }
+    if (!configInfo.tizenAppId.IsNull()) {
+        strncpy(pkg_detail_info->pkg_name,
+                DPL::ToUTF8String(*configInfo.tizenAppId).c_str(),
+                PKG_NAME_STRING_LEN_MAX - 1);
+    }
     if (!configInfo.version.IsNull()) {
         strncpy(pkg_detail_info->version,
                 DPL::ToUTF8String(*configInfo.version).c_str(),
@@ -376,7 +397,8 @@ int getWidgetDetailInfoFromPackage(const char* pkgPath,
     }
 
     if( !name.IsNull()) {
-        strncpy(pkg_detail_info->pkg_name, DPL::ToUTF8String(*name).c_str(), PKG_NAME_STRING_LEN_MAX - 1);
+        strncpy(pkg_detail_info->label, DPL::ToUTF8String(*name).c_str(),
+                PKG_LABEL_STRING_LEN_MAX - 1);
     }
 
     if (!desc.IsNull()) {
@@ -388,7 +410,7 @@ int getWidgetDetailInfoFromPackage(const char* pkgPath,
     if (!configInfo.tizenMinVersionRequired.IsNull()) {
         strncpy(pkg_detail_info->min_platform_version,
                 DPL::ToUTF8String(*configInfo.tizenMinVersionRequired).c_str(),
-                PKG_VERSION_STRING_LEN_MAX);
+                PKG_VERSION_STRING_LEN_MAX - 1);
     }
 
     if (!configInfo.authorName.IsNull()) {
@@ -397,28 +419,28 @@ int getWidgetDetailInfoFromPackage(const char* pkgPath,
                 PKG_VALUE_STRING_LEN_MAX - 1);
     }
 
-    std::string icon_name;
+    GList *privilege_list = pkg_detail_info->privilege_list;
 
+    FOREACH(it, configInfo.featuresList) {
+        std::string featureInfo =  DPL::ToUTF8String(it->name);
+        LogDebug("privilege : " << featureInfo);
+        int length = featureInfo.size();
+        char *privilege = (char*) calloc(1, (sizeof(char) * (length + 1)));
+        snprintf(privilege, length + 1, "%s", featureInfo.c_str());
+        privilege_list = g_list_append(privilege_list, &privilege);
+    }
+
+    std::string icon_name;
     FOREACH(i, configInfo.iconsList) {
         LogDebug("icon name: " << i->src);
         icon_name = DPL::ToUTF8String(i->src);
         break;
     }
+
     pkg_detail_info->icon_buf = getIconInfo(widget_path, icon_name,
             pkg_detail_info->icon_size);
     LogDebug("icon size : " << pkg_detail_info->icon_size);
 
-    GList *privilege_list = NULL;
-    FOREACH(it, configInfo.featuresList) {
-        LogDebug("privilege : " << it->name);
-        int length = DPL::ToUTF8String(it->name).length();
-        char *privilege = (char*) calloc(1, (sizeof(char) * length) + 1);
-        snprintf(privilege, length + 1, "%s",
-                DPL::ToUTF8String(it->name).c_str());
-        privilege_list = g_list_append(privilege_list, privilege);
-    }
-    pkg_detail_info->privilege_list = privilege_list;
-
     return TRUE;
 }
 
@@ -433,8 +455,10 @@ static int pkg_plugin_get_app_detail_info_from_package(
 pkgmgr_info *pkgmgr_client_check_pkginfo_from_file(const char *pkg_path)
 {
     LogDebug("pkgmgr_client_check_pkginfo_from_file() is called");
-    package_manager_pkg_detail_info_t pkg_detail_info;
-    int ret = getWidgetDetailInfoFromPackage(pkg_path, &pkg_detail_info);
+    package_manager_pkg_detail_info_t *pkg_detail_info;
+    pkg_detail_info = (package_manager_pkg_detail_info_t*)malloc(
+            sizeof(package_manager_pkg_detail_info_t));
+    int ret = getWidgetDetailInfoFromPackage(pkg_path, pkg_detail_info);
     if (FALSE == ret) {
         LogError("Failed to get package detail info ");
         return NULL;