diff -r 522cd55cc3d7 -r 13ae750350c9 landmarksui/engine/src/CLmkEncoder.cpp --- a/landmarksui/engine/src/CLmkEncoder.cpp Tue Feb 02 00:16:03 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,326 +0,0 @@ -/* -* Copyright (c) 2002-2005 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: This file implements the methods which wrap functionality related -* to landmark encoding into a simpler interface. -* -*/ - - - - - - - -// INCLUDE FILES - -#include -#include -#include -#include -#include -#include -#include -#include "LmkConsts.h" -#include "Debug.h" -#include "LmkFileUtils.h" -#include "CLmkAOOperation.h" -#include "CLmkEncoder.h" -#include "CLmkEncodeUnsavedLandmarksOp.h" -#include - -// CONSTANTS -/// Unnamed namespace for local definitions -namespace { - -_LIT8( KLandmarkMimeType, "application/vnd.nokia.landmarkcollection+xml" ); -// We wrap two async. tasks (export and write to file) into one -// using estimated 0.8/0.2 progress distribution: -const TReal32 KLmkExportMaxProgress( TReal32( 0.8 ) ); - -#if defined(_DEBUG) -_LIT( KPanicMsg, "CLmkEncoder" ); - -void Panic( TPanicCode aReason ) - { - User::Panic( KPanicMsg, aReason ); - } -#endif -} // namespace - -// ============================ MEMBER FUNCTIONS =============================== - -// ----------------------------------------------------------------------------- -// CLmkEncoder::CLmkEncoder -// C++ default constructor can NOT contain any code, that -// might leave. -// ----------------------------------------------------------------------------- -// -CLmkEncoder::CLmkEncoder( - CPosLandmarkDatabase& aDb, - MLmkAOOperationObserver& aObserver, - TBool aProgressNote ) - : iDb( aDb ), - iObserver( aObserver ), - iProgressNote( aProgressNote ) - { - } - -// ----------------------------------------------------------------------------- -// CLmkEncoder::NewL() -// ----------------------------------------------------------------------------- -// -EXPORT_C CLmkEncoder* CLmkEncoder::NewL( - CPosLandmarkDatabase& aDb, - MLmkAOOperationObserver& aObserver, - TBool aProgressNote ) - { - CLmkEncoder* self = - new ( ELeave ) CLmkEncoder( aDb, aObserver, aProgressNote ); - CleanupStack::PushL( self ); - self->ConstructL(); - CleanupStack::Pop(); //self - return self; - } - -// ----------------------------------------------------------------------------- -// CLmkEncoder::ConstructL() -// ----------------------------------------------------------------------------- -// -void CLmkEncoder::ConstructL() - { - } - -// ----------------------------------------------------------------------------- -// CLmkEncoder::~CLmkEncoder() -// ----------------------------------------------------------------------------- -// -CLmkEncoder::~CLmkEncoder() - { - delete iAOOperation; - delete iEncoder; - } - -// ----------------------------------------------------------------------------- -// CLmkEncoder::HandleOperationL -// ----------------------------------------------------------------------------- -// -void CLmkEncoder::HandleOperationL( - TOperationTypes aType, - TReal32 aProgress, - TInt aStatus ) - { - DEBUG2( CLmkEncoder::HandleOperationL entered: progress=%d status=%d, - aProgress, aStatus ); - - __ASSERT_DEBUG( aType == EEncode, Panic( KLmkPanicUnknownOperation ) ); - - if ( aStatus != KPosLmOperationNotComplete ) - { - __ASSERT_DEBUG( iAOOperation, Panic( KLmkPanicNullMember ) ); - - delete iAOOperation; - iAOOperation = NULL; - - if ( iExporting && aStatus == KErrNone ) - { // start second part of asynchronous task - FinalizeEncodingL(); - aStatus = KPosLmOperationNotComplete; - } - } - - // Modify progress information because we have wrapped two tasks into one: - if ( iExporting && aStatus == KPosLmOperationNotComplete ) - { - aProgress = aProgress * KLmkExportMaxProgress; - } - else if ( !iExporting && aStatus == KPosLmOperationNotComplete ) - { // Progress of writing to file is between KLmkExportMaxProgress...1 - aProgress = KLmkExportMaxProgress + - aProgress * ( 1 - KLmkExportMaxProgress ); - } - - if( iProgressNote || aStatus != KPosLmOperationNotComplete ) - { // Caller either requested to receive all events, or we - // have completed entirely and inform that to the caller. - iObserver.HandleOperationL( aType, aProgress, aStatus ); - } -} - -// ----------------------------------------------------------------------------- -// CLmkEncoder::SetPackageNameL -// ----------------------------------------------------------------------------- -// -//EXPORT_C void CLmkEncoder::SetPackageNameL( const TDesC& aName ) -void CLmkEncoder::SetPackageNameL( const TDesC& aName ) - { - iEncoder->AddCollectionDataL( EPosLmCollDataCollectionName, aName ); - } - -// ----------------------------------------------------------------------------- -// CLmkEncoder::StartEncodingL -// ----------------------------------------------------------------------------- -// -EXPORT_C void CLmkEncoder::StartEncodingL( - const TDesC& aFileName, - const RArray& aLandmarkIdArray ) - { - DEBUG( CLmkEncoder::StartEncodingL entered ); - LeaveIfInUseL(); - PrepareEncoderL(aFileName); - if (aLandmarkIdArray.Count() > 1) // Only if multiple Landmarks Are selected - { - // Set the package name here - SetPackageNameL(aFileName); - } - - CPosLmOperation* operation = - iDb.ExportLandmarksL( *iEncoder, - aLandmarkIdArray, - CPosLandmarkDatabase::EIncludeCategories ); - CleanupStack::PushL( operation ); - iAOOperation = CLmkAOOperation::NewL( operation, - *this, - EEncode, - iProgressNote ); - CleanupStack::Pop( operation ); // ownership transferred - - iExporting = ETrue; // exporting part of encoding is being done - - DEBUG( CLmkEncoder::StartEncodingL: starting operation ); - iAOOperation->StartOperation(); - } - -// ----------------------------------------------------------------------------- -// CLmkEncoder::CancelEncodeOperationL -// ----------------------------------------------------------------------------- -// -EXPORT_C void CLmkEncoder::CancelEncodeOperationL() - { - if ( iAOOperation ) - { - iAOOperation->Cancel(); - delete iAOOperation; - iAOOperation = NULL; - } - } - -// ----------------------------------------------------------------------------- -// CLmkEncoder::FinalizeEncodingL -// ----------------------------------------------------------------------------- -// -void CLmkEncoder::FinalizeEncodingL() - { - DEBUG( CLmkEncoder::FinalizeEncodingL entered ); - - LeaveIfInUseL(); - - CPosLmOperation* operation = iEncoder->FinalizeEncodingL(); - CleanupStack::PushL( operation ); - iAOOperation = CLmkAOOperation::NewL( operation, - *this, - EEncode, - iProgressNote ); - CleanupStack::Pop( operation ); // ownership transferred - - iExporting = EFalse; // write to file -part of encoding is being done - - DEBUG( CLmkEncoder::FinalizeEncodingL: starting operation ); - iAOOperation->StartOperation(); - } - -// ----------------------------------------------------------------------------- -// CLmkEncoder::LeaveIfInUseL -// ----------------------------------------------------------------------------- -// -void CLmkEncoder::LeaveIfInUseL() - { - if ( iAOOperation ) - { - User::Leave( KErrInUse ); - } - } - -// ----------------------------------------------------------------------------- -// CLmkEncoder::PrepareEncoderL -// ----------------------------------------------------------------------------- -// -void CLmkEncoder::PrepareEncoderL(const TDesC& aFileName) - { - // Full path name (Private path c:\\Provate\\UID3 + pacakge File name) - HBufC* nameBuf = HBufC::NewLC( 2 * KLmkPackageNameMaxLen + KLmkEncodedDataFileExtension().Length() ); - - // For getting private path - TPtr ptr = nameBuf->Des(); - RFs fs; - User::LeaveIfError(fs.Connect()); - CleanupClosePushL(fs); - fs.SessionPath(ptr); - fs.MkDirAll(ptr); - CleanupStack::PopAndDestroy(); // fs - - ptr.Append(aFileName); - ptr.Append(KLmkEncodedDataFileExtension); - TInt err = KErrNone; - - if ( !iEncoder ) - { - DEBUG( CLmkEncoder::StartEncodingL: creating encoder ); - TRAP(err, iEncoder = CPosLandmarkEncoder::NewL( KLandmarkMimeType )); - DEBUG( CLmkEncoder::StartEncodingL: encoder created); - } - if(err != KErrNone) - { - LmkFileUtils::DeleteFileL( ptr ); // Delete old file if it exists - CleanupStack::PopAndDestroy(nameBuf); //nameBuf - User::LeaveIfError( err ); - } - LmkFileUtils::DeleteFileL( ptr ); // Delete old file if it exists - iEncoder->SetOutputFileL( ptr ); - CleanupStack::PopAndDestroy(nameBuf); //nameBuf - } - -// ----------------------------------------------------------------------------- -// CLmkEncoder::StartEncodingL -// ----------------------------------------------------------------------------- -// -EXPORT_C void CLmkEncoder::StartEncodingL( - const TDesC& aFileName, - const RPointerArray& aLandmarks ) - { - DEBUG( CLmkEncoder::StartEncodingL entered ); - LeaveIfInUseL(); - PrepareEncoderL(aFileName); - if (aLandmarks.Count() > 1) // Only if multiple Landmarks Are selected - { - // Set the package name here - SetPackageNameL(aFileName); - } - - CPosLmOperation* operation = - CLmkEncodeUnsavedLandmarksOp::NewL( *iEncoder, - aLandmarks, - CPosLandmarkDatabase::EIncludeCategories); - CleanupStack::PushL( operation ); - iAOOperation = CLmkAOOperation::NewL( operation, - *this, - EEncode, - iProgressNote ); - CleanupStack::Pop( operation ); // ownership transferred - - iExporting = ETrue; // exporting part of encoding is being done - - DEBUG( CLmkEncoder::StartEncodingL: starting operation ); - iAOOperation->StartOperation(); - } -// End of File