Refactor pkgmgr-info
[platform/core/appfw/pkgmgr-info.git] / src / server / database / remove_cache_db_handler.cc
index 3ce37b5..20e542b 100644 (file)
 
 #include "remove_cache_db_handler.hh"
 
+#include "cache_flag.hh"
 #include "db_handle_provider.hh"
 
 namespace pkgmgr_server {
 namespace database {
 
 RemoveCacheDBHandler::RemoveCacheDBHandler(uid_t uid, int pid)
-    : AbstractDBHandler(uid, pid) {}
+    : AbstractDBHandler(uid, pid), uid_(uid) {}
 
 int RemoveCacheDBHandler::Execute() {
-  std::unique_lock<std::shared_timed_mutex> u(lock_);
+  std::unique_lock<std::shared_mutex> u(lock_);
+  SetOpType(pkgmgr_common::DBOperationType::OPERATION_TYPE_READ);
+  SetDBType(pkgmgr_common::DBType::DB_TYPE_FILE_PKGDB);
 
   database::DBHandleProvider::GetInst(GetUID()).UnsetMemoryMode(GetPID());
-  database::DBHandleProvider::GetInst(GetUID()).TrimCache();
+
+  if (!Connect()) {
+    database::DBHandleProvider::GetInst(GetUID()).TrimCache();
+    return PMINFO_R_ERROR;
+  }
+
+  const auto& conn_list = GetConnection();
+  auto lock = CacheFlag::GetWriterLock();
+  if (CacheFlag::GetStatus() != CacheFlag::Status::PREPARED)
+    return PMINFO_R_OK;
+
+  CacheFlag::SetStatus(CacheFlag::Status::PREPARING);
+  for (const auto& [db, uid] : conn_list) {
+    auto& provider = database::DBHandleProvider::GetInst(uid);
+    provider.UpdatePendingPackageInfo(db, GetPID(), uid_, GetLocale());
+  }
+
+  CacheFlag::SetStatus(CacheFlag::Status::PREPARED);
 
   return PMINFO_R_OK;
 }