#include <fstream>
#include "common/app_query_interface.h"
-#include "common/pkgmgr_query.h"
+#include "common/utils/pkgmgr_query.h"
#include "common/pkgmgr_signal.h"
#include "common/pkgmgr_registration.h"
#include "common/utils/file_util.h"
PkgMgrPtr PkgMgrInterface::Create(int argc, char** argv,
PkgmgrInstallerInterface* pkgmgr_installer_interface,
- AppQueryInterface* interface) {
+ std::shared_ptr<AppQueryInterface> interface) {
PkgMgrPtr instance(new PkgMgrInterface(pkgmgr_installer_interface,
interface));
int result = instance->InitInternal(argc, argv);
return -1;
}
+ boost::optional<bool> is_admin_user =
+ IsAdminUser(pkgmgr_installer_get_uid(pi_));
+ if (!is_admin_user) {
+ LOG(ERROR) << "Cannot get admin user info. Aborting.";
+ return -1;
+ }
+
// Set target uid as tizenglobalapp if admin user's request
- if (IsAdminUser(pkgmgr_installer_get_uid(pi_))) {
+ if (*is_admin_user) {
result = pkgmgr_installer_set_uid(pi_, kGlobalUserUid);
if (result) {
LOG(ERROR) << "Failed to set global uid";
}
void PkgMgrInterface::AddAppQueryInterface(
- int idx, AppQueryInterface* interface) {
+ int idx, std::shared_ptr<AppQueryInterface> interface) {
query_interface_map_.emplace(idx, interface);
}
+std::shared_ptr<AppQueryInterface> PkgMgrInterface::GetAppQueryInterface() {
+ return query_interface_;
+}
+
RequestType PkgMgrInterface::GetRequestType(int idx) const {
- AppQueryInterface* query_interface = query_interface_;
+ // These type could be determined even if there are no query_interface_.
+ switch (pkgmgr_installer_get_request_type(pi_)) {
+ case PKGMGR_REQ_DISABLE_PKG:
+ return RequestType::DisablePkg;
+ case PKGMGR_REQ_ENABLE_PKG:
+ return RequestType::EnablePkg;
+ case PKGMGR_REQ_MIGRATE_EXTIMG:
+ return RequestType::MigrateExtImg;
+ case PKGMGR_REQ_RECOVER_DB:
+ return RequestType::RecoverDB;
+ case PKGMGR_REQ_REINSTALL:
+ return RequestType::Reinstall;
+ case PKGMGR_REQ_RECOVER:
+ return RequestType::Recovery;
+ case PKGMGR_REQ_MOVE:
+ return RequestType::Move;
+ }
+
+ std::shared_ptr<AppQueryInterface> query_interface = query_interface_;
if (!query_interface) {
auto it = query_interface_map_.find(idx);
if (it == query_interface_map_.end())
else
return RequestType::Uninstall;
}
- case PKGMGR_REQ_REINSTALL:
- return RequestType::Reinstall;
- case PKGMGR_REQ_RECOVER:
- return RequestType::Recovery;
- case PKGMGR_REQ_MOVE:
- return RequestType::Move;
case PKGMGR_REQ_MANIFEST_DIRECT_INSTALL:
if (!is_app_installed_.get()) {
if (GetIsPreloadRequest() && GetIsPartialRW())
else
return RequestType::ManifestDirectUpdate;
}
- case PKGMGR_REQ_MOUNT_INSTALL:
- if (!is_app_installed_.get())
+ case PKGMGR_REQ_MOUNT_INSTALL: {
+ if (!is_app_installed_.get()) {
return RequestType::MountInstall;
- else
- return RequestType::MountUpdate;
- case PKGMGR_REQ_DISABLE_PKG:
- return RequestType::DisablePkg;
- case PKGMGR_REQ_ENABLE_PKG:
- return RequestType::EnablePkg;
- case PKGMGR_REQ_MIGRATE_EXTIMG:
- return RequestType::MigrateExtImg;
- case PKGMGR_REQ_RECOVER_DB:
- return RequestType::RecoverDB;
+ } else {
+ std::string pkgid = query_interface->GetPkgId(GetRequestInfo(idx));
+ uid_t uid = GetUid();
+ ci::PkgQueryInterface pkg_query(pkgid, uid);
+ if (CheckIfAppFilesExists(pkgid, uid, pkg_query.IsReadonlyPackage())) {
+ return RequestType::MountUpdate;
+ } else {
+ RequestMode request_mode = GetRequestMode(uid);
+ UnregisterAppInPkgmgrForPkgId(pkgid, uid, request_mode);
+ return RequestType::MountInstall;
+ }
+ }
+ }
default:
return RequestType::Unknown;
}
return pkgmgr_installer_get_request_info_count(pi_);
}
+bool PkgMgrInterface::GetRecoveryCleanup() const {
+ return (pkgmgr_installer_get_recovery_cleanup(pi_) == 1);
+}
+
} // namespace common_installer