diff -r 9f5ae1728557 -r db3f5fa34ec7 messagingfw/scheduledsendmtm/schedulesendmtm/src/ScheduleBaseServerMtm.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/messagingfw/scheduledsendmtm/schedulesendmtm/src/ScheduleBaseServerMtm.cpp Wed Nov 03 22:41:46 2010 +0530 @@ -0,0 +1,238 @@ +// Copyright (c) 1999-2009 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: +// + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +// +// +// CScheduleBaseServerMtm Implementation +// +// + +EXPORT_C CScheduleBaseServerMtm::CScheduleBaseServerMtm(CRegisteredMtmDll& aRegisteredMtmDll, CMsvServerEntry* aServerEntry) + : CBaseServerMtm(aRegisteredMtmDll, aServerEntry) +/** +Constructor. + +@param aRegisteredMtmDll Registration data for the MTM DLL +@param aServerEntry Context on which to operate +*/ + { + //Do Nothing Else + } + +EXPORT_C CScheduleBaseServerMtm::~CScheduleBaseServerMtm() +/** +Destructor. + +The derived class destructor should delete the iScheduleSend member. +*/ + { + iResourceFile.Close(); + iFs.Close(); + } + +EXPORT_C void CScheduleBaseServerMtm::SendScheduledL(CMsvEntrySelection& aSelection, const TBool aMove, const TDesC8& /*aParameter*/, TRequestStatus& aStatus) +/** +Sends messages now that were previously scheduled. + +The messages are sent immediately, overriding the scheduling. + +@param aSelection The selection of messages that were previously scheduled +and now need to be sent +@param aMove Whether to perform a Move (ETrue) or a Copy (EFalse) when sending +has completed +@param aParameter The parameter (MTM-specific) that is required when sending +the messages +@param aStatus Asynchronous status word +*/ + { + if (aMove) + { + MoveFromLocalL(aSelection, NULL, aStatus); + } + else + { + CopyFromLocalL(aSelection, NULL, aStatus); + } + } + +EXPORT_C void CScheduleBaseServerMtm::LoadResourceFileL(const TDesC& aResFileName) +/** +Loads the specified resource file. + +A utility function that can be used from the pure virtual LoadResourceFileL(). + +It leaves if the resource file reader cannot be opened. + +@param aResFileName Resource file name +*/ + { + TFileName fileName; + Dll::FileName(fileName); + TParse parse; + parse.Set(aResFileName, &fileName, 0); + fileName=parse.FullName(); + BaflUtils::NearestLanguageFile(iFs, fileName); + iResourceFile.OpenL(iFs, fileName); + } + +EXPORT_C void CScheduleBaseServerMtm::ConstructL() +/** +Second phase constructor. + +This calls LoadResourceFileL(). + +The derived class second phase constructor should call this function. It should +also construct the iScheduleSend member. + +@leave Leaves with one of the system-wide error if unable to connect to the +file server +@leave LoadResourceFileL() +*/ + { + User::LeaveIfError(iFs.Connect()); + LoadResourceFileL(); + } + + +/** +Loads all the schedule settings either from CenRep or a resource file. + +@param aRepository +CenRep repository to load settings from + +@param aRestoreErrorsFromResource +Whether to read error handling information (a SEND_ERROR_ACTIONS struct) from a resource file + +@param aErrorsResourceId +Resource ID of the error handling resource struct + +@see CMsvScheduleSend::RestoreL +@see CMsvSendErrorActions::RestoreFromResourceL() + +@panic ScheduleSend-DLL 24 +The context is not a service entry +*/ +EXPORT_C void CScheduleBaseServerMtm::LoadScheduleSettingsL(CRepository& aRepository, TBool aRestoreErrorsFromResource, TInt aErrorsResourceId) + { + iScheduleSend->LoadScheduleSettingsL(aRepository); + + if (aRestoreErrorsFromResource) + { + //Restore the errors from a resource file + TResourceReader reader; + HBufC8* rBuf = iResourceFile.AllocReadLC(aErrorsResourceId); + reader.SetBuffer(rBuf); + iScheduleSend->SendErrorActions().RestoreFromResourceL(reader); + CleanupStack::PopAndDestroy(); //rBuf + } + } + +EXPORT_C void CScheduleBaseServerMtm::ScheduleL(CMsvEntrySelection& aSelection, const TBool aMove, const TDesC8& aParameter, TRequestStatus& aStatus) +/** +Schedules a message. + +The functions should schedule a message using CMsvScheduleSend::ScheduleL(). +Make sure RestoreScheduleSettingsL() is called before +CMsvScheduleSend::ScheduleL(). + +@param aSelection The selection of messages that need to be scheduled +@param aMove Whether to perform a Move (ETrue) or a Copy (EFalse) when sending +has completed +@param aParameter The parameter (MTM-specific) that is required when sending +the messages +@param aStatus Asynchronous status word + +@leave CMsvScheduleSend::ScheduleL() +*/ + { + TMsvSchedulePackage package; + PopulateSchedulePackage(aParameter, aMove, package); + iScheduleSend->ScheduleL(aSelection, package); + RequestComplete(&aStatus, KErrNone); + } + +EXPORT_C void CScheduleBaseServerMtm::Queue(TRequestStatus& aStatus) +/** +Specifies an asynchronous status word to be completed when an asynchronous +MTM operation completes. + +This provides a form of observer functionality. It sets the the iReport +member. + +@param aStatus Asynchronous status word to use + +@panic ScheduleSend-DLL 28 iReport member not NULL. Debug build only. +*/ + { + __ASSERT_DEBUG(iReport==NULL,gPanic(EReportNotNull)); + + aStatus=KRequestPending; + iReport=&aStatus; + } + +EXPORT_C void CScheduleBaseServerMtm::CheckScheduleL(const CMsvEntrySelection& aSelection, const TDesC8& /*aParameter*/, TRequestStatus& aStatus) +/** +Verifies that the schedule information stored in specified messages +is the same as that on the task scheduler. + +@see CMsvScheduleSend::CheckScheduleL() + +@param aSelection Array of message IDs that need to be checked against the task scheduler +@param aParameter Unused +@param aStatus Asynchronous status word + +@leave CMsvScheduleSend::CheckScheduleL() +*/ + { + iScheduleSend->CheckScheduleL(aSelection); + RequestComplete(&aStatus, KErrNone); + } + +EXPORT_C void CScheduleBaseServerMtm::DeleteScheduleL(const CMsvEntrySelection& aSelection, const TDesC8& /*aParameter*/, TRequestStatus& aStatus) +/** +Deletes the schedules for the specified messages from the task scheduler. + +The messages themselves are not deleted. + +@see CMsvScheduleSend::DeleteScheduleL() + +@param aSelection Array of message IDs that need to be deleted from the +task scheduler +@param aParameter Unused +@param aStatus Asynchronous status word + +@leave CMsvScheduleSend::DeleteScheduleL() +*/ + { + iScheduleSend->DeleteScheduleL(aSelection); + RequestComplete(&aStatus, KErrNone); + } + +void CScheduleBaseServerMtm::RequestComplete(TRequestStatus* aStatus, TInt aError) + { + User::RequestComplete(aStatus, aError); + }