diff -r 000000000000 -r ba25891c3a9e ncdengine/provider/server/src/ncdpurchasehistoryutils.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ncdengine/provider/server/src/ncdpurchasehistoryutils.cpp Thu Dec 17 08:51:10 2009 +0200 @@ -0,0 +1,165 @@ +/* +* Copyright (c) 2006-2008 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Implementation of NcdPurchaseHistoryUtils +* +*/ + + +#include "ncdpurchasehistoryutils.h" + +#include "ncdpurchasedetails.h" +#include "ncdpurchasedownloadinfo.h" +#include "ncdpurchasehistorydbimpl.h" +#include "ncdpurchaseinstallinfo.h" +#include "ncdutils.h" +#include "ncdnodeidentifier.h" +#include "ncderrors.h" +#include "catalogsutils.h" +#include "ncddownloadinfo.h" + +#include "catalogsdebug.h" + +// --------------------------------------------------------------------------- +// Purchase details getter +// --------------------------------------------------------------------------- +// +CNcdPurchaseDetails* NcdPurchaseHistoryUtils::PurchaseDetailsLC( + CNcdPurchaseHistoryDb& aPurchaseHistory, + const TUid& aClientUid, + const CNcdNodeIdentifier& aMetadataId, + TBool aLoadIcon ) + { + DLTRACEIN(("")) + + RArray clientUid; + CleanupClosePushL( clientUid ); + clientUid.AppendL( aClientUid ); + + // Create a filter + CNcdPurchaseHistoryFilter* filter = CNcdPurchaseHistoryFilter::NewL( + clientUid.Array(), + aMetadataId.NodeNameSpace(), + aMetadataId.NodeId(), + 0 ); + + CleanupStack::PopAndDestroy( &clientUid ); + CleanupStack::PushL( filter ); + + // Get purchase ids + RArray purchaseIds = aPurchaseHistory.PurchaseIdsL( *filter, + CNcdPurchaseHistoryDb::ENewestFirst ); + + CleanupStack::PopAndDestroy( filter ); + CleanupClosePushL( purchaseIds ); + + // Check that there's at least one purchase + if ( !purchaseIds.Count() ) + { + DLERROR(("No matching purchases found")); + User::Leave( KNcdErrorNoPurchaseInformation ); + } + + // Choose the newest purchase + CNcdPurchaseDetails* purchase = + aPurchaseHistory.PurchaseL( purchaseIds[0], aLoadIcon ); + + CleanupStack::PopAndDestroy( &purchaseIds ); + CleanupStack::PushL( purchase ); + return purchase; + } + +// --------------------------------------------------------------------------- +// Returns true if the given info is a dependency +// --------------------------------------------------------------------------- +// +TBool NcdPurchaseHistoryUtils::IsDependency( + const MNcdPurchaseDownloadInfo& aInfo ) + { + DLTRACEIN(("")); + return IsOneOf( aInfo.ContentUsage(), + MNcdPurchaseDownloadInfo::EDependency, + MNcdPurchaseDownloadInfo::ELauncher, + MNcdPurchaseDownloadInfo::ELauncherOpen ); + } + + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void NcdPurchaseHistoryUtils::RemoveDependenciesL( + CNcdPurchaseDetails& aDetails ) + { + DLTRACEIN(("")); + TInt count = aDetails.DownloadInfoCount(); + TInt i = 0; + + while ( i < count && IsDependency( aDetails.DownloadInfo( i ) ) ) + { + i++; + } + + DLTRACE(("Deps: %d", i)); + while ( i-- ) + { + aDetails.RemoveDownloadInfo( i ); + aDetails.RemoveDownloadedFile( i ); + aDetails.RemoveInstallInfo( i ); + } + } + + + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void NcdPurchaseHistoryUtils::UpdateDependenciesL( + CNcdPurchaseDetails& aDetails, + const RPointerArray& aNewDependencies ) + { + DLTRACEIN(("")); + + RemoveDependenciesL( aDetails ); + + CNcdPurchaseDownloadInfo* downloadInfo( NULL ); + CNcdPurchaseInstallInfo* installInfo( NULL ); + TInt count = aNewDependencies.Count(); + + // Insert new dependencies to the beginning of the arrays + while ( count-- ) + { + downloadInfo = + CNcdPurchaseDownloadInfo::NewLC( + *aNewDependencies[ count ] ); + aDetails.InsertDownloadInfoL( downloadInfo, 0 ); + CleanupStack::Pop( downloadInfo ); + + DLTRACE(( _L("Adding install info, uid: %x, version: %S"), + aNewDependencies[ count ]->ContentId(), + &aNewDependencies[ count ]->ContentVersion() )); + + installInfo = CNcdPurchaseInstallInfo::NewLC(); + installInfo->SetApplicationUid( + aNewDependencies[ count ]->ContentId() ); + installInfo->SetApplicationVersionL( + aNewDependencies[ count ]->ContentVersion() ); + aDetails.InsertInstallInfoL( installInfo, 0 ); + CleanupStack::Pop( installInfo ); + + aDetails.InsertDownloadedFileL( KNullDesC, 0 ); + } + + DLTRACEOUT(("Download infos added successfully")); + }