diff -r 000000000000 -r 8e480a14352b messagingfw/wappushfw/examples/PushAppHandlerEx/test/t_serviceutils.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/messagingfw/wappushfw/examples/PushAppHandlerEx/test/t_serviceutils.cpp Mon Jan 18 20:36:02 2010 +0200 @@ -0,0 +1,370 @@ +// 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: +// source file for CWapPushServiceFinder - basic function is to locate a service Id, and if none exists +// then find one. +// +// + +#include +#include +#include +#include + + +#include +#include "WPushUtils.h" +#include "t_serviceutils.h" + + + +CWapPushTestMsgUtils* CWapPushTestMsgUtils::NewL() + { + CWapPushTestMsgUtils* self = new (ELeave) CWapPushTestMsgUtils(); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(); + return self; + } + +CWapPushTestMsgUtils::~CWapPushTestMsgUtils() + { + delete iMsvEntry; + delete iMsvSession; + } + +void CWapPushTestMsgUtils::ConstructL() + { + iMsvSession = CMsvSession::OpenSyncL(*this); + iMsvEntry = iMsvSession->GetEntryL(KMsvRootIndexEntryId); + } + + +void CWapPushTestMsgUtils::PushServiceIdL(TMsvId& rFirstId, CMsvEntrySelection* rServiceIds) + { + //Returns the Service IDs of MTM aMtm, or Null value if none exist + + rFirstId = KMsvNullIndexEntryId; + + iMsvEntry->SetEntryL(KMsvRootIndexEntryId); + + TMsvSelectionOrdering order; + order.SetShowInvisibleEntries(ETrue); + iMsvEntry->SetSortTypeL(order); + + //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 && (rFirstId == KMsvNullIndexEntryId || rServiceIds); curChild++) + { + iMsvEntry->SetEntryL(selection->At(curChild)); + + if (iMsvEntry->Entry().iMtm == KUidMtmWapPush) + { + TMsvId id = iMsvEntry->Entry().Id(); + + if (rFirstId == KMsvNullIndexEntryId) + rFirstId = id; + + if (rServiceIds) + rServiceIds->AppendL(id); + } + } + + CleanupStack::Pop(); //selection + delete selection; + } + + + +void CWapPushTestMsgUtils::InstallMtmGroupL(const TDesC& aDatFile) + { + TInt err = KErrNone; + err = iMsvSession->InstallMtmGroup(aDatFile); + if (err != KErrAlreadyExists) + User::LeaveIfError(err); + } + + + +void CWapPushTestMsgUtils::RemoveServiceEntryChildrenL(TMsvId aServiceId) + { + CMsvEntrySelection* inboxMessageSel; + + TMsvSelectionOrdering sort; + sort.SetShowInvisibleEntries(ETrue); + iMsvEntry->SetSortTypeL(sort); + + iMsvEntry->SetEntryL(aServiceId); + inboxMessageSel = iMsvEntry->ChildrenL(); + CleanupStack::PushL(inboxMessageSel); + + DeleteEntriesSychronouslyL(inboxMessageSel); + + CleanupStack::PopAndDestroy(); // inboxMessageSel + + iMsvEntry->SetEntryL(KMsvRootIndexEntryId); + + } + + +// Cleans the message folder of all entries with the specified Mtm Type. Get the Inbox Entry, and then all the +// children of this entry.Then iterate through the selection deleting each entry with chosesn Mtm Uid. +void CWapPushTestMsgUtils::RemoveEntriesFromLocalServiceFolderL(TMsvId aPushFolderId, TUid aMtm) + { + CMsvEntrySelection* inboxMessageSel; + + TMsvSelectionOrdering sort; + sort.SetShowInvisibleEntries(ETrue); + iMsvEntry->SetSortTypeL(sort); + + iMsvEntry->SetEntryL(aPushFolderId); + __ASSERT_ALWAYS(iMsvEntry->Entry().iType == KUidMsvFolderEntry, + User::Panic(_L("CWapPushTestMsgUtils"), 0)); + inboxMessageSel = iMsvEntry->ChildrenWithMtmL(aMtm); + CleanupStack::PushL(inboxMessageSel); + + for (TInt count =0; count < inboxMessageSel->Count(); count++) + { + iMsvEntry->DeleteL(inboxMessageSel->At(count)); + } + + iMsvEntry->SetEntryL(KMsvRootIndexEntryId); + CleanupStack::PopAndDestroy(); // inboxMessageSel + } + + + +void CWapPushTestMsgUtils::DeleteEntriesSychronouslyL(CMsvEntrySelection* aSelection) + { + if (aSelection->Count() != 0) + { + // iMsvEntry should be set to the parent of the entries to delete, otherwise delete leaves + iMsvEntry->SetEntryL(aSelection->At(0)); + iMsvEntry->SetEntryL(iMsvEntry->Entry().Parent()); + CMsvOperationWait* wait=CMsvOperationWait::NewLC(CActive::EPriorityStandard); + CMsvOperation* op=iMsvEntry->DeleteL(*aSelection, wait->iStatus); + CleanupStack::PushL(op); + wait->Start(); + CActiveScheduler::Start(); + + const TInt err=op->iStatus.Int(); + TPushMTMProgressBuf progressBuf; + progressBuf.Copy(op->ProgressL()); + TPushMTMProgress progress = progressBuf(); + CleanupStack::PopAndDestroy(2); // op, wait + + User::LeaveIfError(err); + User::LeaveIfError(progress.iError); + } + } + +TMsvId CWapPushTestMsgUtils::CreateServiceL() + { + _LIT(KServicedescription, "WAP Push Service Entry"); + TMsvId id = 0; + TMsvEntry entry; + entry.iMtm = KUidMtmWapPush; + entry.iType = KUidMsvServiceEntry; + entry.SetReadOnly(ETrue); + entry.SetVisible(ETrue); + entry.iDetails.Set(KServicedescription); + + iMsvEntry->SetEntryL(KMsvRootIndexEntryId); + iMsvEntry->CreateL(entry); + id = entry.Id(); + iMsvEntry->SetEntryL(id); + return id; + } + + +TMsvId CWapPushTestMsgUtils::CreateMmsServiceL() + { + TMsvId id = KMsvNullIndexEntryId; + + // Check if there is one + 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 && (id == KMsvNullIndexEntryId); curChild++) + { + iMsvEntry->SetEntryL(selection->At(curChild)); + + if (iMsvEntry->Entry().iMtm == KUidMsgTypeMMS) + id = iMsvEntry->Entry().Id(); + } + + CleanupStack::PopAndDestroy(); //selection + + if (id == KMsvNullIndexEntryId) + { + TMsvEntry entry; + entry.iMtm = KUidMsgTypeMMS; + entry.iType = KUidMsvServiceEntry; + + iMsvEntry->SetEntryL(KMsvRootIndexEntryId); + iMsvEntry->CreateL(entry); + id = entry.Id(); + iMsvEntry->SetEntryL(id); + } + + SetMmsSettings(id); + + return id; + } + +void CWapPushTestMsgUtils::SetMmsSettingsL(TMsvId aId) + { + CMmsSettings* settings = CMmsSettings::NewLC(); + settings->SetAutomaticFetch(EFalse); + iMsvEntry->SetEntryL(aId); + CMsvStore* store = iMsvEntry->EditStoreL(); + CleanupStack::PushL(store); + settings->StoreL(*store); + store->CommitL(); + CleanupStack::PopAndDestroy(2); // store1,settings1 + } + + +void CWapPushTestMsgUtils::PushFolderIdL(TMsvId& rFirstFolderId, CMsvEntrySelection* rFolderIds) + { + //Returns the Service IDs of MTM aMtm, or Null value if none exist + + rFirstFolderId = KMsvNullIndexEntryId; + + iMsvEntry->SetEntryL(KMsvLocalServiceIndexEntryId); + + TMsvSelectionOrdering order; + order.SetShowInvisibleEntries(ETrue); + iMsvEntry->SetSortTypeL(order); + + //Get the children on the Root Index Entry + CMsvEntrySelection* selection = iMsvEntry->ChildrenWithTypeL(KUidMsvFolderEntry); + CleanupStack::PushL(selection); + + TInt count = selection->Count(); + + //Find an entry for Push MTM + for (TInt curChild = 0; curChild < count ; curChild++) + { + iMsvEntry->SetEntryL(selection->At(curChild)); + + if (iMsvEntry->Entry().iMtm == KUidMtmWapPush) + { + TMsvId id = iMsvEntry->Entry().Id(); + + if (rFirstFolderId == KMsvNullIndexEntryId) + rFirstFolderId = id; + + if (rFolderIds) + rFolderIds->AppendL(id); + } + } + + CleanupStack::Pop(); //selection + delete selection; + + + + } + +TMsvId CWapPushTestMsgUtils::CreatePushMsgFolderL() + { + TMsvId id = 0; + TMsvEntry entry; + entry.iServiceId = KMsvLocalServiceIndexEntryId; + entry.iMtm = KUidMtmWapPush; + entry.iType = KUidMsvFolderEntry; + entry.SetReadOnly(ETrue); + entry.SetVisible(EFalse); + entry.iDetails.Set(KPushFolderDescription); + + iMsvEntry->SetEntryL(KMsvLocalServiceIndexEntryId); + iMsvEntry->CreateL(entry); + id = entry.Id(); + iMsvEntry->SetEntryL(id); + return id; + } + + +// Clears any existing Push Service entries - test if creation works +void CWapPushTestMsgUtils::RemoveAllPushServiceEntriesL() + { + iMsvEntry->SetEntryL(KMsvRootIndexEntryId); + + TMsvSelectionOrdering order; + order.SetShowInvisibleEntries(ETrue); + iMsvEntry->SetSortTypeL(order); + + CMsvEntrySelection* selection = iMsvEntry->ChildrenWithTypeL(KUidMsvServiceEntry); + CleanupStack::PushL(selection); + + TInt count = selection->Count(); + TMsvEntry entry; + + for (TInt currentEntry = 0; currentEntry < count; currentEntry++) + { + iMsvEntry->SetEntryL(selection->At(currentEntry)); + entry = iMsvEntry->Entry(); + if (entry.iMtm == KUidMtmWapPush && entry.iType == KUidMsvServiceEntry) + { + iMsvEntry->SetEntryL(KMsvRootIndexEntryId); + iMsvEntry->DeleteL(entry.Id()); + } + } + CleanupStack::PopAndDestroy();//selection + } + + +void CWapPushTestMsgUtils::RemoveAllPushFolderEntriesL() + { + iMsvEntry->SetEntryL(KMsvLocalServiceIndexEntryId); + + TMsvSelectionOrdering order; + order.SetShowInvisibleEntries(ETrue); + iMsvEntry->SetSortTypeL(order); + + CMsvEntrySelection* selection = iMsvEntry->ChildrenWithTypeL(KUidMsvFolderEntry); + CleanupStack::PushL(selection); + + TInt count = selection->Count(); + TMsvEntry folderEntry; + + for (TInt current = 0; current SetEntryL(selection->At(current)); + folderEntry = iMsvEntry->Entry(); + + if (folderEntry.iMtm == KUidMtmWapPush && folderEntry.iType == KUidMsvFolderEntry) + { +// if (iMsvEntry->Entry().ReadOnly()) +// { +// iMsvEntry->Entry().SetReadOnly(False); +// iMsvEntry->ChangeL(iMsvEntry->Entry().Id()); +// } + iMsvEntry->SetEntryL(KMsvLocalServiceIndexEntryId); + iMsvEntry->DeleteL(folderEntry.Id()); + } + } + CleanupStack::PopAndDestroy(); + }