00001
00002
00003
00004
00005
00006 #include "ContactsModelDocument.h"
00007 #include "ContactsModelAppUi.h"
00008
00009 #include <cntfilt.h>
00010 #include <cntitem.h>
00011
00012 const TInt KBufferSize = 256;
00013
00014
00015
00016
00017 CContactsModelDocument::CContactsModelDocument(CEikApplication& aApp)
00018 : CAknDocument(aApp)
00019 {
00020 }
00021
00022
00023 CContactsModelDocument::~CContactsModelDocument()
00024 {
00025 delete iContacts;
00026 delete iTextDef;
00027 }
00028
00029
00030 void CContactsModelDocument::ConstructL()
00031 {
00032 iContacts = NULL;
00033 UpdateContactsL();
00034
00035 iTextDef = CContactTextDef::NewL();
00036
00037 iTextDef->AppendL(TContactTextDefItem(KUidContactFieldGivenName, _L(" ")));
00038 iTextDef->AppendL(TContactTextDefItem(KUidContactFieldFamilyName));
00039 }
00040
00041
00042 CContactsModelDocument* CContactsModelDocument::NewL(
00043 CEikApplication& aApp)
00044 {
00045 CContactsModelDocument* self = new (ELeave) CContactsModelDocument( aApp );
00046 CleanupStack::PushL( self );
00047 self->ConstructL();
00048 CleanupStack::Pop();
00049
00050 return self;
00051 }
00052
00053
00054 HBufC * CContactsModelDocument::GetItemL(TInt anIndex)
00055 {
00056
00057 CContactDatabase* contactsDb = CContactDatabase::OpenL();
00058 CleanupStack::PushL(contactsDb);
00059
00060 TBuf<KBufferSize> buf;
00061
00062 if((*iContacts).Count() >= anIndex)
00063 contactsDb->ReadContactTextDefL((*iContacts)[anIndex], buf, iTextDef);
00064
00065 CleanupStack::PopAndDestroy();
00066 return buf.AllocL();
00067 }
00068
00069
00070 TInt CContactsModelDocument::ItemCount()
00071 {
00072 return iContacts->Count();
00073 }
00074
00075 void CContactsModelDocument::UpdateContactsL()
00076 {
00077
00078
00079 CContactDatabase* contactsDb = CContactDatabase::OpenL();
00080 CleanupStack::PushL(contactsDb);
00081
00082 CCntFilter *filter = CCntFilter::NewLC();
00083
00084
00085 filter->SetContactFilterTypeALL(EFalse);
00086 filter->SetContactFilterTypeCard(ETrue);
00087
00088 contactsDb->FilterDatabaseL(*filter);
00089
00090 if(iContacts)
00091 {
00092 delete iContacts;
00093 iContacts = NULL;
00094 }
00095 iContacts = CContactIdArray::NewL(filter->iIds);
00096
00097 CleanupStack::PopAndDestroy(2);
00098 }
00099
00100 TInt CContactsModelDocument::ImportL(RReadStream& aReadStream)
00101 {
00102
00103 CContactDatabase* contactsDb = CContactDatabase::OpenL();
00104 CleanupStack::PushL(contactsDb);
00105
00106 TBool result = EFalse;
00107 TUid p1;
00108 p1.iUid = KVersitEntityUidVCard;
00109 CArrayPtr<CContactItem>* imported = contactsDb->ImportContactsL(p1,
00110 aReadStream,
00111 result,
00112 CContactDatabase::ETTFormat);
00113 imported->ResetAndDestroy();
00114 delete imported;
00115
00116 CleanupStack::PopAndDestroy();
00117
00118 return result?KErrNone:KErrGeneral;
00119 }
00120
00121 void CContactsModelDocument::ExportL(RWriteStream& aWriteStream, TInt aExportItem)
00122 {
00123
00124 CContactDatabase* contactsDb = CContactDatabase::OpenL();
00125 CleanupStack::PushL(contactsDb);
00126
00127 CContactIdArray* exportContacts = CContactIdArray::NewL();
00128 CleanupStack::PushL(exportContacts);
00129
00130 if((*iContacts).Count() >= aExportItem)
00131 exportContacts->AddL( (*iContacts)[aExportItem] );
00132
00133 TUid p1;
00134 p1.iUid = KVersitEntityUidVCard;
00135 contactsDb->ExportSelectedContactsL(p1,
00136 *exportContacts,
00137 aWriteStream,
00138 CContactDatabase::EExcludeUid);
00139
00140 CleanupStack::PopAndDestroy(2);
00141 }
00142
00143
00144
00145
00146
00147
00148 CEikAppUi* CContactsModelDocument::CreateAppUiL()
00149 {
00150 return new (ELeave) CContactsModelAppUi;
00151 }
00152
00153