--- a/localisation/apparchitecture/apparc/APAFLREC.CPP Wed Jul 28 16:03:37 2010 +0100
+++ b/localisation/apparchitecture/apparc/APAFLREC.CPP Tue Aug 03 10:20:34 2010 +0100
@@ -1,7 +1,7 @@
// Copyright (c) 1997-2009 Nokia Corporation and/or its subsidiary(-ies).
// All rights reserved.
// This component and the accompanying materials are made available
-// under the terms of the License "Eclipse Public License v1.0"
+// 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".
//
@@ -11,6 +11,7 @@
// Contributors:
//
// Description:
+// apaflrec.cpp
//
#include <f32file.h>
@@ -19,306 +20,7 @@
#include <apacmdln.h>
#include "APASTD.H"
#include "APGCLI.H"
-
-#ifdef USING_ECOM_RECOGS
#include <ecom/ecom.h>
-#endif
-
-//
-//CFileRecognizerExtension Class
-//
-//stores the destructor key to track the instance of ecom implementation class
-class CFileRecognizerExtension : public CBase
- {
-public:
- static CFileRecognizerExtension* NewL(TUid aDtorKey);
- ~CFileRecognizerExtension();
- //returns the destructor key
- TUid DestructorUid()const;
-private:
- CFileRecognizerExtension(TUid aDtorKey);
-private:
- //destructor key to track the instance of ecom implementation class
- TUid iDtorKey;
- };
-
-//
-// Class CApaFileRecognizer
-//
-
-EXPORT_C CApaFileRecognizer::CApaFileRecognizer(RFs& aFs)
- :iFs(aFs)
- {}
-
-
-EXPORT_C CApaFileRecognizer::~CApaFileRecognizer()
- {
- DestroyRecognizerList();
- delete iAppLocator;
- //lint -esym(1740,CApaFileRecognizer::iFileRecognizerList) not directly freed - see DestroyRecognizerList()
- }
-
-
-EXPORT_C void CApaFileRecognizer::DestroyRecognizerList()
-// this method exists to allow subclassers to destroy the list earlier if they wish
- {
- CApaFileRecognizerType* rec=iFileRecognizerList;
- //delete one element after the other in the list
- while (rec!=NULL )
- {
- CApaFileRecognizerType* prev=NULL;
- prev = rec;
- rec=rec->iNext;
- delete prev;
- }
- iFileRecognizerList=NULL;
- }
-
-
-EXPORT_C void CApaFileRecognizer::SetAppLocator(CApaAppLocator* aAppLocator)
-// takes ownership of the locator
- {
- iAppLocator = aAppLocator;
- }
-
-static TUidType UidTypeL(const TDesC& aFullFileName, const RFs& aFs)
- {
- _LIT(KSysBin, "\\sys\\bin\\");
- if (TParsePtrC(aFullFileName).Path().CompareF(KSysBin)==0)
- {
- RLoader loader;
- User::LeaveIfError(loader.Connect());
- CleanupClosePushL(loader);
- TPckgBuf<RLibrary::TInfo> dllInfo;
- User::LeaveIfError(loader.GetInfo(aFullFileName, dllInfo));
- CleanupStack::PopAndDestroy(&loader);
- return dllInfo().iUids;
- }
- TEntry entry;
- User::LeaveIfError(aFs.Entry(aFullFileName,entry));
- return entry.iType;
- }
-
-EXPORT_C CApaFileRecognizerType* CApaFileRecognizer::RecognizeFileL(const TDesC& aFullFileName,const TUidType* aUidType)
-// Returns the specific recognizer if the file is recogized as a runnable file. or NULL if not.
-// TUidType is optional, if not supplied it will be read from the file.
-// Leaves, if any files required cannot be found or if OOM.
-// Leaves with KErrNotSupported, if file cannot be recognized.
- {
- const TUidType uidType((aUidType!=NULL)? *aUidType: UidTypeL(aFullFileName, iFs));
- CApaFileRecognizerType* rec=iFileRecognizerList;
- CApaFileRecognizerType::TRecognizedType type;
- while (rec!=NULL)
- {
- type=rec->RecognizeFileL(iFs,aFullFileName,uidType);
- if (type==CApaFileRecognizerType::EOtherFile)
- {
- rec=NULL; // Recognised but not runnable so stop search now
- break;
- }
- if (type!=CApaFileRecognizerType::ENotRecognized)
- {
- break;
- }
- rec=rec->iNext;
- }
- if (rec==NULL)
- {
- User::Leave(KErrNotSupported);
- }
- return rec;
- }
-
-EXPORT_C void CApaFileRecognizer::AddFileRecognizerType(CApaFileRecognizerType* aFileRecognizerType)
-// Add given RecognizerType to the end of the recognizer list.
-// Set's it's iFileRecognizer pointer to "this" - recognizers may call AppDataByUid
- {
- aFileRecognizerType->iNext=NULL;
- aFileRecognizerType->iFileRecognizer=this;
- CApaFileRecognizerType* rec=iFileRecognizerList;
- if (rec==NULL)
- iFileRecognizerList=aFileRecognizerType;
- else
- {
- while (rec->iNext!=NULL)
- rec=rec->iNext;
- rec->iNext=aFileRecognizerType;
- }
- }
-
-
-EXPORT_C TInt CApaFileRecognizer::RemoveFileRecognizerType(const CApaFileRecognizerType* aFileRecognizerType)
-// remove the given recognizer from the list if it is not locked
-// return an error code if removal failed
- {
- CApaFileRecognizerType* rec=iFileRecognizerList;
- CApaFileRecognizerType* prev=NULL;
- // find the recognizer in the list
- while (rec!=NULL && rec!=aFileRecognizerType)
- {
- prev = rec;
- rec=rec->iNext;
- }
- // did we find a match
- if (!rec)
- return KErrNotFound;
- // is the matching recognizer locked
- if (rec->Locked())
- return KErrLocked;
- // remove the recognizer from the list, then delete it
- if (prev)
- prev->iNext = rec->iNext;
- else
- iFileRecognizerList = rec->iNext;
- rec->iNext = NULL;
- delete rec;
- return KErrNone;
- }
-
-
-EXPORT_C CApaAppLocator* CApaFileRecognizer::AppLocator() const
- {
- __ASSERT_ALWAYS(iAppLocator,Panic(EPanicNoAppLocator));
- //
- return iAppLocator;
- }
-
-
-//
-// Class CApaFileRecognizerType
-//
-
-EXPORT_C CApaFileRecognizerType::CApaFileRecognizerType():iFileRecognizerExtn(NULL)
- {
- }
-
-
-EXPORT_C CApaFileRecognizerType::~CApaFileRecognizerType()
- {
-#ifdef USING_ECOM_RECOGS
- //if ecom plugin is used destroy its implementation
- if(iFileRecognizerExtn!=NULL)
- {
- REComSession::DestroyedImplementation(iFileRecognizerExtn->DestructorUid());
- delete iFileRecognizerExtn;
- }
-#else
- iFileRecognizerExtn = NULL;
-#endif
- delete iCapabilityBuf;
- delete iFullFileName;
- iFileRecognizer = NULL;
- iAppStarter = NULL;
- iNext = NULL;
- }
-
-EXPORT_C TThreadId CApaFileRecognizerType::AppRunL(const CApaCommandLine& aCommandLine) const
- {
- __ASSERT_ALWAYS(iAppStarter,Panic(EPanicNoAppStarter));
- //
- return iAppStarter->StartAppL(aCommandLine);
- }
-
-CApaFileRecognizerType::TRecognizedType CApaFileRecognizerType::RecognizeFileL(RFs& aFs,const TDesC& aFullFileName,TUidType aUidType)
- {
- // set the UID's and name
- iFileType = aUidType[1];
- iAppUid = aUidType[2];
- delete iFullFileName;
- iFullFileName = NULL;
- iFullFileName = aFullFileName.AllocL();
- //
- // see if we recognize it
- iRecognizedType = ENotRecognized;
- TRecognizedType type=DoRecognizeFileL(aFs,aUidType);
- if (type==ENotRecognized)
- {
- delete iFullFileName;
- iFullFileName=NULL;
- }
- else
- {
- if(!iCapabilityBuf)
- {
- // Actually, iCapabilityBuf is not needed anymore, but in order not to break BC,
- // we must still support it (in case someone calls CApaFileRecognizerType::Capability).
- iCapabilityBuf = new(ELeave) TApaAppCapabilityBuf;
- iCapabilityBuf->FillZ(iCapabilityBuf->MaxLength());
- }
- }
- return type;
- }
-
-
-EXPORT_C void CApaFileRecognizerType::Capability(TDes8& aCapabilityBuf)const
- {
- __ASSERT_ALWAYS(iCapabilityBuf,Panic(EPanicCapabilityNotSet)); // capability has been called when no file has been recognized
- //
- TApaAppCapability::CopyCapability(aCapabilityBuf,*iCapabilityBuf);
- }
-
-
-EXPORT_C void CApaFileRecognizerType::Lock()
- {
- iLock++;
- }
-
-
-EXPORT_C void CApaFileRecognizerType::Unlock()
- {
- if (iLock>0)
- iLock--;
- }
-
-
-TBool CApaFileRecognizerType::Locked()const
- {
- return (iLock>0);
- }
-
-EXPORT_C void CApaFileRecognizerType::Reserved_1()
- {}
-
-#ifdef USING_ECOM_RECOGS
-// instantiate the ecom implementation class
-EXPORT_C CApaFileRecognizerType* CApaFileRecognizerType::CreateFileRecognizerL(TUid aImplUid)
- {
- CApaFileRecognizerType* fileRecType = NULL;
- TUid tempDtorKey = KNullUid;
- fileRecType = static_cast<CApaFileRecognizerType*>(REComSession::CreateImplementationL(aImplUid, tempDtorKey));
- CleanupStack::PushL(fileRecType);
- fileRecType->iFileRecognizerExtn=CFileRecognizerExtension::NewL(tempDtorKey);
- CleanupStack::Pop(fileRecType);
- return fileRecType;
- }
-#else
-EXPORT_C CApaFileRecognizerType* CApaFileRecognizerType::CreateFileRecognizerL(TUid)
- {
- return NULL;
- }
-#endif
-
-CFileRecognizerExtension::CFileRecognizerExtension(TUid aDtorKey)
- :iDtorKey(aDtorKey)
- {
- }
-
-CFileRecognizerExtension* CFileRecognizerExtension::NewL(TUid aDtorKey)
- {
- //instantiate CFileRecognizerExtension with the destructor key of the ecom implentation instance
- CFileRecognizerExtension* self=new(ELeave) CFileRecognizerExtension(aDtorKey);
- return self;
- }
-
-CFileRecognizerExtension::~CFileRecognizerExtension()
- {
- }
-
-//returns the destructor key of the ecom implentation instance
-TUid CFileRecognizerExtension::DestructorUid()const
- {
- return iDtorKey;
- }
//
// MApaAppStarter