--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingapp/msgsettings/msginit/src/coutboxsender.cpp Tue Jul 13 22:09:22 2010 +0530
@@ -0,0 +1,258 @@
+/*
+ * Copyright (c) 2010 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: Implements class
+ *
+ */
+
+// INCLUDE FILES
+
+#include <CoreApplicationUIsSDKCRKeys.h>
+#include <msvuids.h> // Entry Uids
+#include "coutboxsendoperation.h"
+#include "coutboxsender.h"
+#include "debugtraces.h"
+
+// CONSTANTS
+const TInt KListBar0(0);
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ----------------------------------------------------
+// COutboxSender::NewL
+// ----------------------------------------------------
+//
+COutboxSender* COutboxSender::NewL(CMsvSession& aMsvSession)
+{
+ COutboxSender* self = new (ELeave) COutboxSender(aMsvSession);
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ CleanupStack::Pop();
+ return self;
+}
+
+// ----------------------------------------------------
+// COutboxSender::COutboxSender
+// ----------------------------------------------------
+//
+COutboxSender::COutboxSender(CMsvSession& aMsvSession) :
+ iMsvSession(aMsvSession)
+{
+}
+
+// ----------------------------------------------------
+// COutboxSender::~COutboxSender
+// ----------------------------------------------------
+//
+COutboxSender::~COutboxSender()
+{
+ // Stop and delete the sending operation
+ delete iRunningOperation;
+
+ // Check if notification is set
+ if (iFlags & EUserSettingsNotifierSet)
+ {
+ // Remove the notification from list
+ if (iNotifyHandler)
+ {
+ iNotifyHandler->StopListening();
+ delete iNotifyHandler;
+ }
+
+ delete iSession;
+ }
+
+}
+
+// ----------------------------------------------------
+// COutboxSender::ConstructL
+// ----------------------------------------------------
+//
+void COutboxSender::ConstructL()
+{
+ iNetworkBars = KListBar0;
+ iSession = CRepository::NewL(KCRUidCoreApplicationUIs);
+ iNotifyHandler = CCenRepNotifyHandler::NewL(*this, *iSession, CCenRepNotifyHandler::EIntKey,
+ KCoreAppUIsNetworkConnectionAllowed);
+ iNotifyHandler->StartListeningL();
+
+ // Turn flag on for possible error handling cases
+ iFlags |= EUserSettingsNotifierSet;
+
+ CheckBootPhaseL();
+}
+
+// ----------------------------------------------------
+// COutboxSender::StartSendingL
+// ----------------------------------------------------
+//
+void COutboxSender::StartSendingL()
+{
+ // Check if the sending is already in progress
+ if (!IsSending())
+ {
+ // Create instance of Single Operation Watcher
+ CMsvSingleOpWatcher* singleOpWatcher = CMsvSingleOpWatcher::NewL(*this);
+
+ // Push to cleanup stack while creating sending operation
+ CleanupStack::PushL(singleOpWatcher);
+ CMsvOperation* op = COutboxSendOperation::NewL(iMsvSession, singleOpWatcher->iStatus);
+ CleanupStack::Pop(singleOpWatcher);
+
+ // Set operation
+ singleOpWatcher->SetOperation(op); // takes immediately ownership
+ iRunningOperation = singleOpWatcher;
+ }
+}
+
+// ----------------------------------------------------
+// COutboxSender::CancelSending
+// ----------------------------------------------------
+//
+void COutboxSender::CancelSending()
+{
+ // Remove the running operation
+ delete iRunningOperation;
+ iRunningOperation = NULL;
+}
+
+// ----------------------------------------------------
+// COutboxSender::IsSending
+// ----------------------------------------------------
+//
+TBool COutboxSender::IsSending() const
+{
+ return (iRunningOperation != NULL);
+}
+
+// ----------------------------------------------------
+// COutboxSender::OpCompleted
+// ----------------------------------------------------
+//
+void COutboxSender::OpCompleted(CMsvSingleOpWatcher& /*aOpWatcher*/, TInt /*aCompletionCode*/)
+{
+ delete iRunningOperation;
+ iRunningOperation = NULL;
+}
+
+// ----------------------------------------------------
+// COutboxSender::HandleNotifyInt
+// ----------------------------------------------------
+//
+void COutboxSender::HandleNotifyInt(const TUint32 aID, const TInt aNewValue)
+{
+ QDEBUG_WRITE(("COutboxSender::HandleNotifyInt"));
+ // Check if key is for offline-connecton
+ if (aID == KCoreAppUIsNetworkConnectionAllowed)
+ {
+ QDEBUG_WRITE(("COutboxSender::HandleNotifyInt KCoreAppUIsNetworkConnectionAllowed"));
+ // Check if connection is established
+ if (aNewValue == ECoreAppUIsNetworkConnectionAllowed)
+ {
+ QDEBUG_WRITE(("COutboxSender::HandleNotifyInt ECoreAppUIsNetworkConnectionAllowed 1"));
+ // Phone switched on again!
+ iFlags |= EOffllineSendingNeeded;
+
+ QDEBUG_WRITE_FORMAT(("COutboxSender::HandleNotifyInt iNetworkBars = %d"), iNetworkBars );
+ if (iNetworkBars > KListBar0)
+ {
+ QDEBUG_WRITE_FORMAT(("COutboxSender::HandleNotifyInt sending now, iNetworkBars = %d"), iNetworkBars );
+ TRAP_IGNORE( StartSendingL() );
+ }
+ }
+ else
+ {
+ QDEBUG_WRITE("COutboxSender::HandleNotifyInt ECoreAppUIsNetworkConnectionAllowed 0");
+ // Clear flag
+ iFlags &= ~EOffllineSendingNeeded;
+ // Stop sending
+ CancelSending();
+ // Set the coverage to 0 in case it didn't come from network in time
+ iNetworkBars = KListBar0;
+ }
+ }
+}
+
+// ----------------------------------------------------
+// COutboxSender::HandleNotifyGeneric
+// ----------------------------------------------------
+//
+void COutboxSender::HandleNotifyGeneric(const TUint32 /*aID*/)
+{
+ //NO OPERATION
+}
+
+// ----------------------------------------------------
+// COutboxSender::HandleNotifyError
+// ----------------------------------------------------
+//
+void COutboxSender::HandleNotifyError(const TUint32 /*aID*/, const TInt /*aError*/,
+ CCenRepNotifyHandler* /*aHandler*/)
+{
+ //NO OPERATION
+}
+
+// ----------------------------------------------------
+// COutboxSender::CheckAndStartSendingL
+// ----------------------------------------------------
+//
+void COutboxSender::CheckAndStartSendingL(const TInt& aNetworkBars)
+{
+ QDEBUG_WRITE_FORMAT("COutboxSender::CheckAndStartSendingL aNetworkBars = ", aNetworkBars );
+ iNetworkBars = aNetworkBars;
+ // Check if sending is needed and network is available
+ if (aNetworkBars > KListBar0)
+ {
+ QDEBUG_WRITE_FORMAT("COutboxSender::CheckAndStartSendingL sending now, iNetworkBars ", iNetworkBars );
+ // Start sending
+ StartSendingL();
+ }
+ else
+ {
+ QDEBUG_WRITE_FORMAT("COutboxSender::CheckAndStartSendingL not sending, iNetworkBars = ", iNetworkBars );
+ }
+}
+
+// ----------------------------------------------------
+// COutboxSender::CheckBootPhaseL
+// ----------------------------------------------------
+//
+void COutboxSender::CheckBootPhaseL()
+{
+ TInt connection;
+
+ TInt err = iSession->Get(KCoreAppUIsNetworkConnectionAllowed, connection);
+
+ if (err == KErrNone)
+ {
+ // Check if connection is established
+ if (connection)
+ {
+ QDEBUG_WRITE("COutboxSender::CheckBootPhaseL KGSNetworkConnectionAllowed 1");
+ // Phone switched on again!
+ iFlags |= EOffllineSendingNeeded;
+
+ if (iNetworkBars > KListBar0)
+ {
+ QDEBUG_WRITE_FORMAT("COutboxSender::CheckBootPhaseL sending now, iNetworkBars = ", iNetworkBars );
+ StartSendingL();
+ }
+ }
+ }
+ else
+ {
+ QDEBUG_WRITE("COutboxSender::CheckBootPhaseL Cannot access shared data");
+ }
+}
+
+// End of file