public FilesGroup(FilesGroup group, Progress <OperationStatus> progress) { //foreach (var file in group) // _files.Add(file); _files.AddRange(group); _progress = progress; }
public DataModel() { Settings.Restore(); FileSelectionOptions.Init(_settings); _progress = new Progress <OperationStatus>(ReportStatus); _duplicatesCollection = new GroupedFilesCollection(_progress); _filesCollection = new FilesGroup(_progress); }
public FilesGroup Clone() { var newGroup = new FilesGroup(_progress); foreach (File file in _files) { newGroup.Add(file); } return(newGroup); }
/// <summary> /// Split group to smoll groups with equal value of given attribute /// Выполняем сортировку группы по заданному атрибуту файла /// Сравниваем файлы в группе по заданному атрибуту попарно первый со вторым второй с третьим и тд /// и при равенстве знвчений заданного атрибута добавляем файлы в новую группу /// при первом несовпадении файлов считаем формирование группы файлов совпадающих по заданному атрибуту /// завершенным. /// Если количество файлов в новой группе больше 1, новую группу добавляем в новый список групп /// </summary> /// <param name="attribute"></param> /// <param name="status"></param> /// <param name="cancelToken"></param> /// <returns></returns> public async Task <List <FilesGroup> > SplitByAttribute(GroupingAttribute attribute, CancellationToken cancelToken, OperationStatus status) { Debug.Assert(this.Count >= 2, "SplitByAttributeMethod called on group with less then two files"); IProgress <OperationStatus> progress = _progress; DataModel.SearchStatus oldStatusId = status.Id; status.Id = DataModel.SearchStatus.Sorting; progress.Report(status); await this.SortByAttribute(0, this.Count - 1, attribute.Attribute); status.Id = oldStatusId; var newGroupsCollection = new List <FilesGroup>(); var newgroup = new FilesGroup(_progress); newgroup.Add(_files[0]); ++status.HandledItems; for (int i = 1; i < this.Count; i++) { int compareResult = await _files[i - 1].CompareTo(_files[i], attribute.Attribute); if (compareResult != 0) { if (newgroup.Count > 1) { newGroupsCollection.Add(newgroup); } newgroup = new FilesGroup(_progress); } newgroup.Add(_files[i]); cancelToken.ThrowIfCancellationRequested(); ++status.HandledItems; progress.Report(status); } if (newgroup.Count > 1) { newGroupsCollection.Add(newgroup); } return(newGroupsCollection); }