Merge branch 'master' into fix_log
[platform/core/appfw/pkgmgr-info.git] / src / common / request_handler / get_pkginfo_request_handler.cc
1 // Copyright (c) 2021 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 "parcelable_factory.hh"
6 #include "filter_parcelable.hh"
7 #include "pkg_get_db_handler.hh"
8 #include "get_pkginfo_request_handler.hh"
9
10 #include "pkgmgrinfo_debug.h"
11
12 #include <string>
13
14 using namespace pkgmgr_common::parcel;
15 using namespace pkgmgr_common::database;
16
17 namespace pkgmgr_server {
18 namespace request_handler {
19
20 bool GetPkginfoRequestHandler::HandleRequest(unsigned char* data, int size,
21                                              std::string locale) {
22   auto abstract_parcel = ParcelableFactory::GetInst().CreateParcel(data, size);
23
24   if (abstract_parcel == nullptr ||
25       abstract_parcel->GetType() != ParcelableType::Filter) {
26     _LOGE("Invalid parcel or type");
27     result_ = std::make_shared<PkgInfoParcelable>(
28         PMINFO_R_ERROR, std::vector<package_x*>{});
29     return false;
30   }
31
32   auto* parcel = dynamic_cast<FilterParcelable*>(abstract_parcel.get());
33   if (parcel == nullptr) {
34     _LOGE("Parcel is empty");
35     result_ = std::make_shared<PkgInfoParcelable>(
36         PMINFO_R_ERROR, std::vector<package_x*>{});
37     return false;
38   }
39
40   PkgGetDBHandler db(parcel->GetUid());
41   db.SetLocale(locale);
42   db.SetFilter(const_cast<pkgmgrinfo_filter_x*>(parcel->GetFilter()));
43   int ret = db.Execute();
44
45   result_ = std::make_shared<PkgInfoParcelable>(ret, db.GetPkgHandle());
46
47   return true;
48 }
49
50 std::vector<uint8_t> GetPkginfoRequestHandler::GetResult() {
51   tizen_base::Parcel parcel;
52
53   parcel.WriteParcelable(*result_.get());
54   std::vector<uint8_t> raw = parcel.GetRaw();
55
56   return raw;
57 }
58
59 }  // namespace request_handler
60 }  // namespace pkgmgr_server