Refactor pkgmgr-info
[platform/core/appfw/pkgmgr-info.git] / src / server / database / pkg_get_db_handler.cc
index 78cd3da..bcff4d1 100644 (file)
 
 namespace {
 
-gboolean _move_func(gpointer key, gpointer value, gpointer user_data) {
-  package_x* info = static_cast<package_x*>(value);
-  std::vector<std::shared_ptr<package_x>>* app_list =
-      static_cast<std::vector<std::shared_ptr<package_x>>*>(user_data);
-  app_list->emplace_back(info, pkgmgrinfo_basic_free_package);
-
-  return true;
-}
-
 uid_t globaluser_uid = -1;
 
 uid_t GetGlobalUID() {
@@ -70,28 +61,24 @@ int PkgGetDBHandler::GetHandleFromDB() {
     return PMINFO_R_ERROR;
   }
 
-  std::vector<std::pair<sqlite3*, uid_t>> conn_list = GetConnection();
-  GHashTable* list =
-      g_hash_table_new_full(g_str_hash, g_str_equal, nullptr, nullptr);
+  const auto& conn_list = GetConnection();
   int ret = PMINFO_R_OK;
-  for (auto& conn : conn_list) {
-    ret = pkginfo_internal_filter_get_list(conn.first, filter_, conn.second,
-                                           GetLocale().c_str(), list);
+  std::map<std::string, std::shared_ptr<package_x>> pkgs;
+  for (const auto& [db, uid] : conn_list) {
+    ret = internal::GetPkgInfo(db, filter_, uid, GetLocale(), pkgs);
     if (ret == PMINFO_R_ERROR) {
       LOG(ERROR) << "Failed to pkginfo_internal_filter_get_list : " << ret;
       break;
     }
   }
 
-  if (g_hash_table_size(list) == 0)
-    ret = PMINFO_R_ENOENT;
-
-  if (ret == PMINFO_R_OK)
-    g_hash_table_foreach_steal(list, _move_func, &handle_list_);
+  if (pkgs.empty())
+    return PMINFO_R_ENOENT;
 
-  g_hash_table_destroy(list);
+  for (auto& [key, val] : pkgs)
+    handle_list_.push_back(std::move(val));
 
-  return ret;
+  return PMINFO_R_OK;
 }
 
 void PkgGetDBHandler::GetPackageFromCache(uid_t uid,