messagingfw/scheduledsendmtm/schedulesendmtm/src/ScheduleBaseServerMtm.cpp
changeset 62 db3f5fa34ec7
parent 0 8e480a14352b
--- /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 <e32base.h>
+#include <e32std.h>
+#include <msvstd.h>
+#include <msventry.h>
+#include <msvuids.h>
+#include <bautils.h>
+#include <msvschedulesend.h>
+#include <schedulebaseservermtm.h>
+#include <schsend_panic.h>
+#include <centralrepository.h>
+
+
+//
+//
+//	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);
+	}