email/imum/Utils/Src/ImumMboxData.cpp
changeset 0 72b543305e3a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/email/imum/Utils/Src/ImumMboxData.cpp	Thu Dec 17 08:44:11 2009 +0200
@@ -0,0 +1,538 @@
+/*
+* Copyright (c) 2006 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 implementation file
+*
+*/
+
+
+// INCLUDES
+#include <smtpset.h>                // CImSmtpSettings
+#include <pop3set.h>                // CImPop3Settings
+#include <imapset.h>                // CImImap4Settings
+#include <iapprefs.h>               // CImIAPPreferences
+#include <txtrich.h>
+
+#include "ImumMboxData.h"
+#include "ImumMboxDataExtension.h"
+#include "ImumUtilsLogging.h"
+
+// EXTERNAL DATA STRUCTURES
+// EXTERNAL FUNCTION PROTOTYPES
+// CONSTANTS
+const TUint32 KServiceIdNoServiceSpecified = 0U;
+_LIT( KImasPanicString, "IMAS" );
+
+// MACROS
+// LOCAL CONSTANTS AND MACROS
+// MODULE DATA STRUCTURES
+// LOCAL FUNCTION PROTOTYPES
+// FORWARD DECLARATIONS
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// ----------------------------------------------------------------------------
+// ImasPanic()
+// ----------------------------------------------------------------------------
+GLDEF_C void ImasPanic(TImumImasPanic aCode)
+    {
+    User::Panic( KImasPanicString, aCode );
+    }
+
+// ----------------------------------------------------------------------------
+// CMsvImailSignature::CMsvImailSignature()
+// ----------------------------------------------------------------------------
+CMsvImailSignature::CMsvImailSignature()
+    {
+    IMUM_CONTEXT( CMsvImailSignature::CMsvImailSignature, 0, KLogData );
+    
+    }
+
+// ----------------------------------------------------------------------------
+// CMsvImailSignature::CMsvImailSignature()
+// ----------------------------------------------------------------------------
+CMsvImailSignature::CMsvImailSignature(
+    CRichText*        aRichText,
+    CParaFormatLayer* aParaFormat,
+    CCharFormatLayer* aCharFormat )
+    :
+    iRichText( aRichText ),
+    iParaFormatLayer( aParaFormat ),
+    iCharFormatLayer( aCharFormat )
+    {
+    IMUM_CONTEXT( CMsvImailSignature::CMsvImailSignature, 0, KLogData );
+    
+    }
+
+// ----------------------------------------------------------------------------
+// CMsvImailSignature::~CMsvImailSignature()
+// ----------------------------------------------------------------------------
+CMsvImailSignature::~CMsvImailSignature()
+    {
+    IMUM_CONTEXT( CMsvImailSignature::~CMsvImailSignature, 0, KLogData );
+    
+    delete iRichText;
+    delete iParaFormatLayer;
+    delete iCharFormatLayer;
+    }
+
+// ----------------------------------------------------------------------------
+// CMsvImailSignature::CopyL()
+// ----------------------------------------------------------------------------
+void CMsvImailSignature::CopyL( const CMsvImailSignature& aSignature )
+    {
+    IMUM_CONTEXT( CMsvImailSignature::CopyL, 0, KLogData );
+    
+    delete iRichText;
+    iRichText = NULL;
+
+    delete iParaFormatLayer;
+    iParaFormatLayer = NULL;
+
+    delete iCharFormatLayer;
+    iCharFormatLayer = NULL;
+
+    if ( aSignature.iParaFormatLayer )
+        {
+        iParaFormatLayer = aSignature.iParaFormatLayer->CloneL();
+        }
+    if ( aSignature.iCharFormatLayer )
+        {
+        iCharFormatLayer = aSignature.iCharFormatLayer->CloneL();
+        }
+    if ( aSignature.iRichText )
+        {
+        __ASSERT_DEBUG(
+            iParaFormatLayer && iCharFormatLayer,
+            ImasPanic( EImasPanicInvalidSignatureSource ) );
+        iRichText = CRichText::NewL( iParaFormatLayer, iCharFormatLayer );
+        iRichText->AppendTakingSolePictureOwnershipL( *aSignature.iRichText );
+        }
+    }
+
+// ----------------------------------------------------------------------------
+// CMsvImailSignature::CreateEmptyRichTextL()
+// ----------------------------------------------------------------------------
+void CMsvImailSignature::CreateEmptyRichTextL()
+    {
+    IMUM_CONTEXT( CMsvImailSignature::CreateEmptyRichTextL, 0, KLogData );
+    
+    delete iRichText;
+    iRichText = NULL;
+
+    delete iParaFormatLayer;
+    iParaFormatLayer = NULL;
+
+    delete iCharFormatLayer;
+    iCharFormatLayer = NULL;
+
+    iParaFormatLayer = CParaFormatLayer::NewL();
+    iCharFormatLayer = CCharFormatLayer::NewL();
+    iRichText = CRichText::NewL( iParaFormatLayer, iCharFormatLayer );
+    }
+
+///////////////////////////////////////////////////////////////////////////////
+// CImumMboxData
+///////////////////////////////////////////////////////////////////////////////
+
+// ----------------------------------------------------------------------------
+// CImumMboxData::NewL()
+// ----------------------------------------------------------------------------
+//
+CImumMboxData* CImumMboxData::NewL()
+    {
+    IMUM_STATIC_CONTEXT( CImumMboxData::NewL, 0, utils, KLogData );
+    
+    CImumMboxData* self = NewLC();
+    CleanupStack::Pop( self );
+
+    return self;
+    }
+
+// ----------------------------------------------------------------------------
+// CImumMboxData::NewLC()
+// ----------------------------------------------------------------------------
+//
+CImumMboxData* CImumMboxData::NewLC()
+    {
+    IMUM_STATIC_CONTEXT( CImumMboxData::NewLC, 0, utils, KLogData );
+    
+    CImumMboxData* self =
+       new ( ELeave ) CImumMboxData();
+    CleanupStack::PushL( self );
+    self->ConstructL();
+
+    return self;
+    }
+
+// ----------------------------------------------------------------------------
+// CImumMboxData::NewL()
+// ----------------------------------------------------------------------------
+//
+CImumMboxData* CImumMboxData::NewL(
+    const TDesC& aName,
+    CImSmtpSettings* aSmtpSettings,
+    CImPop3Settings* aPop3Settings,
+    CImumMboxDataExtension* aExtendedSettings )
+    {
+    IMUM_STATIC_CONTEXT( CImumMboxData::NewL, 0, utils, KLogData );
+    
+    CImumMboxData* self = NewLC(
+        aName, aSmtpSettings, aPop3Settings, aExtendedSettings );
+    CleanupStack::Pop( self );
+
+    return self;
+    }
+
+// ----------------------------------------------------------------------------
+// CImumMboxData::NewLC()
+// ----------------------------------------------------------------------------
+//
+CImumMboxData* CImumMboxData::NewLC(
+    const TDesC& aName,
+    CImSmtpSettings* aSmtpSettings,
+    CImPop3Settings* aPop3Settings,
+    CImumMboxDataExtension* aExtendedSettings )
+    {
+    IMUM_STATIC_CONTEXT( CImumMboxData::NewLC, 0, utils, KLogData );
+    
+    CImumMboxData* self =
+        new ( ELeave ) CImumMboxData(
+            aName, aSmtpSettings, aPop3Settings, NULL, aExtendedSettings );
+    CleanupStack::PushL( self );
+    self->ConstructL();
+
+    return self;
+    }
+
+// ----------------------------------------------------------------------------
+// CImumMboxData::NewL()
+// ----------------------------------------------------------------------------
+//
+CImumMboxData* CImumMboxData::NewL(
+    const TDesC& aName,
+    CImSmtpSettings* aSmtpSettings,
+    CImImap4Settings* aImap4Settings,
+    CImumMboxDataExtension* aExtendedSettings )
+    {
+    IMUM_STATIC_CONTEXT( CImumMboxData::NewL, 0, utils, KLogData );
+    
+    CImumMboxData* self = NewLC(
+        aName, aSmtpSettings, aImap4Settings, aExtendedSettings );
+    CleanupStack::Pop( self );
+
+    return self;
+    }
+
+// ----------------------------------------------------------------------------
+// CImumMboxData::NewLC()
+// ----------------------------------------------------------------------------
+//
+CImumMboxData* CImumMboxData::NewLC(
+    const TDesC& aName,
+    CImSmtpSettings* aSmtpSettings,
+    CImImap4Settings* aImap4Settings,
+    CImumMboxDataExtension* aExtendedSettings )
+    {
+    IMUM_STATIC_CONTEXT( CImumMboxData::NewLC, 0, utils, KLogData );
+    
+    CImumMboxData* self =
+        new ( ELeave ) CImumMboxData(
+            aName, aSmtpSettings, NULL, aImap4Settings, aExtendedSettings );
+    CleanupStack::PushL( self );
+    self->ConstructL();
+
+    return self;
+    }
+
+// ----------------------------------------------------------------------------
+// CImumMboxData::ConstructL()
+// ----------------------------------------------------------------------------
+//
+void CImumMboxData::ConstructL()
+    {
+    IMUM_CONTEXT( CImumMboxData::ConstructL, 0, KLogData );
+    
+    InitializeL();
+    }
+
+// ----------------------------------------------------------------------------
+// CImumMboxData::InitializeL()
+// ----------------------------------------------------------------------------
+//
+void CImumMboxData::InitializeL()
+    {
+    IMUM_CONTEXT( CImumMboxData::InitializeL, 0, KLogData );
+    
+        // Create signature
+    if ( !iSignature )
+        {
+        iSignature = new ( ELeave ) CMsvImailSignature;
+        iSignature->CreateEmptyRichTextL();
+        }
+
+    // Create the base settings
+    if ( !iSmtpSettings )
+        {
+        iSmtpSettings = new ( ELeave ) CImSmtpSettings;
+        }
+
+    if ( !iPop3Settings )
+        {
+        iPop3Settings = new ( ELeave ) CImPop3Settings;
+        }
+
+    if ( !iImap4Settings )
+        {
+        iImap4Settings = new ( ELeave ) CImImap4Settings;
+        }
+
+    // Create IAP preferences separately to both
+    // incoming and outgoing protocols
+    if ( !iIncomingIapPref )
+        {
+        iIncomingIapPref = CImIAPPreferences::NewLC();
+        CleanupStack::Pop( iIncomingIapPref );
+        }
+
+    if ( !iOutgoingIapPref )
+        {
+        iOutgoingIapPref = CImIAPPreferences::NewLC();
+        CleanupStack::Pop( iOutgoingIapPref );
+        }
+
+    if ( !iExtendedSettings  )
+        {
+        iExtendedSettings = CImumMboxDataExtension::NewL();
+        }
+    }
+
+// ----------------------------------------------------------------------------
+// CImumMboxData::CImumMboxData()
+// ----------------------------------------------------------------------------
+CImumMboxData::CImumMboxData()
+    :
+    iIsImap4( EFalse ),
+    iSignature( NULL ),
+    iMailboxId( KMsvNullIndexEntryId ),
+    iDefaultAccountId( KMsvNullIndexEntryIdValue ),
+    iImap4Settings( NULL ),
+    iPop3Settings( NULL ),
+    iSmtpSettings( NULL ),
+    iExtendedSettings( NULL ),
+    iIncomingIap( KServiceIdNoServiceSpecified ),
+    iIncomingDialogPref( ECommDbDialogPrefDoNotPrompt ),
+    iIncomingIapPref( NULL ),
+    iOutgoingIap( KServiceIdNoServiceSpecified ),
+    iOutgoingDialogPref( ECommDbDialogPrefDoNotPrompt ),
+    iOutgoingIapPref( NULL )
+    {
+    IMUM_CONTEXT( CImumMboxData::CImumMboxData, 0, KLogData );
+    
+    }
+
+// ----------------------------------------------------------------------------
+// CImumMboxData::CImumMboxData()
+// ----------------------------------------------------------------------------
+CImumMboxData::CImumMboxData(
+    const TDesC& aName,
+    CImSmtpSettings* aSmtpSettings,
+    CImPop3Settings* aPop3Settings,
+    CImImap4Settings* aImap4Settings,
+    CImumMboxDataExtension* aExtendedSettings )
+    :
+    iIsImap4( EFalse ),
+    iSignature( NULL ),
+    iMailboxId( KMsvNullIndexEntryId ),
+    iDefaultAccountId( KMsvNullIndexEntryIdValue ),
+    iImap4Settings( aImap4Settings ),
+    iPop3Settings( aPop3Settings ),
+    iSmtpSettings( aSmtpSettings ),
+    iExtendedSettings( aExtendedSettings ),
+    iIncomingIap ( KServiceIdNoServiceSpecified ),
+    iIncomingIapPref( NULL ),
+    iOutgoingIap ( KServiceIdNoServiceSpecified ),
+    iOutgoingIapPref( NULL )
+    {
+    IMUM_CONTEXT( CImumMboxData::CImumMboxData, 0, KLogData );
+    
+    iName.Copy( aName );
+    iImap4AccountId.iImapAccountId = KErrNotFound;
+    iPop3AccountId.iPopAccountId = KErrNotFound;
+    }
+
+// ----------------------------------------------------------------------------
+// CImumMboxData::~CImumMboxData()
+// ----------------------------------------------------------------------------
+CImumMboxData::~CImumMboxData()
+    {
+    IMUM_CONTEXT( CImumMboxData::~CImumMboxData, 0, KLogData );
+    
+    delete iSignature;
+    iSignature = NULL;
+    delete iSmtpSettings;
+    iSmtpSettings = NULL;
+    delete iPop3Settings;
+    iPop3Settings = NULL;
+    delete iImap4Settings;
+    iImap4Settings = NULL;
+    delete iIncomingIapPref;
+    iIncomingIapPref = NULL;
+    delete iOutgoingIapPref;
+    iOutgoingIapPref = NULL;
+    delete iExtendedSettings;
+    iExtendedSettings = NULL;
+    }
+
+// ----------------------------------------------------------------------------
+// CImumMboxData::CopyL()
+// ----------------------------------------------------------------------------
+void CImumMboxData::CopyL(
+    const CImumMboxData& aSettings )
+    {
+    IMUM_CONTEXT( CImumMboxData::CopyL, 0, KLogData );
+    
+    iName.Copy( aSettings.iName );
+    iIsImap4 = aSettings.iIsImap4;
+    iMailboxId = aSettings.iMailboxId;
+    iDefaultAccountId = aSettings.iDefaultAccountId;
+
+    // Remove any old settings
+    delete iSignature;
+    iSignature = NULL;
+    delete iSmtpSettings;
+    iSmtpSettings = NULL;
+    delete iPop3Settings;
+    iPop3Settings = NULL;
+    delete iImap4Settings;
+    iImap4Settings = NULL;
+    delete iIncomingIapPref;
+    iIncomingIapPref = NULL;
+    delete iOutgoingIapPref;
+    iOutgoingIapPref = NULL;
+    delete iExtendedSettings;
+    iExtendedSettings = NULL;
+
+    // Mailbox settings
+    iSmtpSettings = new ( ELeave ) CImSmtpSettings;
+    iSmtpSettings->CopyL( *aSettings.iSmtpSettings );
+
+    iPop3Settings = new ( ELeave ) CImPop3Settings;
+    iPop3Settings->CopyL( *aSettings.iPop3Settings );
+
+    iImap4Settings = new ( ELeave ) CImImap4Settings;
+    iImap4Settings->CopyL( *aSettings.iImap4Settings );
+
+    iExtendedSettings = CImumMboxDataExtension::NewL();
+    iExtendedSettings->CopyL( *aSettings.iExtendedSettings );
+
+    iIncomingIapPref = CImIAPPreferences::NewLC();
+    CleanupStack::Pop( iIncomingIapPref );
+
+    iOutgoingIapPref = CImIAPPreferences::NewLC();
+    CleanupStack::Pop( iOutgoingIapPref );
+
+    iSignature = new ( ELeave ) CMsvImailSignature;
+    iSignature->CopyL( *aSettings.iSignature );
+
+    // Incoming IAP preferences
+    iIncomingIap = aSettings.iIncomingIap;
+
+    TInt count = aSettings.iIncomingIapPref->NumberOfIAPs();
+    for ( TInt loop = 0; loop < count; loop++ )
+        {
+        iIncomingIapPref->AddIAPL(
+            aSettings.iIncomingIapPref->IAPPreference( loop ) );
+        }
+
+    // Outgoing IAP preferences
+    iOutgoingIap = aSettings.iOutgoingIap;
+
+    count = aSettings.iOutgoingIapPref->NumberOfIAPs();
+    for ( TInt loop = 0; loop < count; loop++ )
+        {
+        iOutgoingIapPref->AddIAPL(
+            aSettings.iOutgoingIapPref->IAPPreference( loop ) );
+        }
+    }
+
+// ----------------------------------------------------------------------------
+// CImumMboxData::RelatedMtmSettings()
+// ----------------------------------------------------------------------------
+CImBaseEmailSettings& CImumMboxData::RelatedMtmSettings() const
+    {
+    IMUM_CONTEXT( CImumMboxData::RelatedMtmSettings, 0, KLogData );
+    
+    CImBaseEmailSettings* settings = NULL;
+
+    if( iIsImap4 )
+        {
+        settings = iImap4Settings;
+        }
+    else
+        {
+        settings = iPop3Settings;
+        }
+
+    __ASSERT_DEBUG( settings, ImasPanic( EImasPanicNoSettings ) );
+    return *settings;
+    }
+
+// ----------------------------------------------------------------------------
+// CImumMboxData::Clean()
+// ----------------------------------------------------------------------------
+//
+void CImumMboxData::Clean()
+    {
+    IMUM_CONTEXT( CImumMboxData::Clean, 0, KLogData );
+    
+    delete iSignature;
+    iSignature = NULL;
+    delete iSmtpSettings;
+    iSmtpSettings = NULL;
+    delete iPop3Settings;
+    iPop3Settings = NULL;
+    delete iImap4Settings;
+    iImap4Settings = NULL;
+    delete iIncomingIapPref;
+    iIncomingIapPref = NULL;
+    delete iOutgoingIapPref;
+    iOutgoingIapPref = NULL;
+    delete iExtendedSettings;
+    iExtendedSettings = NULL;
+    
+    iIsImap4 = EFalse;
+    iName.Zero();
+    iMailboxId = KMsvNullIndexEntryId;
+    }
+
+// ----------------------------------------------------------------------------
+// CImumMboxData::IsOk()
+// ----------------------------------------------------------------------------
+//
+TBool CImumMboxData::IsOk() const
+    {
+    IMUM_CONTEXT( CImumMboxData::IsOk, 0, KLogData );
+    
+    if ( iSignature && iSmtpSettings && iIncomingIapPref &&
+         iOutgoingIapPref && iExtendedSettings &&
+         ( iPop3Settings || iImap4Settings ) )
+        {
+        return ETrue;
+        }
+
+    return EFalse;
+    }
+
+// End of File