/// <summary> /// <see cref="ExchangeSyncProvider.LoadSyncItem(SyncItemSchema, string)"/> /// </summary> public override IRemoteItem LoadSyncItem(SyncItemSchema schema, string id) { ExchangeBase remoteItem; string itemId = id.Split('_')[0]; Exchange.Contact fullContact = ExchangeUtility.SafeBindItem <Exchange.Contact>(Service, new Exchange.ItemId(itemId)); if (fullContact != null) { remoteItem = new ExchangeContact(schema, fullContact, TimeZone); remoteItem.Action = SyncAction.Update; } else { fullContact = new Exchange.Contact(Service); remoteItem = new ExchangeContact(schema, fullContact, id, TimeZone) { State = SyncState.Deleted }; } return(remoteItem); }
/// <summary> /// <see cref="ExchangeSyncProvider.EnumerateChanges"/> /// </summary> public override IEnumerable <IRemoteItem> EnumerateChanges(SyncContext context) { base.EnumerateChanges(context); var result = new List <IRemoteItem>(); if (!UserSettings.ImportContacts) { return(result); } var folders = new List <Exchange.Folder>(); if (UserSettings.ImportContactsAll) { Exchange.Folder rootFolder = Exchange.Folder.Bind(Service, Exchange.WellKnownFolderName.MsgFolderRoot); var filter = new Exchange.SearchFilter.IsEqualTo( Exchange.FolderSchema.FolderClass, ExchangeConsts.ContactFolderClassName); folders.GetAllFoldersByFilter(rootFolder, filter); } else { folders = SafeBindFolders(Service, UserSettings.RemoteFolderUIds.Keys, context); } Exchange.SearchFilter itemsFilter = GetExternalItemsFiltersHandler != null ? GetExternalItemsFiltersHandler() as Exchange.SearchFilter : GetContactsFilters(); SyncItemSchema schema = FindSchemaBySyncValueName(typeof(ExchangeContact).Name); var exchangeAddrDetails = new List <ExchangeAddressDetail>(); var exchangeCompanies = new List <string>(); foreach (Exchange.Folder noteFolder in folders) { var itemView = new Exchange.ItemView(PageItemCount); Exchange.FindItemsResults <Exchange.Item> itemCollection; do { itemCollection = noteFolder.ReadItems(itemsFilter, itemView); foreach (Exchange.Item item in itemCollection) { Exchange.Contact fullContact = GetFullItemHandler != null ? GetFullItemHandler(item.Id.UniqueId) as Exchange.Contact : GetFullContact(item.Id); if (fullContact == null) { continue; } var remoteItem = new ExchangeContact(schema, fullContact, TimeZone); remoteItem.InitIdProperty(context); result.Add(remoteItem); if (!string.IsNullOrEmpty(fullContact.CompanyName)) { exchangeCompanies.Add(fullContact.CompanyName); } AddAddressDetails(exchangeAddrDetails, fullContact); } } while (itemCollection.MoreAvailable); } FillAddressDetailsData(context, exchangeAddrDetails); FillAccountsMap(context, exchangeCompanies.Distinct().ToList()); return(result); }