idlefw/plugins/wrtdataplugin/src/wrtdataobserver.cpp
changeset 0 79c6a41cd166
child 1 844b978f8d5e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/idlefw/plugins/wrtdataplugin/src/wrtdataobserver.cpp	Thu Dec 17 08:54:17 2009 +0200
@@ -0,0 +1,224 @@
+/*
+* Copyright (c) 2005-2007 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:
+* Plug-in main class
+*
+*/
+
+#include <LiwServiceHandler.h>
+#include <LiwVariant.h>
+#include <LiwGenericParam.h>
+#include "wrtdata.h"
+#include "wrtdataobserver.h"
+#include "wrtdatapluginconst.h"
+// ---------------------------------------------------------------------------
+// Constructor
+// ---------------------------------------------------------------------------
+//
+CWrtDataObserver::CWrtDataObserver ()
+    {
+
+    }
+        
+// ---------------------------------------------------------------------------
+// Destructor
+// ---------------------------------------------------------------------------
+//
+CWrtDataObserver ::~CWrtDataObserver ()
+    {
+    TRAP_IGNORE( ReleaseL());
+    iInterface = NULL;
+    iData = NULL;
+    }
+
+// ---------------------------------------------------------------------------
+// Register for notifications
+// ---------------------------------------------------------------------------
+//
+void CWrtDataObserver::RegisterL( CLiwDefaultMap* aFilter )
+    {
+    CLiwGenericParamList* inParamList = CLiwGenericParamList::NewL();
+    CleanupStack::PushL( inParamList );
+    CLiwGenericParamList* outParamList = CLiwGenericParamList::NewL();
+    CleanupStack::PushL( outParamList );
+        
+    // Fill in input list for RequestNotification command
+    inParamList->AppendL(TLiwGenericParam(KType,TLiwVariant(KCpData_PubData)));
+    inParamList->AppendL(TLiwGenericParam(KFilter ,TLiwVariant(aFilter)));
+        
+    iError = KErrNone;
+    TRAP( iError, iInterface->ExecuteCmdL( 
+                KRequestNotification,
+                *inParamList,
+                *outParamList,
+                0,
+                this ) );
+    
+    CleanupStack::PopAndDestroy( outParamList );
+    CleanupStack::PopAndDestroy( inParamList ); 
+    }
+
+// ---------------------------------------------------------------------------
+// Sing off to notification
+// ---------------------------------------------------------------------------
+//
+void CWrtDataObserver ::ReleaseL()
+    {
+    if( iInterface )
+        {
+        CLiwGenericParamList* inParamList = CLiwGenericParamList::NewL();
+        CleanupStack::PushL( inParamList );
+        CLiwGenericParamList* outParamList = CLiwGenericParamList::NewL();
+        CleanupStack::PushL( outParamList );
+        
+        TInt err(KErrNone);
+        TRAP(err, iInterface->ExecuteCmdL( 
+                KRequestNotification,
+                *inParamList,
+                *outParamList,
+                KLiwOptCancel,
+                this ));
+        
+        CleanupStack::PopAndDestroy( outParamList );
+        CleanupStack::PopAndDestroy( inParamList );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// Factory method construction
+// ---------------------------------------------------------------------------
+//
+CWrtDataObserver * CWrtDataObserver::NewL( MLiwInterface* aInterface, CWrtData* aData )
+    {
+    CWrtDataObserver * self = new (ELeave) CWrtDataObserver();
+    CleanupStack::PushL( self );
+    self->ConstructL( aInterface, aData );
+    CleanupStack::Pop( self );
+    return self;    
+    }
+        
+// ---------------------------------------------------------------------------
+// 2n phase constructor
+// ---------------------------------------------------------------------------
+//
+void CWrtDataObserver::ConstructL( MLiwInterface* aInterface, CWrtData* aData )
+    {
+    iData = aData;
+    iInterface = aInterface;
+    }
+
+// ---------------------------------------------------------------------------
+// Handles Published content notification
+// ---------------------------------------------------------------------------
+//
+TInt CWrtDataObserver::HandleNotifyL(
+        TInt aErrorCode,
+        TInt /*aEventId*/,
+        CLiwGenericParamList& aEventParamList,
+        const CLiwGenericParamList& /*aInParamList*/ )
+    {
+     
+    // Is plugin active to refresh the published data
+	iError = aErrorCode;        
+	TInt count(0);
+	TInt pos(0);
+	const TLiwGenericParam* param(NULL);
+	CLiwDefaultList* listOfMaps = CLiwDefaultList::NewLC();
+	param = aEventParamList.FindFirst(pos,KChangeInfo);
+	if( param )
+		{
+		 User::LeaveIfError( param->Value().Get( *listOfMaps ) );
+		 count = listOfMaps->Count();
+		}
+	TLiwVariant variant;
+	// Extract the data from the map 
+	for(TInt i = 0;i < count; i++)
+		{
+		listOfMaps->AtL(i,variant);
+		HBufC16* operation = NULL;
+
+		CLiwDefaultMap *map = CLiwDefaultMap::NewLC();
+		variant.Get( *map );
+		TBool found;
+		found = map->FindL( KOperation, variant );
+		if (found)
+		   {
+		   operation = variant.AsDes().AllocLC();
+		   }
+		variant.Reset();
+		if( operation->Des() != KOperationExecute )
+		   {
+		   // Nothing to update for execute action
+		   HBufC16* publisher = NULL; 
+		   HBufC16* contentType = NULL;
+		   HBufC16* contentId = NULL;
+		   found = map->FindL( KFLAG, variant );
+		   if ( found)
+			   {
+			   // notification from publisher registry
+			  if ( operation->Des() !=  KOperationDelete )
+				  {
+				  iData->UpdatePublisherStatusL();
+				  }
+			   }
+		   // ignore update if plugin is in suspend mode
+		   else if ( iData->IsPluginActive() ) 
+			   { 
+			   // notification from content registry
+			   found = map->FindL( KPublisherId, variant );
+			   if (found)
+				   {
+				   publisher = variant.AsDes().AllocLC();
+				   }
+			   variant.Reset();
+			   found = map->FindL( KContentType, variant );
+			   if (found)
+				  {
+				  contentType = variant.AsDes().AllocLC();
+				  }
+			   variant.Reset();
+			   found = map->FindL( KContentId, variant );
+			   if (found)
+				  {
+				  contentId = variant.AsDes().AllocLC();
+				  }
+			   variant.Reset();
+			   iData->RefreshL( *publisher, *contentType, *contentId, *operation );
+			   
+			   if ( contentId )
+				   {
+				   CleanupStack::PopAndDestroy( contentId );
+				   }
+			  if ( contentType )
+				   {
+				   CleanupStack::PopAndDestroy( contentType );
+				   }
+			  if ( publisher )
+				   {
+				   CleanupStack::PopAndDestroy( publisher );
+				   }
+			}
+			 variant.Reset();
+		   }
+		if ( operation )
+			{
+			CleanupStack::PopAndDestroy( operation );
+			}
+		CleanupStack::PopAndDestroy( map );
+		}
+	CleanupStack::PopAndDestroy( listOfMaps );
+	
+    return aErrorCode;
+    }
+