diff -r 34024902876b -r 50d5061ee01e camappengine/asynchfilesavequeue/src/asynchfsq.cpp --- a/camappengine/asynchfilesavequeue/src/asynchfsq.cpp Fri Mar 19 09:33:47 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,369 +0,0 @@ -/* -* Copyright (c) 2002-2007 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: Asynchronous File Saving Queue -* -*/ - - - -// INCLUDE FILES -#include -#include // for deleting files -#include "asynchatom.h" - -// CONSTANTS - -// ============================ MEMBER FUNCTIONS =============================== - -// ----------------------------------------------------------------------------- -// CAsynchFSQ::CAsynchFSQ -// C++ default constructor can NOT contain any code, that -// might leave. -// ----------------------------------------------------------------------------- -// -CAsynchFSQ::CAsynchFSQ() - { - LOGTEXT( _L( "CAsynchFSQ::CAsynchFSQ() entering" ) ); - } - - -// ----------------------------------------------------------------------------- -// CAsynchFSQ::ConstructL -// Symbian 2nd phase constructor can leave. -// ----------------------------------------------------------------------------- -// -void CAsynchFSQ::ConstructL() - { - LOGTEXT( _L( "CAsynchFSQ::ConstructL() entering" ) ); - iPriority = EPriorityNormal; - iManualStart = EFalse; - LOGTEXT( _L( "CAsynchFSQ::ConstructL() exiting" ) ); - } - -// ----------------------------------------------------------------------------- -// CAsynchFSQ::NewL -// Two-phased constructor. -// ----------------------------------------------------------------------------- -// -EXPORT_C CAsynchFSQ* CAsynchFSQ::NewL() - { - LOGTEXT( _L( "CAsynchFSQ::NewL() entering" ) ); - CAsynchFSQ* self = new( ELeave ) CAsynchFSQ(); - CleanupStack::PushL( self ); - self->ConstructL(); - CleanupStack::Pop(); - return self; - } - -// ----------------------------------------------------------------------------- -// CAsynchFSQ::~CAsynchFSQ -// Destructor -// ----------------------------------------------------------------------------- -// -CAsynchFSQ::~CAsynchFSQ() - { - LOGTEXT( _L( "CAsynchFSQ::~CAsynchFSQ() entering" ) ); - - // clean up queues - iQueue.ResetAndDestroy(); - - LOGTEXT( _L( "CAsynchFSQ::~CAsynchFSQ() exiting" ) ); - } - -// ----------------------------------------------------------------------------- -// CAsynchFSQ::SaveAndDestroy -// ----------------------------------------------------------------------------- -// -EXPORT_C TInt CAsynchFSQ::SaveAndDestroy( TDesC8& aData, const TDesC& aPath, TBool aOverwrite ) - { - LOGTEXT( _L( "CAsynchFSQ::SaveAndDestroy() entering" ) ); - - TInt err = KErrNone; - - // return if NULL descriptor. - if( !&aData ) - { - return KErrArgument; - } - - iOverwrite = aOverwrite; - - LOGTEXT2( _L( "CAsynchFSQ::SaveAndDestroy() iQueue.Count()=%d" ), iQueue.Count() ); - LOGTEXT2( _L( "CAsynchFSQ::SaveAndDestroy() ActionsLeft()=%d" ), ActionsLeft() ); - - // add data to our queue - err = Enqueue( EFileSave, aData, aPath, KNullDesC, ENullSchemaType, KNullDesC, KNullDesC ); - - LOGTEXT2( _L( "CAsynchFSQ::SaveAndDestroy() iManualStart=%d" ), iManualStart ); - - if ( !err && !iManualStart ) - { - err = Go(); - } - - LOGTEXT2( _L( "CAsynchFSQ::SaveAndDestroy() returning err=%d" ), err ); - return err; - } - -// ----------------------------------------------------------------------------- -// CAsynchFSQ::Go -// ----------------------------------------------------------------------------- -// -EXPORT_C TInt CAsynchFSQ::Go() - { - LOGTEXT( _L( "CAsynchFSQ::Go() entering" ) ); - TInt err = KErrNone; - - // make sure the queue has at least one object - if( iQueue.Count() == 0 ) - { - err = KErrNotReady; - } - - // activate AO's - - for( TInt i = 0; i < iQueue.Count(); i++ ) - { - if(( !err )&&( iQueue[i]->GetState() == EPending )) - { - err = iQueue[i]->Go(); - } - } - - LOGTEXT2( _L( "CAsynchFSQ::Go() returning err=%d" ), err ); - return err; - } - -// ----------------------------------------------------------------------------- -// CAsynchFSQ::SetManualStart -// ----------------------------------------------------------------------------- -// -EXPORT_C void CAsynchFSQ::SetManualStart( TBool aManualStart ) - { - LOGTEXT( _L( "CAsynchFSQ::ManualStart() entering" ) ); - iManualStart = aManualStart; - LOGTEXT( _L( "CAsynchFSQ::ManualStart() returning" ) ); - } - -// ----------------------------------------------------------------------------- -// CAsynchFSQ::Delete -// ----------------------------------------------------------------------------- -// -EXPORT_C TInt CAsynchFSQ::Delete( const TDesC& aPath ) - { - LOGTEXT( _L( "CAsynchFSQ::Delete() entering" ) ); - TInt err = KErrNotFound; - - // search for path name and delete if found - for( TInt i = 0; i < iQueue.Count(); i++ ) - { - if ( iQueue[i]->DoesLocalSave() ) - { - if ( (iQueue[i]->GetPath()).Compare( aPath ) == 0 ) - { - LOGTEXT( _L( "CAsynchFSQ::Delete() file found, deleting" ) ); - err = iQueue[i]->DeleteLocal(); - } - } - } - - // if still not found, - // attempt to delete from file system - if ( err == KErrNotFound ) - { - LOGTEXT( _L( "CAsynchFSQ::Delete() not in queues, trying file system" ) ); - RFs fs; - TInt connectError = fs.Connect(); - BaflUtils ba; - if( !connectError && ba.FileExists( fs, aPath ) ) - { - LOGTEXT( _L( "CAsynchFSQ::Delete() exists, deleting from file system" ) ); - err = KErrNone; - ba.DeleteFile( fs, aPath ); - } - fs.Close(); - } - - LOGTEXT2( _L( "CAsynchFSQ::Delete() returning err=%d" ), err ); - return err; - } - -// ----------------------------------------------------------------------------- -// CAsynchFSQ::Rename -// ----------------------------------------------------------------------------- -// -EXPORT_C TInt CAsynchFSQ::Rename( const TDesC& aOld, const TDesC& aNew ) - { - LOGTEXT( _L( "CAsynchFSQ::Rename() entering" ) ); - - TInt err = KErrNotFound; - - // search for path name and delete if found - for( TInt i = 0; i < iQueue.Count(); i++ ) - { - if ( iQueue[i]->DoesLocalSave() ) - { - if ( (iQueue[i]->GetPath()).Compare( aOld ) == 0 ) - { - LOGTEXT( _L( "CAsynchFSQ::Delete() file found, renaming" ) ); - err = iQueue[i]->RenameLocal( aNew ); - } - } - } - - // if still not found, - // attempt to rename from file system - if ( err == KErrNotFound ) - { - LOGTEXT( _L( "CAsynchFSQ::Rename() not in queues, trying file system" ) ); - RFs fs; - TInt connectError = fs.Connect(); - BaflUtils ba; - if( !connectError && ba.FileExists( fs, aOld ) ) - { - LOGTEXT( _L( "CAsynchFSQ::Rename() exists, renaming in file system" ) ); - err = KErrNone; - ba.RenameFile( fs, aOld, aNew ); - } - fs.Close(); - } - - LOGTEXT2( _L( "CAsynchFSQ::Rename() returning err=%d" ), err ); - return err; - } - - - -// ----------------------------------------------------------------------------- -// CAsynchFSQ::SetThreadPriority -// ----------------------------------------------------------------------------- -// -EXPORT_C void CAsynchFSQ::SetPriority( TInt aPriority ) - { - LOGTEXT2( _L( "CAsynchFSQ::SetThreadPriority() entering aPriority=%d" ), aPriority ); - iPriority = aPriority; - LOGTEXT( _L( "CAsynchFSQ::SetThreadPriority() exiting" ) ); - } - -// ----------------------------------------------------------------------------- -// CAsynchFSQ::SetCallback -// ----------------------------------------------------------------------------- -// -EXPORT_C void CAsynchFSQ::SetCallback( MAsynchFSQObserver* aCallback ) - { - LOGTEXT( _L( "CAsynchFSQ::SetCallback() entering" ) ); - iCallback = aCallback; - LOGTEXT( _L( "CAsynchFSQ::SetCallback() exiting" ) ); - } - -// ----------------------------------------------------------------------------- -// CAsynchFSQ::ActionsLeft -// ----------------------------------------------------------------------------- -// -EXPORT_C TInt CAsynchFSQ::ActionsLeft() - { - TInt actionsLeft = 0; - - for( TInt i = 0; i < iQueue.Count(); i++ ) - { - actionsLeft += iQueue[i]->ActionsLeft(); - } - - LOGTEXT2( _L( "CAsynchFSQ::ActionsLeft() actionsLeft=%d" ), actionsLeft ); - return actionsLeft; - } - -// ----------------------------------------------------------------------------- -// CAsynchFSQ::Cancel -// ----------------------------------------------------------------------------- -// -EXPORT_C void CAsynchFSQ::Cancel() - { - LOGTEXT( _L( "CAsynchFSQ::Cancel() entering" ) ); - - while( iQueue.Count() ) - { - delete iQueue[0]; - iQueue[0] = NULL; - iQueue.Remove( 0 ); // Data MUST be deleted first - } - - LOGTEXT( _L( "CAsynchFSQ::Cancel() exiting" ) ); - } - -// ----------------------------------------------------------------------------- -// CAsynchFSQ::Notify -// ----------------------------------------------------------------------------- -// -void CAsynchFSQ::Notify( TInt aError ) - { - LOGTEXT( _L( "CAsynchFSQ::Notify() entering" ) ); - iCallback->MAsynchFSQEvent( aError ); - - // Scan and delete completed atoms - for( TInt i = 0; i < iQueue.Count(); i++ ) - { - if( iQueue[i]->ActionsLeft() == 0 ) - { - delete iQueue[i]; - iQueue[i] = NULL; - iQueue.Remove( i ); // Data MUST be deleted first - i--; - } - } - - LOGTEXT( _L( "CAsynchFSQ::Notify() exiting" ) ); - } - -// ----------------------------------------------------------------------------- -// CAsynchFSQ::Enqueue -// ----------------------------------------------------------------------------- -// -TInt CAsynchFSQ::Enqueue( TFSQActionType aActionType, TDesC8& aData, - const TDesC& aPath, const TDesC& aURL, - TFSQSchemaType aSchema, const TDesC& aUserName, - const TDesC& aPassword ) - { - LOGTEXT( _L( "CAsynchFSQ::Enqueue() entering" ) ); - - TInt err = KErrNone; - - TInt queueError = KErrNone; - TRAP( err, - // create atom - CAsynchFSQAtom* atom = - CAsynchFSQAtom::NewL( this, - iPriority, - aActionType, - aData, - aPath, - aURL, - aSchema, - aUserName, - aPassword ); - - //append to queue - iQueue.Append( atom ); - ); - - if ( !err && queueError ) - { - err = queueError; - } - - LOGTEXT2( _L( "CAsynchFSQ::Enqueue() returning err=%d" ), err ); - return err; - } - -// End of File