ncdengine/provider/client/src/ncdnodeseenfolderproxy.cpp
changeset 0 ba25891c3a9e
--- /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;
+    }