contentpublishingsrv/contentpublishingutils/pluginvalidator/src/charvesterpluginvalidator.cpp
changeset 0 79c6a41cd166
child 16 b276298d5729
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/contentpublishingsrv/contentpublishingutils/pluginvalidator/src/charvesterpluginvalidator.cpp	Thu Dec 17 08:54:17 2009 +0200
@@ -0,0 +1,169 @@
+/*
+* 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:  
+ *
+*/
+
+#include <e32property.h>
+#include <ecom/ecom.h>
+#include <mmf/common/mmfcontrollerpluginresolver.h>
+#include <contentharvesterplugin.h> // harvesting plugin
+
+#include "charvesterpluginvalidator.h"
+#include "cblacklisthandler.h"
+
+const TUint32 KInProgressPropertyKey	= { 0x1028000E };
+const TUint32 KHarvesterUid	= { 0x10282E5A };
+
+// ======== MEMBER FUNCTIONS ========
+
+// ----------------------------------------------------------------------------
+//
+// ----------------------------------------------------------------------------
+//
+EXPORT_C CHarvesterPluginValidator* CHarvesterPluginValidator::NewL( TUid aUid, 
+                                                   TAny *aParameter )
+    {
+    CHarvesterPluginValidator* self = 
+					CHarvesterPluginValidator::NewLC( aUid , aParameter );
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// ----------------------------------------------------------------------------
+//
+// ----------------------------------------------------------------------------
+//
+EXPORT_C CHarvesterPluginValidator* CHarvesterPluginValidator::NewLC( TUid aUid,
+                                                    TAny *aParameter )
+    {
+    CHarvesterPluginValidator* self = new( ELeave ) 
+				CHarvesterPluginValidator( aUid, aParameter );
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    return self;
+    }
+
+
+
+// ---------------------------------------------------------------------------
+// destructor
+// ---------------------------------------------------------------------------
+CHarvesterPluginValidator::~CHarvesterPluginValidator()
+    {
+    iInProgressProperty.Close( );
+    delete iBlacklist;
+    }
+
+// ----------------------------------------------------------------------------
+//
+// ----------------------------------------------------------------------------
+//
+CHarvesterPluginValidator::CHarvesterPluginValidator( TUid aUid, TAny* aParameter ): 
+											CPluginValidator(aUid, aParameter),
+                                            iStartup( ETrue )
+    {
+    
+    }
+
+// ----------------------------------------------------------------------------
+//
+// ----------------------------------------------------------------------------
+//
+void CHarvesterPluginValidator::ConstructL()
+    {
+    iBlacklist = CBlacklistHandler::NewL( );    
+    CPluginValidator::ConstructL();
+    }
+
+
+// ----------------------------------------------------------------------------
+//
+// ----------------------------------------------------------------------------
+//
+void CHarvesterPluginValidator::ManagePluginsL()    
+    {
+    TInt errorCode = iInProgressProperty.Define( TUid::Uid( KHarvesterUid ), 
+        		KInProgressPropertyKey, RProperty::EInt );
+    
+    if ( KErrAlreadyExists == errorCode )
+    	{
+    	TInt value(-1);
+    	iInProgressProperty.Get( TUid::Uid( KHarvesterUid ), 
+        		KInProgressPropertyKey, value);
+    	if ( value == 1 )
+    		{
+    		// property value == inprogress
+    		// there was a panic in the previous startup
+    		// so we make unofficial blacklist official
+    		iBlacklist->CopyBlacklistL( EFalse );
+    		}
+    	}
+    else
+    	{
+    	User::LeaveIfError( errorCode );
+    	}
+    // copy blacklisted plugins to unoffical blacklist at startup
+    iBlacklist->CopyBlacklistL( ETrue );
+    
+    // set property value to 1 (which means "in progress")
+	iInProgressProperty.Set( TUid::Uid( KHarvesterUid ), 
+    		KInProgressPropertyKey, 1 );
+    
+    CPluginValidator::ManagePluginsL();
+    
+    if ( iStartup )
+    	{
+    	RProperty::Set( KPSUidActiveIdle2, 
+    		KActiveIdleCpsPluginsUpdated , EPSAiPluginsUpdated );
+    	iStartup = EFalse;
+    	}
+    // set property value to 0 (which means "finished")
+	iInProgressProperty.Set( TUid::Uid( KHarvesterUid ), 
+    		KInProgressPropertyKey, 0 );
+    }
+
+// ----------------------------------------------------------------------------
+//
+// ----------------------------------------------------------------------------
+//
+void CHarvesterPluginValidator::LoadPluginL( TPluginInfo& aPluginInfo )    
+    {
+    if ( !iBlacklist->IsPresentL( aPluginInfo.iImplementationUid ) )
+    	{
+    	//first we append UID to the blacklist
+    	iBlacklist->AppendL( aPluginInfo.iImplementationUid );
+    	TAny* plug ( NULL );
+    	TInt err( KErrNone );
+    	TRAP( err, plug = REComSession::CreateImplementationL( 
+										aPluginInfo.iImplementationUid, 
+										aPluginInfo.iDtor_ID_Key, iParameter ) );
+    	if( err==KErrNone && plug ) 
+    		{
+			TRAP_IGNORE( 
+				CleanupStack::PushL( plug );
+				aPluginInfo.iPlugin = plug;
+				iPluginArray.AppendL( aPluginInfo );
+				CleanupStack::Pop( plug );
+   				static_cast<CContentHarvesterPlugin*>( plug )->UpdateL()
+						);
+    		}
+    	//no panic during load so we can remove UID from blacklist
+    	iBlacklist->RemoveL( aPluginInfo.iImplementationUid );
+    	}
+    }
+
+
+
+