Add package paremeter to application filter
[platform/core/appfw/pkgmgr-info.git] / src / server / database / db_handle_provider.cc
index 78bc332..258862e 100644 (file)
@@ -483,22 +483,32 @@ void DBHandleProvider::AddPackage(std::string package,
 }
 
 inline bool CheckAppFilters(pkgmgrinfo_filter_x* filter,
-  const std::shared_ptr<application_x>& info,
+  const std::shared_ptr<application_x>& app_info,
+  const std::shared_ptr<package_x>& pkg_info,
   const std::unordered_map<std::string, std::string>& metadata_map) {
   for (auto* it = filter->list; it != nullptr; it = g_slist_next(it)) {
     auto node = reinterpret_cast<pkgmgrinfo_node_x*>(it->data);
     auto* checker = FilterCheckerProvider::GetInst().
         GetAppFilterChecker(node->prop);
-    if (!checker->CheckFilter(node, info.get()))
+    if (!checker->CheckFilter(node, app_info.get(), pkg_info.get()))
       return false;
   }
 
   bool pass = true;
   if (!metadata_map.empty())
-    pass = CheckMetadataFilter(info->metadata, metadata_map);
+    pass = CheckMetadataFilter(app_info->metadata, metadata_map);
   return pass;
 }
 
+std::shared_ptr<package_x> DBHandleProvider::GetPackageByApp(
+    const char* appid) {
+  auto it = pkg_map_.find(appid);
+  if (it == pkg_map_.end())
+    return nullptr;
+
+  return it->second;
+}
+
 std::vector<std::shared_ptr<application_x>> DBHandleProvider::GetApplications(
     pid_t pid, pkgmgrinfo_filter_x* filter,
     const std::string& app) {
@@ -523,13 +533,15 @@ std::vector<std::shared_ptr<application_x>> DBHandleProvider::GetApplications(
 
   if (app.empty()) {
     for (auto& info : app_map_) {
-      if (CheckAppFilters(filter, info.second, metadata_map))
+      if (CheckAppFilters(filter, info.second,
+          GetPackageByApp(info.second->package), metadata_map))
         ret.push_back(info.second);
     }
   } else {
     auto map_it = app_map_.find(app);
     if (map_it != app_map_.end() &&
-        CheckAppFilters(filter, map_it->second, metadata_map))
+        CheckAppFilters(filter, map_it->second,
+            GetPackageByApp(map_it->second->package), metadata_map))
       ret.push_back(map_it->second);
   }