public void FetchTask() { mans.Clear(); contactsByFullName.Clear(); //if (owner != null) // Dispatcher.BeginInvoke(new VoidInt(owner.SetBarLimits), // FetchCount); syncEngine.CurrentTotal += FetchCount; if (syncEngine.SyncCanceled) { this.FetchSem.Release(); return; } int hOperHandle = 0; int iRet = DAContentAccess.CABeginOperation(m_hContacts, 0, ref hOperHandle); if (iRet != Synrc.PCCSErrors.CONA_OK) { PCCAPIUtils.ShowErrorMessage("CABeginOperation", iRet); this.FetchSem.Release(); return; } for (int k = 0; k < caIDList.iUIDCount; k++) { //if (owner != null && !quiet) // Dispatcher.BeginInvoke(new VoidString(owner.IncBarPosition), "Loading" /*+ " " + this.Name*/); if (owner != null) { Dispatcher.Invoke(new SyncProgressEventHandler(owner.Progress), this, "Loading " + "(" + syncEngine.CurrentItemNum + "/" + syncEngine.CurrentTotal + ")", syncEngine.CurrentItemNum, syncEngine.CurrentTotal); syncEngine.CurrentItemNum++; } DAContentAccessDefinitions.CA_ITEM_ID UID = GetUidFromBuffer(k, caIDList.pUIDs); CADataDefinitions.CA_DATA_CONTACT dataContact = new CADataDefinitions.CA_DATA_CONTACT(); ReadContact(UID, ref dataContact); PIMPersonalInfo pimData = new PIMPersonalInfo(); PIMNumbers numData = new PIMNumbers(); IList<PIMAddresses> adrData = new List<PIMAddresses>(); for (int i = 0; i < dataContact.bPICount; i++) { Int64 iPtr = dataContact.pPIFields.ToInt64() + i * Marshal.SizeOf(typeof(CADataDefinitions.CA_DATA_ITEM)); IntPtr ptr = new IntPtr(iPtr); CADataDefinitions.CA_DATA_ITEM itemData; itemData = (CADataDefinitions.CA_DATA_ITEM)Marshal.PtrToStructure(ptr, typeof(CADataDefinitions.CA_DATA_ITEM)); if (itemData.iFieldType == CADataDefinitions.CA_FIELD_TYPE_CONTACT_PI) ReadPersonalInfo(pimData, itemData); } for (int i = 0; i < dataContact.bNumberCount; i++) { Int64 iPtr = dataContact.pNumberFields.ToInt64() + i * Marshal.SizeOf(typeof(CADataDefinitions.CA_DATA_ITEM)); IntPtr ptr = new IntPtr(iPtr); CADataDefinitions.CA_DATA_ITEM itemData; itemData = (CADataDefinitions.CA_DATA_ITEM)Marshal.PtrToStructure(ptr, typeof(CADataDefinitions.CA_DATA_ITEM)); if (itemData.iFieldType == CADataDefinitions.CA_FIELD_TYPE_CONTACT_NUMBER) ReadNumbers(numData, itemData); } for (int i = 0; i < dataContact.bAddressCount; i++) { Int64 iPtr = dataContact.pAddressFields.ToInt64() + i * Marshal.SizeOf(typeof(CADataDefinitions.CA_DATA_ITEM)); IntPtr ptr = new IntPtr(iPtr); CADataDefinitions.CA_DATA_ITEM itemData; itemData = (CADataDefinitions.CA_DATA_ITEM)Marshal.PtrToStructure(ptr, typeof(CADataDefinitions.CA_DATA_ITEM)); if (itemData.iFieldType == CADataDefinitions.CA_FIELD_TYPE_CONTACT_ADDRESS) { PIMAddresses a = new PIMAddresses(); if (false) { ReadAddresses(a, itemData); adrData.Add(a); } } if (itemData.iFieldSubType == CADataDefinitions.CA_FIELD_SUB_TYPE_POSTAL | itemData.iFieldSubType == CADataDefinitions.CA_FIELD_SUB_TYPE_POSTAL_BUSINESS | itemData.iFieldSubType == CADataDefinitions.CA_FIELD_SUB_TYPE_POSTAL_PRIVATE) { } } Contact contact = GetCanonicalContact(pimData, numData, adrData); contactsByFullName[contact.FullName] = contact; mans.Add(new Man { FullName = contact.FullName, EMail = contact.EMail, Phone = contact.Phone }); } iRet = DAContentAccess.CAEndOperation(hOperHandle); if (iRet != PCCSErrors.CONA_OK) { //PCCAPIUtils.ShowErrorMessage("CAEndOperation", iRet); //syncEngine.CancelSync(PCCAPIUtils.CONAError2String(iRet)); Dispatcher.Invoke(new SyncCancelEventHandler(owner.CancelSync), this, PCCAPIUtils.CONAError2String(iRet), null); this.FetchSem.Release(); return; } CloseContactsConnection(); //iRet = DAContentAccess.CAFreeIdListStructure(buf); //if (iRet != PCCSErrors.CONA_OK) //{ // PCCAPIUtils.ShowErrorMessage("CAFreeIdListStructure", iRet); //} Marshal.FreeHGlobal(buf); this.FetchSem.Release(); }
public void ReadAddresses(PIMAddresses a, CADataDefinitions.CA_DATA_ITEM pimData) { CADataDefinitions.CA_DATA_POSTAL_ADDRESS postal; postal = (CADataDefinitions.CA_DATA_POSTAL_ADDRESS)Marshal.PtrToStructure(pimData.pCustomData, typeof(CADataDefinitions.CA_DATA_POSTAL_ADDRESS)); if (pimData.iFieldSubType == CADataDefinitions.CA_FIELD_SUB_TYPE_POSTAL) { a.Postal = Marshal.PtrToStringUni(pimData.pCustomData); } else if (pimData.iFieldSubType == CADataDefinitions.CA_FIELD_SUB_TYPE_POSTAL_BUSINESS) { a.Business = Marshal.PtrToStringUni(pimData.pCustomData); } else if (pimData.iFieldSubType == CADataDefinitions.CA_FIELD_SUB_TYPE_POSTAL_PRIVATE) { a.Private = Marshal.PtrToStringUni(pimData.pCustomData); } a.City = postal.pstrCity; a.Country = postal.pstrCountry; a.POBox = postal.pstrPOBox; a.PostalCode = postal.pstrPostalCode; a.State = postal.pstrState; a.Street = postal.pstrStreet; }