diff -r 000000000000 -r ba25891c3a9e ncdengine/provider/client/src/ncdsearchnodebundleproxy.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ncdengine/provider/client/src/ncdsearchnodebundleproxy.cpp Thu Dec 17 08:51:10 2009 +0200 @@ -0,0 +1,144 @@ +/* +* Copyright (c) 2006 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: Contains CNcdSearchNodeFolder class implementation +* +*/ + + +#include "ncdsearchnodebundleproxy.h" +#include "ncdoperationmanagerproxy.h" +#include "ncdloadnodeoperationproxy.h" +#include "catalogsinterfaceidentifier.h" +#include "catalogsdebug.h" +#include "catalogsutils.h" +#include "ncdchildentity.h" +#include "ncdnodemanagerproxy.h" +#include "ncdchildloadmode.h" +#include "ncdcapabilities.h" + +CNcdSearchNodeBundleProxy* CNcdSearchNodeBundleProxy::NewL( + MCatalogsClientServer& aSession, + TInt aHandle, + CNcdNodeManagerProxy& aNodeManager, + CNcdOperationManagerProxy& aOperationManager, + CNcdFavoriteManagerProxy& aFavoriteManager ) + { + DLTRACEIN(("")); + CNcdSearchNodeBundleProxy* self = NewLC( + aSession, aHandle, aNodeManager, aOperationManager, aFavoriteManager ); + CleanupStack::Pop( self ); + return self; + } + +CNcdSearchNodeBundleProxy* CNcdSearchNodeBundleProxy::NewLC( + MCatalogsClientServer& aSession, + TInt aHandle, + CNcdNodeManagerProxy& aNodeManager, + CNcdOperationManagerProxy& aOperationManager, + CNcdFavoriteManagerProxy& aFavoriteManager ) + { + DLTRACEIN(("")); + CNcdSearchNodeBundleProxy* self = new ( ELeave ) CNcdSearchNodeBundleProxy( + aSession, aHandle, aNodeManager, aOperationManager, aFavoriteManager ); + // Using PushL because the object does not have any references yet + CleanupStack::PushL( self ); + + self->ConstructL(); + return self; + } + +CNcdSearchNodeBundleProxy::CNcdSearchNodeBundleProxy( + MCatalogsClientServer& aSession, + TInt aHandle, + CNcdNodeManagerProxy& aNodeManager, + CNcdOperationManagerProxy& aOperationManager, + CNcdFavoriteManagerProxy& aFavoriteManager ) +: CNcdSearchNodeFolderProxy( aSession, aHandle, aNodeManager, + aOperationManager, aFavoriteManager ) + { + } + +CNcdSearchNodeBundleProxy::~CNcdSearchNodeBundleProxy() + { + } + +TInt CNcdSearchNodeBundleProxy::ChildCount() const + { + return iChildren.Count(); + } + + +MNcdNode* CNcdSearchNodeBundleProxy::ChildL( TInt aIndex ) + { + DLTRACEIN(( _L("This parent: %S, %S"), &Namespace(), &Id() )); + + + if ( aIndex < 0 || aIndex >= iChildren.Count() ) + { + // Nothing to be done + DLERROR(( "Index error. child count: %d Given index: %d", + iChildren.Count(), aIndex )); + DASSERT( EFalse ); + User::Leave( KErrArgument ); + } + + const CNcdNodeIdentifier* child = &iChildren[aIndex]->Identifier(); + + MNcdNode* node( NULL ); + + TRAPD( err, node = &NodeManager().NodeL( *child ) ); + + if ( err == KErrNotFound ) + { + return NULL; + } + + User::LeaveIfError( err ); + + // Increase the reference counter by one + node->AddRef(); + + DLTRACEOUT(("")); + + return node; + } + + +MNcdLoadNodeOperation* CNcdSearchNodeBundleProxy::LoadChildrenL( TInt aIndex, + TInt aSize, + TNcdChildLoadMode aMode, + MNcdLoadNodeOperationObserver& aObserver ) + { + DLTRACEIN((("this: %X"), this)); + DASSERT( iSearchFilter ); + + if( aSize < 1 || aIndex < 0 || ( aMode == ELoadMetadata && aIndex + aSize > ChildCount() )) + { + // Nothing to be done + DLERROR(( "Argument error. ChildCount: %d Given index: %d, size: %d", + ChildCount(), aIndex, aSize )); + DASSERT( EFalse ); + User::Leave( KErrArgument ); + } + + DLTRACE(( _L("Node: %S, %S"), &Namespace(), &Id() )); + + // Search bundle may contain transparent stuff, so use server child count for loading + // to get correct indexing on server side. + return CNcdSearchNodeFolderProxy::LoadChildrenL( + 0, + ServerChildCount(), + aMode, + aObserver ); + }