diff -r 57d4cdd99204 -r edfc90759b9f imageeditor/ImageEditorManager/src/ImageEditorPluginLocator.cpp --- /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 +#include +#include + +#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