diff -r 000000000000 -r ba25891c3a9e iaupdate/IAD/engine/controller/src/iaupdatefwpurchaseoperation.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/iaupdate/IAD/engine/controller/src/iaupdatefwpurchaseoperation.cpp Thu Dec 17 08:51:10 2009 +0200 @@ -0,0 +1,251 @@ +/* +* Copyright (c) 2007-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: CIAUpdateFwPurchaseOperation +* +*/ + + + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "iaupdatefwpurchaseoperation.h" +#include "iaupdatefwnodeimpl.h" +#include "iaupdatedebug.h" + + +// --------------------------------------------------------------------------- +// CIAUpdateFwPurchaseOperation::NewL +// +// --------------------------------------------------------------------------- +// +CIAUpdateFwPurchaseOperation* CIAUpdateFwPurchaseOperation::NewL( + CIAUpdateFwNode& aNode, + MIAUpdateContentOperationObserver& aObserver ) + { + CIAUpdateFwPurchaseOperation* self = + CIAUpdateFwPurchaseOperation::NewLC( aNode, aObserver ); + CleanupStack::Pop( self ); + return self; + } + + +// --------------------------------------------------------------------------- +// CIAUpdateFwPurchaseOperation::NewLC +// +// --------------------------------------------------------------------------- +// +CIAUpdateFwPurchaseOperation* CIAUpdateFwPurchaseOperation::NewLC( + CIAUpdateFwNode& aNode, + MIAUpdateContentOperationObserver& aObserver ) + { + CIAUpdateFwPurchaseOperation* self = + new( ELeave ) CIAUpdateFwPurchaseOperation( aNode, aObserver ); + CleanupStack::PushL( self ); + self->ConstructL(); + return self; + } + + +// --------------------------------------------------------------------------- +// CIAUpdateFwPurchaseOperation::CIAUpdateFwPurchaseOperation +// +// --------------------------------------------------------------------------- +// +CIAUpdateFwPurchaseOperation::CIAUpdateFwPurchaseOperation( + CIAUpdateFwNode& aNode, + MIAUpdateContentOperationObserver& aObserver ) +: CIAUpdateNormalContentOperation( aNode, aObserver ) + { + IAUPDATE_TRACE("[IAUPDATE] CIAUpdateFwPurchaseOperation::CIAUpdateFwPurchaseOperation"); + } + + +// --------------------------------------------------------------------------- +// CIAUpdateFwPurchaseOperation::ConstructL +// +// --------------------------------------------------------------------------- +// +void CIAUpdateFwPurchaseOperation::ConstructL() + { + IAUPDATE_TRACE("[IAUPDATE] CIAUpdateFwPurchaseOperation::ConstructL begin"); + + CIAUpdateNormalContentOperation::ConstructL(); + + IAUPDATE_TRACE("[IAUPDATE] CIAUpdateFwPurchaseOperation::ConstructL end"); + } + + +// --------------------------------------------------------------------------- +// CIAUpdateFwPurchaseOperation::~CIAUpdateFwPurchaseOperation +// +// --------------------------------------------------------------------------- +// +CIAUpdateFwPurchaseOperation::~CIAUpdateFwPurchaseOperation() + { + IAUPDATE_TRACE("[IAUPDATE] CIAUpdateFwPurchaseOperation::~CIAUpdateFwPurchaseOperation begin"); + + // This will also reset and delete all the necessary data if needed. + CancelOperation(); + + IAUPDATE_TRACE("[IAUPDATE] CIAUpdateFwPurchaseOperation::~CIAUpdateFwPurchaseOperation end"); + } + + +// --------------------------------------------------------------------------- +// CIAUpdateFwPurchaseOperation::PurchaseProgress +// Content purchase functions +// --------------------------------------------------------------------------- +// +void CIAUpdateFwPurchaseOperation::PurchaseProgress( + MNcdPurchaseOperation& /*aOperation*/, + TNcdProgress /*aProgress*/ ) + { + // Purchase progress is not observed. + } + + +// --------------------------------------------------------------------------- +// CIAUpdateFwPurchaseOperation::QueryReceived +// +// --------------------------------------------------------------------------- +// +void CIAUpdateFwPurchaseOperation::QueryReceived( + MNcdPurchaseOperation& aOperation, + MNcdQuery* aQuery ) + { + IAUPDATE_TRACE("[IAUPDATE] CIAUpdateFwPurchaseOperation::QueryReceived() begin"); + + ContentQueryReceived( aOperation, aQuery ); + + IAUPDATE_TRACE("[IAUPDATE] CIAUpdateFwPurchaseOperation::QueryReceived() end"); + } + + +// --------------------------------------------------------------------------- +// CIAUpdateFwPurchaseOperation::OperationComplete +// +// --------------------------------------------------------------------------- +// +void CIAUpdateFwPurchaseOperation::OperationComplete( + MNcdPurchaseOperation& aOperation, + TInt aError ) + { + IAUPDATE_TRACE_1("[IAUPDATE] CIAUpdateFwPurchaseOperation::OperationComplete() begin: %d", + aError); + + if ( aError != KErrNone ) + { + IAUPDATE_TRACE("[IAUPDATE] Purchase error. Update purchase history."); + // In a purchase operation error case, NCD Engine does not update the + // purchase history information. To make sure that purchase history + // contains the error code for the operation, insert it here. + TRAP_IGNORE( Node().SetIdleErrorToPurchaseHistoryL( aError, EFalse ) ); + } + + ContentOperationComplete( aOperation, aError ); + + IAUPDATE_TRACE("[IAUPDATE] CIAUpdateFwPurchaseOperation::OperationComplete() end"); + } + + +// --------------------------------------------------------------------------- +// CIAUpdateFwPurchaseOperation::HandleContentL +// +// --------------------------------------------------------------------------- +// +MNcdOperation* CIAUpdateFwPurchaseOperation::HandleContentL() + { + IAUPDATE_TRACE("[IAUPDATE] CIAUpdateFwPurchaseOperation::HandleContentL begin"); + + MNcdOperation* operation( PurchaseL() ); + + IAUPDATE_TRACE("[IAUPDATE] CIAUpdateFwPurchaseOperation::HandleContentL end"); + + return operation; + } + + +// --------------------------------------------------------------------------- +// CIAUpdateFwPurchaseOperation::PurchaseL +// +// --------------------------------------------------------------------------- +// +MNcdOperation* CIAUpdateFwPurchaseOperation::PurchaseL() + { + IAUPDATE_TRACE("[IAUPDATE] CIAUpdateFwPurchaseOperation::PurchaseL() begin"); + + MNcdOperation* operation( NULL ); + + MNcdNodePurchase* purchase( + Node().Node().QueryInterfaceLC< MNcdNodePurchase >() ); + + if ( purchase ) + { + // Purchase interface exists. So, we can do purchasing. + if ( !purchase->IsPurchased() ) + { + IAUPDATE_TRACE("[IAUPDATE] Item was not purchased yet"); + + // Only do purchase operation if we have not already done purchasing + // and the purchase option is usable and not obsolete. + RCatalogsArray< MNcdPurchaseOption > options( + purchase->PurchaseOptionsL() ); + CleanupResetAndDestroyPushL( options ); + + // Notice, IsUsableL() will leave with KNcdErrorObsolete if the option + // is obsolete. Let it leave then, because we could not purchase then + // anyways. + if( options.Count() == 1 + && options[ 0 ]->IsFree() + && options[ 0 ]->IsUsableL() ) + { + IAUPDATE_TRACE("[IAUPDATE] Purchase option was correct."); + + operation = purchase->PurchaseL( *options[ 0 ], *this ); + + if( !operation ) + { + // Could not create the operation for some reason. + IAUPDATE_TRACE("[IAUPDATE] ERROR Could not create the operation."); + User::Leave( KErrGeneral ); + } + } + else + { + // Wrong kind of purchase information gotten from the server. + IAUPDATE_TRACE("[IAUPDATE] ERROR Wrong purchase info from server."); + User::Leave( KErrGeneral ); + } + CleanupStack::PopAndDestroy( &options ); + } + CleanupStack::PopAndDestroy( purchase ); + } + else + { + IAUPDATE_TRACE("[IAUPDATE] Purchase interface was not found."); + User::Leave( KErrNotFound ); + } + + IAUPDATE_TRACE("[IAUPDATE] CIAUpdateFwPurchaseOperation::PurchaseL() end"); + + return operation; + } +