diff -r ebe688cedc25 -r 7fdbb852d323 email/mail/EditorSrc/Msgattachmentverifier.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/email/mail/EditorSrc/Msgattachmentverifier.cpp Wed Sep 01 12:31:54 2010 +0100 @@ -0,0 +1,168 @@ +/* +* Copyright (c) 2004 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: Class for attachment verification +* +*/ + + +// INCLUDE FILES +#include "Msgattachmentverifier.h" +#include "MsgMailDRMHandler.h" +#include "MailUtils.h" +#include +#include +#include +#include + +// LOCAL CONSTANTS AND MACROS + + +// ================= MEMBER FUNCTIONS ======================= + +// C++ default constructor cannot contain any code that might leave +CMsgAttachmentVerifier::CMsgAttachmentVerifier( CMsvSession& aMsvSession ) + : iMsvSession( aMsvSession ) + { + } +// Symbian OS default constructor can leave. +void CMsgAttachmentVerifier::ConstructL() + { + iDRMHandler = MsgMailDRMHandler::NewL(); + } +// NewLC +CMsgAttachmentVerifier* CMsgAttachmentVerifier::NewLC( + CMsvSession& aMsvSession ) + { + CMsgAttachmentVerifier* self = + new (ELeave) CMsgAttachmentVerifier( aMsvSession ); + CleanupStack::PushL(self); + self->ConstructL(); + return self; + } + + +// Destructor +CMsgAttachmentVerifier::~CMsgAttachmentVerifier() + { + delete iDRMHandler; + } + +// --------------------------------------------------------------------------- +// Verify selected files or show a note if something wrong in a selection. +// --------------------------------------------------------------------------- +// +TBool CMsgAttachmentVerifier::VerifySelectionL( + const MDesCArray* aSelectedFiles ) + { + ASSERT( aSelectedFiles ); + TBool result( ETrue ); + TInt attachmentsByteSize( 0 ); + TInt selectionCount = aSelectedFiles->MdcaCount(); + for (TInt i=0; iMdcaPoint(i), fileSize ); + attachmentsByteSize += fileSize; + } + if ( result ) + { + result = VerifyDiskSpaceL( attachmentsByteSize ); + } + return result; + } + +// --------------------------------------------------------------------------- +// Verify selected files or show a note if something wrong in a selection. +// --------------------------------------------------------------------------- +// +TBool CMsgAttachmentVerifier::OkToExitL( + const TDesC& aDriveAndPath, const TEntry& aEntry ) + { + TBool result( ETrue ); + TInt length = aDriveAndPath.Length() + aEntry.iName.Length(); + if ( length ) + { + HBufC* filename = HBufC::NewLC( length ); + TPtr ptr = filename->Des(); + ptr.Append( aDriveAndPath ); + ptr.Append( aEntry.iName ); + TInt fileSize( 0 ); + result = VerifyFileL( *filename, fileSize ); + CleanupStack::PopAndDestroy( filename ); + if ( result ) + { + result = VerifyDiskSpaceL( fileSize ); + } + } + return result; + } + +// --------------------------------------------------------------------------- +// Verify selected files or show a note if something wrong in a selection. +// --------------------------------------------------------------------------- +// +TBool CMsgAttachmentVerifier::VerifyFileL( + const TDesC& aFilename, + TInt& aFileByteSize ) + { + RFs& fs = CCoeEnv::Static()->FsSession(); + TBool result( ETrue ); + RFile attachment; + User::LeaveIfError( attachment.Open( + fs, + aFilename, + EFileShareReadersOnly) ); + + CleanupClosePushL(attachment); + + // Size() may return error value but then we can just ignore it, file + // size checking is not considered that necessary + aFileByteSize = 0; + attachment.Size( aFileByteSize ); + + if ( MailUtils::IsClosedFileL( attachment ) ) + { + MailUtils::InformationNoteL(R_QTN_MAIL_SEND_FORBID_1); + result = EFalse; + } + else if ( iDRMHandler->IsSuperDistributableFileL( attachment ) ) + { + result = MailUtils::ConfirmationQueryL( + R_QTN_MAIL_SEND_WO_RIGHTS_SD_1, + R_MAIL_EDITOR_DELETE_MESSAGE ); + } + // attachment + CleanupStack::PopAndDestroy(); // CSI: 12 # RFile + return result; + } + +// --------------------------------------------------------------------------- +// Verifies that there is enough disk space to add attachment(s) +// --------------------------------------------------------------------------- +// +TBool CMsgAttachmentVerifier::VerifyDiskSpaceL( TInt aAttachmentsByteSize ) + { + TBool result( ETrue ); + if ( MsvUiServiceUtilities::DiskSpaceBelowCriticalLevelL( + iMsvSession, aAttachmentsByteSize ) ) + { + MailUtils::ConfirmationQueryL( R_QTN_MEMLO_NOT_ENOUGH_MEMORY, + R_MAIL_CONFIRM_NOT_ENOUGH_MEMORY ); + result = EFalse; + } + return result; + } + + +// End of File