contentstorage/caclient/s60/src/caclientsubsession.cpp
changeset 73 4bc7b118b3df
parent 60 f62f87b200ec
--- a/contentstorage/caclient/s60/src/caclientsubsession.cpp	Mon May 03 12:48:45 2010 +0300
+++ b/contentstorage/caclient/s60/src/caclientsubsession.cpp	Fri May 14 16:10:06 2010 +0300
@@ -22,7 +22,7 @@
 #include "casrvdef.h"
 #include "cainnerentry.h"
 #include "caclientproxy.h"
-#include "caclientnotifierproxy.h"
+#include "caobserver.h"
 #include "cautils.h"
 
 // -----------------------------------------------------------------------------
@@ -34,7 +34,8 @@
         const CCaInnerNotifierFilter *aInnerNotifierFilter ) :
     RSubSessionBase(), iSession( aSession ), iObserver( aObserver ),
     iInnerNotifierFilter( aInnerNotifierFilter ),
-    iNotifier( NULL ), iMessageSize( NULL )
+    iNotifier( NULL ), iMessageSize( NULL ), iChangedEntry( NULL ), 
+    iChangedEntryType( EAddChangeType )
     {
 
     }
@@ -44,10 +45,21 @@
 // -----------------------------------------------------------------------------
 void RCaClientSubSession::CreateL()
     {
+    if( iNotifier )
+        {
+        delete iNotifier;
+        iNotifier = NULL;
+        }
+    if( iMessageSize )
+        {
+        delete iMessageSize;
+        iMessageSize = NULL;
+        }
     iMessageSize = new ( ELeave ) TPckgBuf<TInt> ();
     User::LeaveIfError( CreateSubSession( *iSession,
         static_cast<TInt>( EContentArsenalNotifierOpen ) ) );
     iNotifier = CCaClientNotifier::NewL( this );
+    iChangedEntry = CCaInnerEntry::NewL();    
     }
 
 // -----------------------------------------------------------------------------
@@ -55,6 +67,8 @@
 // -----------------------------------------------------------------------------
 void RCaClientSubSession::Close()
     {
+    delete iChangedEntry;
+    iChangedEntry = NULL;
     delete iMessageSize;
     iMessageSize = NULL;
     delete iNotifier;
@@ -88,30 +102,28 @@
 // -----------------------------------------------------------------------------
 //
 // -----------------------------------------------------------------------------
-void RCaClientSubSession::NotifyObserver(
-        CCaInnerEntry* aEntry,
-        TChangeType aChangeType ) const
+void RCaClientSubSession::NotifyObserver() const
     {
     switch( iInnerNotifierFilter->GetNotifierType() )
         {
         case CCaInnerNotifierFilter::EEntryChangedWithId:
             {
-            iObserver->entryChanged( aEntry->GetId(), aChangeType );
+            iObserver->entryChanged( iChangedEntry->GetId(), iChangedEntryType );
             break;
             }
         case CCaInnerNotifierFilter::EEntryChangedWithEntry:
             {
-            iObserver->entryChanged( *aEntry, aChangeType );
+            iObserver->entryChanged( *iChangedEntry, iChangedEntryType );
             break;
             }
         case CCaInnerNotifierFilter::EEntryTouched:
             {
-            iObserver->entryTouched( aEntry->GetId() );
+            iObserver->entryTouched( iChangedEntry->GetId() );
             break;
             }
         case CCaInnerNotifierFilter::EGroupContentChanged:
             {
-            iObserver->groupContentChanged( aEntry->GetId() );
+            iObserver->groupContentChanged( iChangedEntry->GetId() );
             break;
             }
         default:
@@ -124,7 +136,7 @@
 // -----------------------------------------------------------------------------
 //
 // -----------------------------------------------------------------------------
-void RCaClientSubSession::GetChangeInfoAndNotifyObserverL() const
+void RCaClientSubSession::GetChangeInfoL() const
     {
     TIpcArgs args;
     RBuf8 outbuf;
@@ -137,14 +149,11 @@
             EContentArsenalGetChangeInfo, args );
     if( error == KErrNone )
         {
-        CCaInnerEntry* entry = CCaInnerEntry::NewLC();
         RDesReadStream stream( outbuf );
         CleanupClosePushL( stream );
-        entry->InternalizeL( stream );
+        iChangedEntry->InternalizeL( stream );
         CleanupStack::PopAndDestroy( &stream );
-        TChangeType changeType = changeTypePckg();
-        NotifyObserver( entry, changeType );
-        CleanupStack::PopAndDestroy( entry );
+        iChangedEntryType = changeTypePckg();
         }
     CleanupStack::PopAndDestroy( &outbuf );
     }