--- /dev/null
+//
+// Copyright (c) 2012 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Apache License, Version 2.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+/**
+ * @file FAppPkg_PackageManagerServer.cpp
+ * @brief This is the implementation for the _PackageManagerServer class.
+ */
+
+#include <unique_ptr.h>
+
+#include <package-manager.h>
+#include <pkgmgr-info.h>
+#include <package-manager-types.h>
+
+#include <FAppPkgPackageAppInfo.h>
+#include <FAppPkgPackageInfo.h>
+#include <FBaseString.h>
+#include <FBaseSysLog.h>
+#include <FIoFile.h>
+#include <FAppPkg_PackageManagerServer.h>
+#include <FAppPkg_PackageAppInfoImpl.h>
+#include <FAppPkg_PackageInfoImpl.h>
+#include <FAppPkg_PackageParser.h>
+#include <FBase_StringConverter.h>
+
+using namespace Tizen::Base;
+using namespace Tizen::Io;
+
+namespace Tizen { namespace App { namespace Package
+{
+
+_PackageManagerServer::_PackageManagerServer(void)
+{
+}
+
+_PackageManagerServer::~_PackageManagerServer(void)
+{
+}
+
+_PackageManagerServer*
+_PackageManagerServer::GetInstance(void)
+{
+ static _PackageManagerServer* pPackageManagerServer = null;
+
+ if (pPackageManagerServer == null)
+ {
+ pPackageManagerServer = new (std::nothrow) _PackageManagerServer();
+ SysTryReturn(NID_APP, pPackageManagerServer != null, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] pPackageManagerServer is null.");
+ }
+
+ return pPackageManagerServer;
+}
+
+PackageInfo*
+_PackageManagerServer::GetPackageInfoFromFileN(const String& filePath) const
+{
+ SysTryReturn(NID_APP, filePath.IsEmpty() == false, null, E_INVALID_ARG, "filePath is empty.");
+ SysTryReturn(NID_APP, File::IsFileExist(filePath) == true, null, E_FILE_NOT_FOUND, "package is not existed.");
+
+ String extension = File::GetFileExtension(filePath);
+ SysTryReturn(NID_APP, extension.IsEmpty() == false, null, E_INVALID_ARG, "extension is empty.");
+
+ std::unique_ptr<char[]> pPackagePath(_StringConverter::CopyToCharArrayN(filePath));
+ SysTryReturn(NID_APP, pPackagePath, null, E_OUT_OF_MEMORY, "pPackagePath is null.");
+
+ std::unique_ptr<char[]> pExtension(_StringConverter::CopyToCharArrayN(extension));
+ SysTryReturn(NID_APP, pExtension, null, E_OUT_OF_MEMORY, "pExtension is null.");
+
+ std::unique_ptr< PackageInfo > pPackageInfo(new (std::nothrow) PackageInfo);
+ SysTryReturn(NID_APP, pPackageInfo, null, E_OUT_OF_MEMORY, "pPackageInfo instance must not be null.");
+
+ SysLog(NID_APP, "packagePath = [%s], extension = [%s]", pPackagePath.get(), pExtension.get());
+
+ bool res = true;
+ result r = E_SUCCESS;
+
+ if (strcasecmp(pExtension.get(), "tpk") == 0)
+ {
+ _PackageParser packageParser;
+
+ res = packageParser.Construct(pPackageInfo.get());
+ SysTryReturn(NID_APP, res, null, E_PARSING_FAILED, "Construct() is failed. [%s]", pPackagePath.get());
+
+ res = packageParser.Parse(filePath);
+ SysTryReturn(NID_APP, res, null, E_PARSING_FAILED, "Parse() is failed. [%s]", pPackagePath.get());
+ }
+ else if (strcasecmp(pExtension.get(), "wgt") == 0)
+ {
+ pkgmgr_info* pPkgmgrInfo = null;
+
+ pPkgmgrInfo = pkgmgr_client_check_pkginfo_from_file(pPackagePath.get());
+ SysTryReturn(NID_APP, pPkgmgrInfo, null, E_PARSING_FAILED, "pkgmgr_client_check_pkginfo_from_file(%s) is failed.", pPackagePath.get());
+
+ _package_manager_pkg_detail_info_t* pPkgInfo = (_package_manager_pkg_detail_info_t*) pPkgmgrInfo;
+ _PackageInfoImpl* pPackageInfoImpl = _PackageInfoImpl::GetInstance(pPackageInfo.get());
+
+ SysLog(NID_APP, "package(%s), version(%s), label(%s), description(%s), author(%s), icon_size(%d), pkgname(%s)", pPkgInfo->pkgid, pPkgInfo->version, pPkgInfo->label,
+ pPkgInfo->pkg_description, pPkgInfo->author, pPkgInfo->icon_size, pPkgInfo->pkg_name);
+
+ pPackageInfoImpl->SetType(PACKAGE_TYPE_WGT);
+ pPackageInfoImpl->SetId(pPkgInfo->pkgid);
+ pPackageInfoImpl->SetVersion(pPkgInfo->version);
+ pPackageInfoImpl->SetDisplayName(pPkgInfo->label);
+ pPackageInfoImpl->SetDescription(pPkgInfo->pkg_description);
+ pPackageInfoImpl->SetAuthor(pPkgInfo->author);
+ pPackageInfoImpl->SetMainAppId(pPkgInfo->pkg_name);
+
+ if (pPkgInfo->privilege_list)
+ {
+ GList* pList = null;
+ pList = g_list_first(pPkgInfo->privilege_list);
+ while (pList)
+ {
+ char* pPrivilege = (char*)pList->data;
+ if (pPrivilege)
+ {
+ pPackageInfoImpl->AddPrivilege(*new (std::nothrow) String(pPrivilege));
+ free(pPrivilege);
+ }
+ pList = g_list_next(pList);
+ }
+ g_list_free(pPkgInfo->privilege_list);
+ }
+
+ std::unique_ptr< PackageAppInfo > pPackageAppInfo(new (std::nothrow) PackageAppInfo);
+ if (pPackageAppInfo)
+ {
+ _PackageAppInfoImpl* pPackageAppInfoImpl = _PackageAppInfoImpl::GetInstance(pPackageAppInfo.get());
+
+ pPackageAppInfoImpl->SetAppId(pPkgInfo->pkg_name);
+ pPackageAppInfoImpl->SetAppName(pPkgInfo->label);
+ pPackageAppInfoImpl->SetAppDisplayName(pPkgInfo->label);
+ pPackageAppInfoImpl->SetMainApp(true);
+ if ((pPkgInfo->icon_buf) && (pPkgInfo->icon_size > 0))
+ {
+ String iconPath("/tmp/icon.png");
+ File file;
+ r = file.Construct(iconPath, "w+");
+ r = file.Write(pPkgInfo->icon_buf, pPkgInfo->icon_size);
+
+ pPackageAppInfoImpl->SetAppTempIconPath(iconPath);
+ }
+
+ pPackageInfoImpl->AddPackageAppInfo(*pPackageAppInfo.release());
+ }
+ else
+ {
+ SysLog(NID_APP, "pPackageAppInfo instance must not be null.");
+ pkgmgr_client_free_pkginfo(pPkgmgrInfo);
+ return null;
+ }
+
+ pkgmgr_client_free_pkginfo(pPkgmgrInfo);
+ }
+ else
+ {
+ SysTryReturn(NID_APP, false, null, E_UNSUPPORTED_FORMAT, "invalid extension! - packagePath = [%s], extension = [%s]", pPackagePath.get(), pExtension.get());
+ }
+
+ return pPackageInfo.release();
+}
+
+long long
+_PackageManagerServer::GetSize(const PackageId& packageId) const
+{
+ int res = PMINFO_R_OK;
+ pkgmgrinfo_pkginfo_h handle = null;
+ int size = 0;
+
+ std::unique_ptr<char[]> pPackageId(_StringConverter::CopyToCharArrayN(packageId));
+ SysTryReturn(NID_APP, pPackageId, 0, E_OUT_OF_MEMORY, "pPackageId is null.");
+
+ res = pkgmgrinfo_pkginfo_get_pkginfo(pPackageId.get(), &handle);
+ SysTryReturn(NID_APP, res == PMINFO_R_OK, 0, E_PKG_NOT_INSTALLED, "pkgmgrinfo_pkginfo_get_pkginfo() is failed. result=[%d], package=[%s]", res, pPackageId.get());
+ SysTryReturn(NID_APP, handle, 0, E_SYSTEM, "[E_SYSTEM] handle is null.");
+
+ res = pkgmgrinfo_pkginfo_get_total_size(handle, &size);
+ if (res == PMINFO_R_OK)
+ {
+ SysLog(NID_APP, "pkgmgrinfo_pkginfo_get_total_size(): size = [%d]", size);
+ }
+ else
+ {
+ SysLog(NID_APP, "pkgmgrinfo_pkginfo_get_total_size() is failed. result = [%d]", res);
+ }
+
+ pkgmgrinfo_pkginfo_destroy_pkginfo(handle);
+
+ return (long long) size;
+}
+
+long long
+_PackageManagerServer::GetDataSize(const PackageId& packageId) const
+{
+ int res = PMINFO_R_OK;
+ pkgmgrinfo_pkginfo_h handle = null;
+ int dataSize = 0;
+
+ std::unique_ptr<char[]> pPackageId(_StringConverter::CopyToCharArrayN(packageId));
+ SysTryReturn(NID_APP, pPackageId, 0, E_OUT_OF_MEMORY, "pPackageId is null.");
+
+ res = pkgmgrinfo_pkginfo_get_pkginfo(pPackageId.get(), &handle);
+ SysTryReturn(NID_APP, res == PMINFO_R_OK, 0, E_PKG_NOT_INSTALLED, "pkgmgrinfo_pkginfo_get_pkginfo() is failed. result=[%d], package=[%s]", res, pPackageId.get());
+ SysTryReturn(NID_APP, handle, 0, E_SYSTEM, "[E_SYSTEM] handle is null.");
+
+ res = pkgmgrinfo_pkginfo_get_data_size(handle, &dataSize);
+ if (res == PMINFO_R_OK)
+ {
+ SysLog(NID_APP, "pkgmgrinfo_pkginfo_get_total_size(): dataSize = [%d]", dataSize);
+ }
+ else
+ {
+ SysLog(NID_APP, "pkgmgrinfo_pkginfo_get_total_size() is failed. result = [%d]", res);
+ }
+
+ pkgmgrinfo_pkginfo_destroy_pkginfo(handle);
+
+ return (long long) dataSize;
+}
+
+PackageType
+_PackageManagerServer::GetType(const PackageId& packageId) const
+{
+ int res = PMINFO_R_OK;
+ pkgmgrinfo_pkginfo_h handle = null;
+ PackageType packageType = PACKAGE_TYPE_TPK;
+ char* pType = null;
+ String type;
+
+ std::unique_ptr<char[]> pPackageId(_StringConverter::CopyToCharArrayN(packageId));
+ SysTryReturn(NID_APP, pPackageId, PACKAGE_TYPE_TPK, E_OUT_OF_MEMORY, "pPackageId is null.");
+
+ res = pkgmgrinfo_pkginfo_get_pkginfo(pPackageId.get(), &handle);
+ SysTryReturn(NID_APP, res == PMINFO_R_OK, PACKAGE_TYPE_TPK, E_PKG_NOT_INSTALLED, "pkgmgrinfo_pkginfo_get_pkginfo() is failed. result=[%d], package=[%s]", res, pPackageId.get());
+ SysTryReturn(NID_APP, handle, PACKAGE_TYPE_TPK, E_SYSTEM, "[E_SYSTEM] handle is null.");
+
+ res = pkgmgrinfo_pkginfo_get_type(handle, &pType);
+ if (res == PMINFO_R_OK)
+ {
+ SysLog(NID_APP, "pkgmgrinfo_pkginfo_get_type(): type = [%s]", pType);
+ type = *pType;
+
+ if (strcmp(pType, "tpk") == 0)
+ {
+ packageType = PACKAGE_TYPE_TPK;
+ }
+ else if (strcmp(pType, "wgt") == 0)
+ {
+ packageType = PACKAGE_TYPE_WGT;
+ }
+ }
+ else
+ {
+ SysLog(NID_APP, "pkgmgrinfo_pkginfo_get_type() is failed. result = [%d]", res);
+ }
+
+ pkgmgrinfo_pkginfo_destroy_pkginfo(handle);
+
+ return packageType;
+}
+
+} } } // Tizen::App::Package