messagingfw/sendas/test/sendastextnotifier/src/CSendAsTextNotifier.cpp
changeset 0 8e480a14352b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingfw/sendas/test/sendastextnotifier/src/CSendAsTextNotifier.cpp	Mon Jan 18 20:36:02 2010 +0200
@@ -0,0 +1,151 @@
+// Copyright (c) 2005-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 "csendastextnotifier.h"
+#include <tmsvpackednotifierrequest.h>
+
+/** UID of the SendAs notifier channel to get the user's confirmation */
+const TUid KSendAsNotifierPluginUid     = {0x10208C14};
+const TUid KTechViewScreenOutputChannel = {0x10208C14};
+
+
+EXPORT_C CArrayPtr<MNotifierBase2>* NotifierArray()
+	{
+	CArrayPtrFlat<MNotifierBase2>* subjects=NULL;
+	TRAPD( err, subjects=new (ELeave)CArrayPtrFlat<MNotifierBase2>(1) );
+	if( err == KErrNone )
+		{
+		TRAP( err, subjects->AppendL( CSendAsTextNotifier::NewL() ) );
+		return(subjects);
+		}
+	else
+		{
+		return NULL;
+		}
+	}
+
+CSendAsTextNotifier* CSendAsTextNotifier::NewL()
+	{
+	CSendAsTextNotifier* self=new (ELeave) CSendAsTextNotifier();
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	CleanupStack::Pop(self);
+	return self;
+	}
+	
+void CSendAsTextNotifier::ConstructL()
+	{
+	iSelection = new (ELeave) CMsvEntrySelection();
+	}
+
+CSendAsTextNotifier::~CSendAsTextNotifier()
+	{
+	delete iSelection;
+	}
+
+CSendAsTextNotifier::CSendAsTextNotifier()
+	{
+	iInfo.iUid      = KSendAsNotifierPluginUid;
+	iInfo.iChannel  = KTechViewScreenOutputChannel;
+	iInfo.iPriority = ENotifierPriorityHigh;
+	}
+
+void CSendAsTextNotifier::Release()
+	{
+	delete this;
+	}
+
+/**
+Called when a notifier is first loaded to allow any initial construction that is required.
+ */
+CSendAsTextNotifier::TNotifierInfo CSendAsTextNotifier::RegisterL()
+	{
+	return iInfo;
+	}
+
+CSendAsTextNotifier::TNotifierInfo CSendAsTextNotifier::Info() const
+	{
+	return iInfo;
+	}
+	
+/**
+The notifier has been deactivated so resources can be freed and outstanding messages completed.
+ */
+void CSendAsTextNotifier::Cancel()
+	{
+	}
+
+/**
+Start the Notifier with data aBuffer. 
+
+Not used for confirm notifiers
+*/
+TPtrC8 CSendAsTextNotifier::StartL(const TDesC8& /*aBuffer*/)
+	{
+	User::Leave(KErrNotSupported);
+	return KNullDesC8();
+	}
+	
+/**
+Start the notifier with data aBuffer. aMessage should be completed when the notifier is deactivated.
+
+May be called multiple times if more than one client starts the notifier. The notifier is immediately 
+responsible for completing aMessage.
+*/
+void CSendAsTextNotifier::StartL(const TDesC8& aBuffer, TInt /*aReplySlot*/, const RMessagePtr2& aMessage)
+	{
+	// extract the notifier request parameters
+	TMsvPackedNotifierRequest::UnpackL(aBuffer, *iSelection, iSecurityInfo);
+	iMessage   = aMessage;
+
+	// Simulate "User Response"
+	CDummyObserver* ob1 = new(ELeave) CDummyObserver;
+	CleanupStack::PushL(ob1);
+
+	CMsvSession* session = CMsvSession::OpenSyncL(*ob1);
+	CleanupStack::PushL(session);
+
+	CMsvEntry* cEntry = session->GetEntryL(iSelection->At(0));
+	CleanupStack::PushL(cEntry);
+
+	TMsvEntry entry = cEntry->Entry();
+
+	// complete with TMsvEntry::iError as return code
+	if (entry.iError != KErrNone)
+		{
+		iMessage.Complete(KErrPermissionDenied);
+		}
+	else
+		{
+		iMessage.Complete(KErrNone);
+		}
+	
+	// Clear the CMsvEntrySelection
+	iSelection->Reset();
+	
+	CleanupStack::PopAndDestroy(3, ob1); // cEntry, session, ob1
+	}
+	
+/**
+Update a currently active notifier with data aBuffer.
+
+Not used for confirm notifiers
+*/
+TPtrC8 CSendAsTextNotifier::UpdateL(const TDesC8& /*aBuffer*/)
+	{
+	User::Leave(KErrNotSupported);
+	return KNullDesC8();
+	}
+