#include <FBaseSysLog.h>
#include <FIo.h>
#include <FIoRegistry.h>
+#include <FSecPrivilegeInfo.h>
#include <FSysSystemTime.h>
#include <FBase_StringConverter.h>
using namespace Tizen::Base;
using namespace Tizen::Base::Runtime;
using namespace Tizen::Base::Collection;
+using namespace Tizen::Base::Utility;
using namespace Tizen::Io;
+using namespace Tizen::Security;
using namespace Tizen::System;
namespace Tizen { namespace App { namespace Package
}
else
{
- if (pArg->__install)
+ if (pArg->__install == false)
{
- SysLog(NID_APP, "Installation is Completed(Error). [Package = %ls]", pArg->__packageId.GetPointer());
- pListener->OnPackageInstallationCompleted(pArg->__packageId, PACKAGE_INSTALLATION_RESULT_INVALID_PACKAGE);
+ SysLog(NID_APP, "Uninstallation is Completed(Error). [Package = %ls]", pArg->__packageId.GetPointer());
+ pListener->OnPackageUninstallationCompleted(pArg->__packageId, false);
+ }
+ }
+ }
+ else if (pArg->__eventKey == L"error")
+ {
+ if (pArg->__install)
+ {
+ if (pArg->__eventValue == L"62")
+ {
+ SysLog(NID_APP, "Installation is Completed(Error = STORAGE_FULL(62)). [Package = %ls]", pArg->__packageId.GetPointer());
+ pListener->OnPackageInstallationCompleted(pArg->__packageId, PACKAGE_INSTALLATION_RESULT_STORAGE_FULL);
}
else
{
- SysLog(NID_APP, "Uninstallation is Completed(Error). [Package = %ls]", pArg->__packageId.GetPointer());
- pListener->OnPackageUninstallationCompleted(pArg->__packageId, false);
+ SysLog(NID_APP, "Installation is Completed(Error). [Package = %ls]", pArg->__packageId.GetPointer());
+ pListener->OnPackageInstallationCompleted(pArg->__packageId, PACKAGE_INSTALLATION_RESULT_INVALID_PACKAGE);
}
}
}
{
SysTryReturn(NID_APP, appId.IsEmpty() == false, L"", E_INVALID_ARG, "appId is empty");
- String packageId;
-
- if (appId.StartsWith(L".", 10) == true)
- {
- appId.SubString(0, 10, packageId);
- }
- else
- {
- int result = 0;
- char* pPackageId = null;
- pkgmgrinfo_appinfo_h pAppInfoHandle = null;
+ PackageId packageId;
+ int result = 0;
+ char* pPackageId = null;
+ pkgmgrinfo_appinfo_h pAppInfoHandle = null;
- std::unique_ptr<char[]> pAppId(_StringConverter::CopyToCharArrayN(appId));
- SysTryReturn(NID_APP, pAppId, L"", E_OUT_OF_MEMORY, "pAppId is null");
+ std::unique_ptr<char[]> pAppId(_StringConverter::CopyToCharArrayN(appId));
+ SysTryReturn(NID_APP, pAppId, L"", E_OUT_OF_MEMORY, "pAppId is null");
- result = pkgmgrinfo_appinfo_get_appinfo(pAppId.get(), &pAppInfoHandle);
- SysTryReturn(NID_APP, result == 0, L"", E_PKG_NOT_INSTALLED, "pkgmgrinfo_appinfo_get_appinfo() failed. result=[%d], app=[%s]", result, pAppId.get());
+ result = pkgmgrinfo_appinfo_get_appinfo(pAppId.get(), &pAppInfoHandle);
+ SysTryReturn(NID_APP, result == 0, L"", E_PKG_NOT_INSTALLED, "pkgmgrinfo_appinfo_get_appinfo() failed. result=[%d], app=[%s]", result, pAppId.get());
- result = pkgmgrinfo_appinfo_get_pkgname(pAppInfoHandle, &pPackageId);
+ result = pkgmgrinfo_appinfo_get_pkgname(pAppInfoHandle, &pPackageId);
- packageId.Append(pPackageId);
+ packageId.Append(pPackageId);
- if(pAppInfoHandle)
- {
- pkgmgrinfo_appinfo_destroy_appinfo(pAppInfoHandle);
- }
+ if(pAppInfoHandle)
+ {
+ pkgmgrinfo_appinfo_destroy_appinfo(pAppInfoHandle);
}
SysLog(NID_APP, "app = [%ls], package = [%ls]", appId.GetPointer(), packageId.GetPointer());
return E_SYSTEM;
}
- // optionalData = 12345abcde:StoreClientId=XXXXX12345
- PackageId StoreClientId = _AppInfo::GetPackageId();
+ // optionalData = 12345abcde
String optionalData;
optionalData.Append(packageId);
- optionalData.Append(":StoreClientId=");
- optionalData.Append(StoreClientId);
std::unique_ptr<char[]> pOptionalData(_StringConverter::CopyToCharArrayN(optionalData));
SysTryReturnResult(NID_APP, pOptionalData, E_OUT_OF_MEMORY, "pOptionalData is null.");
pListener->OnPackageInstallationResponseReceived(pPackageId, PACKAGE_INSTALLATION_RESULT_SUCCESS);
SysLog(NID_APP, "OnPackageInstallationResponseReceived(PACKAGE_INSTALLATION_RESULT_SUCCESS)");
}
+
+ delete pListener;
+ }
+ else if (strcmp(pKey, "error") == 0)
+ {
+ if (strcmp(pVal, "62") == 0)
+ {
+ pListener->OnPackageInstallationResponseReceived(pPackageId, PACKAGE_INSTALLATION_RESULT_STORAGE_FULL);
+ SysLog(NID_APP, "OnPackageInstallationResponseReceived(PACKAGE_INSTALLATION_RESULT_STORAGE_FULL)");
+ }
else
{
pListener->OnPackageInstallationResponseReceived(pPackageId, PACKAGE_INSTALLATION_RESULT_INVALID_PACKAGE);
SysLog(NID_APP, "OnPackageInstallationResponseReceived(PACKAGE_INSTALLATION_RESULT_INVALID_PACKAGE)");
}
-
- delete pListener;
}
else if (strcmp(pKey, "install_percent") == 0)
{
pPackageInfoImpl->SetAuthor(pPkgInfo->author);
pPackageInfoImpl->SetMainAppId(pPkgInfo->pkg_name);
+ if (IsHybridPackage(filePath) == true)
+ {
+ PackageInfo hybridServiceInfo;
+ _PackageParser packageParser;
+
+ res = packageParser.Construct(&hybridServiceInfo);
+ 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());
+
+ IList* pList = hybridServiceInfo.GetPrivilegeListN();
+ if (pList)
+ {
+ for (int i = 0; i < pList->GetCount(); i++)
+ {
+ PrivilegeInfo* pPrivilegeInfo = dynamic_cast < PrivilegeInfo* >(pList->GetAt(i));
+ if (pPrivilegeInfo)
+ {
+ String privilege = pPrivilegeInfo->GetId();
+ pPackageInfoImpl->AddPrivilege(*new (std::nothrow) String(privilege));
+ SysLog(NID_APP, "privilege[%ls] is added for hybrid.", privilege.GetPointer());
+ }
+ }
+ }
+ }
+
if (pPkgInfo->privilege_list)
{
GList* pList = null;
SysTryReturn(NID_APP, false, null, E_UNSUPPORTED_FORMAT, "invalid extension! - packagePath = [%s], extension = [%s]", pPackagePath.get(), pExtension.get());
}
+ SetLastResult(E_SUCCESS);
return pPackageInfo.release();
}
return 0;
}
+bool
+_PackageManagerImpl::IsHybridPackage(const String& filePath) const
+{
+ SysTryReturn(NID_APP, filePath.IsEmpty() == false, false, E_INVALID_ARG, "filePath is empty.");
+
+ bool res = true;
+ FileUnzipper unzipper;
+ ZipEntry zipEntry;
+
+ result r = unzipper.Construct(filePath);
+ SysTryReturn(NID_APP, !IsFailed(r), false, E_SYSTEM, "unzipper.Construct() failed.");
+
+ r = unzipper.GetEntry(L"info/manifest.xml", zipEntry);
+ if (!IsFailed(r))
+ {
+ SysLog(NID_APP, "It's hybrid package. [%ls]", filePath.GetPointer());
+ res = true;
+ }
+ else
+ {
+ SysLog(NID_APP, "It's not hybrid package. [%ls]", filePath.GetPointer());
+ res = false;
+ }
+
+ SetLastResult(E_SUCCESS);
+ return res;
+}
+
_PackageManagerImpl*
_PackageManagerImpl::GetInstance(void)
{
if (strcmp(pEventKey, "start") == 0)
{
- if ((strcmp(pEventValue, "install") == 0) || (strcmp(pEventValue, "uninstall") == 0))
+ if ((strcmp(pEventValue, "install") == 0)
+ || (strcmp(pEventValue, "update") == 0)
+ ||(strcmp(pEventValue, "uninstall") == 0))
{
String* pAppId = new (std::nothrow) String(packageId);
SysTryReturnVoidResult(NID_APP, pAppId != null, E_OUT_OF_MEMORY, "pAppId instance must not be null.");
bool
_PackageManagerImpl::IsAppInstalled(const AppId& appId)
{
- if (appId == _AppInfo::GetPackageId())
- {
- return true;
- }
+ SysTryReturn(NID_APP, appId.IsEmpty() == false, false, E_INVALID_ARG, "appId is empty.");
int result = 0;
- pkgmgrinfo_pkginfo_h pPackageInfoHandle = null;
+ pkgmgrinfo_appinfo_h pAppInfoHandle = null;
- std::unique_ptr<char[]> pPackageId(_StringConverter::CopyToCharArrayN(appId));
- SysTryReturn(NID_APP, pPackageId, false, E_OUT_OF_MEMORY, "pPackageId is null");
+ std::unique_ptr<char[]> pAppId(_StringConverter::CopyToCharArrayN(appId));
+ SysTryReturn(NID_APP, pAppId, false, E_OUT_OF_MEMORY, "pAppId is null.");
- result = pkgmgrinfo_pkginfo_get_pkginfo(pPackageId.get(), &pPackageInfoHandle);
- SysTryReturn(NID_APP, result == 0, false, E_APP_NOT_INSTALLED, "pkgmgrinfo_pkginfo_get_pkginfo() failed. result=[%d], package=[%s]", result, pPackageId.get());
+ result = pkgmgrinfo_appinfo_get_appinfo(pAppId.get(), &pAppInfoHandle);
+ if (result != 0)
+ {
+ SysLog(NID_APP, "pkgmgrinfo_appinfo_get_appinfo() failed. result=[%d], app=[%s]", result, pAppId.get());
+ return false;
+ }
- if(pPackageInfoHandle)
+ if(pAppInfoHandle)
{
- pkgmgrinfo_pkginfo_destroy_pkginfo(pPackageInfoHandle);
+ pkgmgrinfo_appinfo_destroy_appinfo(pAppInfoHandle);
}
+ SysLog(NID_APP, "app = [%ls] is installed.", appId.GetPointer());
+
return true;
}