harvester/common/src/harvestercenreputil.cpp
changeset 0 c53acadfccc6
child 15 3cebc1a84278
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/harvester/common/src/harvestercenreputil.cpp	Mon Jan 18 20:34:07 2010 +0200
@@ -0,0 +1,244 @@
+/*
+* Copyright (c) 2007-2009 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:  Harvester Central Repository utility class*
+*/
+
+
+#include "harvestercenreputil.h"
+#include "centralrepository.h"
+#include "mdsutils.h"
+#include "mdeconstants.h"
+
+const TUid KHarvesterRepoUid = { 0x200009FE };
+const TUint32 KSearchMask                     = 0xFFFF0000;
+const TUint32 KIgnorePathPartialKey           = 0x00010000;
+const TUint32 KBootScanPartialKey             = 0x00020000;
+const TUint32 KBootIgnorePartialKey           = 0x00030000;
+const TUint32 KPartialRestorePartialKey       = 0x00040000;
+const TUint32 KPartialRestoreIgnorePartialKey = 0x00050000;
+
+const TUint32 KRomScanEnabledKey              = 0x00090000;
+
+const TInt32 KThumbnailManagerCenrepUID = 0x102830B0; // TNM cenrep uid
+const TUint32 KEnableDaemon = 0x300; // from TNM
+
+CHarvesterCenRepUtil::CHarvesterCenRepUtil()
+	{
+	// No implementation required
+	}
+
+
+EXPORT_C CHarvesterCenRepUtil::~CHarvesterCenRepUtil()
+	{
+	iFspEngine.Close();
+	iFs.Close();
+	}
+
+EXPORT_C CHarvesterCenRepUtil* CHarvesterCenRepUtil::NewLC()
+	{
+	CHarvesterCenRepUtil* self = new (ELeave)CHarvesterCenRepUtil();
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+EXPORT_C CHarvesterCenRepUtil* CHarvesterCenRepUtil::NewL()
+	{
+	CHarvesterCenRepUtil* self=CHarvesterCenRepUtil::NewLC();
+	CleanupStack::Pop(); // self;
+	return self;
+	}
+
+void CHarvesterCenRepUtil::ConstructL()
+	{
+	User::LeaveIfError( iFs.Connect() );
+	User::LeaveIfError( iFspEngine.Open( iFs, KMdsFSPluginPosition ) );
+	}
+
+EXPORT_C RMdsFSPEngine& CHarvesterCenRepUtil::FspEngine()
+	{
+	return iFspEngine;
+	}
+
+EXPORT_C void CHarvesterCenRepUtil::AddIgnorePathsToFspL( const TDesC& aDrivePrefix )
+	{
+	AddOrRemoveIgnorePathsL( aDrivePrefix, ETrue, KNullDesC );
+	}
+
+EXPORT_C void CHarvesterCenRepUtil::AddIgnorePathsToFspL( const TDesC& aDrivePrefix,
+														  const TDesC& aFilterPrefix )
+	{
+	AddOrRemoveIgnorePathsL( aDrivePrefix, ETrue, aFilterPrefix);
+	}
+
+EXPORT_C void CHarvesterCenRepUtil::RemoveIgnorePathsFromFspL( const TDesC& aDrivePrefix )
+	{
+	AddOrRemoveIgnorePathsL( aDrivePrefix, EFalse, KNullDesC );
+	}
+
+void CHarvesterCenRepUtil::AddOrRemoveIgnorePathsL( const TDesC& aDrivePrefix,
+													TBool aAdd,
+													const TDesC& aFilterPrefix )
+	{
+	CRepository* repo = CRepository::NewLC( KHarvesterRepoUid ); 
+	RArray<TUint32> ignoredKeys;
+	CleanupClosePushL( ignoredKeys );
+	TInt ret = repo->FindL( KIgnorePathPartialKey, KSearchMask, ignoredKeys );
+	
+	TBuf<KMaxFileName> path;
+	const TInt count = ignoredKeys.Count();
+	for( TInt i=0;i<count;i++ )
+		{
+		const TInt error( repo->Get( ignoredKeys[i], path ) );
+		if( error != KErrNone )
+		    {
+		    continue;
+		    }
+		if( aFilterPrefix != KNullDesC )
+			{
+			TPtrC pathStart = path.Left( aFilterPrefix.Length() );
+			if( MdsUtils::Compare( pathStart, aFilterPrefix ) != 0 )
+				{
+				continue;
+				}
+			}
+		HBufC* ignorePath = HBufC::NewL( aDrivePrefix.Length() + path.Length() );
+		TPtr ptr = ignorePath->Des();
+		ptr.Append( aDrivePrefix );
+		ptr.Append( path );
+		if( aAdd )
+			{
+			iFspEngine.AddIgnorePath( *ignorePath );
+			}
+		else
+			{
+			iFspEngine.RemoveIgnorePath( *ignorePath );
+			}
+		delete ignorePath;
+		ignorePath = NULL;
+		}
+	CleanupStack::PopAndDestroy( &ignoredKeys );
+	CleanupStack::PopAndDestroy( repo );	
+	}
+
+EXPORT_C void CHarvesterCenRepUtil::GetIgnorePathL( 
+		RPointerArray<HBufC>& aIgnorePaths )
+	{
+	GetPathsL( KIgnorePathPartialKey, aIgnorePaths );
+	}
+
+EXPORT_C void CHarvesterCenRepUtil::GetScanItemsL(
+		RPointerArray<TScanItem>& aItems )
+	{
+	GetItemsL( KBootScanPartialKey, aItems );
+	}
+
+EXPORT_C void CHarvesterCenRepUtil::GetIgnoredScanPathsL( 
+		RPointerArray<HBufC>& aIngorePaths )
+	{
+	GetPathsL( KBootIgnorePartialKey, aIngorePaths );
+	}
+
+EXPORT_C void CHarvesterCenRepUtil::GetPartialRestorePathsL( 
+		RPointerArray<TScanItem>& aPaths )
+	{
+	GetItemsL( KPartialRestorePartialKey, aPaths );
+	}
+
+EXPORT_C void CHarvesterCenRepUtil::GetIgnoredPartialRestorePathsL( 
+		RPointerArray<HBufC>& aIngorePaths )
+	{
+	GetPathsL( KPartialRestoreIgnorePartialKey, aIngorePaths );
+	}
+	
+EXPORT_C void CHarvesterCenRepUtil::IsRomScanEnabledL( TBool& aEnabled )
+    {
+    CRepository* rep = CRepository::NewLC( KHarvesterRepoUid );
+    
+    rep->Get( KRomScanEnabledKey, aEnabled );
+    
+    CleanupStack::PopAndDestroy( rep );    
+    }
+
+EXPORT_C void CHarvesterCenRepUtil::IsThumbnailDaemonEnabledL( TBool& aEnabled )
+    {
+    CRepository* rep = CRepository::NewLC( TUid::Uid( KThumbnailManagerCenrepUID ) );
+    
+    rep->Get( KEnableDaemon, aEnabled );
+    
+    CleanupStack::PopAndDestroy( rep );    
+    }
+
+void CHarvesterCenRepUtil::GetPathsL( TUint32 aPartialKey, RPointerArray<HBufC>& aPaths )
+	{
+	CRepository* repo = CRepository::NewLC( KHarvesterRepoUid ); 
+	RArray<TUint32> scanPathKeys;
+	CleanupClosePushL( scanPathKeys );
+
+	repo->FindL( aPartialKey, KSearchMask, scanPathKeys );
+
+	TBuf<KMaxFileName> path;
+	const TInt count = scanPathKeys.Count();
+	aPaths.ReserveL( count );
+	for( TInt i = 0; i < count; i++ )
+		{
+	    const TInt error( repo->Get( scanPathKeys[i], path ) );
+	    if( error != KErrNone )
+	        {
+	        continue;
+	        }
+		HBufC* pathBuf = path.AllocL();
+		aPaths.Append( pathBuf );
+		}
+
+	CleanupStack::PopAndDestroy( &scanPathKeys );
+	CleanupStack::PopAndDestroy( repo );
+	}
+
+void CHarvesterCenRepUtil::GetItemsL( TUint32 aPartialKey, RPointerArray<TScanItem>& aItems )
+	{
+	CRepository* repo = CRepository::NewLC( KHarvesterRepoUid ); 
+	RArray<TUint32> scanPathKeys;
+	CleanupClosePushL( scanPathKeys );
+
+	repo->FindL( aPartialKey, KSearchMask, scanPathKeys );
+
+	TBuf<KMaxFileName> path;
+	const TInt count = scanPathKeys.Count();
+	for( TInt i = 0; i < count; i++ )
+		{
+	    const TInt error( repo->Get( scanPathKeys[i], path ) );
+	    if( error != KErrNone )
+	        {
+	        continue;
+	        }
+		TUint32 preinstalled = MdeConstants::MediaObject::ENotPreinstalled;
+		if( path[ path.Length() - 1 ] != TChar('\\') )
+			{
+			User::LeaveIfError( repo->GetMeta( scanPathKeys[i], preinstalled ) );
+			}
+		TScanItem* item = new (ELeave) TScanItem();
+		CleanupStack::PushL( item );
+		item->iPath = path.AllocL();
+		item->iPreinstalled = preinstalled;
+		CleanupStack::Pop( item );
+		aItems.Append( item ); // ownership is transferred
+		}
+
+	CleanupStack::PopAndDestroy( &scanPathKeys );
+	CleanupStack::PopAndDestroy( repo );	
+	}
+
+// End of file
+