1 // Copyright (c) 2015 Samsung Electronics Co., Ltd All Rights Reserved
2 // Use of this source code is governed by an apache 2.0 license that can be
3 // found in the LICENSE file.
5 #include "common/pkgmgr_interface.h"
7 #include <boost/filesystem/path.hpp>
8 #include <boost/filesystem.hpp>
15 #include "common/app_query_interface.h"
17 namespace bf = boost::filesystem;
21 const char kDeltaFileExtension[] = ".delta";
25 namespace common_installer {
27 PkgMgrPtr PkgMgrInterface::Create(int argc, char** argv,
28 AppQueryInterface* interface) {
29 PkgMgrPtr instance(new PkgMgrInterface(interface));
30 int result = instance->InitInternal(argc, argv);
37 int PkgMgrInterface::InitInternal(int argc, char** argv) {
38 pi_ = pkgmgr_installer_new();
41 LOG(ERROR) << "Cannot create pkgmgr_installer object";
45 int result = pkgmgr_installer_receive_request(pi_, argc, argv);
47 LOG(ERROR) << "Cannot receive request. Invalid arguments?";
48 // no need to free pkgmgr_installer here. it will be freed in DTOR.
51 if (pkgmgr_installer_get_request_type(pi_)
52 == PKGMGR_REQ_MANIFEST_DIRECT_INSTALL) {
55 LOG(ERROR) << "You are not an authorized user(" << uid << ")!";
59 is_app_installed_ = false;
61 is_app_installed_ = query_interface_->IsAppInstalledByArgv(argc, argv);
66 PkgMgrInterface::~PkgMgrInterface() {
68 pkgmgr_installer_free(pi_);
71 RequestType PkgMgrInterface::GetRequestType() const {
72 switch (pkgmgr_installer_get_request_type(pi_)) {
73 case PKGMGR_REQ_INSTALL : {
74 auto request_info = GetRequestInfo();
76 return RequestType::Unknown;
77 std::string extension = bf::path(request_info).extension().string();
78 if (!is_app_installed_) {
79 if (extension == kDeltaFileExtension) {
80 LOG(ERROR) << "Package is not installed. "
81 "Cannot update from delta package";
82 return RequestType::Unknown;
84 return RequestType::Install;
87 if (extension == kDeltaFileExtension)
88 return RequestType::Delta;
90 return RequestType::Update;
93 case PKGMGR_REQ_UNINSTALL:
94 return RequestType::Uninstall;
95 case PKGMGR_REQ_REINSTALL:
96 return RequestType::Reinstall;
97 case PKGMGR_REQ_RECOVER:
98 return RequestType::Recovery;
99 case PKGMGR_REQ_MANIFEST_DIRECT_INSTALL:
100 if (!is_app_installed_)
101 return RequestType::ManifestDirectInstall;
103 return RequestType::ManifestDirectUpdate;
105 return RequestType::Unknown;
109 const char* PkgMgrInterface::GetRequestInfo() const {
110 return pkgmgr_installer_get_request_info(pi_);
113 boost::filesystem::path PkgMgrInterface::GetTepPath() const {
114 if (pkgmgr_installer_get_tep_path(pi_) == nullptr)
115 return boost::filesystem::path("");
117 return boost::filesystem::path(pkgmgr_installer_get_tep_path(pi_));
120 bool PkgMgrInterface::GetIsTepMove() {
121 return (pkgmgr_installer_get_tep_move_type(pi_) == 1)?true:false;
124 } // namespace common_installer