Add debugging log for disabled pkg/app for db
[platform/core/appfw/pkgmgr-info.git] / src / server / pkginfo_internal.cc
index f2e7c39..3b79f5c 100644 (file)
@@ -413,11 +413,37 @@ bool CheckPackageStorageStatus(pkgmgrinfo_filter_x* tmp_filter) {
   return true;
 }
 
+bool CheckPackageDisableFilter(const pkgmgrinfo_filter_x* filter,
+    const package_x* pkg_info) {
+  GSList* tmp_list = nullptr;
+  pkgmgrinfo_node_x* tmp_node = nullptr;
+  int property = -1;
+
+  property = _pminfo_pkginfo_convert_to_prop_bool(
+        PMINFO_PKGINFO_PROP_PACKAGE_DISABLE);
+  for (tmp_list = filter->list; tmp_list != nullptr;
+      tmp_list = g_slist_next(tmp_list)) {
+    tmp_node = reinterpret_cast<pkgmgrinfo_node_x*>(tmp_list->data);
+    if (property != tmp_node->prop)
+      continue;
+
+    if (strcasecmp(tmp_node->value, pkg_info->is_disabled) == 0)
+      return true;
+
+    if (strcasecmp(pkg_info->is_disabled, "true") == 0)
+      LOGW("The package [%s] is disabled", pkg_info->package);
+
+    return false;
+  }
+  return true;
+}
+
 int DoGetPkgInfo(const tizen_base::Database& db, uid_t uid,
     const std::string& locale, pkgmgrinfo_filter_x* filter, int flag,
     std::map<std::string, std::shared_ptr<package_x>>& packages) {
   static const char query_raw[] =
-    "SELECT DISTINCT pi.package, pi.installed_storage, pi.external_path";
+    "SELECT DISTINCT pi.package, pi.installed_storage, pi.external_path, "
+    "pi.package_disable";
   static const char query_basic[] =
     ", pi.package_version, pi.install_location, "
     "pi.package_removable, pi.package_preload, pi.package_readonly, "
@@ -426,7 +452,7 @@ int DoGetPkgInfo(const tizen_base::Database& db, uid_t uid,
     "pi.storeclient_id, pi.mainapp_id, pi.package_url, pi.root_path, "
     "pi.csc_path, pi.package_nodisplay, pi.package_api_version, "
     "pi.package_support_disable, pi.package_tep_name, "
-    "pi.package_zip_mount_file, pi.package_support_mode, pi.package_disable, "
+    "pi.package_zip_mount_file, pi.package_support_mode, "
     "pi.light_user_switch_mode";
   static const char query_author[] =
     ", pi.author_name, pi.author_email, pi.author_href";
@@ -525,6 +551,7 @@ int DoGetPkgInfo(const tizen_base::Database& db, uid_t uid,
     info->package = GetCString(idx++, rec);
     info->installed_storage = GetCString(idx++, rec);
     info->external_path = GetCString(idx++, rec);
+    info->is_disabled = GetCString(idx++, rec);
     if (flag & PMINFO_APPINFO_GET_BASICINFO) {
       info->version = GetCString(idx++, rec);
       info->installlocation = GetCString(idx++, rec);
@@ -548,7 +575,6 @@ int DoGetPkgInfo(const tizen_base::Database& db, uid_t uid,
       info->tep_name = GetCString(idx++, rec);
       info->zip_mount_file = GetCString(idx++, rec);
       info->support_mode = GetCString(idx++, rec);
-      info->is_disabled = GetCString(idx++, rec);
       info->light_user_switch_mode = GetCString(idx++, rec);
     }
 
@@ -626,6 +652,14 @@ int DoGetPkgInfo(const tizen_base::Database& db, uid_t uid,
             PMINFO_R_OK)
       continue;
 
+    if (!CheckPackageDisableFilter(filter, info))
+      continue;
+
+    if (!(flag & PMINFO_APPINFO_GET_BASICINFO) && info->is_disabled) {
+      free(info->is_disabled);
+      info->is_disabled = nullptr;
+    }
+
     packages[info->package] = std::move(pkg);
   }