phonebookengines_old/contactsmodel/tsrc/asynaccess/src/CntModelTesterSetToneToContacts.cpp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookengines_old/contactsmodel/tsrc/asynaccess/src/CntModelTesterSetToneToContacts.cpp Tue Aug 31 15:05:21 2010 +0300
@@ -0,0 +1,171 @@
+/*
+* Copyright (c) 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 FILES
+#include "CntModelTesterSetToneToContacts.h"
+#include <cntdef.h>
+#include <cntitem.h>
+#include <cntdb.h>
+#include <cntview.h>
+#include <cntfldst.h>
+
+
+// LOCAL CONSTANTS AND MACROS
+
+
+
+
+// ================= MEMBER FUNCTIONS =======================
+
+inline TBool CCntModelTesterSetToneToContacts ::MoreContactsToSet() const
+ {
+ return (iContacts && iContacts->Count() > 0);
+ }
+
+inline void CCntModelTesterSetToneToContacts ::Cancel()
+ {
+ delete iContacts;
+ iContacts = NULL;
+ }
+
+inline CCntModelTesterSetToneToContacts ::CCntModelTesterSetToneToContacts ()
+ {
+ }
+
+inline void CCntModelTesterSetToneToContacts ::ConstructL
+ (const CContactIdArray& aContacts,
+ const TDesC& aRingingToneName)
+ {
+ iRingingToneFile = aRingingToneName.AllocL();
+ iTotalContactsToSet = aContacts.Count();
+ iSetCount=0;
+ iContacts = CContactIdArray::NewL(&aContacts);
+ iContacts->ReverseOrder();
+ iDb= CContactDatabase::OpenL(KDbFileName);
+ }
+inline TInt CCntModelTesterSetToneToContacts::GetCount()
+ {
+ return iSetCount;
+ }
+
+EXPORT_C CCntModelTesterSetToneToContacts * CCntModelTesterSetToneToContacts ::NewL
+ ( const CContactIdArray& aContacts,
+ const TDesC& aRingingToneName)
+ {
+ CCntModelTesterSetToneToContacts * self = new(ELeave) CCntModelTesterSetToneToContacts ();
+ CleanupStack::PushL(self);
+ self->ConstructL(aContacts, aRingingToneName);
+ CleanupStack::Pop(self);
+ return self;
+ }
+
+CCntModelTesterSetToneToContacts ::~CCntModelTesterSetToneToContacts ()
+ {
+ delete iDb;
+ delete iContacts;
+ delete iRingingToneFile;
+ }
+
+void CCntModelTesterSetToneToContacts ::StepL()
+ {
+ if (MoreContactsToSet())
+ {
+ const TInt index = iContacts->Count() - 1;
+ const TContactItemId id = (*iContacts)[index];
+
+ CContactItem* item = iDb->OpenContactLX(id);
+ CleanupStack::PushL(item);
+
+ SetRingingToneL(*item);
+
+ iDb->CommitContactL(*item);
+ CleanupStack::PopAndDestroy(2); // item, lock
+
+ iContacts->Remove(index);
+ ++iSetCount;
+ }
+ }
+
+TInt CCntModelTesterSetToneToContacts ::TotalNumberOfSteps()
+ {
+ return iTotalContactsToSet;
+ }
+
+TBool CCntModelTesterSetToneToContacts ::IsProcessDone() const
+ {
+ return !MoreContactsToSet();
+ }
+
+void CCntModelTesterSetToneToContacts ::ProcessFinished()
+ {
+ Cancel();
+ }
+
+TInt CCntModelTesterSetToneToContacts ::HandleStepError(TInt aError)
+ {
+ if (aError != KErrNone)
+ {
+ Cancel();
+ }
+
+ return aError;
+ }
+
+void CCntModelTesterSetToneToContacts ::ProcessCanceled()
+ {
+ Cancel();
+ }
+
+void CCntModelTesterSetToneToContacts ::SetRingingToneL
+ (CContactItem &aContact)
+ {
+ TInt index = aContact.CardFields().Find(KUidContactFieldRingTone);
+
+ CContactItemField* field = NULL;
+
+ if (index != KErrNotFound)
+ {
+ field = &aContact.CardFields()[index];
+ }
+
+ if (iRingingToneFile->Compare(KNullDesC) == 0)
+ {
+ // remove ringing tone field
+ if (field)
+ {
+ aContact.RemoveField(index);
+ }
+ }
+ else
+ {
+ // ringing tone selected
+ if (field)
+ {
+ field->TextStorage()->SetTextL(*iRingingToneFile);
+ }
+ else
+ {
+ field = CContactItemField::NewLC(KStorageTypeText, KUidContactFieldRingTone);
+ field->SetMapping(KUidContactFieldVCardMapUnknown);
+ field->TextStorage()->SetTextL(*iRingingToneFile);
+ aContact.AddFieldL(*field);
+ CleanupStack::Pop();
+ }
+ }
+ }
+
+// End of File