// возобновление Автокорректировки - загрузка отчета о необработанных книгах из xml-файла private void m_bwRenew_reNewAutoCorrecrFromFile_DoWork(object sender, DoWorkEventArgs e) { ControlPanel.Enabled = false; // загрузка данных из xml StatusTextBox.Text += "Возобновление Автокорректировки fb2 книг из xml файла:\r\n"; StatusTextBox.Text += m_fromXmlPath + "\r\n"; XElement xmlTree = XElement.Load(m_fromXmlPath); //загрузка данных о ходе сравнения XElement compareData = xmlTree.Element("Data"); m_AllFiles = Convert.ToInt32(compareData.Element("AllFiles").Value); m_AllDirs = Convert.ToInt32(compareData.Element("AllDirs").Value); ProgressBar.Maximum = m_AllFiles; // заполнение списка каталогов StatusTextBox.Text += "Загрузка списка каталогов xml файла...\r\n"; IEnumerable <XElement> dirs = xmlTree.Element("Dirs").Elements("Dir"); ProgressBar.Value = 0; m_DirsList.Clear(); int d = 0; foreach (XElement element in dirs) { m_DirsList.Add(element.Value); m_bw.ReportProgress(++d); ProgressBar.Update(); } // заполнение списка обработанных файлов loadFileList( ref m_bwRenew, "Загрузка списка обработанных книг из xml файла...\r\n", ref xmlTree, "WorkingFiles", ref m_WorkingFilesList ); // заполнение списка необработанных файлов loadFileList( ref m_bwRenew, "Загрузка списка необработанных книг из xml файла...\r\n", ref xmlTree, "NotWorkingFiles", ref m_NotWorkingFilesList ); ControlPanel.Enabled = true; // Автокорректировка файлов StatusTextBox.Text += "Возобновление Автокорректировки книг...\r\n"; // при пакетной обработке (не прерывать обработку на вылете корректировки, а переходим к обработке следующей книги) autoCorrect( BooksAutoCorrectProcessingModeEnum.BatchProcessing, ref m_bwRenew, ref e, ref m_NotWorkingFilesList, ref m_WorkingFilesList, true ); // оздание итемов списка всех файлов и каталогов StatusTextBox.Text += "Отображение списка файлов с метаданными...\r\n"; FB2UnionGenres fb2Genres = new FB2UnionGenres(); // генерация списка файлов - создание итемов listViewSource if (!WorksWithBooks.generateBooksListWithMetaData( m_listViewFB2Files, m_SourceRootDir, ref fb2Genres, true, false, false, this, ProgressBar, m_bwRenew, e)) { e.Cancel = true; } }
/// <summary> /// Автокорректировка списка файлов /// </summary> /// <param name="AutoCorrectProcessingMode">Режим обработки книг: обработка одной книги или пакетный режим</param> /// <param name="bw">Экземпляр класса BackgroundWorker по ссылке</param> /// <param name="e">Экземпляр класса DoWorkEventArgs по ссылке</param> /// <param name="NotWorkingFilesList">Список необработанных книг</param> /// <param name="WorkingFilesList">Список обработанных книг</param> /// <param name="IsReNew">Признак возобновления из файла корректировки</param> private void autoCorrect(BooksAutoCorrectProcessingModeEnum AutoCorrectProcessingMode, ref BackgroundWorker bw, ref DoWorkEventArgs e, ref List <string> NotWorkingFilesList, ref List <string> WorkingFilesList, bool IsReNew = false) { this.Text = string.Format("Автокорректировка {0} книг в {1} каталогах", m_AllFiles, m_AllDirs); if (IsReNew) { this.Text += string.Format(" / Для обработки {0} файлов", m_NotWorkingFilesList.Count); } string Title = this.Text; ProgressBar.Maximum = NotWorkingFilesList.Count; ProgressBar.Value = 0; int i = 0; foreach (string file in NotWorkingFilesList) { if (bw.CancellationPending) { // удаление обработанные книги (файлы) из списка всех файлов removeFinishedFilesInFilesList(ref NotWorkingFilesList, ref m_WorkingFilesList); e.Cancel = true; return; } // обработка файла this.Text = string.Format("{0} : {1} / {2}", Title, i + 1, NotWorkingFilesList.Count); DateTime dtStart = DateTime.Now; StatusTextBox.Text += string.Format(@"{0} => ( {1} ) =>", file, getFileLength(file)); WorksWithBooks.autoCorrect(AutoCorrectProcessingMode, file, m_sharpZipLib, m_fv2Validator); // повторная проверка откорректированной книги на валидность if (checkBoxValidate.Checked) { bool IsValid = string.IsNullOrWhiteSpace(m_fv2Validator.ValidatingFB2File(file)); StatusTextBox.Text += string.Format(" {0} |", IsValid ? "Валидный" : "Невалидный"); } DateTime dtEnd = DateTime.Now; string sTime = dtEnd.Subtract(dtStart).ToString(); try { sTime = sTime.Substring(0, 11); } catch (Exception ex) { Debug.DebugMessage( file, ex, "Автокорректировка списка файлов: AutoCorrector.AutoCorrectorForm.autoCorrect(): Получение времени конца обработки файла." ); } sTime += " (ч:м:с.мс)"; StatusTextBox.Text += string.Format(" {0}", sTime) + "\r\n"; // обработанные файлы m_WorkingFilesList.Add(NotWorkingFilesList[i]); m_bw.ReportProgress(++i); ProgressBar.Update(); } // удаление из списка всех файлов обработанные книги (файлы) removeFinishedFilesInFilesList(ref NotWorkingFilesList, ref WorkingFilesList); }
private void addAllBookInGroup(ref BackgroundWorker bw, ref DoWorkEventArgs e, ref XDocument doc, ListViewGroup listViewGroup, ref int BookInGroups, ref int GroupCountInGroups) { BookInGroups += listViewGroup.Items.Count; XElement xeGroup = null; addGroupInGroups(ref doc, ref xeGroup, listViewGroup); int BookNumber = 0; // номер Книги (Book number) В Группе (Group) int BookCountInGroup = 0; // число Книг (Group count) в Группе (Group) int i = 0; // прогресс foreach (ListViewItem lvi in listViewGroup.Items) { // только для "реальных" книг в списке (игнорируем итемы в списке тех книг, которые были удалены с диска в режиме быстрого удаления) // а также только для Групп, в которых больше 1 книги. if (lvi.Group.Items.Count > 1) { addBookInGroup(ref xeGroup, lvi, ref BookNumber); xeGroup.SetAttributeValue("count", ++BookCountInGroup); if (!File.Exists(lvi.SubItems[(int)ResultViewDupCollumnEnum.Path].Text)) { // пометка цветом и зачеркиванием удаленных книг с диска, но не из списка (быстрый режим удаления) WorksWithBooks.markRemoverFileInCopyesList(lvi); } } if (!xeGroup.HasElements) { xeGroup.Remove(); } bw.ReportProgress(++i); } // по всем книгам Группы ++GroupCountInGroups; }
// Обработка файлов private void bw_DoWork(object sender, DoWorkEventArgs e) { ProgressBar.Value = 0; int i = 0; FB2Validator fv2Validator = new FB2Validator(); switch (m_WorkMode) { case BooksAutoCorrectModeEnum.SelectedBooks: this.Text = string.Format( "Автокорректировка выделенных {0} книг", m_listViewFB2Files.SelectedItems.Count ); // при пакетной обработке (не прерывать обработку на вылете корректировки, а переходим к обработке следующей книги) BooksAutoCorrectProcessingModeEnum AutoCorrectProcessingMode = (m_listViewFB2Files.SelectedItems.Count == 1) ? BooksAutoCorrectProcessingModeEnum.OneBookProcessing : BooksAutoCorrectProcessingModeEnum.BatchProcessing; foreach (ListViewItem SelectedItem in m_listViewFB2Files.SelectedItems) { if ((m_bw.CancellationPending)) { e.Cancel = true; return; } // обработка файла WorksWithBooks.autoCorrect( AutoCorrectProcessingMode, SelectedItem, SelectedItem.Text, m_sharpZipLib, m_fv2Validator ); m_bw.ReportProgress(++i); ProgressBar.Update(); } break; case BooksAutoCorrectModeEnum.CheckedBooks: this.Text = string.Format("Автокорректировка помеченных {0} книг", m_listViewFB2Files.CheckedItems.Count); // при пакетной обработке (не прерывать обработку на вылете корректировки, а переходим к обработке следующей книги) AutoCorrectProcessingMode = (m_listViewFB2Files.CheckedItems.Count == 1) ? BooksAutoCorrectProcessingModeEnum.OneBookProcessing : BooksAutoCorrectProcessingModeEnum.BatchProcessing; foreach (ListViewItem CheckedItem in m_listViewFB2Files.CheckedItems) { if ((m_bw.CancellationPending)) { e.Cancel = true; return; } // обработка файла WorksWithBooks.autoCorrect( AutoCorrectProcessingMode, CheckedItem, CheckedItem.Text, m_sharpZipLib, m_fv2Validator ); m_bw.ReportProgress(++i); } break; case BooksAutoCorrectModeEnum.BooksInGroup: this.Text = string.Format("Автокорректировка {0} книг в Группе", m_listViewFB2Files.SelectedItems[0].Group.Items.Count); foreach (ListViewItem Item in m_listViewFB2Files.SelectedItems[0].Group.Items) { if ((m_bw.CancellationPending)) { e.Cancel = true; return; } // обработка файла WorksWithBooks.autoCorrect( BooksAutoCorrectProcessingModeEnum.BatchProcessing, Item, Item.Text, m_sharpZipLib, m_fv2Validator ); m_bw.ReportProgress(++i); ProgressBar.Update(); } break; case BooksAutoCorrectModeEnum.BooksInAllGroup: this.Text = string.Format("Автокорректировка {0} книг во всех Группах", m_listViewFB2Files.Items.Count); foreach (ListViewItem Item in m_listViewFB2Files.Items) { if ((m_bw.CancellationPending)) { e.Cancel = true; return; } // обработка файла WorksWithBooks.autoCorrect( BooksAutoCorrectProcessingModeEnum.BatchProcessing, Item, Item.Text, m_sharpZipLib, m_fv2Validator ); m_bw.ReportProgress(++i); ProgressBar.Update(); } break; default: return; } if ((m_bw.CancellationPending)) { e.Cancel = true; return; } }
// Обработка файлов private void bw_DoWork(object sender, DoWorkEventArgs e) { ProgressBar.Value = 0; int i = 0; FB2Validator fv2Validator = new FB2Validator(); switch (m_WorkMode) { case BooksAutoCorrectModeEnum.SelectedBooks: this.Text = string.Format("Автокорректировка выделенных {0} книг", m_listViewFB2Files.SelectedItems.Count); foreach (ListViewItem SelectedItem in m_listViewFB2Files.SelectedItems) { if ((m_bw.CancellationPending)) { e.Cancel = true; return; } // обработка файла WorksWithBooks.autoCorrect( SelectedItem, SelectedItem.Text, m_listViewFB2Files.SelectedItems.Count == 1 ? true : false, m_sharpZipLib, m_fv2Validator ); m_bw.ReportProgress(++i); } break; case BooksAutoCorrectModeEnum.CheckedBooks: this.Text = string.Format("Автокорректировка помеченных {0} книг", m_listViewFB2Files.CheckedItems.Count); foreach (ListViewItem CheckedItem in m_listViewFB2Files.CheckedItems) { if ((m_bw.CancellationPending)) { e.Cancel = true; return; } // обработка файла WorksWithBooks.autoCorrect( CheckedItem, CheckedItem.Text, m_listViewFB2Files.CheckedItems.Count == 1 ? true : false, m_sharpZipLib, m_fv2Validator ); m_bw.ReportProgress(++i); } break; case BooksAutoCorrectModeEnum.BooksInGroup: this.Text = string.Format("Автокорректировка {0} книг в Группе", m_listViewFB2Files.SelectedItems[0].Group.Items.Count); foreach (ListViewItem Item in m_listViewFB2Files.SelectedItems[0].Group.Items) { if ((m_bw.CancellationPending)) { e.Cancel = true; return; } // обработка файла WorksWithBooks.autoCorrect(Item, Item.Text, false, m_sharpZipLib, m_fv2Validator); m_bw.ReportProgress(++i); } break; case BooksAutoCorrectModeEnum.BooksInAllGroup: this.Text = string.Format("Автокорректировка {0} книг во всех Группах", m_listViewFB2Files.Items.Count); foreach (ListViewItem Item in m_listViewFB2Files.Items) { if ((m_bw.CancellationPending)) { e.Cancel = true; return; } // обработка файла WorksWithBooks.autoCorrect(Item, Item.Text, false, m_sharpZipLib, m_fv2Validator); m_bw.ReportProgress(++i); } break; default: return; } if ((m_bw.CancellationPending)) { e.Cancel = true; return; } }