imageeditor/ImageEditorManager/src/ImageEditorPluginLocator.cpp
changeset 1 edfc90759b9f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/imageeditor/ImageEditorManager/src/ImageEditorPluginLocator.cpp	Fri Jan 29 13:53:17 2010 +0200
@@ -0,0 +1,148 @@
+/*
+* Copyright (c) 2010 Ixonos Plc.
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the "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:
+* Ixonos Plc
+*
+* Description:  
+*
+*/
+
+
+
+// INCLUDES
+#include <s32file.h>
+#include <bautils.h>
+#include <eikenv.h>
+
+#include "ImageEditorPluginLocator.h"
+#include "ImageEditorPluginScanner.h"
+#include "ImageEditorPluginStorage.h"
+#include "PluginInfo.h"
+#include "ImageEditorUIDs.hrh"
+
+// CONSTANTS
+_LIT( KPluginStorageExternalizeFile, "c:\\private\\101FFA91\\PluginStorage.ini");
+
+
+//=============================================================================
+EXPORT_C CPluginLocator * CPluginLocator::NewL ()
+{
+	CPluginLocator * self = new (ELeave) CPluginLocator;
+	CleanupStack::PushL (self);
+	self->ConstructL ();
+	CleanupStack::Pop (); // self
+	return self;
+}
+
+//=============================================================================
+EXPORT_C CPluginLocator::~CPluginLocator ()
+{
+	delete iScanner;
+	delete iStorage;
+}
+
+//=============================================================================
+EXPORT_C void CPluginLocator::ScanPluginsL ()
+{
+    LOG(KImageEditorLogFile, "CPluginLocator: Scanning plugins");
+
+    ASSERT( iScanner );
+    ASSERT( iStorage );
+
+    //	Internalize the plug-in storage
+    RFs& fs = CEikonEnv::Static()->FsSession();
+    BaflUtils::EnsurePathExistsL( fs, KPluginStorageExternalizeFile() );
+    if( BaflUtils::FileExists(fs, KPluginStorageExternalizeFile()) )
+    {
+        RFileReadStream stream;
+        stream.PushL();
+
+        LOGFMT(KImageEditorLogFile, "CPluginLocator: Internalizing plug-in storage from %S", &KPluginStorageExternalizeFile());
+
+        User::LeaveIfError (
+            stream.Open (
+            fs,
+            KPluginStorageExternalizeFile(),
+            EFileRead | EFileShareReadersOnly
+            ));
+
+        stream >> *iStorage;
+
+        stream.Release();
+        stream.Pop();
+    }
+    
+    // Scan for plug-ins
+    TBool pluginStorageNeedsUpdate = EFalse;
+	iScanner->ScanPluginsL ( pluginStorageNeedsUpdate );
+
+    // If the plugin content has changed compared to the previously
+    // internalized one, we need to externalize the plug-in storage
+    if( pluginStorageNeedsUpdate )
+    {
+        LOGFMT(KImageEditorLogFile, "CPluginLocator: Externalizing plug-in storage to %S", &KPluginStorageExternalizeFile());
+
+        RFileWriteStream stream;
+        stream.PushL();
+
+        User::LeaveIfError (
+            stream.Replace (
+            fs,
+            KPluginStorageExternalizeFile(),
+            EFileWrite
+            ));
+
+        stream << *iStorage;
+
+        stream.Close();
+        stream.Pop();
+    }
+
+    // iScanner is not needed after this
+    delete iScanner;
+    iScanner = NULL;
+}
+
+//=============================================================================
+EXPORT_C TInt CPluginLocator::CountPlugins() const
+{
+	return iStorage->CountPlugins();
+}
+
+//=============================================================================
+EXPORT_C CPluginInfo * CPluginLocator::GetPluginInfo (const TInt aID)
+{
+    return iStorage->GetPluginInfo (aID);
+}
+
+//=============================================================================
+CPluginLocator::CPluginLocator ()
+{
+
+}
+
+//=============================================================================
+void CPluginLocator::ConstructL ()
+{
+    LOG(KImageEditorLogFile, "CPluginLocator: Creating locator");
+
+	//	Create a new plug-in storage
+	iStorage = CPluginStorage::NewL ();
+
+	//	Create a new plug-in locator
+	iScanner = CPluginScanner::NewL ();
+
+	//	Set storage
+	iScanner->SetPluginStorage (iStorage);
+}
+
+// End of File