--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/ncdengine/provider/client/src/ncdnodeseenfolderproxy.cpp Thu Dec 17 08:51:10 2009 +0200
@@ -0,0 +1,196 @@
+/*
+* 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: Contains CNcdNodeSeenFolderProxy
+*
+*/
+
+
+#include "ncdnodeseenfolderproxy.h"
+#include "catalogsdebug.h"
+#include "ncdnodefolderproxy.h"
+#include "catalogsinterfaceidentifier.h"
+#include "catalogsclientserver.h"
+#include "ncdnodefunctionids.h"
+#include "catalogsutils.h"
+#include "ncdnodeidentifier.h"
+#include "ncdnodemanagerproxy.h"
+
+CNcdNodeSeenFolderProxy* CNcdNodeSeenFolderProxy::NewL(
+ MCatalogsClientServer& aSession,
+ TInt aHandle,
+ CNcdNodeFolderProxy& aNode )
+ {
+ DLTRACEIN((""));
+ CNcdNodeSeenFolderProxy* self = NewLC(
+ aSession, aHandle, aNode );
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+
+CNcdNodeSeenFolderProxy* CNcdNodeSeenFolderProxy::NewLC(
+ MCatalogsClientServer& aSession,
+ TInt aHandle,
+ CNcdNodeFolderProxy& aNode )
+ {
+ DLTRACEIN((""));
+ CNcdNodeSeenFolderProxy* self =
+ new( ELeave ) CNcdNodeSeenFolderProxy(
+ aSession, aHandle, aNode );
+ // Using PushL because the object does not have any references yet
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ return self;
+ }
+
+
+CNcdNodeSeenFolderProxy::CNcdNodeSeenFolderProxy(
+ MCatalogsClientServer& aSession,
+ TInt aHandle,
+ CNcdNodeFolderProxy& aNode ) :
+ CNcdInterfaceBaseProxy( aSession, aHandle, &aNode ),
+ iFolder( aNode )
+ {
+ }
+
+
+void CNcdNodeSeenFolderProxy::ConstructL()
+ {
+ DLTRACEIN((""));
+
+ // Register the interface.
+ MNcdNodeSeenFolder* seen( this );
+ DLINFO(("SeenFolder-ptr: %X, this: %X", seen, this ));
+ AddInterfaceL(
+ CCatalogsInterfaceIdentifier::NewL(
+ seen, this, MNcdNodeSeenFolder::KInterfaceUid ) );
+
+ InternalizeL();
+ }
+
+CNcdNodeSeenFolderProxy::~CNcdNodeSeenFolderProxy()
+ {
+ DLTRACEIN((""));
+
+ // Remove interfaces implemented by this class from the interface list.
+ // So, the interface list is up to date when this class object is deleted.
+ RemoveInterface( MNcdNodeSeenFolder::KInterfaceUid );
+ }
+
+
+void CNcdNodeSeenFolderProxy::InternalizeL()
+ {
+ // Nothing to internalize currently.
+ }
+
+void CNcdNodeSeenFolderProxy::SetContentsSeenL()
+ {
+ DLTRACEIN((""));
+
+ // Send the message to server side.
+ TInt output;
+ User::LeaveIfError(
+ ClientServerSession().SendSync(
+ NcdNodeFunctionIds::ENcdNodeSeenFolderSetContentsSeen,
+ KNullDesC(),
+ output,
+ Handle() ) );
+ }
+
+
+TInt CNcdNodeSeenFolderProxy::NewCountL( TInt aLevels ) const
+ {
+ DLTRACEIN((""));
+
+ if ( aLevels < 1 )
+ {
+ User::Leave( KErrArgument );
+ }
+
+ // Send the message to server side.
+ RCatalogsBufferWriter writer;
+ writer.OpenLC();
+ writer().WriteInt32L( aLevels );
+
+ TInt count( 0 );
+ User::LeaveIfError(
+ ClientServerSession().SendSync(
+ NcdNodeFunctionIds::ENcdNodeSeenFolderNewCount,
+ writer.PtrL(),
+ count,
+ Handle() ) );
+
+ CleanupStack::PopAndDestroy( &writer );
+
+ DLINFO(( "count: %d", count ));
+ return count;
+ }
+
+
+RCatalogsArray<MNcdNode> CNcdNodeSeenFolderProxy::NewNodesL( TInt aLevels ) const
+ {
+ DLTRACEIN(("levels: %d", aLevels));
+
+ if ( aLevels < 1 )
+ {
+ User::Leave( KErrArgument );
+ }
+
+ // Send the message to server side.
+ RCatalogsBufferWriter writer;
+ writer.OpenLC();
+ writer().WriteInt32L( aLevels );
+
+ HBufC8* receiveData( NULL );
+ User::LeaveIfError(
+ ClientServerSession().SendSyncAlloc(
+ NcdNodeFunctionIds::ENcdNodeSeenFolderNewNodes,
+ writer.PtrL(),
+ receiveData,
+ Handle(),
+ 0 ) );
+
+ CleanupStack::PopAndDestroy( &writer );
+
+ RCatalogsArray<MNcdNode> array;
+ CleanupResetAndDestroyPushL( array );
+
+ DASSERT( receiveData );
+ CleanupStack::PushL( receiveData );
+
+ // Read the identifiers from receive data and add the nodes to the
+ // array.
+ RDesReadStream desReadStream( *receiveData );
+ CleanupClosePushL( desReadStream );
+
+ TInt identifierCount = desReadStream.ReadInt32L();
+
+ for ( TInt i = 0; i < identifierCount; i++ )
+ {
+ CNcdNodeIdentifier* nodeId = CNcdNodeIdentifier::NewLC( desReadStream );
+ MNcdNode* node = &iFolder.NodeManager().NodeL( *nodeId );
+ CleanupStack::PopAndDestroy( nodeId );
+ array.AppendL( node );
+
+ // Add the reference count to make sure the nodes in the
+ // array don't get deleted
+ node->AddRef();
+ }
+
+ CleanupStack::PopAndDestroy( &desReadStream );
+ CleanupStack::PopAndDestroy( receiveData );
+ CleanupStack::Pop( &array );
+
+ return array;
+ }