X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=src%2Fapp%2Fpackage%2FFAppPkg_PackageInfoImpl.cpp;h=b4fd895d4fe44b1e100eae1c38e63e4cc4c796d7;hb=029d7bcea11da84ba98a44001607f992f8b38018;hp=4151206f5d93d894f710f97eaffa73207106c0e5;hpb=d33cc2e9f30697fc25b132353669ecf252a2ce9e;p=platform%2Fframework%2Fnative%2Fappfw.git diff --git a/src/app/package/FAppPkg_PackageInfoImpl.cpp b/src/app/package/FAppPkg_PackageInfoImpl.cpp index 4151206..b4fd895 100755 --- a/src/app/package/FAppPkg_PackageInfoImpl.cpp +++ b/src/app/package/FAppPkg_PackageInfoImpl.cpp @@ -1,5 +1,4 @@ // -// Open Service Platform // Copyright (c) 2012 Samsung Electronics Co., Ltd. // // Licensed under the Apache License, Version 2.0 (the License); @@ -30,12 +29,15 @@ #include #include #include +#include #include +#include #include #include -#include +#include +#include "FApp_PackageManagerProxy.h" #include "FAppPkg_PackageManagerImpl.h" #include "FAppPkg_PackageInfoImpl.h" #include "FAppPkg_PackageAppInfoImpl.h" @@ -78,7 +80,19 @@ _PackageInfoImpl::SetVersion(const String& version) PackageType _PackageInfoImpl::GetType(void) const { - return __packageType; + SysTryReturn(NID_APP, __id.IsEmpty() == false, PACKAGE_TYPE_TPK, E_SYSTEM, "[E_SYSTEM] id.IsEmpty() is empty."); + + result r = E_SUCCESS; + PackageType type = PACKAGE_TYPE_TPK; + + _PackageManagerProxy packageManagerProxy; + r = packageManagerProxy.Construct(); + SysTryReturn(NID_APP, r == E_SUCCESS, PACKAGE_TYPE_TPK, E_SYSTEM, "packageManagerProxy.Construct() failed."); + + type = packageManagerProxy.GetType(__id); + SysTryReturn(NID_APP, r == E_SUCCESS, PACKAGE_TYPE_TPK, r, "packageManagerProxy.GetType(%ls) failed.", __id.GetPointer()); + + return type; } result @@ -212,25 +226,26 @@ _PackageInfoImpl::GetSize(void) const if (__fromDatabase) { - SysTryReturn(NID_APP, __packageInfoHandle, 0, E_SYSTEM, "[E_SYSTEM] __packageInfoHandle is null."); + SysTryReturn(NID_APP, __id.IsEmpty() == false, 0, E_SYSTEM, "id is IsEmpty."); - int result = PMINFO_R_OK; + std::unique_ptr pPackage(_StringConverter::CopyToCharArrayN(__id)); + SysTryReturn(NID_APP, pPackage, 0, E_OUT_OF_MEMORY, "pPackage is null."); - result = pkgmgrinfo_pkginfo_get_total_size(__packageInfoHandle, &size); - if (result == 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]", result); - } + void* pClient = pkgmgr_client_new(PC_REQUEST); + SysTryReturn(NID_APP, pClient, 0, E_SYSTEM, "pkgmgr_client_new() failed."); + + SysLog(NID_APP, "pkgmgr_client_request_service(PM_REQUEST_GET_SIZE, %s)", pPackage.get()); + size = pkgmgr_client_request_service(PM_REQUEST_GET_SIZE, 0, pClient, null, pPackage.get(), null, null, null); + + pkgmgr_client_free(pClient); } else { SysLog(NID_APP, "GetSize() is not available."); } + SysLog(NID_APP, "size = [%d]", size); + return (long long) size; } @@ -241,25 +256,26 @@ _PackageInfoImpl::GetDataSize(void) const if (__fromDatabase) { - SysTryReturn(NID_APP, __packageInfoHandle, 0, E_SYSTEM, "[E_SYSTEM] __packageInfoHandle is null."); + SysTryReturn(NID_APP, __id.IsEmpty() == false, 0, E_SYSTEM, "id is IsEmpty."); - int result = PMINFO_R_OK; + std::unique_ptr pPackage(_StringConverter::CopyToCharArrayN(__id)); + SysTryReturn(NID_APP, pPackage, 0, E_OUT_OF_MEMORY, "pPackage is null."); - result = pkgmgrinfo_pkginfo_get_data_size(__packageInfoHandle, &dataSize); - if (result == PMINFO_R_OK) - { - SysLog(NID_APP, "pkgmgrinfo_pkginfo_get_data_size(): dataSize = [%d]", dataSize); - } - else - { - SysLog(NID_APP, "pkgmgrinfo_pkginfo_get_data_size() is failed. result = [%d]", result); - } + void* pClient = pkgmgr_client_new(PC_REQUEST); + SysTryReturn(NID_APP, pClient, 0, E_SYSTEM, "pkgmgr_client_new() failed."); + + SysLog(NID_APP, "pkgmgr_client_request_service(PM_REQUEST_GET_SIZE, %s)", pPackage.get()); + dataSize = pkgmgr_client_request_service(PM_REQUEST_GET_SIZE, 1, pClient, null, pPackage.get(), null, null, null); + + pkgmgr_client_free(pClient); } else { SysLog(NID_APP, "GetDataSize() is not available."); } + SysLog(NID_APP, "dataSize = [%d]", dataSize); + return (long long) dataSize; } @@ -322,10 +338,10 @@ _PackageInfoImpl::GetPackageAppInfoListN(void) PackageAppInfo* pPackageAppInfo = dynamic_cast (__pPackageAppInfoList->GetAt(i)); if (pPackageAppInfo) { - PackageAppInfo* pInfo = new (std::nothrow) PackageAppInfo; + std::unique_ptr< PackageAppInfo > pInfo(new (std::nothrow) PackageAppInfo); SysTryReturn(NID_APP, pInfo, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Insufficient memory"); - _PackageAppInfoImpl* pPackageAppInfoImpl = _PackageAppInfoImpl::GetInstance(pInfo); + _PackageAppInfoImpl* pPackageAppInfoImpl = _PackageAppInfoImpl::GetInstance(pInfo.get()); SysTryReturn(NID_APP, pPackageAppInfoImpl, null, E_SYSTEM, "pPackageAppInfoImpl is null."); AppId appId = pPackageAppInfo->GetAppId(); @@ -340,7 +356,7 @@ _PackageInfoImpl::GetPackageAppInfoListN(void) pPackageAppInfoImpl->SetMenuIconVisible(menuIconVisible); pPackageAppInfoImpl->SetMainApp(mainApp); - r = pList->Add(*pInfo); + r = pList->Add(*pInfo.release()); } } } @@ -364,7 +380,7 @@ _PackageInfoImpl::GetPackageAppInfoN(const AppId& appId) const res = pkgmgrinfo_appinfo_get_appinfo(pAppId.get(), &appInfoHandle); if (res == 0) { - SysLog(NID_APP, "pkgmgrinfo_appinfo_get_appinfo(): appId = [%s]", pAppId.get()); + SysLog(NID_APP, "pkgmgrinfo_appinfo_get_appinfo(): app = [%s]", pAppId.get()); PackageAppInfo* pPackageAppInfo = new (std::nothrow) PackageAppInfo; SysTryReturn(NID_APP, pPackageAppInfo != null, 0, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Insufficient memory"); @@ -382,8 +398,6 @@ _PackageInfoImpl::GetPackageAppInfoN(const AppId& appId) const { SysTryReturn(NID_APP, __pPackageAppInfoList, null, E_SYSTEM, "__pPackageAppInfoList must not be null."); - result r = E_SUCCESS; - for (int i = 0; i < __pPackageAppInfoList->GetCount(); i++) { PackageAppInfo* pPackageAppInfo = dynamic_cast < PackageAppInfo* >(__pPackageAppInfoList->GetAt(i)); @@ -394,24 +408,35 @@ _PackageInfoImpl::GetPackageAppInfoN(const AppId& appId) const continue; } - PackageAppInfo* pInfo = new (std::nothrow) PackageAppInfo; + _PackageAppInfoImpl* pPackageAppInfoImpl = _PackageAppInfoImpl::GetInstance(pPackageAppInfo); + SysTryReturn(NID_APP, pPackageAppInfoImpl, null, E_SYSTEM, "pPackageAppInfoImpl is null."); + + std::unique_ptr< PackageAppInfo > pInfo(new (std::nothrow) PackageAppInfo); SysTryReturn(NID_APP, pInfo, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Insufficient memory"); - _PackageAppInfoImpl* pPackageAppInfoImpl = _PackageAppInfoImpl::GetInstance(pInfo); - SysTryReturn(NID_APP, pPackageAppInfoImpl, null, E_SYSTEM, "pPackageAppInfoImpl is null."); + _PackageAppInfoImpl* pImpl = _PackageAppInfoImpl::GetInstance(pInfo.get()); + SysTryReturn(NID_APP, pImpl, null, E_SYSTEM, "pImpl is null."); String appName = pPackageAppInfo->GetAppName(); String appDisplayName = pPackageAppInfo->GetAppDisplayName(); bool menuIconVisible = pPackageAppInfo->IsMenuIconVisible(); bool mainApp = pPackageAppInfo->IsMainApp(); - pPackageAppInfoImpl->SetAppId(appId); - pPackageAppInfoImpl->SetAppName(appName); - pPackageAppInfoImpl->SetAppDisplayName(appDisplayName); - pPackageAppInfoImpl->SetMenuIconVisible(menuIconVisible); - pPackageAppInfoImpl->SetMainApp(mainApp); + int size = 0; + char* pIcon = pPackageAppInfoImpl->GetAppMenuIconBufferN(size); + if (pIcon) + { + pImpl->SetAppMenuIconBuffer(pIcon, size); + delete pIcon; + } + + pImpl->SetAppId(appId); + pImpl->SetAppName(appName); + pImpl->SetAppDisplayName(appDisplayName); + pImpl->SetMenuIconVisible(menuIconVisible); + pImpl->SetMainApp(mainApp); - return pInfo; + return pInfo.release(); } } } @@ -447,7 +472,7 @@ _PackageInfoImpl::GetPackageAppInfo(const pkgmgrinfo_appinfo_h handle, PackageAp res = pkgmgrinfo_appinfo_get_appid(handle, &pAppId); if (res == 0) { - SysLog(NID_APP, "pkgmgrinfo_appinfo_get_appid(): appId = [%s]", pAppId); + SysLog(NID_APP, "pkgmgrinfo_appinfo_get_appid(): app = [%s]", pAppId); pPackageAppInfoImpl->Construct(pAppId); } else @@ -458,32 +483,71 @@ _PackageInfoImpl::GetPackageAppInfo(const pkgmgrinfo_appinfo_h handle, PackageAp return true; } -ArrayList* +IList* _PackageInfoImpl::GetPrivilegeListN(void) const { - SysTryReturn(NID_APP, __pPrivilegeList, null, E_SYSTEM, "__pPrivilegeList must not be null."); - result r = E_SUCCESS; - ArrayList* pPrivilegeList = new (std::nothrow) ArrayList; + std::unique_ptr< ArrayList > pPrivilegeList(new (std::nothrow) ArrayList); SysTryReturn(NID_APP, pPrivilegeList, null, E_OUT_OF_MEMORY, "pPrivilegeList must not be null."); pPrivilegeList->Construct(); - for (int i = 0; i < __pPrivilegeList->GetCount(); i++) + if (__fromDatabase) + { + SysTryReturn(NID_APP, __id.IsEmpty() == false, null, E_SYSTEM, "__id is empty."); + + std::unique_ptr< IList > pList(_PrivilegeManager::GetPrivilegeListN(__id)); + if (pList == null) + { + SysLog(NID_APP, "_PrivilegeManager::GetPrivilegeListN() is null."); + return null; + } + + for (int i = 0; i < pList->GetCount(); i++) + { + String* pPrivilege = dynamic_cast < String* >(pList->GetAt(i)); + if (pPrivilege) + { + std::unique_ptr< PrivilegeInfo > pPrivilegeInfo(new (std::nothrow) PrivilegeInfo); + SysTryReturn(NID_APP, pPrivilegeInfo, null, E_OUT_OF_MEMORY, "pPrivilegeInfo must not be null."); + + r = pPrivilegeInfo->Construct(*pPrivilege); + SysTryReturn(NID_APP, !IsFailed(r), null, E_SYSTEM, "pPrivilegeInfo->Construct() failed."); + + r = pPrivilegeList->Add(*pPrivilegeInfo.release()); + SysTryReturn(NID_APP, !IsFailed(r), null, E_SYSTEM, "pPrivilegeList->Add() failed."); + } + } + } + else { - String* pPrivilege = dynamic_cast (__pPrivilegeList->GetAt(i)); - if (pPrivilege) + if (__pPrivilegeList) { - PrivilegeInfo* pPrivilegeInfo = new (std::nothrow) PrivilegeInfo; - SysTryReturn(NID_APP, pPrivilegeInfo, null, E_OUT_OF_MEMORY, "pPrivilegeInfo must not be null."); + for (int i = 0; i < __pPrivilegeList->GetCount(); i++) + { + String* pPrivilege = dynamic_cast < String* >(__pPrivilegeList->GetAt(i)); + if (pPrivilege) + { + std::unique_ptr< PrivilegeInfo > pPrivilegeInfo(new (std::nothrow) PrivilegeInfo); + SysTryReturn(NID_APP, pPrivilegeInfo, null, E_OUT_OF_MEMORY, "pPrivilegeInfo must not be null."); - pPrivilegeInfo->Construct(*pPrivilege); + r = pPrivilegeInfo->Construct(*pPrivilege); + SysTryReturn(NID_APP, !IsFailed(r), null, E_SYSTEM, "pPrivilegeInfo->Construct() failed."); - r = pPrivilegeList->Add(*pPrivilegeInfo); + r = pPrivilegeList->Add(*pPrivilegeInfo.release()); + SysTryReturn(NID_APP, !IsFailed(r), null, E_SYSTEM, "pPrivilegeList->Add() failed."); + } + } } - } + } - return pPrivilegeList; + if (pPrivilegeList->GetCount() <= 0) + { + SysLog(NID_APP, "pPrivilegeList->GetCount() is invalid."); + return null; + } + + return pPrivilegeList.release(); } result @@ -979,28 +1043,25 @@ _PackageInfoImpl::Construct(const PackageId& packageId) char* pUrl = null; char* pMainAppId = null; char* pStoreClientId = null; + char* pRootPath = null; int installedTime = 0; pkgmgrinfo_installed_storage storage = PMINFO_INTERNAL_STORAGE; bool removable = true; - - // temp - Database db; - DbStatement* pStmt = null; - DbEnumerator* pEnum = null; - String query; + bool movable = true; + bool preloaded = true; + bool updated = true; std::unique_ptr pPackageId(_StringConverter::CopyToCharArrayN(packageId)); SysTryReturnResult(NID_APP, pPackageId, E_OUT_OF_MEMORY, "pPackageId is null"); result = pkgmgrinfo_pkginfo_get_pkginfo(pPackageId.get(), &__packageInfoHandle); - SysTryReturnResult(NID_APP, result == PMINFO_R_OK, E_PKG_NOT_INSTALLED, "pkgmgrinfo_pkginfo_get_pkginfo() is failed. result=[%d], packageId=[%s]", result, pPackageId.get()); + SysTryReturnResult(NID_APP, result == PMINFO_R_OK, E_PKG_NOT_INSTALLED, "pkgmgrinfo_pkginfo_get_pkginfo() is failed. result=[%d], package=[%s]", result, pPackageId.get()); __fromDatabase = true; result = pkgmgrinfo_pkginfo_get_pkgname(__packageInfoHandle, &pPackage); if (result == PMINFO_R_OK) { - SysLog(NID_APP, "pkgmgrinfo_pkginfo_get_pkgname(): package = [%s]", pPackage); String package(pPackage); __id = package; } @@ -1012,7 +1073,6 @@ _PackageInfoImpl::Construct(const PackageId& packageId) result = pkgmgrinfo_pkginfo_get_version(__packageInfoHandle, &pVersion); if (result == PMINFO_R_OK) { - SysLog(NID_APP, "pkgmgrinfo_pkginfo_get_version(): version = [%s]", pVersion); String version(pVersion); __version = version; } @@ -1024,7 +1084,6 @@ _PackageInfoImpl::Construct(const PackageId& packageId) result = pkgmgrinfo_pkginfo_get_type(__packageInfoHandle, &pType); if (result == PMINFO_R_OK) { - SysLog(NID_APP, "pkgmgrinfo_pkginfo_get_type(): type = [%s]", pType); String type(pType); __type = type; } @@ -1036,7 +1095,6 @@ _PackageInfoImpl::Construct(const PackageId& packageId) result = pkgmgrinfo_pkginfo_get_label(__packageInfoHandle, &pName); if (result == PMINFO_R_OK) { - SysLog(NID_APP, "pkgmgrinfo_pkginfo_get_label(): name = [%s]", pName); String Name(pName); __displayName = Name; } @@ -1048,7 +1106,6 @@ _PackageInfoImpl::Construct(const PackageId& packageId) result = pkgmgrinfo_pkginfo_get_icon(__packageInfoHandle, &pIconPath); if (result == PMINFO_R_OK) { - SysLog(NID_APP, "pkgmgrinfo_pkginfo_get_icon(): iconpath = [%s]", pIconPath); String path(pIconPath); __appIconPath = path; } @@ -1060,8 +1117,6 @@ _PackageInfoImpl::Construct(const PackageId& packageId) result = pkgmgrinfo_pkginfo_is_removable(__packageInfoHandle, &removable); if (result == PMINFO_R_OK) { - SysLog(NID_APP, "pkgmgrinfo_pkginfo_is_removable(): removable = [%d]", removable); - if (removable == false) { __uninstallable = false; @@ -1072,10 +1127,51 @@ _PackageInfoImpl::Construct(const PackageId& packageId) SysLog(NID_APP, "pkgmgrinfo_pkginfo_is_removable() is failed. result = [%d]", result); } + result = pkgmgrinfo_pkginfo_is_movable(__packageInfoHandle, &movable); + if (result == PMINFO_R_OK) + { + __movable = movable; + } + else + { + SysLog(NID_APP, "pkgmgrinfo_pkginfo_is_movable() is failed. result = [%d]", result); + } + + result = pkgmgrinfo_pkginfo_is_update(__packageInfoHandle, &updated); + if (result == PMINFO_R_OK) + { + if (updated == true) + { + __downloaded = true; + } + else + { + result = pkgmgrinfo_pkginfo_is_preload(__packageInfoHandle, &preloaded); + if (result == PMINFO_R_OK) + { + if (preloaded == true) + { + __downloaded = false; + } + else + { + __downloaded = true; + } + } + else + { + SysLog(NID_APP, "pkgmgrinfo_pkginfo_is_preload() is failed. result = [%d]", result); + } + } + } + else + { + SysLog(NID_APP, "pkgmgrinfo_pkginfo_is_update() is failed. result = [%d]", result); + } + result = pkgmgrinfo_pkginfo_get_description(__packageInfoHandle, &pDescription); if (result == PMINFO_R_OK) { - SysLog(NID_APP, "pkgmgrinfo_pkginfo_get_description(): description = [%s]", pDescription); String description(pDescription); __description = description; } @@ -1087,7 +1183,6 @@ _PackageInfoImpl::Construct(const PackageId& packageId) result = pkgmgrinfo_pkginfo_get_author_name(__packageInfoHandle, &pAuthor); if (result == PMINFO_R_OK) { - SysLog(NID_APP, "pkgmgrinfo_pkginfo_get_author_name(): author = [%s]", pAuthor); String author(pAuthor); __author = author; } @@ -1121,7 +1216,6 @@ _PackageInfoImpl::Construct(const PackageId& packageId) result = pkgmgrinfo_pkginfo_get_installed_storage(__packageInfoHandle, &storage); if (result == PMINFO_R_OK) { - SysLog(NID_APP, "pkgmgrinfo_pkginfo_get_installed_storage(): storage = [%d]", storage); if (storage == PMINFO_EXTERNAL_STORAGE) { __externalStorage = true; @@ -1135,7 +1229,6 @@ _PackageInfoImpl::Construct(const PackageId& packageId) result = pkgmgrinfo_pkginfo_get_url(__packageInfoHandle, &pUrl); if (result == PMINFO_R_OK) { - SysLog(NID_APP, "pkgmgrinfo_pkginfo_get_url(): url = [%s]", pUrl); String url(pUrl); __url = url; } @@ -1147,7 +1240,6 @@ _PackageInfoImpl::Construct(const PackageId& packageId) result = pkgmgrinfo_pkginfo_get_mainappid(__packageInfoHandle, &pMainAppId); if (result == PMINFO_R_OK) { - SysLog(NID_APP, "pkgmgrinfo_pkginfo_get_mainappid(): mainAppId = [%s]", pMainAppId); AppId mainAppId(pMainAppId); __mainAppId = mainAppId; } @@ -1159,7 +1251,6 @@ _PackageInfoImpl::Construct(const PackageId& packageId) result = pkgmgrinfo_pkginfo_get_storeclientid(__packageInfoHandle, &pStoreClientId); if (result == PMINFO_R_OK) { - SysLog(NID_APP, "pkgmgrinfo_pkginfo_get_storeclientid(): storeClientId = [%s]", pStoreClientId); String storeClientId(pStoreClientId); __storeClientId = storeClientId; } @@ -1168,41 +1259,22 @@ _PackageInfoImpl::Construct(const PackageId& packageId) SysLog(NID_APP, "pkgmgrinfo_pkginfo_get_storeclientid() is failed. result = [%d]", result); } - // temp - query.Format(1024, L"SELECT PkgInfo.*, AppInfo.APP_MAINMENU_ICON FROM AppInfo, PkgInfo WHERE AppInfo.ID = PkgInfo.UNIQUE_ID and AppInfo.APP_DEFAULT = 'True' and PkgInfo.PKG_ID = '%ls'", packageId.GetPointer()); - - r = db.Construct(PACKAGE_DATABASE_FILE_NAME, "r"); - SysTryCatch(NID_APP, r == E_SUCCESS, , r, "[%s] An error occurs while opening a database.", GetErrorMessage(r)); - - pStmt = _PackageManagerImpl::CreateStatementN(db, query); - SysTryCatch(NID_APP, pStmt != null, GetLastResult(), GetLastResult(), "[%s] An error occurs while creating a database statement.", GetErrorMessage(GetLastResult())); - - pEnum = _PackageManagerImpl::ExecuteStatementN(db, pStmt); - if (pEnum != null) + result = pkgmgrinfo_pkginfo_get_root_path(__packageInfoHandle, &pRootPath); + if (result == PMINFO_R_OK) { - if (pEnum->MoveNext() == E_SUCCESS) - { - String rootPath; - int storageType = 0; - - if (pEnum->GetColumnType(16) != DB_COLUMNTYPE_NULL) - { - pEnum->GetStringAt(16, rootPath); - } - if (pEnum->GetColumnType(17) != DB_COLUMNTYPE_NULL) - { - pEnum->GetIntAt(17, storageType); - } - - SetAppRootPath(rootPath); - SetAppStorageType(storageType); - } - - delete pEnum; + String rootPath(pRootPath); + __appRootPath = rootPath; + } + else + { + SysLog(NID_APP, "pkgmgrinfo_pkginfo_get_root_path() is failed. result = [%d]", result); } -CATCH: - delete pStmt; + SysLog(NID_APP, "package(%ls), version(%ls), type(%ls), displayName(%ls), uninstallable(%d), downloaded(%d), updated(%d), preloaded(%d)" + "movable(%d), externalStorage(%d), mainApp(%ls), storeClient(%ls), appRootPath(%ls)", + __id.GetPointer(), __version.GetPointer(), __type.GetPointer(), __displayName.GetPointer(), __uninstallable, __downloaded, updated, preloaded, + __movable, __externalStorage, __mainAppId.GetPointer(), __storeClientId.GetPointer(), __appRootPath.GetPointer()); + return r; }