--- a/localconnectivityservice/obexserviceman/utils/src/obexutilslaunchwaiter.cpp Thu Aug 19 10:46:39 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,411 +0,0 @@
-/*
-* 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:
-*
-*/
-
-
-// INCLUDE FILES
-#include <eikenv.h>
-#include <DocumentHandler.h>
-#include <mmsvattachmentmanager.h>
-#include <msvids.h>
-#include <bautils.h>
-#include <AknCommonDialogsDynMem.h> // for memory and file selection dialogs
-#include <CommonDialogs.rsg>
-#include <pathinfo.h> // for getting drive root path
-#include <Obexutils.rsg>
-#include <AknGlobalNote.h>
-#include <StringLoader.h>
-#include <AiwGenericParam.h>
-#include "obexutilslaunchwaiter.h"
-#include "obexutilsdebug.h"
-#include "obexutilsuilayer.h" // For launching file manager
-#include "obexutilsmessagehandler.h" // For updating an entry
-
-// ============================ MEMBER FUNCTIONS ===============================
-
-// -----------------------------------------------------------------------------
-// CObexUtilsLaunchWaiter::NewLC
-// -----------------------------------------------------------------------------
-CObexUtilsLaunchWaiter* CObexUtilsLaunchWaiter::NewLC(
- CMsvSession& aMsvSession,
- CMsvEntry* aMessage,
- TRequestStatus& aObserverRequestStatus )
- {
- CObexUtilsLaunchWaiter* self = new( ELeave )CObexUtilsLaunchWaiter(
- aMsvSession,
- aMessage,
- aObserverRequestStatus );
- CleanupStack::PushL( self );
- self->ConstructL( aMessage );
- return self;
- }
-
-// -----------------------------------------------------------------------------
-// CObexUtilsLaunchWaiter::NewL
-// -----------------------------------------------------------------------------
-CObexUtilsLaunchWaiter* CObexUtilsLaunchWaiter::NewL(
- CMsvSession& aMsvSession,
- CMsvEntry* aMessage,
- TRequestStatus& aObserverRequestStatus )
- {
- CObexUtilsLaunchWaiter* self = CObexUtilsLaunchWaiter::NewLC(
- aMsvSession,
- aMessage,
- aObserverRequestStatus );
- CleanupStack::Pop( self );
- return self;
- }
-
-// -----------------------------------------------------------------------------
-// CObexUtilsLaunchWaiter::ConstructL
-// -----------------------------------------------------------------------------
-void CObexUtilsLaunchWaiter::ConstructL( CMsvEntry* aMessage )
- {
- if (aMessage->Count() < 1)
- {
- User::Leave(KErrOverflow);
- }
-
- CMsvEntry* attachEntry = iMsvSession.GetEntryL(((*aMessage)[0]).Id());
- CleanupStack::PushL(attachEntry); // 1st push
- CMsvStore* store = attachEntry->ReadStoreL();
- CleanupStack::PushL(store); // 2nd push
-
- CMsvAttachment* attachInfo = store->AttachmentManagerL().GetAttachmentInfoL(0);
- CleanupStack::PushL(attachInfo); // 3rd push
-
- TDataType dataType = attachInfo->MimeType();
- TFileName filePath;
- filePath = attachInfo->FilePath();
-
- TInt error = KErrNone;
- TBool isCompleteSelf = EFalse;
- CEikonEnv* eikEnv = CEikonEnv::Static();
-
- if ( attachInfo->Type() == CMsvAttachment::EMsvFile )
- {
- RFile attachFile;
- TRAP( error, attachFile = store->AttachmentManagerL().GetAttachmentFileL(0));
- if ( error == KErrNone )
- {
- CleanupClosePushL(attachFile); // 4th push
- CAiwGenericParamList* paramList = CAiwGenericParamList::NewLC(); // 5th push
- TAiwGenericParam paramSave(EGenericParamAllowSave, ETrue);
- paramList->AppendL( paramSave );
-
- if ( eikEnv )
- {
- iDocumentHandler = CDocumentHandler::NewL( eikEnv->Process() );
- iDocumentHandler->SetExitObserver( this );
- TRAP( error, iDocumentHandler->OpenFileEmbeddedL(attachFile, dataType, *paramList));
- }// eikEnv
- CleanupStack::PopAndDestroy(2); // paramList, attachFile
- }
- }// EMsvFile
-
- if ( attachInfo->Type() == CMsvAttachment::EMsvLinkedFile )
- {
- if ( eikEnv )
- {
- RFs rfs;
- User::LeaveIfError( rfs.Connect() );
- if ( BaflUtils::FileExists( rfs, filePath ) )
- {
- CAiwGenericParamList* paramList = CAiwGenericParamList::NewLC(); // 4th push
- TAiwGenericParam paramSave(EGenericParamFileSaved, ETrue);
- paramList->AppendL( paramSave );
-
- iDocumentHandler = CDocumentHandler::NewL( eikEnv->Process() );
- iDocumentHandler->SetExitObserver( this );
-
- RFile64 shareableFile;
- TRAP( error, iDocumentHandler->OpenTempFileL(filePath,shareableFile));
- if ( error == KErrNone)
- {
- TRAP( error, iDocumentHandler->OpenFileEmbeddedL( shareableFile, dataType, *paramList));
- }
- shareableFile.Close();
- CleanupStack::PopAndDestroy(); // paramList
-
- if ( error == KErrNotSupported )
- {
- const TInt sortMethod = 2; // 0 = 'By name', 1 = 'By type',
- // 2 = 'Most recent first' and 3 = 'Largest first'
- TRAP (error, TObexUtilsUiLayer::LaunchFileManagerL( filePath,
- sortMethod,
- ETrue )); // ETrue -> launch file manager in embedded mode.
- } // KErrNotSupported
- isCompleteSelf = ETrue;
- }
- else
- {
- error = KErrNone;
- TFileName fileName;
- if (LocateFileL(fileName, filePath))
- {
- // Update the entry
- TRAP(error, TObexUtilsMessageHandler::UpdateEntryAttachmentL(fileName,aMessage));
- if ( error == KErrNone )
- {
- // Show a confirmation note
- CAknGlobalNote* note = CAknGlobalNote::NewLC();
- HBufC* stringholder = StringLoader::LoadLC( R_BT_SAVED_LINK_UPDATED );
- note->ShowNoteL(EAknGlobalConfirmationNote, *stringholder);
- CleanupStack::PopAndDestroy(2); //note and stringholder
- }
- }
- isCompleteSelf = ETrue;
- }
-
- rfs.Close();
- } // eikEnv
- } // EMsvLinkedFile
-
-
- // Set message to READ
- TMsvEntry entry = aMessage->Entry();
- entry.SetUnread( EFalse );
- aMessage->ChangeL( entry );
-
- User::LeaveIfError ( error );
- CleanupStack::PopAndDestroy(3); // attachInfo, store, attachEntry
-
- iObserverRequestStatus = KRequestPending; // CMsvOperation (observer)
- iStatus = KRequestPending; // CMsvOperation
- SetActive();
-
- if ( isCompleteSelf )
- {
- HandleServerAppExit( error );
- }
- }
-
-// -----------------------------------------------------------------------------
-// Destructor
-// -----------------------------------------------------------------------------
-CObexUtilsLaunchWaiter::~CObexUtilsLaunchWaiter()
- {
- Cancel();
- if (iDocumentHandler)
- {
- delete iDocumentHandler;
- iDocumentHandler = NULL;
- }
- }
-
-// -----------------------------------------------------------------------------
-// CObexUtilsLaunchWaiter::RunL
-// -----------------------------------------------------------------------------
-void CObexUtilsLaunchWaiter::RunL()
- {
- FLOG(_L("[OBEXUTILS]\t CObexUtilsLaunchWaiter::RunL()"));
-
- TRequestStatus* status = &iObserverRequestStatus;
- User::RequestComplete( status, KErrNone );
-
- FLOG(_L("[OBEXUTILS]\t CObexUtilsLaunchWaiter::RunL() completed"));
- }
-
-// -----------------------------------------------------------------------------
-// CObexUtilsLaunchWaiter::DoCancel
-// -----------------------------------------------------------------------------
-void CObexUtilsLaunchWaiter::DoCancel()
- {
- FLOG(_L("[OBEXUTILS]\t CObexUtilsLaunchWaiter::DoCancel()"));
-
- if ( iStatus == KRequestPending )
- {
- TRequestStatus* pstat = &iStatus;
- User::RequestComplete( pstat, KErrCancel );
- }
-
- if( iObserverRequestStatus == KRequestPending )
- {
- TRequestStatus* observerStatus = &iObserverRequestStatus;
- User::RequestComplete( observerStatus, KErrCancel );
- }
-
-
- FLOG(_L("[OBEXUTILS]\t CObexUtilsLaunchWaiter::DoCancel() completed"));
- }
-
-// -----------------------------------------------------------------------------
-// CObexUtilsLaunchWaiter::CObexUtilsLaunchWaiter
-// -----------------------------------------------------------------------------
-CObexUtilsLaunchWaiter::CObexUtilsLaunchWaiter(
- CMsvSession& aMsvSession,
- CMsvEntry* /*aMessage*/,
- TRequestStatus& aObserverRequestStatus )
- :
- CMsvOperation(aMsvSession, EPriorityStandard, aObserverRequestStatus),
- iDocumentHandler(NULL)
- {
- FLOG(_L("[OBEXUTILS]\t CObexUtilsLaunchWaiter::CObexUtilsLaunchWaiter()"));
-
- CActiveScheduler::Add( this );
-
- FLOG(_L("[OBEXUTILS]\t CObexUtilsLaunchWaiter::CObexUtilsLaunchWaiter() completed"));
- }
-
-// -----------------------------------------------------------------------------
-// CObexUtilsLaunchWaiter::HandleServerAppExit
-// -----------------------------------------------------------------------------
-void CObexUtilsLaunchWaiter::HandleServerAppExit(TInt aReason)
- {
- FLOG(_L("[OBEXUTILS]\t CObexUtilsLaunchWaiter::HandleServerAppExit()"));
-
- if( iStatus == KRequestPending )
- {
- // Complete self
- //
- TRequestStatus* status = &iStatus;
- User::RequestComplete( status, aReason );
- }
-
- MAknServerAppExitObserver::HandleServerAppExit( aReason );
- FLOG(_L("[OBEXUTILS]\t CObexUtilsLaunchWaiter::HandleServerAppExit() completed"));
- }
-
-// -----------------------------------------------------------------------------
-// CObexUtilsLaunchWaiter::ProgressL
-// -----------------------------------------------------------------------------
-const TDesC8& CObexUtilsLaunchWaiter::ProgressL()
- {
- return KNullDesC8;
- }
-
-// -----------------------------------------------------------------------------
-// CObexUtilsLaunchWaiter::LocateFile
-// -----------------------------------------------------------------------------
-TBool CObexUtilsLaunchWaiter::LocateFileL(TFileName& aFileName, const TFileName& anOldFileName)
- {
- FLOG(_L("[OBEXUTILS]\t CObexUtilsLaunchWaiter::LocateFile()"));
-
- TBuf<200> buf;
- TRequestStatus status = KRequestPending;
-
- TParse fileParseOld;
- fileParseOld.Set(anOldFileName, NULL, NULL);
- TFileName oldName = fileParseOld.NameAndExt();
-
- // check old link if the file saved in mmc. If so, check if mmc available.
- // if unavailable, show "is File not found as memory card is not present"
- //
- TInt err = CheckIfSaveInMMC( anOldFileName );
- TBool showMMCOut = EFalse;
- if( err == EDriveF)
- {
- if( CheckDriveL(EDriveF) )
- showMMCOut = ETrue;
- }
- else if( err == EDriveE )
- {
- if( CheckDriveL(EDriveE) )
- showMMCOut = ETrue;
- }
-
- TBool answer = EFalse;
- if( showMMCOut )
- {
- answer = TObexUtilsUiLayer::ShowGlobalConfirmationQueryPlainL(R_BT_SAVED_NO_MEMORY_CARD);
- }
- else
- {
- answer = TObexUtilsUiLayer::ShowGlobalConfirmationQueryPlainL(R_BT_SAVED_SEARCH);
- }
-
- TBool updateLink = EFalse;
- if ( answer )
- {
- updateLink = LaunchFileSelectionDialogL(aFileName, oldName);
- }
-
- FLOG(_L("[OBEXUTILS]\t CObexUtilsLaunchWaiter::LocateFile() completed"));
- return updateLink;
- }
-
-// -----------------------------------------------------------------------------
-// CObexUtilsLaunchWaiter::LaunchFileSelectionDialogL
-// -----------------------------------------------------------------------------
-TBool CObexUtilsLaunchWaiter::LaunchFileSelectionDialogL(
- TFileName& aFileName,
- const TFileName& anOldName)
- {
- TBuf<200> buf;
- TParse fileParseNew;
- TFileName nameNew;
- TBool updateLink = EFalse;
-
- while ( !updateLink )
- {
- TBool isSelected = AknCommonDialogsDynMem::RunSelectDlgLD( AknCommonDialogsDynMem::EMemoryTypeMMCExternal|
- AknCommonDialogsDynMem::EMemoryTypeMMC|
- AknCommonDialogsDynMem::EMemoryTypeInternalMassStorage|
- AknCommonDialogsDynMem::EMemoryTypePhone,
- aFileName,
- R_CFD_DEFAULT_SELECT_MEMORY_SELECTION,
- R_CFD_DEFAULT_SELECT_FILE_SELECTION );
-
- if ( isSelected )
- {
- fileParseNew.Set(aFileName, NULL, NULL);
- nameNew = fileParseNew.NameAndExt();
-
- if ( nameNew.Compare(anOldName)) // names do not match
- {
- updateLink = TObexUtilsUiLayer::ShowGlobalConfirmationQueryPlainL(R_BT_SAVED_SEARCH_UPDATE);
- }
- else
- {
- updateLink = ETrue;
- }
- }
- else
- {
- break; // Exit from while loop.
- }
- }
-
- return updateLink;
- }
-
-// -----------------------------------------------------------------------------
-// CObexUtilsLaunchWaiter::CheckDriveL
-// -----------------------------------------------------------------------------
-TInt CObexUtilsLaunchWaiter::CheckDriveL(TDriveNumber aDriveNumber)
- {
- RFs rfs;
- User::LeaveIfError(rfs.Connect());
- CleanupClosePushL( rfs ) ;
- TVolumeInfo volumeInfo;
- TInt err = rfs.Volume(volumeInfo, aDriveNumber);
- CleanupStack::PopAndDestroy(); // rfs
-
- return err;
- }
-// -----------------------------------------------------------------------------
-// CObexUtilsLaunchWaiter::CheckIfSaveInMMC
-// -----------------------------------------------------------------------------
-TInt CObexUtilsLaunchWaiter::CheckIfSaveInMMC(const TFileName& aFileName)
- {
- if(aFileName.Find(_L("F:")) != KErrNotFound)
- return EDriveF;
- if(aFileName.Find(_L("E:")) != KErrNotFound)
- return EDriveE;
-
- return KErrNotFound;
- }
-// End of File