X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=src%2Fapp%2Fpackage%2FFAppPkg_PackageManagerImpl.cpp;h=39cac0d5f6baffd2b28a21c58e43d2eba5424226;hb=50b4ba4f2f958eeea456d04ffdc4bf714702b10f;hp=6022a6ae1a86560def0748e76ace80534a718433;hpb=cf004c31f3fdc05f94edc73f9f52b13583cce3d1;p=platform%2Fframework%2Fnative%2Fappfw.git diff --git a/src/app/package/FAppPkg_PackageManagerImpl.cpp b/src/app/package/FAppPkg_PackageManagerImpl.cpp index 6022a6a..39cac0d 100755 --- a/src/app/package/FAppPkg_PackageManagerImpl.cpp +++ b/src/app/package/FAppPkg_PackageManagerImpl.cpp @@ -36,6 +36,7 @@ #include #include #include +#include #include #include @@ -49,7 +50,9 @@ 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 @@ -85,15 +88,26 @@ _PackageManagerEvent::FireImpl(IEventListener& listener, const IEventArg& arg) } 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); } } } @@ -380,12 +394,9 @@ _PackageManagerImpl::InstallPackage(const PackageId& packageId, const String& pa 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 pOptionalData(_StringConverter::CopyToCharArrayN(optionalData)); SysTryReturnResult(NID_APP, pOptionalData, E_OUT_OF_MEMORY, "pOptionalData is null."); @@ -668,13 +679,21 @@ _PackageManagerImpl::InstallationEventHandler(int reqId, const char* pType, cons 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) { @@ -739,7 +758,6 @@ _PackageManagerImpl::GetPackageInfoFromFileN(const String& filePath) const SysLog(NID_APP, "packagePath = [%s], extension = [%s]", pPackagePath.get(), pExtension.get()); bool res = true; - result r = E_SUCCESS; if (strcasecmp(pExtension.get(), "tpk") == 0) { @@ -772,6 +790,33 @@ _PackageManagerImpl::GetPackageInfoFromFileN(const String& filePath) const 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; @@ -800,12 +845,7 @@ _PackageManagerImpl::GetPackageInfoFromFileN(const String& filePath) const 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); + pPackageAppInfoImpl->SetAppMenuIconBuffer(pPkgInfo->icon_buf, pPkgInfo->icon_size); } pPackageInfoImpl->AddPackageAppInfo(*pPackageAppInfo.release()); @@ -1324,6 +1364,33 @@ _PackageManagerImpl::PackageAppInfoMetadataHandler(const pkgmgrinfo_appinfo_h ha 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; + } + + return res; +} + _PackageManagerImpl* _PackageManagerImpl::GetInstance(void) {