--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingappbase/mcesettings/src/MceSettingsMoveprogress.cpp Thu Dec 17 08:44:11 2009 +0200
@@ -0,0 +1,330 @@
+/*
+* Copyright (c) 2002 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:
+* Starts copy/move message store progress dialog and transfer handler
+*
+*/
+
+
+
+// INCLUDE FILES
+
+
+#include <eikprogi.h> // CEikProgressInfo
+#include <aknnotewrappers.h> // CAknErrorNote
+
+#include "MceSettingsMoveProgress.h" // CMceMoveProgress
+#include "MceSettingsGeneralSettingsDialog.h" // CMceGeneralSettingsDialog
+#include "MceSettingsIds.hrh"
+#include <MceSettings.rsg>
+
+// CONSTANTS
+const TInt KMceCancelButton = 2;
+const TInt KMceTransferComplete = 100;
+
+// ================= MEMBER FUNCTIONS =======================
+
+// C++ default constructor can NOT contain any code that
+// might leave.
+//
+
+// ----------------------------------------------------
+// CMceMoveProgress::Constructor
+//
+//
+// ----------------------------------------------------
+CMceMoveProgress::CMceMoveProgress( CMsvSession*& aSession,
+ MMsvSessionObserver& aObserver,
+ TInt& aSource,
+ const TInt& aTarget,
+ TBool aDeleteCopiedStore,
+ CMceGeneralSettingsDialog& aGeneralSettings,
+ TBool aDeleteOnly )
+ :iSession(aSession), iObserver(aObserver), iSource(aSource), iTarget(aTarget),
+ iDeleteCopiedStore(aDeleteCopiedStore), iCopyOperation(ETrue),
+ iGeneralSettings (aGeneralSettings), iDeleteOnly (aDeleteOnly)
+ {
+ __DECLARE_NAME(_S( "CMceMoveProgress") );
+ }
+
+// ----------------------------------------------------
+// CMceMoveProgress::Constructor
+//
+//
+// ----------------------------------------------------
+CMceMoveProgress* CMceMoveProgress::NewL(
+ CMsvSession*& aSession,
+ MMsvSessionObserver& aObserver, TInt& aSource, const TInt& aTarget,
+ TBool aDeleteCopiedStore, CMceGeneralSettingsDialog& aGeneralSettings, TBool aDeleteOnly )
+ {
+ CMceMoveProgress* self=new ( ELeave ) CMceMoveProgress( aSession,
+ aObserver,
+ aSource,
+ aTarget,
+ aDeleteCopiedStore,
+ aGeneralSettings,
+ aDeleteOnly );
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+// ----------------------------------------------------
+// CMceMoveProgress::ConstructL
+//
+//
+// ----------------------------------------------------
+void CMceMoveProgress::ConstructL()
+ {
+ ;// Nothing
+ }
+
+
+// ----------------------------------------------------
+// CMceMoveProgress::Destructor
+//
+//
+// ----------------------------------------------------
+CMceMoveProgress::~CMceMoveProgress()
+ {
+ delete iProgressTimer;
+ iProgressTimer = NULL;
+ delete iHandler;
+ iHandler = NULL;
+ }
+
+// ----------------------------------------------------
+// CMceMoveProgress::InitializingL
+// Starts transfering message store
+//
+// ----------------------------------------------------
+void CMceMoveProgress::InitializingL()
+ {
+ TRAPD( err2, TransferingL() );
+ if ( err2 )
+ {
+ if ( iProgressTimer )
+ {
+ iProgressTimer->Cancel();
+ }
+
+ if ( iHandler )
+ {
+ iHandler->Cancel();
+ }
+
+ // debug this
+ // obsolete
+ iObserver.HandleSessionEventL( MMsvSessionObserver::EMsvServerReady, NULL, NULL, NULL );
+
+ User::LeaveIfError( err2 );
+ }
+ }
+
+// ----------------------------------------------------
+// CMceMoveProgress::TransferingL
+// Starts transfer thread
+//
+// ----------------------------------------------------
+void CMceMoveProgress::TransferingL()
+ {
+ iProgressDialog = new ( ELeave ) CMceMoveProgressDialog( REINTERPRET_CAST( CEikDialog**,
+ &iProgressDialog ),ETrue );
+
+ iProgressDialog->SetCallback( this );
+
+ iProgressDialog->PrepareLC( R_MCE_MOVE_PROGRESS );
+ iProgressInfo = iProgressDialog->GetProgressInfoL();
+
+ iProgressInfo->SetFinalValue( KMceTransferComplete );
+
+ // messaging progress watching class
+ iProgressTimer=CMsvRemoteOperationProgress::NewL( *this );
+
+ if ( !iDeleteCopiedStore )
+ {
+ // copy messages
+ HBufC* text = StringLoader::LoadLC( R_MCE_COPYING_MESSAGES, CCoeEnv::Static() );
+ iProgressDialog->SetCurrentLabelL( EMceSettingsMoveProgressBar, *text );
+ CleanupStack::PopAndDestroy( text );
+ }
+
+ // Active object kicking off the message store transfer thread
+ iHandler=CMceMessageTransHandler::NewL(*this, iSession, iTarget, iSource, iDeleteCopiedStore);
+
+ // Set the operation: copying the store
+ CMsvOperation* operation = NULL;
+ TDriveUnit targetUnit(iTarget);
+ operation = iSession->CopyStoreL( targetUnit, iHandler->iStatus );
+ iHandler->SetOperation( operation );
+
+ // show the messaging progress
+ ExecuteLD();
+
+#if 0
+ if ( iDeleteCopiedStore )
+ {
+ // Delete the old store
+ TDriveUnit sourceUnit( iSource );
+ operation = iSession->DeleteStoreL( sourceUnit, iHandler->iStatus );
+ iHandler->SetOperation( operation );
+ }
+#endif
+ }
+
+
+// ----------------------------------------------------
+// CMceMoveProgress::UpdateRemoteOpProgressL
+// from MMsvRemoteOperationProgressObserver
+//
+// ----------------------------------------------------
+void CMceMoveProgress::UpdateRemoteOpProgressL()
+ {
+ //This doesn't leave - need L as it is virtual
+ if ( !iHandler )
+ {
+ return;
+ }
+ const TInt percentageDone=iHandler->ProgressL();
+ CEikProgressInfo* progressBar=iProgressDialog->GetProgressInfoL();
+ progressBar->SetAndDraw( percentageDone );
+ }
+
+// ----------------------------------------------------
+// CMceMoveProgress::DisableCancelL
+// from MMceMsgTransHandlerObserver
+//
+// ----------------------------------------------------
+void CMceMoveProgress::DisableCancelL()
+ {
+ CMceMoveProgressDialog* dialog = STATIC_CAST( CMceMoveProgressDialog*, iProgressDialog );
+ dialog->DisableCancelL();
+ }
+
+// ----------------------------------------------------
+// CMceMoveProgress::CopyCompleteL
+// from MMceMsgTransHandlerObserver
+//
+// ----------------------------------------------------
+void CMceMoveProgress::CopyCompleteL( TInt aErr )
+ {
+ //This is actually a non-leaving function - need the L because it is a virtual function
+ // For EVSG-7V89T5
+ CMceMoveProgress::DisableCancelL();
+ iGeneralSettings.SetTransferError( aErr );// Catches the error when failed moving message store( aErr );
+ UpdateRemoteOpProgressL();
+ if (aErr!=KErrNone)
+ {
+ if ( aErr == KErrDiskFull )
+ {
+ CAknQueryDialog* lowmemoryDialog = CAknQueryDialog::NewL();
+ // Not enough memory
+ lowmemoryDialog->ExecuteLD( R_MCE_NOT_ENOUGH_MEMORY );
+ }
+ else
+ {
+ // Other error cases: KErrAccessDenied
+ // Todo: if necessary add to CMceGeneralSettingsDialog::MoveMessageStoreL
+ // in order to prevent messaging close.
+ HBufC* text = StringLoader::LoadLC( R_MCE_SETTINGS_CANNOT_MOVE_STORE,
+ CCoeEnv::Static() );
+ CAknErrorNote* note = new (ELeave) CAknErrorNote();
+ note->ExecuteLD(*text);
+ CleanupStack::PopAndDestroy( text );
+ }
+ }
+ else
+ {
+ // The store has has been copied. Only change message store on success
+#ifdef RD_MULTIPLE_DRIVE
+ iGeneralSettings.ChangeMessageStoreL( iTarget );
+#else
+ iGeneralSettings.ChangeMessageStoreL();
+#endif //RD_MULTIPLE_DRIVE
+ iGeneralSettings.UpdateMemorySelectionL();
+ iSource=iTarget;
+ }
+ }
+
+// ----------------------------------------------------
+// CMceMoveProgress::TransferCompleteL
+// from MMceMsgTransHandlerObserver
+//
+// ----------------------------------------------------
+void CMceMoveProgress::TransferCompleteL( TInt /*aErr*/ )
+ {
+ iProgressTimer->Cancel();
+ iHandler->Cancel();
+
+ iObserver.HandleSessionEventL( MMsvSessionObserver::EMsvServerReady, NULL, NULL, NULL );
+
+ iProgressDialog->ProcessFinishedL();
+
+ delete iProgressDialog;
+ iProgressDialog = NULL;
+
+ // Copy operation competed
+ iCopyOperation = EFalse;
+
+ delete this;
+ }
+
+// ----------------------------------------------------
+// CMceMoveProgress::DialogDismissedL
+// from MProgressDialogCallback
+//
+// ----------------------------------------------------
+void CMceMoveProgress::DialogDismissedL( TInt aButtonId )
+ {
+ iProgressTimer->Cancel();
+ iHandler->Cancel();
+
+ iObserver.HandleSessionEventL( MMsvSessionObserver::EMsvServerReady, NULL, NULL, NULL );
+
+ if ( aButtonId == EAknSoftkeyCancel )
+ {
+ // cancel has been pressed
+ delete this;
+ }
+ }
+
+// ----------------------------------------------------
+// CMceMoveProgress::ExecuteLD
+// starts copy/move progress dialog
+//
+// ----------------------------------------------------
+void CMceMoveProgress::ExecuteLD()
+ {
+ User::After(1000000); // Allow the message server to complete the pending operations
+ iProgressDialog->RunDlgLD( CAknNoteDialog::ENoTone );
+ }
+
+
+// ----------------------------------------------------
+// CMceMoveProgressDialog::DisableCancelL
+// disables Cancel button in copy/move progress dialog
+//
+// ----------------------------------------------------
+void CMceMoveProgressDialog::DisableCancelL()
+ {
+ HBufC *emptysoftkey = CCoeEnv::Static()->AllocReadResourceL( R_TEXT_SOFTKEY_EMPTY );
+ CleanupStack::PushL( emptysoftkey );
+ ButtonGroupContainer().SetCommandL( KMceCancelButton,EAknSoftkeyEmpty, *emptysoftkey );
+ CleanupStack::PopAndDestroy( emptysoftkey );
+ ButtonGroupContainer().DrawNow();
+ }
+
+
+// End of File