mmsengine/mmsserver/src/mmsscheduledentry.cpp
changeset 0 72b543305e3a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmsengine/mmsserver/src/mmsscheduledentry.cpp	Thu Dec 17 08:44:11 2009 +0200
@@ -0,0 +1,294 @@
+/*
+* Copyright (c) 2002-2007 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:  
+*     Entry for scheduled sending of MMS messages
+*
+*/
+
+
+
+// INCLUDE FILES
+#include    <apparc.h>
+#include    <msvrcpt.h>
+#include    "mmsscheduledentry.h"
+#include    "mmsconst.h"
+
+// EXTERNAL DATA STRUCTURES
+
+// EXTERNAL FUNCTION PROTOTYPES  
+
+// CONSTANTS
+
+// MACROS
+
+// LOCAL CONSTANTS AND MACROS
+
+// MODULE DATA STRUCTURES
+
+// LOCAL FUNCTION PROTOTYPES
+
+// ==================== LOCAL FUNCTIONS ====================
+
+// ================= MEMBER FUNCTIONS =======================
+
+CMmsRecipient* CMmsRecipient::NewL()
+    {
+    CMmsRecipient* self = new (ELeave) CMmsRecipient();
+    return self;
+    }
+
+CMmsRecipient::~CMmsRecipient()
+    {
+    }
+
+CMmsRecipient::CMmsRecipient()
+    {
+    iMaxRetries = -1; // can be overridden later
+    }
+
+void CMmsRecipient::InternalizeL(RReadStream& aReadStream)
+    {
+    CMsvRecipient::InternalizeL( aReadStream );
+    aReadStream >> iMaxRetries;
+    }
+
+void CMmsRecipient::ExternalizeL(RWriteStream& aWriteStream) const
+    {
+    CMsvRecipient::ExternalizeL( aWriteStream );
+    aWriteStream << iMaxRetries;
+    }
+
+// C++ default constructor can NOT contain any code, that
+// might leave.
+//
+CMmsScheduledEntry::CMmsScheduledEntry( const TMsvEntry& aEntry )
+    : CMsvScheduledEntry( aEntry )
+    {
+    }
+
+// Symbian OS default constructor can leave.
+void CMmsScheduledEntry::ConstructL()
+    {
+    iRecipient = CMmsRecipient::NewL();
+    }
+
+// Two-phased constructor.
+CMmsScheduledEntry* CMmsScheduledEntry::NewL( const TMsvEntry& aEntry )
+    {
+    CMmsScheduledEntry* self = new (ELeave) CMmsScheduledEntry( aEntry );
+    
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self ); // self
+
+    return self;
+    }
+
+    
+// Destructor
+CMmsScheduledEntry::~CMmsScheduledEntry()
+    {
+    delete iRecipient;
+    }
+
+
+// ---------------------------------------------------------
+// CMmsScheduledEntry::CanSendToAnyRecipients
+//
+// ---------------------------------------------------------
+//
+TBool CMmsScheduledEntry::CanSendToAnyRecipients(
+    const CMsvSendErrorActions& aErrorActions,
+    TMsvSendErrorAction& aAction )
+    {
+
+    TBool retVal = EFalse;
+
+    TMsvSendErrorAction action;
+
+    if (aErrorActions.GetSendErrorAction(iRecipient->Error(), action) != KErrNone)
+        {
+        action = aErrorActions.Default();
+        }
+
+    if ( CheckRecipient( *iRecipient, action ) )
+        {
+        retVal = ETrue;
+        aAction = action;
+        }
+
+    return retVal;
+
+    }
+
+// ---------------------------------------------------------
+// CMmsScheduledEntry::CanSendToAnyRecipients
+//
+// ---------------------------------------------------------
+//
+TBool CMmsScheduledEntry::CanSendToAnyRecipients(
+    const TMsvSendErrorAction& aAction )
+    {
+
+    TBool retVal = EFalse;
+    retVal = CheckRecipient( *iRecipient, aAction );
+    return retVal;
+
+    }
+
+// ---------------------------------------------------------
+// CMmsScheduledEntry::RecipientsResetRetries
+//
+// ---------------------------------------------------------
+//
+void CMmsScheduledEntry::RecipientsResetRetries()
+    {
+
+    if ( iRecipient->Status() != CMsvRecipient::ESentSuccessfully )
+        {
+        iRecipient->ResetRetries();
+        }
+
+    }
+
+// ---------------------------------------------------------
+// CMmsScheduledEntry::RecipientsIncreaseRetries
+//
+// ---------------------------------------------------------
+//
+void CMmsScheduledEntry::RecipientsIncreaseRetries()
+    {
+
+    if (iRecipient->Status() != CMsvRecipient::ESentSuccessfully)
+        {
+        iRecipient->IncreaseRetries();
+        }
+
+    }
+
+// ---------------------------------------------------------
+// CMmsScheduledEntry::RecipientsSetFailed
+//
+// ---------------------------------------------------------
+//
+void CMmsScheduledEntry::RecipientsSetFailed()
+    {
+
+    if (iRecipient->Status() != CMsvRecipient::ESentSuccessfully)
+        {
+        iRecipient->SetStatus(CMsvRecipient::EFailedToSend);
+        }
+
+    }
+
+// ---------------------------------------------------------
+// CMmsScheduledEntry::RecipientsAllSent
+//
+// ---------------------------------------------------------
+//
+TBool CMmsScheduledEntry::RecipientsAllSent() const
+    {
+
+    return ( iRecipient->Status() == CMsvRecipient::ESentSuccessfully );
+
+    }
+
+// ---------------------------------------------------------
+// CMmsScheduledEntry::RecipientsStoreL
+//
+// ---------------------------------------------------------
+//
+void CMmsScheduledEntry::RecipientsStoreL(
+    CMsvStore& aStore ) const
+    {
+
+    RMsvWriteStream writeStream;
+    writeStream.AssignLC(aStore, KUidMmsRecipientStream);
+    
+    iRecipient->ExternalizeL( writeStream );
+
+    writeStream.CommitL();
+    CleanupStack::PopAndDestroy( &writeStream ); // close writeStream
+
+    }
+
+// ---------------------------------------------------------
+// CMmsScheduledEntry::RecipientsRestoreL
+//
+// ---------------------------------------------------------
+//
+void CMmsScheduledEntry::RecipientsRestoreL(
+    CMsvStore& aStore )
+    {
+    delete iRecipient;
+    iRecipient = NULL;
+    iRecipient = CMmsRecipient::NewL();
+
+    if ( aStore.IsPresentL( KUidMmsRecipientStream ) )
+        {
+        RMsvReadStream readStream;
+        readStream.OpenLC(aStore, KUidMmsRecipientStream);
+        iRecipient->InternalizeL( readStream );
+        CleanupStack::PopAndDestroy( &readStream ); // close readStream
+        }
+
+    }
+
+// ---------------------------------------------------------
+// CMmsScheduledEntry::CheckRecipient
+//
+// ---------------------------------------------------------
+//
+TBool CMmsScheduledEntry::CheckRecipient(
+    CMsvRecipient& aRecipient,
+    const TMsvSendErrorAction& aAction )
+    {
+    TBool retVal = EFalse;
+
+    // If max retry override set, use it
+    TInt16 retries = ((CMmsRecipient&)aRecipient).MaxRetries();
+    if ( retries < 0 ) 
+        {
+        retries = aAction.MaxRetries();
+        }
+
+    if (aRecipient.Status() != CMsvRecipient::ESentSuccessfully)
+        {
+        if (aAction.iAction == ESendActionSentAlready)
+            {
+            aRecipient.SetStatus(CMsvRecipient::ESentSuccessfully);
+            }
+        else if (aAction.iAction == ESendActionFail)
+            {
+            aRecipient.SetStatus(CMsvRecipient::EFailedToSend);
+            }
+        else if (aAction.iRetries == ESendRetriesInfinite || aRecipient.Retries() < retries )
+            {
+            aRecipient.SetStatus(CMsvRecipient::ENotYetSent);
+            retVal = ETrue;
+            }
+        else
+            {
+            aRecipient.SetStatus(CMsvRecipient::EFailedToSend);
+            }
+        }
+
+    return retVal;
+
+    }
+
+// ================= OTHER EXPORTED FUNCTIONS ==============
+
+//  End of File  
+