--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingfw/scheduledsendmtm/schedulesendmtm/inc/MsvScheduleSend.h Fri Jun 04 10:32:16 2010 +0100
@@ -0,0 +1,192 @@
+// 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:
+//
+
+#ifndef __MSVSCHEDULESEND_H__
+#define __MSVSCHEDULESEND_H__
+
+#ifdef _DEBUG
+#undef _MSG_NO_LOGGING
+#endif
+
+
+
+
+#include <e32base.h>
+#include <msvstd.h>
+#include <csch_cli.h>
+#include <msvschedulepackage.h>
+#include <msvscheduledentry.h>
+
+class CMsvEntrySelection;
+class TMsvSchedulePackage;
+class TMsvSendErrorAction;
+class CMsvStore;
+class TMsvEntry;
+class CMsvOffPeakTimes;
+class CMsvScheduleSettings;
+class CMsvSendErrorActions;
+class CMsvSysAgentActions;
+class TMsvSchedulePackage;
+class TMsvEntryScheduleData;
+class CMsvServerEntry;
+class CRepository;
+
+const TUid KUidMsvScheduledSendingDLL = {0x100056A0};
+const TInt KMsvSchsendArrayGrowth = 10;
+
+#ifdef _MSG_NO_LOGGING
+#define SCHSENDLOG(a)
+#else
+_LIT(KSchSendLogDir, "schsend");
+_LIT(KSchSendLogFile,"SchSend.txt");
+#define SCHSENDLOG(a) a
+#endif
+
+/**
+Provides a Server MTM's interface to the Task Scheduler for messaging
+scheduling.
+
+Server MTM's must provide a derived class that implements GetMessageL() to
+provide a factory for MTM-specific scheduling CMsvScheduledEntry-based objects.
+
+@publishedAll
+@released
+*/
+class CMsvScheduleSend : public CBase
+ {
+public:
+ IMPORT_C ~CMsvScheduleSend();
+
+ IMPORT_C void ScheduleL(const CMsvEntrySelection& aSelection, const TMsvSchedulePackage& aPackage);
+
+ IMPORT_C void ReScheduleL(const CMsvEntrySelection& aSelection, const TMsvSchedulePackage& aPackage, const TMsvSendErrorAction* aErrorAction = NULL);
+
+ IMPORT_C void CheckScheduleL(const CMsvEntrySelection& aSelection);
+ IMPORT_C void DeleteScheduleL(const CMsvEntrySelection& aSelection);
+
+ IMPORT_C void SendingCompleteL(TMsvEntry& aEntry, const TBool aChangeEntry = EFalse);
+ IMPORT_C void SendingCompleteL(const CMsvEntrySelection& aSelection);
+
+
+ inline CMsvOffPeakTimes& OffPeakTimes() const;
+ inline CMsvScheduleSettings& ScheduleSettings() const;
+ inline CMsvSendErrorActions& SendErrorActions() const;
+ inline CMsvSysAgentActions& AgentActions() const;
+
+ IMPORT_C static void CreateScheduleL(RScheduler& aScheduler, const CMsvScheduleSettings& aSettings, const TTime& aStartTime, const TTimeIntervalMinutes& aValidityPeriod, TSchedulerItemRef& aRef);
+ IMPORT_C static void CreateScheduleL(RScheduler& aScheduler, const CArrayFixFlat<TTaskSchedulerCondition>& aConditions, const TTime& aTimeout, TSchedulerItemRef& aRef);
+ IMPORT_C static void FindScheduleL(RScheduler& aScheduler, const TTime& aStartTime, TSchedulerItemRef& aRef);
+ IMPORT_C static void FindScheduleL(RScheduler& aScheduler, const CArrayFixFlat<TTaskSchedulerCondition>& aConditions, const TTime& aTimeout, TSchedulerItemRef& aRef);
+ IMPORT_C static void RoundUpToMinute(TTime& aTime);
+ IMPORT_C static void ScheduleEntryL(RScheduler& aScheduler, const TSchedulerItemRef& aRef, const TMsvSchedulePackage& aPackage, TTaskInfo& aInfo);
+ IMPORT_C static void UpdateEntryAfterSchedule(const TSchedulerItemRef& aRef, const TTaskInfo& aInfo, const TTime& aTime, TInt aFinalState, TMsvEntry& aEntry, TMsvEntryScheduleData& aData);
+ IMPORT_C static void ConnectAndRegisterL(RScheduler& aScheduler, const CMsvScheduleSettings& aSettings);
+
+ IMPORT_C void LoadScheduleSettingsL(CRepository& aRepository);
+
+protected:
+
+ IMPORT_C CMsvScheduleSend(CMsvServerEntry& aServerEntry);
+ IMPORT_C virtual void ConstructL();
+
+/**
+Gets the schedule data and recipients of a message.
+
+Recipient information is MTM-specific, so the server MTM must provide a
+derived class that implements CMsvScheduledEntry, and return objects of
+that type from this function.
+
+@param aId
+The message ID.
+
+@return
+The message's schedule data.
+*/
+ virtual CMsvScheduledEntry* GetMessageL(const TMsvId aId) const = 0;
+
+private:
+
+ enum
+ {
+ EDefaultTaskPriority = 1, //used when scheduling a task in the task scheduler
+ EDefaultTaskRepeat = 0 //used when scheduling a task in the task scheduler
+ };
+
+ void SendingCompleteL(CMsvScheduledEntry& aScheduledEntry, const TBool aChangeEntry);
+
+ TBool GetNextRetry(CMsvScheduledEntry& aMessage, const TMsvSendErrorAction& aErrorAction, TTimeIntervalSeconds& aInterval) const;
+
+ void DoScheduleL(CMsvScheduledEntries& aSchEntries, const TInt aFinalState, const TTime& aTime, TBool aPendingConditions);
+ void DoReScheduleL(CMsvScheduledEntries& aSchEntries);
+
+ void GetMessagesL(const CMsvEntrySelection& aSelection);
+
+ void ConnectAndRegisterL();
+
+ void ScheduleEntryL(CMsvScheduledEntry& aMessage, const TInt aFinalState, const TTime& aStartTime, const TSchedulerItemRef& aRef, TBool aPendingConditions);
+
+ void GetOffPeakL(TTime aFromTime, TTime& aStartTime, TTimeIntervalMinutes& aValidityPeriod) const;
+
+ void DeleteScheduleForEntryL(CMsvScheduledEntry& aMessage);
+ void ResetScheduleInfoForEntryL(CMsvScheduledEntry& aMessage, const TBool aChangeEntry);
+ void SortByDateAndPendingConditionsL(CMsvScheduledEntries& aScheduledEntries);
+ void CreateScheduleL(const TTime& aStartTime, const TTimeIntervalMinutes& aValidityPeriod, const CArrayFixFlat<TTaskSchedulerCondition>& aSchConditions, TBool aPendingConditions, TSchedulerItemRef& aRef);
+ void FindScheduleL(const TTime& aTime, const CArrayFixFlat<TTaskSchedulerCondition>& aSchConditions, TBool aPendingConditions, TSchedulerItemRef& aRef);
+
+ void PopulateScheduleConditionsL(CArrayFixFlat<TTaskSchedulerCondition>& aSchConditions);
+ TBool SetMessageStartTime(CMsvScheduledEntry& aMessage, const TTime& aFromTime, const TMsvSendErrorAction* aErrorAction = NULL);
+
+ TBool TaskAndMessageMatchL(const CMsvScheduledEntry& aMessage);
+ TMsvId GetMessageIdForTaskL(TInt aTaskId);
+#ifndef _MSG_NO_LOGGING
+ void FLog(TRefByValue<const TDesC> aFormat, ...);
+ void FLog(TRefByValue<const TDesC8> aFormat, ...);
+#endif
+
+protected:
+
+ /** The Server MTM specific scheduled message sending settings. */
+ CMsvScheduleSettings* iSettings;
+ /** The Server MTM specific off peak time periods. */
+ CMsvOffPeakTimes* iOffPeakTimes;
+ /** The Server MTM specific actions to take when particular errors occur during
+ message sending. */
+ CMsvSendErrorActions* iErrorActions;
+ /** The System Agent conditions that must be satisfied before a sending attempt. */
+ CMsvSysAgentActions* iAgentActions;
+
+ /** Indicates if this has been registered with the Task Scheduler.
+
+ Initially set to EFalse. */
+ TBool iRegistered;
+ /** Provides an interface to the Task Scheduler. */
+ RScheduler iScheduler;
+ /** The CMsvServerEntry of the server MTM. */
+ CMsvServerEntry& iServerEntry;
+ /** Scheduling options. */
+ TMsvSchedulePackage iPackage;
+
+ /** Array of message schedule data. */
+ CMsvScheduledEntries* iSchEntries;
+
+ /** Array of schedule entry data. */
+ CArrayFixFlat<TScheduleEntryInfo2>* iSchEntryInfo;
+ /** Array of schedule task data. */
+ CArrayFixFlat<TTaskInfo>* iSchTaskInfo;
+ };
+
+#include <msvschedulesend.inl>
+
+#endif