|
1 /** |
|
2 * Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies). |
|
3 * All rights reserved. |
|
4 * This component and the accompanying materials are made available |
|
5 * under the terms of "Eclipse Public License v1.0" |
|
6 * which accompanies this distribution, and is available |
|
7 * at the URL "http://www.eclipse.org/legal/epl-v10.html". |
|
8 * |
|
9 * Initial Contributors: |
|
10 * Nokia Corporation - initial contribution. |
|
11 * |
|
12 * Contributors: |
|
13 * |
|
14 * Description: |
|
15 * |
|
16 */ |
|
17 |
|
18 |
|
19 |
|
20 /** |
|
21 @file |
|
22 @internalComponent |
|
23 @released |
|
24 */ |
|
25 |
|
26 |
|
27 #ifndef RCNTMODEL_H |
|
28 #define RCNTMODEL_H |
|
29 |
|
30 #include <cntdb.h> |
|
31 #include "CCntIpcCodes.h" |
|
32 |
|
33 #include <e32base.h> |
|
34 #include <f32file.h> |
|
35 #include <badesca.h> |
|
36 |
|
37 |
|
38 class CContactTemplate; |
|
39 class CViewContact; |
|
40 class CCntDbNotifyMonitor; |
|
41 class CCntPackager; |
|
42 class MContactDbObserver; |
|
43 class CContactDefaultViewDefinition; |
|
44 class CContactTextDef; |
|
45 |
|
46 const TInt KUidBufferSize = 400; |
|
47 |
|
48 /** |
|
49 Client-side Contacts Model session handle. |
|
50 */ |
|
51 class RCntModel : public RSessionBase |
|
52 { |
|
53 public: |
|
54 RCntModel(); |
|
55 |
|
56 void ConnectL(); |
|
57 void Close(); |
|
58 |
|
59 TInt OpenDatabase(const TDesC& aCntFile = KNullDesC) const; |
|
60 void OpenDatabaseAsyncL(TRequestStatus& aStatus ,const TDesC& aCntFile = KNullDesC); |
|
61 void CancelAsyncOpen(); |
|
62 |
|
63 void OpenTablesL(); |
|
64 void CloseTablesL(); |
|
65 |
|
66 void CloseDatabase() const; |
|
67 TInt ReplaceDatabase(const TDesC& aCntFile = KNullDesC) const; |
|
68 TInt CreateDatabase(const TDesC& aCntFile = KNullDesC) const; |
|
69 TInt DeleteDatabase(const TDesC& aCntFile = KNullDesC) const; |
|
70 |
|
71 TInt DefaultDatabase(TDes& aCntFile) const; |
|
72 TInt DatabaseDrive(TDriveUnit& aDriveUnit) const; |
|
73 void SetDatabaseDriveL(TDriveUnit aDriveUnit, TBool aCopy = ETrue); |
|
74 TBool DatabaseExistsL(const TDesC& aCntFile = KNullDesC) const; |
|
75 CDesCArray* ListDatabasesL(TDriveUnit* aDriveUnit = NULL) const; |
|
76 TPtrC FileUidL() const; |
|
77 TBool DatabaseReadyL() const; |
|
78 |
|
79 // Contact Item CRUD methods. |
|
80 TContactItemId CreateContactL(CContactItem& aContact) const; |
|
81 void DeleteContactL(const TContactItemId aCntId, TCntSendEventAction aCntEventType, TBool aDecAccessCount = EFalse) const; |
|
82 void CommitContactL(const CContactItem& aContact, TBool aSendChangedEvent = ETrue) const; |
|
83 CContactItem* ReadContactL(const CContactItemViewDef* aCntItemVDef, TContactItemId aCntId) const; |
|
84 CContactItem* OpenContactLX(const CContactItemViewDef* aCntItemVDef, TContactItemId aCntId) const; |
|
85 TBool CloseContact(TContactItemId aContactId); |
|
86 void SetViewDefinitionL(const CContactViewDef& aView); |
|
87 |
|
88 TInt64 MachineId() const; |
|
89 void SetOperationTimeOutL(const TInt aMicroSeconds) const; |
|
90 TInt OpenCrud() const; |
|
91 TInt OpenIterator() const; |
|
92 TInt OpenProperties() const; |
|
93 TInt CloseCrud() const; |
|
94 TInt CloseIterator() const; |
|
95 TInt CloseProperties() const; |
|
96 void CrudAsyncOp(TInt aParam,TRequestStatus& aStatus) const; |
|
97 TInt CrudSyncOp(TInt aParam) const; |
|
98 void IteratorAsyncOp(TInt aParam,TRequestStatus& aStatus) const; |
|
99 TInt IteratorSyncOp(TInt aParam) const; |
|
100 void PropertiesAsyncOp(TInt aParam,TRequestStatus& aStatus) const; |
|
101 TInt PropertiesSyncOp(TInt aParam) const; |
|
102 |
|
103 TInt FileSize() const; |
|
104 TInt ReCreateTemplate() const; |
|
105 |
|
106 TInt BeginDbTransaction() const; |
|
107 TInt CommitDbTransaction() const; |
|
108 TInt RollbackDbTransaction() const; |
|
109 |
|
110 // Observer methods for database event notifications. |
|
111 void AddObserverL(MContactDbObserver& aObserver); |
|
112 void RemoveObserver(const MContactDbObserver& aObserver); |
|
113 |
|
114 void SetCurrentItem(TContactItemId aContactId) const; |
|
115 TContactItemId CurrentItem() const; |
|
116 TInt RemoveCurrentItem(); |
|
117 TInt GetCurrentDatabase(TDes& aDatabase) const; |
|
118 TInt SetCurrentDatabase(const TDesC& aDatabase) const; |
|
119 void ResetServerSpeedDialsL(); |
|
120 TContactItemId GetSpeedDialFieldL(TInt aSpeedDialPosition, TDes& aPhoneNumber); |
|
121 void SetFieldAsSpeedDialL(TContactItemId aContactId, TInt aFieldIndex, TInt aSpeedDialPosition); |
|
122 void RemoveSpeedDialFieldL(TContactItemId aContactId, TInt aSpeedDialPosition); |
|
123 void SetOwnCardL(const CContactItem& aContact); |
|
124 |
|
125 TContactItemId OwnCard() const; |
|
126 TInt ConnectionId() const; |
|
127 void OverrideMachineUniqueId(TInt64 aMachineUniqueId); |
|
128 void SetHeapFailure(RHeap::TAllocFail aType, TInt aRate); |
|
129 TInt ResourceCount(); |
|
130 TContactItemId PrefTemplateId() const; |
|
131 void SetPrefTemplateL(const TContactItemId aContactId); |
|
132 |
|
133 CContactIdArray* FetchTemplateListIdsL(); |
|
134 CContactIdArray* FetchGroupListIdsL(); |
|
135 |
|
136 CContactIdArray* CollectionL(TInt aCollectionType, TTime aTime=0,const TDesC& aGuid = KNullDesC); |
|
137 |
|
138 void SetSortPreferenceL(const CArrayFix<CContactDatabase::TSortPref>& aSortOrder); |
|
139 CArrayFix<CContactDatabase::TSortPref>* GetSortPreferenceL() const; |
|
140 CContactIdArray* MatchPhoneNumberL(const TDesC& aNumber, const TInt aMatchLengthFromRight); |
|
141 |
|
142 TInt ContactCountL() const; |
|
143 |
|
144 TBool SeekContactL(TContactItemId aContactId,TContactItemId& aId,TUid& aContactType, TBool& aDeleted); |
|
145 void ReadContactTextDefL(TContactItemId aContactId, TDes &aResult,const CContactTextDef& aTextDef); |
|
146 |
|
147 void TextFieldL(TInt aCntItemId,TFieldType aFieldType, TDes& aText); |
|
148 |
|
149 TContactItemId ICCTemplateIdL(TUid aPhonebookUid = KNullUid); |
|
150 TContactItemId PhonebookGroupIdL(); |
|
151 |
|
152 CContactIdArray* FindL(const TDesC& aText,const CContactItemFieldDef* aFieldDef); |
|
153 |
|
154 TBool ContactMatchesHintFieldL(TInt aBitWiseFilter,TContactItemId aContactId); |
|
155 |
|
156 void SetDbViewContactType(const TUid aUid); |
|
157 TUid GetDbViewContactType() const; |
|
158 |
|
159 void FilterDatabaseL(CCntFilter& aFilter); |
|
160 |
|
161 void FindAsyncTextDefInitL(const CDesCArray& aWords,CContactTextDef* aTextDef); |
|
162 void FindAsyncInitL(const TDesC& aText,CContactItemFieldDef* aFieldDef); |
|
163 TBool FindAsyncL(CContactIdArray*& aIdArray); |
|
164 |
|
165 void SetAsyncActivityL(TBool aAsyncActivity); |
|
166 |
|
167 // Used to request a database event. See CCntDbNotifyMonitor::Start(). |
|
168 void StartNotificationTransfer(TRequestStatus& aStatus, TDes8& aEvent); |
|
169 void EndNotificationTransfer(); |
|
170 |
|
171 // See CCntDbNotifyMonitor::RunL(). |
|
172 void HandlePrematureServerTerminationL(); |
|
173 |
|
174 // Used to close/unlock the last locked contact items from the cleanup |
|
175 // stack. Called when popping the cleanup stack. |
|
176 void UnlockLastLockedContact(); |
|
177 |
|
178 // Used for test purposes (only works in _DEBUG builds). |
|
179 void GetDefinitionsOfExistingViewsL(const TDesC& aDbName, RPointerArray<CContactDefaultViewDefinition>& aViewDefs); |
|
180 |
|
181 TInt OpenViewL(const CContactTextDef& aTextDef, const TInt aViewPrefs); |
|
182 void CloseView(TInt aViewId); |
|
183 void ChangeSortOrderL(TInt aViewId, const CContactTextDef& aTextDef); |
|
184 void BeginIterateL(TInt aViewId); |
|
185 void EndIterateL(TInt aViewId); |
|
186 CViewContact* NextItemL(TInt aViewId, const TInt aViewPrefs); |
|
187 CViewContact* ItemAtL(TContactItemId aContactId, TInt aViewId); |
|
188 |
|
189 private: |
|
190 TVersion Version() const; |
|
191 CContactItem* UnPackContactLC(TInt aBufferSize, TIpcArgs& aArgs) const; |
|
192 |
|
193 CContactIdArray* DoGetCollectionChangedSinceL(TTime aTime); |
|
194 CContactIdArray* DoGetCollectionL(TInt aCollectionType); |
|
195 CContactIdArray* DoGetCollectionGuidL(const TDesC& aGuid); |
|
196 void PushUnlockL() const; |
|
197 |
|
198 // Save the filename. Used to re-open database if the server is terminated |
|
199 // prematurely. |
|
200 TInt SetFileName(const TDesC& aCntFile) const; |
|
201 |
|
202 private: |
|
203 CCntDbNotifyMonitor* iDbNotifyMonitor; |
|
204 mutable CCntPackager* iPackager; |
|
205 |
|
206 mutable TBuf<KUidBufferSize> iFileUid; |
|
207 mutable TInt iConnectionId; |
|
208 mutable TBuf<KCntMaxFilePath> iFileName; |
|
209 |
|
210 // Number of attempts to restart the server after an unexpected process |
|
211 // termination. |
|
212 TInt iNoOfSvrStartAttempts; |
|
213 }; |
|
214 |
|
215 #endif // RCNTMODEL_H |