email/mail/UtilsSrc/MailUtils.cpp
changeset 0 72b543305e3a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/email/mail/UtilsSrc/MailUtils.cpp	Thu Dec 17 08:44:11 2009 +0200
@@ -0,0 +1,316 @@
+/*
+* 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:  Static helper methods.
+*
+*/
+
+
+// INCLUDE FILES
+#include "MailUtils.h"            // Own header
+#include <MsgMailUtils.rsg>
+
+#include <AknQueryDialog.h>         // CAknTextQueryDialog
+#include <aknnotewrappers.h>
+#include <StringLoader.h>           // StringLoader
+#include <MuiuMsvUiServiceUtilities.h>
+#include <CommonContentPolicy.h>
+#include <e32property.h>
+#include <coemain.h>
+#include <CoreApplicationUIsSDKCRKeys.h>
+
+// This is a maximum size in KBs for attachments which are
+// fetched without confirmation query
+const TInt KMaximumAttachmentSize(100);
+
+// ================= MEMBER FUNCTIONS =======================
+
+// -----------------------------------------------------------------------------
+// MailUtils::TextQueryL
+// leaves if user cancels query
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void MailUtils::TextQueryL(TInt aQueryResource, TDes& aText)
+    {
+    CAknTextQueryDialog* dlg = new (ELeave) CAknTextQueryDialog(aText,CAknQueryDialog::ENoTone);
+    if (dlg->ExecuteLD(aQueryResource)) //R_DATA_QUERY
+        {
+        // query approved
+        return;
+        }
+    // query was cancelled
+    User::Leave(KLeaveWithoutAlert);
+    }
+// -----------------------------------------------------------------------------
+// MailUtils::ConfirmationNoteL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void MailUtils::ConfirmationNoteL(const TDesC& aText)
+    {
+    CAknConfirmationNote* note = new (ELeave) CAknConfirmationNote;
+    note->ExecuteLD(aText);
+    }
+// -----------------------------------------------------------------------------
+// MailUtils::ConfirmationNoteL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void MailUtils::ConfirmationNoteL(TInt aStringResource)
+    {
+    HBufC* buf = StringLoader::LoadLC(aStringResource);
+    ConfirmationNoteL(*buf);
+    CleanupStack::PopAndDestroy(buf);
+    }
+// -----------------------------------------------------------------------------
+// MailUtils::InformationNoteL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void MailUtils::InformationNoteL(const TDesC& aText)
+    {
+    CAknInformationNote* note = new (ELeave) CAknInformationNote(ETrue);
+    note->ExecuteLD(aText);
+    }
+// -----------------------------------------------------------------------------
+// MailUtils::InformationNoteL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void MailUtils::InformationNoteL(TInt aStringResource)
+    {
+    HBufC* buf = StringLoader::LoadLC(aStringResource);
+    InformationNoteL(*buf);
+    CleanupStack::PopAndDestroy(buf);
+    }
+
+// -----------------------------------------------------------------------------
+// MailUtils::ShowNoteIfMsgStoreSpaceLowL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TBool MailUtils::ShowNoteIfMsgStoreSpaceLowL(const TInt /*aSize*/)
+    {
+    // Deprecated -> to be removed
+    User::Leave(KErrNotSupported);
+   
+    return EFalse;
+    }
+// -----------------------------------------------------------------------------
+// MailUtils::OfflineProfileActiveL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TBool MailUtils::OfflineProfileActiveL()
+    {
+    TInt value(0);
+    TBool retVal(EFalse);
+        
+    CRepository* cenRep = CRepository::NewLC( KCRUidCoreApplicationUIs );
+    TInt err = cenRep->Get(KCoreAppUIsNetworkConnectionAllowed, value );
+    if ( !err && !value )
+    	{ // Phone is offline
+        retVal = ETrue;
+        }
+    CleanupStack::PopAndDestroy(); // cenRep    
+    return retVal;
+    }
+// -----------------------------------------------------------------------------
+// MailUtils::IsClosedMimeL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TBool MailUtils::IsClosedMimeL(const TDesC& aMimeType)
+    {
+	CCommonContentPolicy* contentPolicy = CCommonContentPolicy::NewLC();
+
+    TBool banned(contentPolicy->IsClosedType( aMimeType ));
+
+	CleanupStack::PopAndDestroy(); //contentPolicy
+	
+    return banned;
+    }
+
+// -----------------------------------------------------------------------------
+// MailUtils::IsClosedMimeL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TBool MailUtils::IsClosedMimeL(const TDesC8& aMimeType)
+    {
+    HBufC* dataTypeString = HBufC::NewLC(aMimeType.Length());
+	dataTypeString->Des().Copy(aMimeType);
+    TBool banned(ETrue);
+    
+    banned = IsClosedMimeL(*dataTypeString);
+    
+	CleanupStack::PopAndDestroy(); //contentPolicy
+	
+    return banned;
+    }    
+
+// -----------------------------------------------------------------------------
+// MailUtils::IsClosedFileL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TBool MailUtils::IsClosedFileL( RFile& aFileHandle )
+    {
+    if ( aFileHandle.SubSessionHandle() != 0 )
+        {
+	    CCommonContentPolicy* contentPolicy = CCommonContentPolicy::NewLC();
+
+        TBool banned( contentPolicy->IsClosedFileL( aFileHandle ) );
+
+	    CleanupStack::PopAndDestroy(); //contentPolicy
+        return banned;
+        }
+    else
+        {
+        return EFalse;
+        }
+    }  
+
+// -----------------------------------------------------------------------------
+// MailUtils::ConfirmationQueryL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TBool MailUtils::ConfirmationQueryL(const TDesC& aText, TInt aNoteResource)
+    {
+    CAknQueryDialog* qDlg = CAknQueryDialog::NewL();
+
+    if (qDlg->ExecuteLD(aNoteResource, aText))
+        {
+        return ETrue;
+        }
+    return EFalse;
+    }
+
+// -----------------------------------------------------------------------------
+// MailUtils::ConfirmationQueryL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TBool MailUtils::ConfirmationQueryL(
+	TInt aStringResource, 
+	TInt aNoteResource)
+    {
+    HBufC* buf = StringLoader::LoadLC(aStringResource);
+    TBool result = ConfirmationQueryL(*buf, aNoteResource);
+    CleanupStack::PopAndDestroy(buf);
+    return result;
+    }
+
+// -----------------------------------------------------------------------------
+// MailUtils::LargeAttachmentQueryL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TBool MailUtils::LargeAttachmentQueryL( TInt aSize, TInt aStatus )
+    {
+    
+    TInt size( aSize / KKilo );
+    // This check is done in MsgAttachmentUtils::FileSizeToStringL
+    // so it is done here also, so consistent sizes are shown to user.
+    if (size % KKilo)
+        {
+        size++;
+        }  
+	enum TResponce
+		{
+		EMsgMailNotQueried,
+		EMsgMailFetch,
+		EMsgMailDontFetch	
+		};
+	TInt noteResource( R_MAIL_QUEST_LARGE_ATTA_FWD );
+	TInt secondNoteResource( R_MAIL_QUEST_FETCH_ATTA_FWD );
+	if ( (aStatus & EQueryAttachmentFetch ) )
+		{
+		noteResource = R_MAIL_LARGE_ATTA_QUERY;
+		secondNoteResource = R_MAIL_QUEST_FETCH_ATTACHMENT;
+		}
+
+    TBool response( EMsgMailNotQueried );
+        
+    if ( size > KMaximumAttachmentSize )
+        {
+        HBufC* string = StringLoader::LoadLC(
+        	noteResource,
+            size );
+        if ( !MailUtils::ConfirmationQueryL(*string,
+            R_MAIL_YES_NO_QUERY_DLG) )
+            {
+            response = EMsgMailDontFetch;
+            }
+       	else
+       		{
+       		response = EMsgMailFetch;
+       		}
+        CleanupStack::PopAndDestroy(); // string
+        }
+    
+	if ( response == EMsgMailDontFetch )
+		{
+		return EFalse;
+		}
+		
+	// if we're offline, ask confirmation to connect
+	if ( response == EMsgMailNotQueried && (aStatus & EConnectionOffline) )
+		{
+        if ( !MailUtils::ConfirmationQueryL(
+        	secondNoteResource, 
+            R_MAIL_YES_NO_QUERY_DLG) )
+			{
+			return EFalse;
+			}
+		}
+        
+    return ETrue;
+    }
+// -----------------------------------------------------------------------------
+// MailUtils::OfflineProfileActiveWithNoteL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TBool MailUtils::OfflineProfileActiveWithNoteL()
+    {
+    User::Leave( KErrNotSupported );
+    return EFalse;
+    }
+    
+// -----------------------------------------------------------------------------
+// MailUtils::ConfirmationQueryL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TBool MailUtils::ConfirmationQueryL( const TDesC& aText )
+	{
+	return MailUtils::ConfirmationQueryL( aText, R_MAIL_YES_NO_QUERY_DLG );
+	}
+     
+// -----------------------------------------------------------------------------
+// MailUtils::ConfirmationQueryL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TBool MailUtils::ConfirmationQueryL( TInt aStringResource )
+	{
+	return MailUtils::ConfirmationQueryL( 
+		aStringResource, R_MAIL_YES_NO_QUERY_DLG );
+	}
+
+// -----------------------------------------------------------------------------
+// MailUtils::FileSize()
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt MailUtils::FileSize(const TDesC& aFilename)
+    {
+    RFile file;
+    RFs& fs = CCoeEnv::Static()->FsSession();
+    TInt filesize(file.Open(fs, aFilename, EFileShareReadersOnly));
+    if (filesize == KErrNone)
+        {
+        file.Size(filesize);
+        }
+    file.Close();
+
+    return filesize;    
+    }
+	        
+// End of File