summaryrefslogtreecommitdiffstats
path: root/plugins/contacts/symbian/contactsmodel/tsrc/cntclient.cpp
blob: ea8d28239c3411faeedf11be66657207b1844f9e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
/*
* Copyright (c) 1997-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 <e32test.h>
#include "cntclient.h"

CCntClient::CCntClient(RTest &aTest, const TDesC &aDatabaseName)
	{
	iDatabaseName.Copy(aDatabaseName);
 	iTest=&aTest;
	iTest->Start(_L("New client"));
	}

CCntClient::~CCntClient()
	{
	CloseDatabase();
	iTest->End();
	}

CContactDatabase* CCntClient::CreateDatabaseL()
	{
	CloseDatabase();
	iDb=CContactDatabase::ReplaceL(iDatabaseName);
	iNotifier = CContactChangeNotifier::NewL(*iDb,this);
	iObservers++; //
	return(iDb);
	}

CContactDatabase* CCntClient::OpenDatabaseL()
	{
	if(!iDb)
		iDb=CContactDatabase::OpenL(iDatabaseName);
	if(!iNotifier)
		{
		iNotifier = CContactChangeNotifier::NewL(*iDb,this);
		iObservers++;//
		}
	return(iDb);
	}

void CCntClient::CloseDatabase()
	{
	if (iNotifier)
		{
		iObservers--;
		}
	delete iNotifier;
	iNotifier = NULL;
	delete iDb;
	iDb=NULL;
	}

void CCntClient::HandleDatabaseEventL(TContactDbObserverEvent aEvent)
	{
	static TInt i=0;
	if(aEvent.iType == EContactDbObserverEventGroupAdded) 
		{
		i++;
		}

	if (i==iObservers)
		{
		// Stop the scheduler when all the clients have handled the event
		CActiveScheduler::Stop();
		i=0;
		}
	}