contentpublishingsrv/contentharvester/factorysettingsplugin/src/chdbstatehandler.cpp
changeset 0 79c6a41cd166
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/contentpublishingsrv/contentharvester/factorysettingsplugin/src/chdbstatehandler.cpp	Thu Dec 17 08:54:17 2009 +0200
@@ -0,0 +1,182 @@
+/*
+* Copyright (c) 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:  Central Repository about DB state change information observer
+ *
+*/
+
+#include <centralrepository.h>
+#include <f32file.h>
+#include "cpserverdef.h"
+#include "chdbstatehandler.h"
+#include "chfactorysettingsplugin.h"
+
+
+_LIT( KParsedDir, "parsed\\fs\\" );
+_LIT( KDriveC, "C:" );
+
+
+// ============================ MEMBER FUNCTIONS =============================
+
+// -----------------------------------------------------------------------------
+// CCHDbStateHandler::CCHDbStateHandler()
+// 
+// -----------------------------------------------------------------------------
+//
+CCHDbStateHandler::CCHDbStateHandler( CCHFactorySettings* aCallback ) : 
+	CActive( EPriorityStandard ), // Standard priority
+	iCallback( aCallback )
+	{
+	}
+
+// -----------------------------------------------------------------------------
+// CCHDbStateHandler::NewL()
+// Two-phased constructor
+// -----------------------------------------------------------------------------
+//
+CCHDbStateHandler* CCHDbStateHandler::NewL( 
+	CCHFactorySettings* aCallback )
+	{
+	CCHDbStateHandler* self = new (ELeave) CCHDbStateHandler( aCallback );
+	CleanupStack::PushL( self );
+	self->ConstructL();
+	CleanupStack::Pop(); // self
+	return self;
+	}
+
+// -----------------------------------------------------------------------------
+// CCHDbStateHandler::NewL()
+// Constructor
+// -----------------------------------------------------------------------------
+//
+void CCHDbStateHandler::ConstructL()
+	{
+	User::LeaveIfError( iFs.Connect() );
+	ConstructFactorySettingsPathL();
+	iRepository = CRepository::NewL( KServerUid );
+	HandleDbStateL();
+	CActiveScheduler::Add(this); // Add to scheduler
+	iRepository->NotifyRequest( KCPStorageUid, iStatus );
+	iStatus = KRequestPending;
+	SetActive();
+	}
+
+// -----------------------------------------------------------------------------
+// CCHDbStateHandler::NewL()
+// 
+// -----------------------------------------------------------------------------
+//
+CCHDbStateHandler::~CCHDbStateHandler()
+	{
+	Cancel(); // Cancel any request, if outstanding
+	delete iRepository;
+	iFs.Close();
+	}
+
+// -----------------------------------------------------------------------------
+// CCHDbStateHandler::NewL()
+// 
+// -----------------------------------------------------------------------------
+//
+void CCHDbStateHandler::DoCancel()
+	{
+	iRepository->NotifyCancel( KCPStorageUid );
+	}
+
+// -----------------------------------------------------------------------------
+// CCHDbStateHandler::RunL()
+// 
+// -----------------------------------------------------------------------------
+//
+void CCHDbStateHandler::RunL()
+	{
+	// status contais information about event type
+	if (iStatus.Int() >= KErrNone) 
+		{
+		HandleDbStateL();
+		iRepository->NotifyRequest( KCPStorageUid, iStatus );
+		iStatus = KRequestPending;
+		SetActive();
+     	}
+	}
+
+// -----------------------------------------------------------------------------
+// CCHDbStateHandler::RunError()
+// 
+// -----------------------------------------------------------------------------
+//
+TInt CCHDbStateHandler::RunError(TInt aError)
+	{
+	return aError;
+	}
+
+// -----------------------------------------------------------------------------
+// CCHDbStateHandler::ConstructFactorySettingsPathL()
+// 
+// -----------------------------------------------------------------------------
+//
+void CCHDbStateHandler::ConstructFactorySettingsPathL()
+	{
+	TFileName privatePath;
+	User::LeaveIfError( iFs.PrivatePath( privatePath ) );
+	iFSPath.Append( KDriveC );
+	iFSPath.Append( privatePath );
+	iFSPath.Append( KParsedDir );
+	}
+
+// -----------------------------------------------------------------------------
+// CCHDbStateHandler::RemoveFactorySettingsParsedFilesL()
+// 
+// -----------------------------------------------------------------------------
+//
+void CCHDbStateHandler::RemoveFactorySettingsParsedFilesL()
+	{
+	CFileMan* fileManager = CFileMan::NewL( iFs );
+	CleanupStack::PushL( fileManager );
+	fileManager->Delete( iFSPath,  CFileMan::ERecurse );
+	CleanupStack::PopAndDestroy( fileManager );
+	}
+
+// -----------------------------------------------------------------------------
+// CCHDbStateHandler::HandleDbStateL()
+// 
+// -----------------------------------------------------------------------------
+//
+void CCHDbStateHandler::HandleDbStateL()
+	{
+	TInt value( 0 );
+	if( iRepository->Get( KCPStorageUid, value ) == KErrNone )
+		{
+		if( value & KSQLDBStateRestored )
+			{
+			HandleRestoredDbStateL();
+			value ^= KSQLDBStateRestored;
+			value |= KSQLDBStateNormal;
+			iRepository->Set( KCPStorageUid, value );
+			}
+		}
+	}
+
+// -----------------------------------------------------------------------------
+// CCHDbStateHandler::HandleRestoredStateL()
+// 
+// -----------------------------------------------------------------------------
+//
+void CCHDbStateHandler::HandleRestoredDbStateL()
+	{
+	RemoveFactorySettingsParsedFilesL();
+	iCallback->UpdateL();
+	}
+
+
+//End file