Refactoring for implementing smoke tests
[platform/core/appfw/app-installers.git] / src / common / pkgmgr_interface.cc
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.
4
5 #include "common/pkgmgr_interface.h"
6
7 #include <memory>
8
9 #include "common/app_query_interface.h"
10
11 namespace common_installer {
12
13 PkgMgrPtr PkgMgrInterface::Create(int argc, char** argv,
14                                   AppQueryInterface* interface) {
15   PkgMgrPtr instance(new PkgMgrInterface(interface));
16   int result = instance->InitInternal(argc, argv);
17   if (result != 0)
18     return nullptr;
19
20   return instance;
21 }
22
23 int PkgMgrInterface::InitInternal(int argc, char** argv) {
24   pi_ = pkgmgr_installer_new();
25
26   if (!pi_) {
27     LOG(ERROR) << "Cannot create pkgmgr_installer object";
28     return ENOMEM;
29   }
30
31   int result = pkgmgr_installer_receive_request(pi_, argc, argv);
32   if (result) {
33     LOG(ERROR) << "Cannot receive request. Invalid arguments?";
34     // no need to free pkgmgr_installer here. it will be freed in DTOR.
35   }
36
37   is_app_installed_ = false;
38   if (query_interface_)
39     is_app_installed_ = query_interface_->IsAppInstalledByArgv(argc, argv);
40
41   return result;
42 }
43
44 PkgMgrInterface::~PkgMgrInterface() {
45   if (pi_)
46     pkgmgr_installer_free(pi_);
47 }
48
49 RequestType PkgMgrInterface::GetRequestType() const {
50   switch (pkgmgr_installer_get_request_type(pi_)) {
51     case PKGMGR_REQ_INSTALL:
52       if (!is_app_installed_) {
53         return RequestType::Install;
54       } else {
55         return RequestType::Update;
56       }
57     case PKGMGR_REQ_UNINSTALL:
58       return RequestType::Uninstall;
59     case PKGMGR_REQ_REINSTALL:
60       return RequestType::Reinstall;
61     case PKGMGR_REQ_RECOVER:
62       return RequestType::Recovery;
63     default:
64       return RequestType::Unknown;
65   }
66 }
67
68 const char* PkgMgrInterface::GetRequestInfo() const {
69   return pkgmgr_installer_get_request_info(pi_);
70 }
71
72 }  // namespace common_installer