std::vector<std::shared_ptr<application_x>> app_list;
internal::GetAppInfo(db, &tmp_filter, uid_, uid, locale, app_list);
- for (auto& app : app_list) {
+ for (auto& app : app_list)
app->privileges = pkg_handle->privileges;
- pending_app_[pkgid].emplace_back(std::move(app));
- }
- pending_pkg_[pkgid] = std::make_pair(pid, std::move(pkg_handle));
+ pending_pkg_[pkgid] = pid;
}
g_slist_free(tmp_filter.list);
} else {
- pending_pkg_[info->package] = std::make_pair(pid, nullptr);
- pending_app_.erase(info->package);
+ pending_pkg_[info->package] = pid;
}
}
-void DBHandleProvider::UpdatePendingPackageInfo(
+void DBHandleProvider::UpdatePendingPackageInfo(const tizen_base::Database& db,
+ uid_t uid, const std::string& locale,
const std::vector<std::string>& pkgids) {
+ pkgmgrinfo_filter_x tmp_filter = { 0, };
+ pkgmgrinfo_node_x node = { 0, };
+ tmp_filter.cache_flag = true;
+ tmp_filter.list = g_slist_append(tmp_filter.list, (gpointer)&node);
for (const auto& pkgid : pkgids) {
auto pkg_it = pending_pkg_.find(pkgid);
if (pkg_it == pending_pkg_.end())
continue;
+ LOG(WARNING) << "Update package : " << pkgid;
+
ErasePackage(pkgid);
- auto app_it = pending_app_.find(pkgid);
- if (app_it != pending_app_.end()) {
- for (auto& app : app_it->second)
+ std::map<std::string, std::shared_ptr<package_x>> pkgs;
+
+ node.prop = E_PMINFO_PKGINFO_PROP_PACKAGE_ID;
+ node.value = const_cast<char*>(pkgid.c_str());
+ internal::GetPkgInfo(db, &tmp_filter, uid_, locale, pkgs);
+ node.prop = E_PMINFO_APPINFO_PROP_APP_PACKAGE;
+ for (auto& [pkgid, pkg_handle] : pkgs) {
+ std::vector<std::shared_ptr<application_x>> app_list;
+ internal::GetAppInfo(db, &tmp_filter, uid_, uid, locale, app_list);
+
+ for (auto& app : app_list) {
+ app->privileges = pkg_handle->privileges;
AddApplication(std::move(app));
- pending_app_.erase(app_it);
- }
+ }
- if (pkg_it->second.second)
- AddPackage(std::move(pkg_it->second.second));
+ AddPackage(std::move(pkg_handle));
+ }
- EraseWriterPID(pkg_it->second.first);
+ EraseWriterPID(pkg_it->second);
pending_pkg_.erase(pkg_it);
}
+
+ g_slist_free(tmp_filter.list);
}
void DBHandleProvider::UpdateCrashedWriterPackageInfo(
+ const tizen_base::Database& db,
+ uid_t uid, const std::string& locale,
const std::unordered_set<pid_t>& pids) {
+ std::vector<std::string> pkgids;
for (auto it = pending_pkg_.begin(); it != pending_pkg_.end();) {
- pid_t pid = it->second.first;
+ pid_t pid = it->second;
if (pids.find(pid) == pids.end()) {
it++;
continue;
}
- const auto& pkgid = it->first;
- auto old_app_it = pkg_app_map_.find(pkgid);
- if (old_app_it != pkg_app_map_.end()) {
- for (const auto& app : old_app_it->second)
- app_map_.erase(app);
-
- pkg_app_map_.erase(old_app_it);
- }
-
- auto app_it = pending_app_.find(pkgid);
- if (app_it != pending_app_.end()) {
- for (auto& app : app_it->second)
- AddApplication(std::move(app));
- pending_app_.erase(app_it);
- }
-
- if (it->second.second)
- AddPackage(std::move(it->second.second));
-
- EraseWriterPID(it->second.first);
- it = pending_pkg_.erase(it);
+ pkgids.emplace_back(it->first);
}
+
+ UpdatePendingPackageInfo(db, uid, locale, pkgids);
}
bool DBHandleProvider::UpdateCachePkg(const tizen_base::Database& db, uid_t uid,
void RegisterPendingPackageInfo(const tizen_base::Database& db,
package_x* info, pid_t pid, uid_t uid, const std::string& locale,
pkgmgr_common::PkgWriteType write_type);
- void UpdatePendingPackageInfo(const std::vector<std::string>& pkgids);
- void UpdateCrashedWriterPackageInfo(const std::unordered_set<pid_t>& pids);
+ void UpdatePendingPackageInfo(const tizen_base::Database& db,
+ uid_t uid, const std::string& locale,
+ const std::vector<std::string>& pkgids);
+ void UpdateCrashedWriterPackageInfo(const tizen_base::Database& db,
+ uid_t uid, const std::string& locale,
+ const std::unordered_set<pid_t>& pids);
bool UpdateCachePkg(const tizen_base::Database& db, uid_t uid,
const std::string& pkgid, const std::string& locale);
bool UpdateCacheApp(const tizen_base::Database& db, uid_t uid,
std::unordered_map<std::string, std::shared_ptr<package_x>> pkg_map_;
std::unordered_map<std::string, std::shared_ptr<application_x>> app_map_;
std::unordered_map<std::string, std::unordered_set<std::string>> pkg_app_map_;
- std::unordered_map<std::string, std::pair<pid_t, std::shared_ptr<package_x>>> pending_pkg_;
- std::unordered_map<std::string, std::vector<std::shared_ptr<application_x>>> pending_app_;
+ std::unordered_map<std::string, pid_t> pending_pkg_;
};
} // namespace database