consider an extra icon_path for only RO package
[platform/core/appfw/pkgmgr-info.git] / src / pkgmgrinfo_private.c
index 948a119..3c3c23a 100644 (file)
@@ -40,14 +40,14 @@ struct _pkginfo_str_map_t {
 };
 
 static struct _pkginfo_str_map_t pkginfo_str_prop_map[] = {
-       {E_PMINFO_PKGINFO_PROP_PACKAGE_ID,              PMINFO_PKGINFO_PROP_PACKAGE_ID},
-       {E_PMINFO_PKGINFO_PROP_PACKAGE_TYPE,            PMINFO_PKGINFO_PROP_PACKAGE_TYPE},
-       {E_PMINFO_PKGINFO_PROP_PACKAGE_VERSION,         PMINFO_PKGINFO_PROP_PACKAGE_VERSION},
-       {E_PMINFO_PKGINFO_PROP_PACKAGE_INSTALL_LOCATION,PMINFO_PKGINFO_PROP_PACKAGE_INSTALL_LOCATION},
-       {E_PMINFO_PKGINFO_PROP_PACKAGE_INSTALLED_STORAGE,PMINFO_PKGINFO_PROP_PACKAGE_INSTALLED_STORAGE},
-       {E_PMINFO_PKGINFO_PROP_PACKAGE_AUTHOR_NAME,     PMINFO_PKGINFO_PROP_PACKAGE_AUTHOR_NAME},
-       {E_PMINFO_PKGINFO_PROP_PACKAGE_AUTHOR_EMAIL,    PMINFO_PKGINFO_PROP_PACKAGE_AUTHOR_EMAIL},
-       {E_PMINFO_PKGINFO_PROP_PACKAGE_AUTHOR_HREF,     PMINFO_PKGINFO_PROP_PACKAGE_AUTHOR_HREF},
+       {E_PMINFO_PKGINFO_PROP_PACKAGE_ID,      PMINFO_PKGINFO_PROP_PACKAGE_ID},
+       {E_PMINFO_PKGINFO_PROP_PACKAGE_TYPE,    PMINFO_PKGINFO_PROP_PACKAGE_TYPE},
+       {E_PMINFO_PKGINFO_PROP_PACKAGE_VERSION, PMINFO_PKGINFO_PROP_PACKAGE_VERSION},
+       {E_PMINFO_PKGINFO_PROP_PACKAGE_INSTALL_LOCATION,        PMINFO_PKGINFO_PROP_PACKAGE_INSTALL_LOCATION},
+       {E_PMINFO_PKGINFO_PROP_PACKAGE_INSTALLED_STORAGE,       PMINFO_PKGINFO_PROP_PACKAGE_INSTALLED_STORAGE},
+       {E_PMINFO_PKGINFO_PROP_PACKAGE_AUTHOR_NAME,     PMINFO_PKGINFO_PROP_PACKAGE_AUTHOR_NAME},
+       {E_PMINFO_PKGINFO_PROP_PACKAGE_AUTHOR_EMAIL,    PMINFO_PKGINFO_PROP_PACKAGE_AUTHOR_EMAIL},
+       {E_PMINFO_PKGINFO_PROP_PACKAGE_AUTHOR_HREF,     PMINFO_PKGINFO_PROP_PACKAGE_AUTHOR_HREF},
        {E_PMINFO_PKGINFO_PROP_PACKAGE_PRIVILEGE,       PMINFO_PKGINFO_PROP_PACKAGE_PRIVILEGE}
 };
 
