--- /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 <msvids.h>
+#include <msvuids.h>
+#include <MmsUtils.h>
+#include <MmsSettings.h>
+
+
+#include <pushentry.h>
+#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 <count; current++)
+ {
+ iMsvEntry->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();
+ }