messagingfw/wappushfw/PushMsgEntry/src/CWapPushMsgUtils.cpp
changeset 0 8e480a14352b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingfw/wappushfw/PushMsgEntry/src/CWapPushMsgUtils.cpp	Mon Jan 18 20:36:02 2010 +0200
@@ -0,0 +1,136 @@
+// Copyright (c) 2000-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 <smut.h>
+#include <msvstd.h>
+#include <msventry.h>
+#include <msvids.h>
+#include <msvuids.h>
+#include <watcher.h>
+#include <pushentry.h>
+
+#include <push/pushlog.h>
+#include <push/cwappushmsgutils.h>
+
+EXPORT_C CWapPushMsgUtils* CWapPushMsgUtils::NewL()
+/**
+Allocates and constructs a new Wap Push Message Utility object.
+
+@return 
+New Wap Push Message Utility object.
+
+@leave CWapPushMsgUtils::ConstructL
+
+*/
+	{
+	CWapPushMsgUtils* self = new (ELeave) CWapPushMsgUtils();
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	CleanupStack::Pop();
+	return self;
+	}
+
+
+EXPORT_C CWapPushMsgUtils::CWapPushMsgUtils()
+	:iPushServiceId(KMsvNullIndexEntryId), iPushFolderId(KMsvNullIndexEntryId)
+/**
+Constructor.  
+*/
+	{
+	}
+
+
+EXPORT_C void CWapPushMsgUtils::ConstructL()
+/**
+Second stage constructor. Creates CMsvSession and CMsvEntry.   
+
+@leave CMsvSession::OpenSyncL
+@leave CMsvSession::GetEntryL
+@leave CMsvSession::SetSortTypeL
+
+*/
+	{
+	iMsvSession = CMsvSession::OpenSyncL(*this);
+	iMsvEntry = iMsvSession->GetEntryL(KMsvRootIndexEntryId);
+	
+	// Ensure that our CMsvEntry can always see invisible entries
+	TMsvSelectionOrdering sort;
+	sort.SetShowInvisibleEntries(ETrue);
+	iMsvEntry->SetSortTypeL(sort);
+	}
+
+
+EXPORT_C CWapPushMsgUtils::~CWapPushMsgUtils()
+/**
+Destructor.
+*/
+	{
+	delete iMsvEntry;
+	delete iMsvSession;
+	}
+
+
+EXPORT_C void CWapPushMsgUtils::GetServiceIdL(TUid aMtm, TMsvId& aServiceId)
+/**
+Gets the Id of the Push Message Service Entry. 
+
+If there is no service entry then KMsvNullIndexEntry is returned. 
+ 
+@param aMtm 
+MTM type of the required service entry
+
+@param aServiceId 
+Id of the service entry
+*/
+	{
+	//Returns the Service IDs of MTM aMtm
+	
+	if (iPushServiceId != KMsvNullIndexEntryId)
+		{
+		aServiceId = iPushServiceId;
+		return;
+		}
+
+	aServiceId = KMsvNullIndexEntryId;
+
+	iMsvEntry->SetEntryL(KMsvRootIndexEntryId);
+
+	//Get the children on the Root Index Entry
+	CMsvEntrySelection* selection = iMsvEntry->ChildrenWithTypeL(KUidMsvServiceEntry);
+	CleanupStack::PushL(selection);
+
+	TInt count = selection->Count();
+
+	//Find an entry for MTM aMtm
+	for (TInt curChild = 0; curChild < count && (aServiceId == KMsvNullIndexEntryId ); curChild++)
+		{
+		iMsvEntry->SetEntryL(selection->At(curChild));
+
+		if (iMsvEntry->Entry().iMtm == aMtm)
+			{
+			TMsvId id = iMsvEntry->Entry().Id();
+
+			if (aServiceId == KMsvNullIndexEntryId)
+				aServiceId = id;
+			}
+		}
+	iMsvEntry->SetEntryL(KMsvRootIndexEntryId);//Point our entry to something safe
+
+	//If the service Id is not set and we're not doing not self assignment store the ID
+	if (aServiceId != KMsvNullIndexEntryId && (&iPushServiceId != &aServiceId) ) 
+		iPushServiceId = aServiceId;  
+	CleanupStack::PopAndDestroy(); //selection
+	}
+