public void ReadData(ListWithCount <T> listWithCount) { this._updatingCollection = true; this._totalCount = listWithCount.TotalCount; bool receivedNewData = false; this.RaiseOnStartedEdit(); listWithCount.List.ForEach((Action <T>)(t => { IList list1 = t as IList; bool flag1 = false; if (list1 != null) { int index = listWithCount.List.IndexOf(t); if (index >= 0 && index < this._collection.Count) { IList list2 = this._collection[index] as IList; foreach (object obj in list1) { list2.Add(obj); } receivedNewData = true; flag1 = true; } } if (flag1) { return; } bool flag2 = true; IHaveUniqueKey haveUniqueKey = t as IHaveUniqueKey; if (haveUniqueKey != null && this._collectionItemsDict.ContainsKey(haveUniqueKey.GetKey())) { flag2 = false; } if (!flag2) { return; } this._collection.Add(t); this.AddRemoveKeyToDict(t, true); receivedNewData = true; })); this.RaiseOnEndedEdit(); this._noDataOnLastFetch = listWithCount.List.Count == 0 || !receivedNewData; this._updatingCollection = false; }
public bool ReadData(ListWithCount <T> listWithCount) { this._updatingCollection = true; bool flag1 = false; this._totalCount = listWithCount.TotalCount; IList collection = this.IsGroupedMode ? (IList)this._globalGroup : (IList)this._collection; bool receivedNewData = false; this.RaiseOnStartedEdit(); listWithCount.List.ForEach((Action <T>)(listItem => { IList list1 = listItem as IList; if (list1 != null) { IList list2 = null; int index = listWithCount.List.IndexOf(listItem); if (index > -1 && index < collection.Count) { list2 = collection[index] as IList; } if (list2 == null) { if (list1.Count <= 0) { return; } bool flag2 = false; IEnumerator enumerator = ((IEnumerable)list1).GetEnumerator(); try { while (enumerator.MoveNext()) { object current = enumerator.Current; IHaveUniqueKey haveUniqueKey = current as IHaveUniqueKey; if (haveUniqueKey != null && !this._collectionItemsDict.ContainsKey(haveUniqueKey.GetKey())) { this.AddRemoveKeyToDict(current, true); flag2 = true; } } } finally { IDisposable disposable = enumerator as IDisposable; if (disposable != null) { disposable.Dispose(); } } if (!flag2) { return; } collection.Add(listItem); receivedNewData = true; } else { IEnumerator enumerator = ((IEnumerable)list2).GetEnumerator(); try { while (enumerator.MoveNext()) { object current = enumerator.Current; bool flag2 = true; IHaveUniqueKey haveUniqueKey = current as IHaveUniqueKey; if (haveUniqueKey != null && this._collectionItemsDict.ContainsKey(haveUniqueKey.GetKey())) { flag2 = false; } if (flag2) { list2.Add(current); this.AddRemoveKeyToDict(current, true); receivedNewData = true; } } } finally { IDisposable disposable = enumerator as IDisposable; if (disposable != null) { disposable.Dispose(); } } } } else { bool flag2 = true; IHaveUniqueKey haveUniqueKey = listItem as IHaveUniqueKey; if (haveUniqueKey != null && this._collectionItemsDict.ContainsKey(haveUniqueKey.GetKey())) { flag2 = false; } if (!flag2) { return; } if (this.IsGroupedMode) { if (this._localDataProvider.GetIsLocalItem(listItem)) { this._localGroup.Add(listItem); } else { this._globalGroup.Add(listItem); } } else { collection.Add(listItem); } this.AddRemoveKeyToDict(listItem, true); receivedNewData = true; } })); this.RaiseOnEndedEdit(); if (listWithCount.List.Count == 0 || !receivedNewData) { this._noDataOnLastFetch = this._noDataOnLastFetch + 1; if (this._noDataOnLastFetch < 2) { flag1 = true; } } else { this._noDataOnLastFetch = 0; } this._updatingCollection = false; return(flag1); }