williamr@2
|
1 |
// Copyright (c) 1997-2009 Nokia Corporation and/or its subsidiary(-ies).
|
williamr@2
|
2 |
// All rights reserved.
|
williamr@2
|
3 |
// This component and the accompanying materials are made available
|
williamr@4
|
4 |
// under the terms of "Eclipse Public License v1.0"
|
williamr@2
|
5 |
// which accompanies this distribution, and is available
|
williamr@4
|
6 |
// at the URL "http://www.eclipse.org/legal/epl-v10.html".
|
williamr@2
|
7 |
//
|
williamr@2
|
8 |
// Initial Contributors:
|
williamr@2
|
9 |
// Nokia Corporation - initial contribution.
|
williamr@2
|
10 |
//
|
williamr@2
|
11 |
// Contributors:
|
williamr@2
|
12 |
//
|
williamr@2
|
13 |
// Description:
|
williamr@2
|
14 |
// Persistence layer exports
|
williamr@2
|
15 |
//
|
williamr@2
|
16 |
//
|
williamr@2
|
17 |
|
williamr@2
|
18 |
#if !defined(__CNTITEM_H__)
|
williamr@2
|
19 |
#define __CNTITEM_H__
|
williamr@2
|
20 |
|
williamr@2
|
21 |
#if !defined(__E32BASE_H__)
|
williamr@2
|
22 |
#include <e32base.h>
|
williamr@2
|
23 |
#endif
|
williamr@2
|
24 |
|
williamr@2
|
25 |
#if !defined(__CNTDEF_H__)
|
williamr@2
|
26 |
#include <cntdef.h>
|
williamr@2
|
27 |
#endif
|
williamr@2
|
28 |
|
williamr@2
|
29 |
#if !defined(__CNTFIELD_H__)
|
williamr@2
|
30 |
#include <cntfield.h>
|
williamr@2
|
31 |
#endif
|
williamr@2
|
32 |
|
williamr@2
|
33 |
#include <cntdb.h>
|
williamr@2
|
34 |
|
williamr@4
|
35 |
/** Maximum length of UID string.
|
williamr@4
|
36 |
@publishedAll
|
williamr@4
|
37 |
@released
|
williamr@4
|
38 |
*/
|
williamr@4
|
39 |
const TInt KUidStringLength =244;
|
williamr@2
|
40 |
|
williamr@4
|
41 |
/** UID string separator character
|
williamr@4
|
42 |
@publishedAll
|
williamr@4
|
43 |
@released
|
williamr@4
|
44 |
*/
|
williamr@2
|
45 |
#define KUidStringSeparator '-'
|
williamr@4
|
46 |
|
williamr@4
|
47 |
#ifndef SYMBIAN_ENABLE_SPLIT_HEADERS
|
williamr@4
|
48 |
/** Constant used by vCard import/export.
|
williamr@4
|
49 |
@internalComponent
|
williamr@4
|
50 |
*/
|
williamr@4
|
51 |
#define KContactMaxFieldNumber 32
|
williamr@4
|
52 |
#endif
|
williamr@4
|
53 |
|
williamr@2
|
54 |
class CContactItemField;
|
williamr@2
|
55 |
class CContactItemViewDef;
|
williamr@2
|
56 |
class CContactItem;
|
williamr@2
|
57 |
|
williamr@4
|
58 |
/** Constant to indicate that all fields in the fieldset should be searched.
|
williamr@4
|
59 |
@publishedAll
|
williamr@4
|
60 |
@released
|
williamr@4
|
61 |
*/
|
williamr@2
|
62 |
const TInt KContactFieldSetSearchAll=-1;
|
williamr@4
|
63 |
|
williamr@2
|
64 |
class CContactItemFieldSet : public CBase
|
williamr@4
|
65 |
/** A contact item's field set. The field set owns an array of contact item fields
|
williamr@4
|
66 |
(CContactItemFields). The field set is owned by a contact item, and can be
|
williamr@4
|
67 |
retrieved using CContactItem::CardFields(). Use functions in class
|
williamr@2
|
68 |
CContactItem to add and remove fields to/from the field set.
|
williamr@2
|
69 |
|
williamr@4
|
70 |
A field set can contain more than one field of the same type, but this is
|
williamr@4
|
71 |
not advisable as it may cause problems when synchronising the contacts database.
|
williamr@2
|
72 |
@publishedAll
|
williamr@2
|
73 |
@released
|
williamr@2
|
74 |
*/
|
williamr@2
|
75 |
{
|
williamr@2
|
76 |
friend class CContactItemField;
|
williamr@2
|
77 |
friend class CContactDatabase;
|
williamr@2
|
78 |
friend class CContactTables;
|
williamr@2
|
79 |
friend class RPplContactTable;
|
williamr@2
|
80 |
friend class TCntPersistenceUtility;
|
williamr@4
|
81 |
|
williamr@2
|
82 |
public:
|
williamr@2
|
83 |
IMPORT_C static CContactItemFieldSet* NewL();
|
williamr@2
|
84 |
IMPORT_C static CContactItemFieldSet* NewLC();
|
williamr@2
|
85 |
IMPORT_C ~CContactItemFieldSet();
|
williamr@2
|
86 |
inline const CContactItemField& operator[](TInt aIndex) const;
|
williamr@2
|
87 |
inline CContactItemField& operator[](TInt aIndex);
|
williamr@2
|
88 |
inline TInt Find(TFieldType aFieldType) const; // will only find the first such occurence
|
williamr@2
|
89 |
inline TInt Find(TFieldType aFieldType,TUid aMapping) const;
|
williamr@2
|
90 |
IMPORT_C TInt FindNext(TFieldType aFieldType,TInt aStartPos=KContactFieldSetSearchAll) const;
|
williamr@2
|
91 |
IMPORT_C TInt FindNext(TFieldType aFieldType,TUid aMapping,TInt aStartPos=KContactFieldSetSearchAll) const;
|
williamr@2
|
92 |
inline TInt Count() const;
|
williamr@2
|
93 |
inline void Reset();
|
williamr@2
|
94 |
IMPORT_C void UpdateFieldL(const CContactItemField& aField, TInt aMatchCount);
|
williamr@2
|
95 |
IMPORT_C void UpdateFieldSyncL(const CContactItemField& aField, TInt aMatchCount);
|
williamr@2
|
96 |
IMPORT_C CContactItemFieldSet& AddL(CContactItemField& aField);
|
williamr@2
|
97 |
IMPORT_C void Remove(TInt aIndex);
|
williamr@2
|
98 |
IMPORT_C void InsertL(TInt aIndex,CContactItemField& aField);
|
williamr@2
|
99 |
IMPORT_C void Move(TInt aFrom, TInt aTo);
|
williamr@2
|
100 |
IMPORT_C TStreamId StoreL(CStreamStore& aStore,RWriteStream& aTextStream,CStreamStore& aBlobStore);
|
williamr@2
|
101 |
TStreamId StoreL(CStreamStore& aStore,RWriteStream& aTextStream,CStreamStore& aBlobStore,CContactTables* aTables);
|
williamr@2
|
102 |
IMPORT_C void RestoreL(CStreamStore& aStore, TStreamId anId,CStreamStore* aBlobStore,const CContactItemViewDef& aViewDef,RReadStream& aReadStream);
|
williamr@2
|
103 |
IMPORT_C void RestoreL(CStreamStore& aStore, TStreamId anId,CStreamStore* aBlobStore,const CContactItemViewDef& aViewDef,const CContactItem* aTemplate, HBufC* aTextBuf);
|
williamr@2
|
104 |
TInt FieldText(TFieldType aFieldType, TDes &aText, TInt aStartPosition) const;
|
williamr@2
|
105 |
CArrayFix<TFieldHeader>* ConstructFieldHeaderArrayLC(RWriteStream& aTextStream, CStreamStore& aBlobStore);
|
williamr@2
|
106 |
TInt FieldTypeCount(const CContactItemFieldSet& aSystemTemplateFields, TInt aStartIndex, const CContactItemField& aField) const;
|
williamr@2
|
107 |
TBool ContainsFieldTypeMapping(const CContentType& aBaseFieldContentType, const TFieldType& aContactFieldType) const;
|
williamr@2
|
108 |
void ExternalizeL(RWriteStream& aStream) const;
|
williamr@4
|
109 |
void InternalizeL(RReadStream& aStream);
|
williamr@4
|
110 |
|
williamr@2
|
111 |
private:
|
williamr@2
|
112 |
CContactItemFieldSet();
|
williamr@2
|
113 |
void ConstructL();
|
williamr@2
|
114 |
void SetFieldId(CContactItemField& aField);
|
williamr@2
|
115 |
const CContactItemField* FindById(TInt aId) const;
|
williamr@2
|
116 |
IMPORT_C TStreamId StoreL(CStreamStore& aStore,const CContactItem* aTemplate,RWriteStream& aStream,CStreamStore& aBlobStore,CContactTables* aTables);
|
williamr@2
|
117 |
void RestoreL(CStreamStore& aStore, TStreamId anId, CStreamStore* aBlobStore,const CContactItemViewDef& aViewDef,const CContactItem* aTemplate,RReadStream& aReadStream,CContactTables* aContactsTable, RArray<TInt>* aEmailIdArray);
|
williamr@2
|
118 |
void RestoreAndAddTemplateL(CStreamStore& aStore, TStreamId aId,CStreamStore* aBlobStore,const CContactItemViewDef& aViewDef,const CContactItem* aTemplate, RReadStream& aReadStream,CContactTables* aContactsTable,RArray<TInt>* aEmailIdArray);
|
williamr@2
|
119 |
TInt MatchTemplateField(const CContentType& aContentType,TUint aUserFlags,TBool &aExactMatch) const;
|
williamr@2
|
120 |
static HBufC* LoadTextStreamLC(RReadStream& aStream);
|
williamr@2
|
121 |
void NonZeroFieldText(TFieldType aFieldType, TDes &aText) const;
|
williamr@2
|
122 |
|
williamr@2
|
123 |
private:
|
williamr@2
|
124 |
CArrayPtr<CContactItemField>* iFields;
|
williamr@2
|
125 |
};
|
williamr@2
|
126 |
|
williamr@2
|
127 |
class CContactDatabase;
|
williamr@2
|
128 |
class RCntModel;
|
williamr@2
|
129 |
class CContactItem : public CBase
|
williamr@4
|
130 |
/** The abstract base class for contact cards, templates and groups. All contact
|
williamr@4
|
131 |
items are identified by a contact ID, (TContactItemId), have a last modified
|
williamr@4
|
132 |
date/time and own one or more fields (the field set). Contact items also
|
williamr@4
|
133 |
have an access count and attributes (e.g. hidden). Note that fields in a contact
|
williamr@4
|
134 |
item also have attributes. Attribute values specified in the contact item
|
williamr@4
|
135 |
override those in the contained fields. The access count is a record of the
|
williamr@4
|
136 |
number of objects referencing a contact item. A contact item cannot be fully
|
williamr@4
|
137 |
deleted until its access count is zero.
|
williamr@2
|
138 |
@publishedAll
|
williamr@2
|
139 |
@released
|
williamr@2
|
140 |
*/
|
williamr@2
|
141 |
{
|
williamr@2
|
142 |
friend class CContactCardTemplate;
|
williamr@2
|
143 |
friend class CContactItemPlusGroup;
|
williamr@2
|
144 |
friend class CContactCard;
|
williamr@2
|
145 |
friend class CContactTemplate;
|
williamr@2
|
146 |
friend class CContactGroup;
|
williamr@2
|
147 |
friend class CContactOwnCard;
|
williamr@2
|
148 |
friend class CVCardToContactsAppConverter;
|
williamr@2
|
149 |
friend class CContactICCEntry;
|
williamr@2
|
150 |
friend class RPplContactTable;
|
williamr@2
|
151 |
friend class RPplIdentityTable;
|
williamr@2
|
152 |
friend class RPplPreferencesTable;
|
williamr@2
|
153 |
friend class CPackagerTests; //Comparison test
|
williamr@2
|
154 |
friend class CPackagerCntComparator;
|
williamr@2
|
155 |
friend class CContactDatabase;
|
williamr@2
|
156 |
friend class CPplContactItemManager;
|
williamr@2
|
157 |
public:
|
williamr@2
|
158 |
IMPORT_C ~CContactItem();
|
williamr@2
|
159 |
/** Gets the contact item's type.
|
williamr@4
|
160 |
|
williamr@2
|
161 |
@return The contact item's type. */
|
williamr@2
|
162 |
virtual TUid Type() const=0;
|
williamr@2
|
163 |
static CContactItem* NewLC(RReadStream& aStream);
|
williamr@4
|
164 |
IMPORT_C static CContactItem* NewLC(TUid aType);
|
williamr@2
|
165 |
IMPORT_C TContactItemId Id() const;
|
williamr@2
|
166 |
IMPORT_C TContactItemId TemplateRefId() const;
|
williamr@2
|
167 |
IMPORT_C TTime LastModified() const;
|
williamr@2
|
168 |
IMPORT_C void SetLastModified(const TTime& aLastModified);
|
williamr@2
|
169 |
IMPORT_C void AddFieldL(CContactItemField& aField);
|
williamr@2
|
170 |
IMPORT_C void RemoveField(TInt aFieldPos);
|
williamr@2
|
171 |
IMPORT_C void InsertFieldL(CContactItemField& aField,TInt aFieldPos);
|
williamr@2
|
172 |
IMPORT_C CContactItemFieldSet& CardFields() const;
|
williamr@2
|
173 |
IMPORT_C void SetHidden(TBool aHidden);
|
williamr@4
|
174 |
IMPORT_C void SetSystem(TBool aSystem);
|
williamr@2
|
175 |
IMPORT_C TBool IsHidden();
|
williamr@4
|
176 |
IMPORT_C TBool IsSystem();
|
williamr@2
|
177 |
IMPORT_C void UpdateFieldSet(CContactItemFieldSet* aNewFieldSet);
|
williamr@2
|
178 |
IMPORT_C void SetDeleted(TBool aDeleted);
|
williamr@2
|
179 |
IMPORT_C TBool IsDeleted() const;
|
williamr@2
|
180 |
IMPORT_C void SetTemplateRefId(TContactItemId aUid);
|
williamr@2
|
181 |
TContactItemId Agent();
|
williamr@2
|
182 |
inline TBool IsDeletable();
|
williamr@2
|
183 |
inline void IncAccessCount();
|
williamr@2
|
184 |
inline void DecAccessCount();
|
williamr@2
|
185 |
inline TInt AccessCount() const;
|
williamr@2
|
186 |
IMPORT_C void SetUidStringL(TDesC& aString);
|
williamr@2
|
187 |
IMPORT_C TPtrC UidStringL(TInt64 aMachineUniqueId) const;
|
williamr@2
|
188 |
TStreamId PopulateStoreL(CStreamStore& aStore, CArrayFix<TFieldHeader>& aFieldHeaderArray) const;
|
williamr@2
|
189 |
void AddLabelFieldL();
|
williamr@2
|
190 |
IMPORT_C void RestoreTemplateFieldsL(const CContactItemFieldSet& aSystemTemplateFields, const CContactItemFieldSet& aTemplateFields, const CContactItemViewDef& aViewDef);
|
williamr@2
|
191 |
void ClearFieldContent();
|
williamr@2
|
192 |
inline TPtrC Guid();
|
williamr@2
|
193 |
virtual void ExternalizeL(RWriteStream& aStream) const;
|
williamr@4
|
194 |
virtual void InternalizeL(RReadStream& aStream);
|
williamr@2
|
195 |
|
williamr@2
|
196 |
IMPORT_C void SetId(TContactItemId aId);
|
williamr@2
|
197 |
IMPORT_C TUint32 Attributes() const;
|
williamr@2
|
198 |
IMPORT_C void SetAttributes(TUint32 aAttributes);
|
williamr@2
|
199 |
IMPORT_C void SetAccessCount(TUint32 aAccessCount);
|
williamr@2
|
200 |
IMPORT_C void SetCreationDate(const TTime& aTime);
|
williamr@2
|
201 |
|
williamr@2
|
202 |
public:
|
williamr@4
|
203 |
/** Contact item's attribute flags
|
williamr@4
|
204 |
|
williamr@4
|
205 |
These flags can be used to set the various attributes of a contact item. */
|
williamr@4
|
206 |
enum
|
williamr@2
|
207 |
{
|
williamr@4
|
208 |
/** To set the contact item's system attribute. */
|
williamr@4
|
209 |
ESystem=0x01,
|
williamr@4
|
210 |
/** To set the contact item's hidden attribute. */
|
williamr@4
|
211 |
EHidden=0x02,
|
williamr@4
|
212 |
/** To set the contact item's hidden attribute. */
|
williamr@4
|
213 |
ECompressedGuid=0x04,
|
williamr@4
|
214 |
/** To set the contact item's Is deleted attribute. */
|
williamr@4
|
215 |
EDeleted=0x08
|
williamr@2
|
216 |
};
|
williamr@4
|
217 |
|
williamr@2
|
218 |
private:
|
williamr@2
|
219 |
CContactItem();
|
williamr@2
|
220 |
void ConstructL();
|
williamr@2
|
221 |
void ConstructL(const CContactItem *aTemplate);
|
williamr@2
|
222 |
void MakeUidStringL(TInt64 aMachineUniqueId);
|
williamr@2
|
223 |
IMPORT_C void SetHasCompressedGuid(TBool aCompressed);
|
williamr@2
|
224 |
TBool GuidIsCompressed() const;
|
williamr@2
|
225 |
TInt NumberOfFieldsToStore() const;
|
williamr@2
|
226 |
|
williamr@2
|
227 |
private:
|
williamr@2
|
228 |
CContactItemFieldSet* iFieldSet;
|
williamr@2
|
229 |
TUint32 iAttributes;
|
williamr@2
|
230 |
TContactItemId iId;
|
williamr@2
|
231 |
TContactItemId iTemplateRefId;
|
williamr@2
|
232 |
TTime iLastModified;
|
williamr@2
|
233 |
TTime iCreationDate;
|
williamr@2
|
234 |
TUint32 iAccessCount;
|
williamr@2
|
235 |
HBufC* iGuid;
|
williamr@2
|
236 |
};
|
williamr@2
|
237 |
|
williamr@2
|
238 |
class CContactItemPlusGroup : public CContactItem
|
williamr@2
|
239 |
/** Abstract base class for CContactGroup, CContactCard and CContactOwnCard.
|
williamr@2
|
240 |
|
williamr@4
|
241 |
The purpose of this class is to avoid duplication of group functionality
|
williamr@4
|
242 |
in its derived classes.
|
williamr@2
|
243 |
@publishedAll
|
williamr@2
|
244 |
@released
|
williamr@2
|
245 |
*/
|
williamr@2
|
246 |
{
|
williamr@2
|
247 |
public:
|
williamr@2
|
248 |
IMPORT_C const CContactIdArray* GroupsJoined() const;
|
williamr@2
|
249 |
IMPORT_C CContactIdArray* GroupsJoinedLC() const;
|
williamr@2
|
250 |
protected:
|
williamr@2
|
251 |
CContactItemPlusGroup();
|
williamr@2
|
252 |
IMPORT_C ~CContactItemPlusGroup();
|
williamr@2
|
253 |
public:
|
williamr@2
|
254 |
virtual void ExternalizeL(RWriteStream& aStream) const;
|
williamr@4
|
255 |
virtual void InternalizeL(RReadStream& aStream);
|
williamr@2
|
256 |
|
williamr@2
|
257 |
IMPORT_C void ResetGroups();
|
williamr@2
|
258 |
IMPORT_C void SetGroups(CContactIdArray* aGroups);
|
williamr@2
|
259 |
|
williamr@2
|
260 |
private:
|
williamr@2
|
261 |
CContactIdArray* iGroups;
|
williamr@2
|
262 |
friend class CContactDatabase;
|
williamr@2
|
263 |
friend class RPplLookupGroupsTable;
|
williamr@2
|
264 |
friend class RPplGroupMembershipTable;
|
williamr@2
|
265 |
};
|
williamr@2
|
266 |
|
williamr@2
|
267 |
class CContactGroup : public CContactItemPlusGroup
|
williamr@2
|
268 |
/** A contact group.
|
williamr@2
|
269 |
|
williamr@4
|
270 |
A contact group is a contact item which holds a set of associated contact
|
williamr@4
|
271 |
item IDs. The members of the group may be contact cards, own cards, or even
|
williamr@4
|
272 |
other groups. The group has a label which identifies the group to users, e.g.
|
williamr@4
|
273 |
"family", or "colleagues". The type of a contact group is KUidContactGroup,
|
williamr@2
|
274 |
as returned by Type().
|
williamr@2
|
275 |
|
williamr@4
|
276 |
Objects of this class are constructed using CContactDatabase::CreateContactGroupL()
|
williamr@4
|
277 |
or CreateContactGroupLC(). These functions create the group, optionally with
|
williamr@2
|
278 |
a label, add it to the database, and return a pointer to it.
|
williamr@2
|
279 |
|
williamr@4
|
280 |
To create an association between a card and a group, use CContactDatabase::AddContactToGroupL()
|
williamr@4
|
281 |
and to remove the association, use RemoveContactFromGroupL(). To find out
|
williamr@2
|
282 |
which groups a card belongs to, use CContactCard::GroupsJoinedLC() or CContactOwnCard::GroupsJoinedLC().
|
williamr@2
|
283 |
|
williamr@4
|
284 |
The function CContactDatabase::GetGroupIdListL() may be used to retrieve a
|
williamr@4
|
285 |
list of IDs for all groups in the database.
|
williamr@2
|
286 |
@publishedAll
|
williamr@2
|
287 |
@released
|
williamr@2
|
288 |
*/
|
williamr@2
|
289 |
{
|
williamr@2
|
290 |
public:
|
williamr@2
|
291 |
IMPORT_C static CContactGroup* NewL();
|
williamr@2
|
292 |
IMPORT_C static CContactGroup* NewLC();
|
williamr@2
|
293 |
IMPORT_C ~CContactGroup();
|
williamr@2
|
294 |
public: // from CContactItem
|
williamr@2
|
295 |
IMPORT_C TUid Type() const;
|
williamr@2
|
296 |
public:
|
williamr@2
|
297 |
// default sorted item array is ascending
|
williamr@2
|
298 |
IMPORT_C CContactIdArray* ItemsContainedLC() const;
|
williamr@2
|
299 |
IMPORT_C const CContactIdArray* ItemsContained() const;
|
williamr@2
|
300 |
IMPORT_C TBool IsSystem() const;
|
williamr@2
|
301 |
IMPORT_C void SetSystem(TBool aSystem);
|
williamr@2
|
302 |
IMPORT_C TBool ContainsItem(TContactItemId aContactId);
|
williamr@2
|
303 |
IMPORT_C void SetGroupLabelL(const TDesC& aLabel);
|
williamr@2
|
304 |
IMPORT_C TPtrC GetGroupLabelL();
|
williamr@2
|
305 |
IMPORT_C TBool HasItemLabelField();
|
williamr@2
|
306 |
IMPORT_C CContactIdArray* GroupsJoinedLC() const;
|
williamr@4
|
307 |
|
williamr@2
|
308 |
IMPORT_C void AddContactL(TContactItemId aContactId);
|
williamr@2
|
309 |
IMPORT_C void RemoveContactL(TContactItemId aContactId);
|
williamr@2
|
310 |
virtual void ExternalizeL(RWriteStream& aStream) const;
|
williamr@2
|
311 |
virtual void InternalizeL(RReadStream& aStream);
|
williamr@2
|
312 |
|
williamr@2
|
313 |
IMPORT_C void ResetItems();
|
williamr@4
|
314 |
IMPORT_C void SetItems(CContactIdArray* aItems);
|
williamr@2
|
315 |
|
williamr@2
|
316 |
private:
|
williamr@2
|
317 |
CContactGroup();
|
williamr@4
|
318 |
|
williamr@2
|
319 |
private:
|
williamr@2
|
320 |
CContactIdArray* iItems;
|
williamr@2
|
321 |
friend class CContactDatabase;
|
williamr@2
|
322 |
friend class RPplGroupMembershipTable;
|
williamr@2
|
323 |
};
|
williamr@2
|
324 |
|
williamr@2
|
325 |
class CContactCardTemplate : public CContactItem
|
williamr@2
|
326 |
/** A contact card template.
|
williamr@2
|
327 |
|
williamr@4
|
328 |
This is a contact item containing a set of fields on which new contact items can
|
williamr@4
|
329 |
be based. Templates have a label which is a string which identifies the template
|
williamr@4
|
330 |
to a user. For instance, 'work template' could indicate a template used
|
williamr@4
|
331 |
to create contact cards in the style of a work colleague. Contact card templates
|
williamr@2
|
332 |
have a type of KUidContactCardTemplate, as returned by Type().
|
williamr@2
|
333 |
|
williamr@4
|
334 |
Objects of this class cannot be constructed directly because its constructors
|
williamr@4
|
335 |
are protected. Instead, use either CContactDatabase::CreateContactCardTemplateL()
|
williamr@4
|
336 |
or CreateContactCardTemplateLC(). These functions create a contact card template,
|
williamr@2
|
337 |
add it to the database, and return a pointer to it.
|
williamr@2
|
338 |
|
williamr@4
|
339 |
The function CContactDatabase::GetCardTemplateIdListL() gets a list of the
|
williamr@4
|
340 |
IDs of all contact card templates in the database.
|
williamr@2
|
341 |
@publishedAll
|
williamr@2
|
342 |
@released
|
williamr@2
|
343 |
*/
|
williamr@2
|
344 |
{
|
williamr@2
|
345 |
friend class CContactDatabase;
|
williamr@2
|
346 |
friend class CContactTables;
|
williamr@2
|
347 |
friend class RPplContactTable;
|
williamr@2
|
348 |
friend class CContactItem;
|
williamr@2
|
349 |
public:
|
williamr@2
|
350 |
IMPORT_C void SetTemplateLabelL(const TDesC& aLabel);
|
williamr@2
|
351 |
IMPORT_C TPtrC GetTemplateLabelL();
|
williamr@2
|
352 |
protected:
|
williamr@2
|
353 |
IMPORT_C static CContactCardTemplate* NewL();
|
williamr@2
|
354 |
IMPORT_C static CContactCardTemplate* NewLC();
|
williamr@2
|
355 |
IMPORT_C static CContactCardTemplate* NewL(const CContactItem *aTemplate);
|
williamr@2
|
356 |
IMPORT_C static CContactCardTemplate* NewLC(const CContactItem *aTemplate);
|
williamr@2
|
357 |
IMPORT_C TBool HasItemLabelField();
|
williamr@4
|
358 |
|
williamr@4
|
359 |
/** Intended usage: Reserved to preserve future BC */
|
williamr@2
|
360 |
IMPORT_C void ReservedFunction1();
|
williamr@4
|
361 |
/** Intended usage: Reserved to preserve future BC */
|
williamr@2
|
362 |
IMPORT_C void ReservedFunction2();
|
williamr@2
|
363 |
|
williamr@2
|
364 |
protected: // from CContactItem
|
williamr@2
|
365 |
IMPORT_C TUid Type() const;
|
williamr@4
|
366 |
|
williamr@2
|
367 |
private:
|
williamr@2
|
368 |
CContactCardTemplate();
|
williamr@2
|
369 |
};
|
williamr@2
|
370 |
|
williamr@2
|
371 |
class CContactCard : public CContactItemPlusGroup
|
williamr@4
|
372 |
/** A contact card.
|
williamr@2
|
373 |
|
williamr@4
|
374 |
Implements the Type() function declared in class CContactItem.
|
williamr@4
|
375 |
Contact cards may optionally be constructed from a template.
|
williamr@2
|
376 |
@publishedAll
|
williamr@2
|
377 |
@released
|
williamr@2
|
378 |
*/
|
williamr@2
|
379 |
{
|
williamr@2
|
380 |
public:
|
williamr@2
|
381 |
IMPORT_C ~CContactCard();
|
williamr@2
|
382 |
IMPORT_C static CContactCard* NewL();
|
williamr@2
|
383 |
IMPORT_C static CContactCard* NewLC();
|
williamr@2
|
384 |
IMPORT_C static CContactCard* NewL(const CContactItem *aTemplate);
|
williamr@2
|
385 |
IMPORT_C static CContactCard* NewLC(const CContactItem *aTemplate);
|
williamr@2
|
386 |
public: // from CContactItem
|
williamr@2
|
387 |
IMPORT_C TUid Type() const;
|
williamr@2
|
388 |
public:
|
williamr@2
|
389 |
IMPORT_C CContactIdArray* GroupsJoinedLC() const;
|
williamr@2
|
390 |
private:
|
williamr@2
|
391 |
CContactCard();
|
williamr@2
|
392 |
private:
|
williamr@2
|
393 |
friend class CContactDatabase;
|
williamr@2
|
394 |
};
|
williamr@2
|
395 |
|
williamr@2
|
396 |
class CContactOwnCard : public CContactItemPlusGroup
|
williamr@4
|
397 |
/** Own card.
|
williamr@2
|
398 |
|
williamr@4
|
399 |
An own card is a contact card which contains information about the device's
|
williamr@4
|
400 |
owner. This can be sent to another compatible electronic device as a vCard.
|
williamr@4
|
401 |
The contact database recognises a single own card, referred to as the
|
williamr@4
|
402 |
current own card; its ID is returned by CContactDatabase::OwnCardId(). Like
|
williamr@4
|
403 |
a contact card, an own card can be a member of one or more contact card groups.
|
williamr@2
|
404 |
The own card type is identified by a UID of KUidContactOwnCard.
|
williamr@2
|
405 |
|
williamr@4
|
406 |
Own cards can be constructed using either CContactDatabase::CreateOwnCardLC()
|
williamr@4
|
407 |
or CreateOwnCardL(). These functions create an own card, based on the system
|
williamr@4
|
408 |
template, add it to the database, set it as the database's current own card
|
williamr@4
|
409 |
and return a pointer to it. To change the database's current own card, use
|
williamr@4
|
410 |
CContactDatabase::SetOwnCardL().
|
williamr@2
|
411 |
@publishedAll
|
williamr@2
|
412 |
@released
|
williamr@2
|
413 |
*/
|
williamr@2
|
414 |
{
|
williamr@2
|
415 |
public:
|
williamr@2
|
416 |
IMPORT_C ~CContactOwnCard();
|
williamr@2
|
417 |
IMPORT_C static CContactOwnCard* NewL();
|
williamr@2
|
418 |
IMPORT_C static CContactOwnCard* NewLC();
|
williamr@2
|
419 |
IMPORT_C static CContactOwnCard* NewL(const CContactItem *aTemplate);
|
williamr@2
|
420 |
IMPORT_C static CContactOwnCard* NewLC(const CContactItem *aTemplate);
|
williamr@2
|
421 |
public: // from CContactItem
|
williamr@2
|
422 |
IMPORT_C TUid Type() const;
|
williamr@2
|
423 |
public:
|
williamr@2
|
424 |
IMPORT_C CContactIdArray* GroupsJoinedLC() const;
|
williamr@2
|
425 |
private:
|
williamr@2
|
426 |
CContactOwnCard();
|
williamr@2
|
427 |
private:
|
williamr@2
|
428 |
friend class CContactDatabase;
|
williamr@2
|
429 |
};
|
williamr@2
|
430 |
|
williamr@2
|
431 |
class CContactTemplate : public CContactItem
|
williamr@4
|
432 |
/** A contact item template.
|
williamr@2
|
433 |
|
williamr@4
|
434 |
This is a contact item which is used to seed the initial field set for
|
williamr@2
|
435 |
other contact items.
|
williamr@2
|
436 |
|
williamr@4
|
437 |
Non-system (i.e. user-defined) templates are implemented
|
williamr@4
|
438 |
by the CContactCardTemplate class. CContactCardTemplate should be
|
williamr@4
|
439 |
used in preference to CContactTemplate.
|
williamr@2
|
440 |
@publishedAll
|
williamr@2
|
441 |
@released
|
williamr@2
|
442 |
*/
|
williamr@2
|
443 |
{
|
williamr@2
|
444 |
public:
|
williamr@2
|
445 |
IMPORT_C static CContactTemplate* NewL();
|
williamr@2
|
446 |
IMPORT_C static CContactTemplate* NewLC();
|
williamr@2
|
447 |
IMPORT_C static CContactTemplate* NewL(const CContactItem *aTemplate);
|
williamr@2
|
448 |
IMPORT_C static CContactTemplate* NewLC(const CContactItem *aTemplate);
|
williamr@2
|
449 |
public: // from CContactItem
|
williamr@2
|
450 |
IMPORT_C TUid Type() const;
|
williamr@2
|
451 |
private:
|
williamr@2
|
452 |
CContactTemplate();
|
williamr@2
|
453 |
};
|
williamr@2
|
454 |
|
williamr@2
|
455 |
|
williamr@2
|
456 |
class CContactICCEntry : public CContactItemPlusGroup
|
williamr@4
|
457 |
/** A contact ICC entry.
|
williamr@2
|
458 |
@publishedAll
|
williamr@2
|
459 |
@released
|
williamr@2
|
460 |
*/
|
williamr@2
|
461 |
{
|
williamr@2
|
462 |
public:
|
williamr@2
|
463 |
IMPORT_C ~CContactICCEntry();
|
williamr@2
|
464 |
IMPORT_C static CContactICCEntry* NewL(const CContactItem& aTemplate);
|
williamr@2
|
465 |
static CContactICCEntry* NewL();
|
williamr@2
|
466 |
public: //from CContactItem
|
williamr@2
|
467 |
TUid Type() const;
|
williamr@2
|
468 |
private:
|
williamr@2
|
469 |
CContactICCEntry();
|
williamr@2
|
470 |
};
|
williamr@2
|
471 |
|
williamr@2
|
472 |
|
williamr@2
|
473 |
class ContactGuid
|
williamr@2
|
474 |
/** A globally unique identifier enquiry utility.
|
williamr@2
|
475 |
|
williamr@4
|
476 |
Each contact item has a unique identifier, stored as a descriptor. It is
|
williamr@4
|
477 |
referred to as the 'UID string'. This is a combination of the unique
|
williamr@4
|
478 |
identifier of the database in which the contact item was created, the
|
williamr@4
|
479 |
contact item ID and the date/time of the contact item's creation. ContactGuid
|
williamr@4
|
480 |
provides a single static exported function to enquire whether an item was
|
williamr@4
|
481 |
created in a specified database.
|
williamr@2
|
482 |
@publishedAll
|
williamr@2
|
483 |
@released
|
williamr@2
|
484 |
*/
|
williamr@2
|
485 |
{
|
williamr@2
|
486 |
public:
|
williamr@2
|
487 |
IMPORT_C static TContactItemId IsLocalContactUidString(const TDesC& aString, TInt64 aMachineUniqueId);
|
williamr@2
|
488 |
IMPORT_C static TBool GetCreationDate(TDes& aString, TInt64 aMachineUniqueId);
|
williamr@2
|
489 |
static HBufC* CreateGuidLC(const TDesC& aCreationDate,TContactItemId aId, TInt64 aMachineUniqueId);
|
williamr@2
|
490 |
static HBufC* CreateGuidLC(const TTime& aCreationDate,TContactItemId aId, TInt64 aMachineUniqueId);
|
williamr@2
|
491 |
static HBufC* CreateGuidLC(TContactItemId aId, TInt64 aMachineUniqueId);
|
williamr@2
|
492 |
};
|
williamr@2
|
493 |
|
williamr@2
|
494 |
inline const CContactItemField& CContactItemFieldSet::operator[](TInt aIndex) const
|
williamr@4
|
495 |
/** Gets the field located at a specified position in the field set.
|
williamr@2
|
496 |
|
williamr@4
|
497 |
@param aIndex The position of the field in the field set. This is relative to zero.
|
williamr@4
|
498 |
It must be non-negative and less than the number of objects in the array, otherwise
|
williamr@2
|
499 |
the operator raises a panic.
|
williamr@2
|
500 |
|
williamr@2
|
501 |
@return A const reference to an element in the array. */
|
williamr@2
|
502 |
{ return *(*iFields)[aIndex]; }
|
williamr@2
|
503 |
|
williamr@2
|
504 |
inline CContactItemField& CContactItemFieldSet::operator[](TInt aIndex)
|
williamr@4
|
505 |
/** Gets the field located at a specified position in the field set.
|
williamr@2
|
506 |
|
williamr@4
|
507 |
@param aIndex The position of the field in the field set. This is relative to zero.
|
williamr@4
|
508 |
It must be non-negative and less than the number of objects in the array, otherwise
|
williamr@2
|
509 |
the operator raises a panic.
|
williamr@2
|
510 |
|
williamr@2
|
511 |
@return A non-const reference to an element in the array. */
|
williamr@2
|
512 |
{ return *(*iFields)[aIndex]; }
|
williamr@2
|
513 |
|
williamr@2
|
514 |
inline TInt CContactItemFieldSet::Find(TFieldType aFieldType) const
|
williamr@2
|
515 |
/** Finds the first field in the field set with the specified field type.
|
williamr@2
|
516 |
|
williamr@2
|
517 |
@param aFieldType The field type of interest.
|
williamr@4
|
518 |
@return If found, the index of the field within the field set, or KErrNotFound
|
williamr@2
|
519 |
if not found. */
|
williamr@2
|
520 |
{ return FindNext(aFieldType,KContactFieldSetSearchAll); }
|
williamr@2
|
521 |
|
williamr@2
|
522 |
inline TInt CContactItemFieldSet::Find(TFieldType aFieldType,TUid aMapping) const
|
williamr@4
|
523 |
/** Finds the first field in the field set containing both the content type mapping
|
williamr@2
|
524 |
and the field type specified.
|
williamr@2
|
525 |
|
williamr@2
|
526 |
@param aFieldType The field type of interest.
|
williamr@2
|
527 |
@param aMapping The content type mapping of interest.
|
williamr@4
|
528 |
@return If found, the index of the field within the field set, or KErrNotFound
|
williamr@2
|
529 |
if not found. */
|
williamr@2
|
530 |
{ return FindNext(aFieldType,aMapping,KContactFieldSetSearchAll); }
|
williamr@2
|
531 |
|
williamr@2
|
532 |
inline TInt CContactItemFieldSet::Count() const
|
williamr@2
|
533 |
/** Gets the number of fields in the field set.
|
williamr@2
|
534 |
|
williamr@2
|
535 |
@return The number of fields in the field set. */
|
williamr@2
|
536 |
{ return iFields->Count(); }
|
williamr@2
|
537 |
|
williamr@2
|
538 |
inline void CContactItemFieldSet::Reset()
|
williamr@2
|
539 |
/** Deletes all fields in the field set. */
|
williamr@2
|
540 |
{ iFields->ResetAndDestroy(); }
|
williamr@2
|
541 |
|
williamr@2
|
542 |
inline TBool CContactItem::IsDeletable()
|
williamr@4
|
543 |
/** Tests whether the contact item is deletable.
|
williamr@2
|
544 |
|
williamr@2
|
545 |
This is true if the item's access count is zero.
|
williamr@2
|
546 |
|
williamr@2
|
547 |
@return ETrue if deletable, EFalse if not deletable. */
|
williamr@2
|
548 |
{return (iAccessCount == 0);}
|
williamr@2
|
549 |
|
williamr@2
|
550 |
inline void CContactItem::IncAccessCount()
|
williamr@2
|
551 |
/** Increments the contact item's access count. */
|
williamr@2
|
552 |
{iAccessCount++;}
|
williamr@2
|
553 |
|
williamr@2
|
554 |
inline void CContactItem::DecAccessCount()
|
williamr@2
|
555 |
/** Decrements the contact item's access count. */
|
williamr@2
|
556 |
{if(iAccessCount) iAccessCount--;}
|
williamr@2
|
557 |
|
williamr@2
|
558 |
inline TInt CContactItem::AccessCount() const
|
williamr@2
|
559 |
/** Gets the contact item's access count.
|
williamr@2
|
560 |
|
williamr@2
|
561 |
@return The item's access count. */
|
williamr@2
|
562 |
{return(iAccessCount);}
|
williamr@2
|
563 |
|
williamr@4
|
564 |
inline TPtrC CContactItem::Guid()
|
williamr@4
|
565 |
/** Accessor function for Contact Guid.
|
williamr@2
|
566 |
* This is used to cache contact items that are added during a sync.
|
williamr@2
|
567 |
@return Guid */
|
williamr@2
|
568 |
{ return iGuid ? *iGuid : TPtrC(KNullDesC); }
|
williamr@2
|
569 |
|
williamr@2
|
570 |
#endif
|