diff -r aa99f2208aad -r b8d18c84f71c localisation/apparchitecture/apfile/APFREC.CPP --- a/localisation/apparchitecture/apfile/APFREC.CPP Wed Jul 28 16:03:37 2010 +0100 +++ b/localisation/apparchitecture/apfile/APFREC.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,68 +11,15 @@ // Contributors: // // Description: +// apfrec.cpp // #include #include #include #include -#include "APFSTD.H" // Panics etc. - -#ifdef USING_ECOM_RECOGS #include -#endif - -// -// class TRecognizer -// - -CApaScanningFileRecognizer::TRecognizer::TRecognizer(HBufC* aName) - : iName(aName) - { - } - -/////////////////////////////// -// CApaRecognizerDll -/////////////////////////////// - -class CApaRecognizerDll : public CBase - { -public: - CApaRecognizerDll(HBufC* aName); - ~CApaRecognizerDll(); // closes lib and deletes next - enum TPresence { ENotPresent, EIsPresent, ESuperseded }; - inline TPresence Present() const { return iPresent; } - inline void Present(TPresence aPresence) { iPresent = aPresence; } - - inline CApaFileRecognizerType* Recognizer() { return iRec; } - inline void SetRecognizer(CApaFileRecognizerType& aRec) { iRec = &aRec; } -public: - //lint --e{1925} Suppress "public data member" - bad OO but handy - CApaRecognizerDll* iNext; - CApaScanningFileRecognizer::TRecognizer iId; // cached so that this data can be accessed from other threads (RLibrary cant be used in this case) -private: - RLibrary iLibrary; - TPresence iPresent; - CApaFileRecognizerType* iRec; // not ownership - }; - - -CApaRecognizerDll::~CApaRecognizerDll() - { - delete iId.iName; - iLibrary.Close(); - delete iNext; - iRec = NULL; - } - -CApaRecognizerDll::CApaRecognizerDll(HBufC* aName) - : iId(aName) - { - } - -#ifdef USING_ECOM_RECOGS // CleanupEComArray function is used for cleanup support // of locally declared arrays. void CleanUpEComInfoArray(TAny* aInfoArray) @@ -81,339 +28,4 @@ infoArray->ResetAndDestroy(); infoArray->Close(); } -#endif -// class CApaBackupOperationObserver -CApaScanningFileRecognizer::CApaBackupOperationObserver::CApaBackupOperationObserver(CApaScanningFileRecognizer& aRecognizer) - : iRecognizer(aRecognizer) - { - TRAP_IGNORE(iSession = CBaBackupSessionWrapper::NewL()); - } - -CApaScanningFileRecognizer::CApaBackupOperationObserver::~CApaBackupOperationObserver() - { - if (iSession) - { - iSession->DeRegisterBackupOperationObserver(*this); - delete iSession; - } - } - -void CApaScanningFileRecognizer::CApaBackupOperationObserver::RegisterObserverL() - { - if (iSession) - { - iSession->RegisterBackupOperationObserverL(*this); - } - } - -void CApaScanningFileRecognizer::CApaBackupOperationObserver::HandleBackupOperationEventL(const TBackupOperationAttributes& aBackupOperationAttributes) - { - if ((aBackupOperationAttributes.iFileFlag == MBackupObserver::EReleaseLockReadOnly || - aBackupOperationAttributes.iFileFlag == MBackupObserver::EReleaseLockNoAccess) - && aBackupOperationAttributes.iOperation == EStart) - { - // release recognizers not in rom - CApaRecognizerDll* rec=iRecognizer.iRecognizerLib; - while (rec) - { - CApaRecognizerDll* next=rec->iNext; - TDriveUnit drive(rec->iId.iDrive); - const TChar driveName=drive.Name()[0]; - if(driveName != TChar('Z')) - { - iRecognizer.RemoveRecognizer(*rec);// ignore errors - } - rec = next; - } - } - - if (aBackupOperationAttributes.iFileFlag == MBackupObserver::ETakeLock && - (aBackupOperationAttributes.iOperation == EEnd || - aBackupOperationAttributes.iOperation == EAbort)) - { - iRecognizer.ScanForRecognizersL(); - } - } - -TInt CApaScanningFileRecognizer::CApaBackupOperationObserver::UpdateCounter() const - { - return iUpdateCounter; - } - -void CApaScanningFileRecognizer::CApaBackupOperationObserver::SetUpdateCounter(TInt aValue) - { - iUpdateCounter = aValue; - } - - -/////////////////////////////// -// CApaScanningFileRecognizer -/////////////////////////////// - - -EXPORT_C CApaScanningFileRecognizer* CApaScanningFileRecognizer::NewL(RFs& aFs,MApaAppStarter* aAppStarter) - { - CApaScanningFileRecognizer* self=new(ELeave) CApaScanningFileRecognizer(aFs,aAppStarter); - CleanupStack::PushL(self); - self->ConstructL(); - self->ScanForRecognizersL(); - CleanupStack::Pop(); // self - return self; - } - - -EXPORT_C CApaScanningFileRecognizer::CApaScanningFileRecognizer(RFs& aFs,MApaAppStarter* aAppStarter) - : CApaFileRecognizer(aFs), iAppStarter(aAppStarter) - {} - - -EXPORT_C void CApaScanningFileRecognizer::ConstructL() - { - iObserver = new (ELeave) CApaBackupOperationObserver(*this); - iObserver->RegisterObserverL(); - } - - -EXPORT_C CApaScanningFileRecognizer::~CApaScanningFileRecognizer() - { - DestroyRecognizerList(); - delete iRecognizerLib; - delete iObserver; - iAppStarter = NULL; - } - -EXPORT_C void CApaScanningFileRecognizer::ScanForRecognizersL() - { - // set all recognizers to not present - pending rediscoivery - CApaRecognizerDll* rec=iRecognizerLib; - while (rec) - { - rec->Present(CApaRecognizerDll::ENotPresent); - rec = rec->iNext; - } - - ScanForEcomRecognizersL(); - // - // remove any recognizers that are no longer present - rec=iRecognizerLib; - while (rec) - { - CApaRecognizerDll* next=rec->iNext; - if (rec->Present()==CApaRecognizerDll::ENotPresent) - RemoveRecognizer(*rec); - rec = next; - } - } - - -TInt CApaScanningFileRecognizer::RemoveRecognizer(CApaRecognizerDll& aDll) - { - // try to remove the recognizer from the list - TInt ret=RemoveFileRecognizerType(aDll.Recognizer()); - if (ret!=KErrNone && ret!=KErrNotFound) - return ret; - // - // get a handle to the previous entry in the list - CApaRecognizerDll* prev=NULL; - CApaRecognizerDll* dll=iRecognizerLib; - while (dll && (dll != &aDll)) - { - prev = dll; - dll = dll->iNext; - } - - if (!dll) - { - Panic(EPanicLibraryNotInList); - } - else - { - // remove the dll - if (prev) - prev->iNext = dll->iNext; - else - iRecognizerLib = dll->iNext; - dll->iNext = NULL; - delete dll; - iObserver->SetUpdateCounter( iObserver->UpdateCounter()+ 1 ); - } - return KErrNone; - } - -EXPORT_C TInt CApaScanningFileRecognizer::RecognizerCount() - { - CApaRecognizerDll* lib=iRecognizerLib; - TInt count=0; - while (lib) - { - count++; - lib = lib->iNext; - } - return count; - } - - -EXPORT_C CApaScanningFileRecognizer::CRecognizerArray* CApaScanningFileRecognizer::RecognizerListLC()const - { - CRecognizerArray* list=new(ELeave) CArrayFixFlat(1); - CleanupStack::PushL(list); - CApaRecognizerDll* dll=iRecognizerLib; - while (dll) - { - list->AppendL(dll->iId); - dll = dll->iNext; - } - return list; - } - -EXPORT_C const CApaScanningFileRecognizer::TRecognizer& CApaScanningFileRecognizer::operator[](TInt aIndex)const - { - __ASSERT_ALWAYS(aIndex>=0,Panic(EPanicNegativeIndex)); - // scan to correct dll - TInt num=0; - CApaRecognizerDll* dll=iRecognizerLib; - while (dll && num++iNext; - __ASSERT_ALWAYS(dll,Panic(EPanicIndexOutOfRange)); - // - // get info from dll - return dll->iId; //lint !e613 Suppress possible use of null pointer - asserted above - } - -EXPORT_C TInt CApaScanningFileRecognizer::UpdateCounter()const - { - return iObserver->UpdateCounter(); - } - -EXPORT_C void CApaScanningFileRecognizer::SetEcomRecognizersFromListL(const CRecognizerArray& aList) - { - //for ecom style - for (TInt i=0 ; iImplementationUid(); - if(uid.iUid == aImplUID.iUid ) - { - HBufC* recogName = info->DisplayName().AllocL(); - CleanupStack::PopAndDestroy(&implementationInfoArray); - return recogName; - } - } - CleanupStack::PopAndDestroy(&implementationInfoArray); - return KNullDesC().AllocL(); - } - -//load the ecom file recognizer -void CApaScanningFileRecognizer::LoadEcomRecognizerL(TDriveUnit& aDrive,TUid aUid) - { - // check we haven't loaded this one already - CApaRecognizerDll* lib=iRecognizerLib; - CApaRecognizerDll* last=NULL; // the previous one in the list - while (lib) - { - if (lib->iId.iUid==aUid) - {// we may have to override one - if (lib->Present()!=CApaRecognizerDll::ENotPresent) - { - return; // already found - } - else - { - lib->Present(CApaRecognizerDll::EIsPresent); - return; - } - } - last = lib; - lib = lib->iNext; - } - // load the library - HBufC* recogName=RecognizerNameL(aUid); - CleanupStack::PushL(recogName); - lib = new(ELeave) CApaRecognizerDll(recogName); - CleanupStack::Pop(recogName); - CleanupStack::PushL(lib); - TRAPD(error,lib->SetRecognizer(*CApaFileRecognizerType::CreateFileRecognizerL(aUid))); - if(!error && lib->Recognizer()) - { - lib->Present(CApaRecognizerDll::EIsPresent); - SetAppStarter(lib->Recognizer(),iAppStarter); - AddFileRecognizerType(lib->Recognizer()); - lib->iId.iUid = aUid; - lib->iId.iDrive = aDrive; - iObserver->SetUpdateCounter( iObserver->UpdateCounter() + 1 ); - // - // add lib to the library list - if (last) - { - while (last->iNext) - { - last=last->iNext; - } - __ASSERT_ALWAYS(last->iNext==NULL,Panic(EPanicIndexOutOfRange)); - last->iNext = lib; - } - else - { - iRecognizerLib = lib; - } - CleanupStack::Pop(lib); // lib - } - else - { - CleanupStack::PopAndDestroy(lib); // lib - } - } -#else -void CApaScanningFileRecognizer::LoadEcomRecognizerL(TDriveUnit&,TUid) - { - } //lint !e1762 Suppress member function could be made const - -#endif - -void CApaScanningFileRecognizer::ScanForEcomRecognizersL() - { -#ifdef USING_ECOM_RECOGS - //scan ecom plugin - RImplInfoPtrArray implementationArray; - TCleanupItem cleanup(CleanUpEComInfoArray, &implementationArray); - CleanupStack::PushL(cleanup); - REComSession::ListImplementationsL(KUidFileRecogInterfaceUid,implementationArray); - const TInt availCount = implementationArray.Count(); - for (TInt count=0;countImplementationUid(); - TDriveUnit drive=info-> Drive(); - TRAP_IGNORE(LoadEcomRecognizerL(drive,uid)); - } - CleanupStack::PopAndDestroy(&implementationArray); -#endif - } //lint !e1762 Suppress member function could be made const