diff -r fa1df4b99609 -r ebe688cedc25 messagingapp/msgsettings/msginit/src/coutboxsender.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/messagingapp/msgsettings/msginit/src/coutboxsender.cpp Tue Aug 31 15:11:31 2010 +0300 @@ -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 +#include // 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