From 200a35e95e02968477c38c2ed7d57974c8cf30a9 Mon Sep 17 00:00:00 2001 From: Duyoung Jang Date: Wed, 3 Apr 2013 14:48:48 +0900 Subject: [PATCH] metadata filter is added. Change-Id: I46a84c23754eb9be64d28f0095fba0e7be6be62c Signed-off-by: Duyoung Jang --- src/app/inc/FAppPkg_PackageManagerImpl.h | 1 + src/app/package/FAppPkg_PackageManagerImpl.cpp | 159 +++++++++++++++++++++++-- 2 files changed, 148 insertions(+), 12 deletions(-) diff --git a/src/app/inc/FAppPkg_PackageManagerImpl.h b/src/app/inc/FAppPkg_PackageManagerImpl.h index 25386d0..317a7be 100755 --- a/src/app/inc/FAppPkg_PackageManagerImpl.h +++ b/src/app/inc/FAppPkg_PackageManagerImpl.h @@ -141,6 +141,7 @@ public: static int PackageInfoHandler(const pkgmgrinfo_pkginfo_h handle, void* pUserData); static int PackageAppInfoHandler(const pkgmgrinfo_appinfo_h handle, void* pUserData); + static int PackageAppInfoMetadataHandler(const pkgmgrinfo_appinfo_h handle, void* pUserdata); void SendPackageEvent(PackageType type, const PackageId& packageId, const char* eventKey, const char* eventValue); diff --git a/src/app/package/FAppPkg_PackageManagerImpl.cpp b/src/app/package/FAppPkg_PackageManagerImpl.cpp index 98558de..1a985af 100755 --- a/src/app/package/FAppPkg_PackageManagerImpl.cpp +++ b/src/app/package/FAppPkg_PackageManagerImpl.cpp @@ -905,20 +905,31 @@ _PackageManagerImpl::GetPackageAppInfoListN(const IMap& packageAppFilterMap) con SysTryReturn(NID_APP, pEnum, null, E_INVALID_ARG, "GetMapEnumeratorN() is failed."); int res = 0; + bool definedKey = false; + bool metadataKey = false; ArrayList* pList = null; + ArrayList list; + ArrayList metadataList; + ArrayList appIdList; pkgmgrinfo_appinfo_filter_h handle = null; + pkgmgrinfo_appinfo_metadata_filter_h metaHandle = null; res = pkgmgrinfo_appinfo_filter_create(&handle); SysTryReturn(NID_APP, res == PMINFO_R_OK, null, E_SYSTEM, "pkgmgrinfo_appinfo_filter_create() is failed. [%d]", res); + res = pkgmgrinfo_appinfo_metadata_filter_create(&metaHandle); + SysTryReturn(NID_APP, res == PMINFO_R_OK, null, E_SYSTEM, "pkgmgrinfo_appinfo_metadata_filter_create() is failed. [%d]", res); + while(pEnum->MoveNext() == E_SUCCESS) { - String* pKey = static_cast(pEnum->GetKey()); + String* pKey = static_cast< String* >(pEnum->GetKey()); SysTryCatch(NID_APP, pKey, , E_INVALID_ARG, "GetKey() is failed."); if ((*pKey) == PACKAGE_APP_FILTER_MENUICON_VISIBLE) { - Boolean* pVal = static_cast(pEnum->GetValue()); + definedKey = true; + + Boolean* pVal = static_cast< Boolean* >(pEnum->GetValue()); SysTryCatch(NID_APP, pVal, , E_INVALID_ARG, "GetValue() is failed."); bool nodisplay = !(pVal->ToBool()); @@ -929,7 +940,9 @@ _PackageManagerImpl::GetPackageAppInfoListN(const IMap& packageAppFilterMap) con } else if ((*pKey) == PACKAGE_APP_FILTER_CATEGORY) { - String* pVal = static_cast(pEnum->GetValue()); + definedKey = true; + + String* pVal = static_cast< String* >(pEnum->GetValue()); SysTryCatch(NID_APP, pVal, , E_INVALID_ARG, "GetValue() is failed."); SysLog(NID_APP, "Key[%ls], Value[%ls]", pKey->GetPointer(), pVal->GetPointer()); @@ -942,21 +955,113 @@ _PackageManagerImpl::GetPackageAppInfoListN(const IMap& packageAppFilterMap) con } else { - SysTryCatch(NID_APP, false, , E_INVALID_ARG, "Invalid key(%ls)", pKey->GetPointer()); + metadataKey = true; + + String* pVal = static_cast< String* >(pEnum->GetValue()); + SysTryCatch(NID_APP, pVal, , E_INVALID_ARG, "GetValue() is failed."); + + SysLog(NID_APP, "Key[%ls], Value[%ls]", pKey->GetPointer(), pVal->GetPointer()); + + std::unique_ptr pMetaKey(_StringConverter::CopyToCharArrayN(*pKey)); + SysTryCatch(NID_APP, pMetaKey, , E_OUT_OF_MEMORY, "pMetaKey is null."); + + std::unique_ptr pValue(_StringConverter::CopyToCharArrayN(*pVal)); + SysTryCatch(NID_APP, pValue, , E_OUT_OF_MEMORY, "pValue is null."); + + res = pkgmgrinfo_appinfo_metadata_filter_add(metaHandle, pMetaKey.get(), pValue.get()); + SysTryCatch(NID_APP, res == PMINFO_R_OK, , E_SYSTEM, "pkgmgrinfo_appinfo_metadata_filter_add(%s, %s) is failed. [%d]", pMetaKey.get(), pValue.get(), res); } } - pList = new (std::nothrow) ArrayList(); - SysTryCatch(NID_APP, pList, , E_OUT_OF_MEMORY, "ArrayList creation failure."); - pList->Construct(); + if ((definedKey == true) && (metadataKey == false)) + { + pList = new (std::nothrow) ArrayList(); + SysTryCatch(NID_APP, pList, , E_OUT_OF_MEMORY, "ArrayList creation failure."); + pList->Construct(); - res = pkgmgrinfo_appinfo_filter_foreach_appinfo(handle, PackageAppInfoHandler, pList); - if (res != 0) + res = pkgmgrinfo_appinfo_filter_foreach_appinfo(handle, PackageAppInfoHandler, pList); + if (res != PMINFO_R_OK) + { + SysLog(NID_APP, "pkgmgrinfo_appinfo_filter_foreach_appinfo() is failed. result = [%d]", res); + + pList->RemoveAll(true); + pList = null; + } + } + else if ((definedKey == false) && (metadataKey == true)) { - SysLog(NID_APP, "pkgmgrinfo_appinfo_filter_foreach_appinfo() is failed. result = [%d]", res); + pList = new (std::nothrow) ArrayList(); + SysTryCatch(NID_APP, pList, , E_OUT_OF_MEMORY, "ArrayList creation failure."); + pList->Construct(); - pList->RemoveAll(true); - pList = null; + res = pkgmgrinfo_appinfo_metadata_filter_foreach(metaHandle, PackageAppInfoMetadataHandler, pList); + if (res != PMINFO_R_OK) + { + SysLog(NID_APP, "pkgmgrinfo_appinfo_metadata_filter_foreach() is failed. result = [%d]", res); + + pList->RemoveAll(true); + pList = null; + } + } + else + { + list.Construct(); + + res = pkgmgrinfo_appinfo_filter_foreach_appinfo(handle, PackageAppInfoHandler, &list); + if (res != PMINFO_R_OK) + { + SysLog(NID_APP, "pkgmgrinfo_appinfo_filter_foreach_appinfo() is failed. result = [%d]", res); + goto CATCH; + } + + metadataList.Construct(); + + res = pkgmgrinfo_appinfo_metadata_filter_foreach(metaHandle, PackageAppInfoMetadataHandler, &metadataList); + if (res != PMINFO_R_OK) + { + SysLog(NID_APP, "pkgmgrinfo_appinfo_metadata_filter_foreach() is failed. result = [%d]", res); + goto CATCH; + } + + for (int i = 0; i < list.GetCount(); i++) + { + PackageAppInfo* pPackageAppInfo = dynamic_cast < PackageAppInfo* >(list.GetAt(i)); + if (pPackageAppInfo) + { + AppLog("PackageAppFilter - AppId [%ls]", pPackageAppInfo->GetAppId().GetPointer()); + + std::unique_ptr< AppId > pAppId(new (std::nothrow) AppId(pPackageAppInfo->GetAppId())); + appIdList.Add(pAppId.release()); + } + } + + pList = new (std::nothrow) ArrayList(); + SysTryCatch(NID_APP, pList, , E_OUT_OF_MEMORY, "ArrayList creation failure."); + pList->Construct(); + + for (int j = 0; j < metadataList.GetCount(); j++) + { + PackageAppInfo* pPackageAppInfo = dynamic_cast < PackageAppInfo* >(metadataList.GetAt(j)); + if (pPackageAppInfo) + { + if (appIdList.Contains(pPackageAppInfo->GetAppId()) == true) + { + AppLog("AppId [%ls] is matched.", pPackageAppInfo->GetAppId().GetPointer()); + + std::unique_ptr< PackageAppInfo > pPackageAppInfo(new (std::nothrow) PackageAppInfo); + SysTryCatch(NID_APP, pPackageAppInfo, , E_OUT_OF_MEMORY, "PackageAppInfo is null."); + + _PackageAppInfoImpl* pPackageAppInfoImpl = _PackageAppInfoImpl::GetInstance(pPackageAppInfo.get()); + pPackageAppInfoImpl->Construct(pPackageAppInfo->GetAppId()); + + pList->Add(pPackageAppInfo.release()); + } + else + { + AppLog("AppId [%ls] is not matched.", pPackageAppInfo->GetAppId().GetPointer()); + } + } + } } CATCH: @@ -965,6 +1070,10 @@ CATCH: pkgmgrinfo_appinfo_filter_destroy(handle); } + if (metaHandle) + { + pkgmgrinfo_appinfo_metadata_filter_destroy(metaHandle); + } return pList; } @@ -1104,6 +1213,32 @@ _PackageManagerImpl::PackageAppInfoHandler(const pkgmgrinfo_appinfo_h handle, vo return 0; } +int +_PackageManagerImpl::PackageAppInfoMetadataHandler(const pkgmgrinfo_appinfo_h handle, void* pUserData) +{ + SysTryReturn(NID_APP, handle, 0, E_SYSTEM, "handle must not be null."); + SysTryReturn(NID_APP, pUserData, 0, E_SYSTEM, "pUserData must not be null."); + + result r = E_SUCCESS; + int res = PMINFO_R_OK; + char* pAppId = null; + ArrayList* pList = (ArrayList*)pUserData; + + res = pkgmgrinfo_appinfo_get_appid(handle, &pAppId); + SysTryReturn(NID_APP, res == PMINFO_R_OK, 0, E_SYSTEM, "pkgmgrinfo_appinfo_get_appid is failed. [%d]", res); + + std::unique_ptr< PackageAppInfo > pPackageAppInfo(new (std::nothrow) PackageAppInfo); + SysTryReturn(NID_APP, pPackageAppInfo, 0, E_OUT_OF_MEMORY, "pPackageAppInfo instance must not be null."); + + _PackageAppInfoImpl* pPackageAppInfoImpl = _PackageAppInfoImpl::GetInstance(pPackageAppInfo.get()); + r = pPackageAppInfoImpl->Construct(pAppId); + SysTryReturn(NID_APP, r == E_SUCCESS, 0, E_SYSTEM, "Construct(%s) is failed.", pAppId); + + pList->Add(*pPackageAppInfo.release()); + + return 0; +} + _PackageManagerImpl* _PackageManagerImpl::GetInstance(void) { -- 2.7.4