/** Utility function that updates message index entry fields to reflect the message's scheduling. @param aRef Scheduler item. @param aInfo Scheduler task information. @param aTime Schedule start time. @param aFinalState Sending state flag. @param aEntry On return, updated index entry. @param aData On return, populated messaging scheduling data. */ EXPORT_C void CMsvScheduleSend::UpdateEntryAfterSchedule(const TSchedulerItemRef& aRef, const TTaskInfo& aInfo, const TTime& aTime, TInt aFinalState, TMsvEntry& aEntry, TMsvEntryScheduleData& aData) { aEntry.SetScheduled(ETrue); aEntry.SetFailed(EFalse); aEntry.SetSendingState(aFinalState); aEntry.SetConnected(EFalse); aEntry.iDate = aTime; aData.iRef = aRef; aData.iTaskId = aInfo.iTaskId; }
/* ----------------------------------------------------------------------------- ----------------------------------------------------------------------------- */ void CSMSSender::PopulateMessageL(TMsvEntry& aMsvEntry,TDes& aDescription,TDes& aDetails) { ASSERT(iMtm); // We get the message body from Mtm and insert a bodytext CRichText& mtmBody = iMtm->Body(); mtmBody.Reset(); mtmBody.InsertL(0, iMessage); // insert our msg tag as the body text if(iDescription) { if(iDescription->Des().Length() > 30) aDescription.Copy(iDescription->Des().Left(30)); else aDescription.Copy(iDescription->Des()); } else { if(iMessage.Length() > 30) aDescription.Copy(iMessage.Left(30)); else aDescription.Copy(iMessage); } if(iDetails) { if(iDetails->Des().Length() > 30) aDetails.Copy(iDetails->Des().Left(30)); else aDetails.Copy(iDetails->Des()); } else { if(iRecipients.Length() > 30) aDetails.Copy(iRecipients.Left(30)); else aDetails.Copy(iRecipients); } aMsvEntry.SetInPreparation(EFalse); aMsvEntry.SetScheduled(EFalse); aMsvEntry.iDate.UniversalTime(); aMsvEntry.SetSendingState(KMsvSendStateWaiting); }
/** Verifies that the schedule information stored in specified messages is the same as that on the task scheduler. @param aSelection Array of message IDs that need to be checked against the task scheduler. @panic ScheduleSend-DLL 0 The array of message IDs is empty. Debug build only. */ EXPORT_C void CMsvScheduleSend::CheckScheduleL(const CMsvEntrySelection& aSelection) { __ASSERT_DEBUG(aSelection.Count(), gPanic(EMessageSelectionEmpty)); GetMessagesL(aSelection); //Leaves with KErrNotFound if there are no messages returned in iSchEntries TInt entryCount = iSchEntries->Count(); SCHSENDLOG(FLog(_L8("Asked to check schedule for %d msgs"), entryCount)); ConnectAndRegisterL(); while (entryCount--) { TBool found = EFalse; TTsTime schTime; CMsvScheduledEntry& sEntry = *iSchEntries->At(entryCount); if (!sEntry.iData.IsReset()) { TSchedulerItemRef ref; TInt size = 0; TTaskInfo info; TInt err = iScheduler.GetTaskDataSize(sEntry.iData.iTaskId, size); if (!err) { HBufC* buf = HBufC::NewLC(size); TPtr ptr = buf->Des(); User::LeaveIfError(iScheduler.GetTaskInfoL(sEntry.iData.iTaskId, info, ptr, ref, schTime)); CleanupStack::PopAndDestroy(buf); found = ETrue; } else if (err != KErrNotFound) { User::Leave(err); } } if (iServerEntry.SetEntry(sEntry.Id()) == KErrNone) { TMsvEntry entry = iServerEntry.Entry(); TInt sendingState = entry.SendingState(); if (sendingState == KMsvSendStateScheduled || sendingState == KMsvSendStateResend || entry.Scheduled()) { if (found) { entry.SetScheduled(ETrue); entry.iDate = schTime.GetUtcTime(); User::LeaveIfError(iServerEntry.ChangeEntry(entry)); } else { entry.SetScheduled(EFalse); entry.SetSendingState(KMsvSendStateUnknown); entry.iDate.UniversalTime(); User::LeaveIfError(iServerEntry.ChangeEntry(entry)); SendingCompleteL(sEntry, EFalse); } } } } }