diff -r 000000000000 -r ba25891c3a9e ncdengine/provider/client/src/ncdsearchrootnodeproxy.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ncdengine/provider/client/src/ncdsearchrootnodeproxy.cpp Thu Dec 17 08:51:10 2009 +0200 @@ -0,0 +1,175 @@ +/* +* 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 CNcdSearchRootNodeProxy class implementation +* +*/ + + +#include "ncdsearchrootnodeproxy.h" +#include "catalogsclientserver.h" +#include "ncdnodemanagerproxy.h" +#include "ncdoperationmanagerproxy.h" +#include "ncdnodeidentifier.h" +#include "catalogsdebug.h" +#include "ncdnodefunctionids.h" +#include "catalogsinterfaceidentifier.h" +#include "ncdloadnodeoperationproxy.h" +#include "ncdchildentity.h" +#include "ncdchildloadmode.h" +#include "ncderrors.h" + +// ======== PUBLIC MEMBER FUNCTIONS ======== + +CNcdSearchRootNodeProxy* CNcdSearchRootNodeProxy::NewL( MCatalogsClientServer& aSession, + TInt aHandle, + CNcdNodeManagerProxy& aNodeManager, + CNcdOperationManagerProxy& aOperationManager, + CNcdFavoriteManagerProxy& aFavoriteManager ) + { + CNcdSearchRootNodeProxy* self = + CNcdSearchRootNodeProxy::NewLC( + aSession, aHandle, aNodeManager, aOperationManager, aFavoriteManager ); + CleanupStack::Pop( self ); + return self; + } + +CNcdSearchRootNodeProxy* CNcdSearchRootNodeProxy::NewLC( MCatalogsClientServer& aSession, + TInt aHandle, + CNcdNodeManagerProxy& aNodeManager, + CNcdOperationManagerProxy& aOperationManager, + CNcdFavoriteManagerProxy& aFavoriteManager ) + { + CNcdSearchRootNodeProxy* self = + new( ELeave ) CNcdSearchRootNodeProxy( + aSession, aHandle, aNodeManager, aOperationManager, aFavoriteManager ); + // Using PushL because the object does not have any references yet + CleanupStack::PushL( self ); + self->ConstructL(); + return self; + } + + +CNcdSearchRootNodeProxy::CNcdSearchRootNodeProxy( MCatalogsClientServer& aSession, + TInt aHandle, + CNcdNodeManagerProxy& aNodeManager, + CNcdOperationManagerProxy& aOperationManager, + CNcdFavoriteManagerProxy& aFavoriteManager ) +: CNcdSearchNodeFolderProxy( aSession, aHandle, aNodeManager, aOperationManager, aFavoriteManager ) + { + } + + +void CNcdSearchRootNodeProxy::ConstructL() + { + CNcdNodeFolderProxy::ConstructL(); + } + +CNcdSearchRootNodeProxy::~CNcdSearchRootNodeProxy() + { + } + + +MNcdNode::TState CNcdSearchRootNodeProxy::State() const + { + DLTRACEIN(("")); + // Search root is a local node that can't be loaded and + // therefore is always initialized. + DLTRACEOUT(("Initialized")); + return MNcdNode::EStateInitialized; + } + + +MNcdLoadNodeOperation* CNcdSearchRootNodeProxy::LoadL( + MNcdLoadNodeOperationObserver& /*aObserver*/ ) + { + DLTRACEIN(("")); + DLTRACEOUT(("")); + // return null because search root can't be loaded. + return NULL; + } + +TInt CNcdSearchRootNodeProxy::ChildCount() const + { + return iChildren.Count(); + } + + +MNcdNode* CNcdSearchRootNodeProxy::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 ); + + node = &NodeManager().NodeL( *child ); + + // Increase the reference counter by one + node->AddRef(); + + DLTRACEOUT(("")); + + return node; + } + +MNcdLoadNodeOperation* CNcdSearchRootNodeProxy::LoadChildrenL( + TInt aIndex, TInt aSize, TNcdChildLoadMode aMode, + MNcdLoadNodeOperationObserver& aObserver ) + { + DLTRACEIN(("")); + 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 ); + } + if( aMode == ELoadMetadata ) + { + // Child metadata can be loaded in a regular load op + return CNcdSearchNodeFolderProxy::LoadChildrenL( aIndex, + aSize, + aMode, + aObserver ); + } + else + { + + return NULL; + } + } + +void CNcdSearchRootNodeProxy::OperationComplete( + MNcdLoadNodeOperation& /*aOperation*/, TInt aError ) + { + DLTRACEIN(( "Error: %d", aError )); + + if ( aError == KErrNone || aError == KNcdErrorSomeCatalogsFailedToLoad ) + { + // update proxy's status from the server + TRAP_IGNORE( InternalizeL() ); + } + } +