@@ -84,18 +84,19 @@ struct _appinfo_str_map_t {
 static struct _appinfo_str_map_t appinfo_str_prop_map[] = {
        {E_PMINFO_APPINFO_PROP_APP_ID,          PMINFO_APPINFO_PROP_APP_ID},
        {E_PMINFO_APPINFO_PROP_APP_COMPONENT,   PMINFO_APPINFO_PROP_APP_COMPONENT},
-       {E_PMINFO_APPINFO_PROP_APP_EXEC,        PMINFO_APPINFO_PROP_APP_EXEC},
-       {E_PMINFO_APPINFO_PROP_APP_ICON,        PMINFO_APPINFO_PROP_APP_ICON},
-       {E_PMINFO_APPINFO_PROP_APP_TYPE,        PMINFO_APPINFO_PROP_APP_TYPE},
-       {E_PMINFO_APPINFO_PROP_APP_OPERATION,   PMINFO_APPINFO_PROP_APP_OPERATION},
-       {E_PMINFO_APPINFO_PROP_APP_URI,         PMINFO_APPINFO_PROP_APP_URI},
-       {E_PMINFO_APPINFO_PROP_APP_MIME,        PMINFO_APPINFO_PROP_APP_MIME},
-       {E_PMINFO_APPINFO_PROP_APP_CATEGORY,    PMINFO_APPINFO_PROP_APP_CATEGORY},
+       {E_PMINFO_APPINFO_PROP_APP_EXEC,        PMINFO_APPINFO_PROP_APP_EXEC},
+       {E_PMINFO_APPINFO_PROP_APP_ICON,        PMINFO_APPINFO_PROP_APP_ICON},
+       {E_PMINFO_APPINFO_PROP_APP_TYPE,        PMINFO_APPINFO_PROP_APP_TYPE},
+       {E_PMINFO_APPINFO_PROP_APP_OPERATION,   PMINFO_APPINFO_PROP_APP_OPERATION},
+       {E_PMINFO_APPINFO_PROP_APP_URI, PMINFO_APPINFO_PROP_APP_URI},
+       {E_PMINFO_APPINFO_PROP_APP_MIME,        PMINFO_APPINFO_PROP_APP_MIME},
+       {E_PMINFO_APPINFO_PROP_APP_CATEGORY,    PMINFO_APPINFO_PROP_APP_CATEGORY},
        {E_PMINFO_APPINFO_PROP_APP_HWACCELERATION,      PMINFO_APPINFO_PROP_APP_HWACCELERATION},
        {E_PMINFO_APPINFO_PROP_APP_SCREENREADER,        PMINFO_APPINFO_PROP_APP_SCREENREADER},
        {E_PMINFO_APPINFO_PROP_APP_METADATA_KEY,        PMINFO_APPINFO_PROP_APP_METADATA_KEY},
        {E_PMINFO_APPINFO_PROP_APP_METADATA_VALUE,      PMINFO_APPINFO_PROP_APP_METADATA_VALUE},
-       {E_PMINFO_APPINFO_PROP_APP_PACKAGE,     PMINFO_APPINFO_PROP_APP_PACKAGE}
+       {E_PMINFO_APPINFO_PROP_APP_PACKAGE,     PMINFO_APPINFO_PROP_APP_PACKAGE},
+       {E_PMINFO_APPINFO_PROP_APP_INSTALLED_STORAGE,   PMINFO_APPINFO_PROP_APP_INSTALLED_STORAGE}
 };
 
 struct _appinfo_int_map_t {
@@ -238,6 +239,7 @@ int __get_filter_condition(gpointer data, char **condition, GList **params)
        char buf[MAX_QUERY_LEN] = {'\0'};
        int flag = 0;
        char *ptr = NULL;
+       char *saveptr = NULL;
 
        switch (node->prop) {
        case E_PMINFO_PKGINFO_PROP_PACKAGE_ID:
@@ -265,7 +267,7 @@ int __get_filter_condition(gpointer data, char **condition, GList **params)
                snprintf(buf, sizeof(buf), "pi.author_email=?");
                break;
        case E_PMINFO_PKGINFO_PROP_PACKAGE_PRIVILEGE:
-               snprintf(buf, sizeof(buf), "pi.privilege=?");
+               snprintf(buf, sizeof(buf), "package_privilege_info.privilege=?");
                flag = E_PMINFO_PKGINFO_JOIN_PRIVILEGE_INFO;
                break;
        case E_PMINFO_PKGINFO_PROP_PACKAGE_SIZE:
@@ -326,10 +328,12 @@ int __get_filter_condition(gpointer data, char **condition, GList **params)
                break;
        case E_PMINFO_APPINFO_PROP_APP_CATEGORY:
                snprintf(buf, sizeof(buf), "package_app_app_category.category IN (");
-               ptr = strtok(node->value, ",");
+               ptr = strtok_r(node->value, ",", &saveptr);
+               if (ptr == NULL)
+                       return 0;
                strncat(buf, "?", MAX_QUERY_LEN - 2);
                *params = g_list_append(*params, strdup(ptr));
-               while (ptr = strtok(NULL, ",")) {
+               while ((ptr = strtok_r(NULL, ",", &saveptr))) {
                        strncat(buf, ", ?", MAX_QUERY_LEN - strlen(", ?") - 1);
                        *params = g_list_append(*params, strdup(ptr));
                }
@@ -365,6 +369,9 @@ int __get_filter_condition(gpointer data, char **condition, GList **params)
        case E_PMINFO_APPINFO_PROP_APP_PACKAGE:
                snprintf(buf, sizeof(buf), "ai.package=?");
                break;
+       case E_PMINFO_APPINFO_PROP_APP_INSTALLED_STORAGE:
+               snprintf(buf, sizeof(buf), "ai.installed_storage=?");
+               break;
        case E_PMINFO_APPINFO_PROP_APP_UI_GADGET:
                snprintf(buf, sizeof(buf), "ai.app_ui_gadget=? COLLATE NOCASE");
                break;
@@ -397,6 +404,38 @@ int __get_filter_condition(gpointer data, char **condition, GList **params)
        return flag;
 }
 
+int _add_icon_info_into_list(const char *locale, char *value, GList **icon)
+{
+       icon_x *info;
+
+       info = calloc(1, sizeof(icon_x));
+       if (info == NULL) {
+               LOGE("out of memory");
+               return PMINFO_R_ERROR;
+       }
+       info->text = value;
+       info->lang = strdup(locale);
+       *icon = g_list_append(*icon, info);
+
+       return PMINFO_R_OK;
+}
+
+int _add_label_info_into_list(const char *locale, char *value, GList **label)
+{
+       label_x *info;
+
+       info = calloc(1, sizeof(label_x));
+       if (info == NULL) {
+               LOGE("out of memory");
+               return PMINFO_R_ERROR;
+       }
+       info->text = value;
+       info->lang = strdup(locale);
+       *label = g_list_append(*label, info);
+
+       return PMINFO_R_OK;
+}
+
 char *_get_system_locale(void)
 {
        char *lang;
@@ -430,3 +469,38 @@ char *_get_system_locale(void)
        return locale;
 }
 
+int __pkginfo_check_installed_storage(package_x *pkginfo)
+{
+       char buf[MAX_QUERY_LEN] = {'\0'};
+       retvm_if(pkginfo->package == NULL, PMINFO_R_OK, "pkgid is NULL\n");
+       retvm_if(pkginfo->installed_storage == NULL, PMINFO_R_ERROR,
+                       "installed_storage is NULL\n");
+
+       if (strcmp(pkginfo->installed_storage, "installed_external") == 0) {
+               snprintf(buf, MAX_QUERY_LEN - 1, "%s", pkginfo->external_path);
+               if (access(buf, R_OK) != 0) {
+                       _LOGE("can not access [%s]", buf);
+                       return PMINFO_R_ERROR;
+               }
+       }
+
+       return PMINFO_R_OK;
+}
+
+int __appinfo_check_installed_storage(application_x *appinfo)
+{
+       retvm_if(appinfo->installed_storage == NULL, PMINFO_R_ERROR,
+                       "installed_storage is NULL\n");
+
+       if (strcmp(appinfo->installed_storage, "installed_external") == 0) {
+               retvm_if(appinfo->external_path == NULL, PMINFO_R_ERROR,
+                               "external path is NULL\n");
+               if (access(appinfo->external_path, R_OK) != 0) {
+                       _LOGE("can not access [%s]", appinfo->external_path);
+                       return PMINFO_R_ERROR;
+               }
+       }
+
+       return PMINFO_R_OK;
+}
+