/// <summary> /// создание итема в списке для невалидной книги /// </summary> private void createNotValidateBookItem(string FilePath, FB2UnionGenres fb2g, FB2Validator fv2Validator, SharpZipLibWorker sharpZipLib) { if (File.Exists(FilePath)) { string TempDir = Settings.Settings.TempDirPath; string FileExt = Path.GetExtension(FilePath); ListViewItem.ListViewSubItem[] subItems; if (FilesWorker.isFB2File(FilePath) || FilesWorker.isFB2Archive(FilePath)) { ListViewItem item = new ListViewItem(FilePath, FilesWorker.isFB2File(FilePath) ? 1 : 2); try { if (FilesWorker.isFB2File(FilePath)) { item.ForeColor = Colors.FB2ForeColor; subItems = createSubItemsWithMetaData(FilePath, FileExt, item, ref fb2g, ref fv2Validator); } else { // для zip-архивов FilesWorker.RemoveDir(TempDir); sharpZipLib.UnZipFB2Files(FilePath, TempDir); string [] files = Directory.GetFiles(TempDir); if (FilesWorker.isFB2File(files[0])) { item.ForeColor = Colors.ZipFB2ForeColor; subItems = createSubItemsWithMetaData(files[0], FileExt, item, ref fb2g, ref fv2Validator); } else { item.ForeColor = Colors.BadZipForeColor; subItems = WorksWithBooks.createEmptySubItemsForItem(item); } } if (subItems != null) { item.SubItems.AddRange(subItems); } } catch (Exception ex) { Debug.DebugMessage( null, ex, "FB2NotValidateForm.createNotValidateBookItem(): Создание итема в списке для невалидной книги." ); subItems = WorksWithBooks.createEmptySubItemsForItem(item); if (subItems != null) { item.SubItems.AddRange(subItems); item.ForeColor = Colors.BadZipForeColor; } } item.Tag = new ListViewItemType("f", FilePath); item.BackColor = Colors.FileBackColor; if (subItems != null) { m_listViewFB2Files.Items.Add(item); } } } }
// Обработка файлов private void bw_DoWork(object sender, DoWorkEventArgs e) { FB2Validator fv2Validator = new FB2Validator(); m_lvResult.BeginUpdate(); if (m_GroupAnalyzeMode == GroupAnalyzeModeEnum.AllGroup) { // все книги всех Групп this.Text += ": Все книги всех Групп"; ProgressBar.Maximum = m_lvResult.Items.Count; ProgressBar.Value = 0; int i = 0; foreach (ListViewItem lvi in m_lvResult.Items) { if ((m_bw.CancellationPending)) { e.Cancel = true; return; } validateFile(lvi, ref fv2Validator); m_bw.ReportProgress(++i); ProgressBar.Update(); } } else { // все книги выбранной Группы ListView.SelectedListViewItemCollection si = m_lvResult.SelectedItems; this.Text += ": Все книги Группы '" + si[0].Group.Header + "'"; if (si.Count > 0) { // группа для выделенной книги ListViewGroup lvg = si[0].Group; ProgressBar.Maximum = lvg.Items.Count; ProgressBar.Value = 0; int i = 0; foreach (ListViewItem lvi in lvg.Items) { if ((m_bw.CancellationPending)) { e.Cancel = true; return; } validateFile(lvi, ref fv2Validator); m_bw.ReportProgress(++i); ProgressBar.Update(); } } } m_lvResult.EndUpdate(); }
createSubItemsWithMetaData( string FilePath, string SourceFileExt, ListViewItem Item, ref FB2UnionGenres FB2FullSortGenres, ref FB2Validator fv2Validator ) { FB2BookDescription bd = null; try { bd = new FB2BookDescription(FilePath); } catch (System.Exception ex) { Debug.DebugMessage( null, ex, "FB2NotValidateForm.createSubItemsWithMetaData(): Создание заполненных subitems для невалидных книг для Корректора." ); } string valid = bd != null ? bd.IsValidFB2Union : fv2Validator.ValidatingFB2File(FilePath); if (!string.IsNullOrEmpty(valid)) { valid = "Нет"; Item.ForeColor = Colors.FB2NotValidForeColor; } else { return(null); } return(new ListViewItem.ListViewSubItem[] { new ListViewItem.ListViewSubItem(Item, bd != null ? bd.TIBookTitle : string.Empty), new ListViewItem.ListViewSubItem(Item, bd != null ? bd.TIAuthors : string.Empty), new ListViewItem.ListViewSubItem(Item, bd != null ? GenresWorker.cyrillicGenreName(bd.TIGenres, ref FB2FullSortGenres) : string.Empty), new ListViewItem.ListViewSubItem(Item, bd != null ? bd.TISequences : string.Empty), new ListViewItem.ListViewSubItem(Item, bd != null ? bd.TILang : string.Empty), new ListViewItem.ListViewSubItem(Item, bd != null ? bd.DIID : string.Empty), new ListViewItem.ListViewSubItem(Item, bd != null ? bd.DIVersion : string.Empty), new ListViewItem.ListViewSubItem(Item, bd != null ? bd.Encoding : string.Empty), new ListViewItem.ListViewSubItem(Item, valid), new ListViewItem.ListViewSubItem(Item, SourceFileExt), new ListViewItem.ListViewSubItem(Item, bd != null ? bd.FileLength : string.Empty), new ListViewItem.ListViewSubItem(Item, bd != null ? bd.FileCreationTime : string.Empty), new ListViewItem.ListViewSubItem(Item, bd != null ? bd.FileLastWriteTime : string.Empty) }); }
// ============================================================================================= // ВСПОМОГАТЕЛЬНЫЕ МЕТОДЫ ДЛЯ BACKGROUNDWORKER // ============================================================================================= #region BackgroundWorker: Вспомогательные методы private void validateFile(ListViewItem lvi, ref FB2Validator fv2Validator) { string FilePath = lvi.SubItems[0].Text; if (File.Exists(FilePath)) { string Msg = fv2Validator.ValidatingFB2File(FilePath); lvi.SubItems[(int)ResultViewDupCollumnEnum.Validate].Text = Msg == string.Empty ? "Да" : "Нет"; if (!string.IsNullOrEmpty(Msg)) { lvi.ForeColor = Colors.FB2NotValidForeColor; } else { lvi.ForeColor = FilesWorker.isFB2File(FilePath) ? Color.FromName("WindowText") : Colors.ZipFB2ForeColor; } } }
// ============================================================================================= // ВСПОМОГАТЕЛЬНЫЕ МЕТОДЫ ДЛЯ BACKGROUNDWORKER // ============================================================================================= #region BackgroundWorker: Вспомогательные методы private void validateFile(ListViewItem lvi, ref FB2Validator fv2Validator) { if (WorksWithBooks.isFileItem(lvi)) { string FilePath = Path.Combine(m_SourceDir.Trim(), lvi.SubItems[0].Text); if (File.Exists(FilePath)) { string Msg = fv2Validator.ValidatingFB2File(FilePath); lvi.SubItems[(int)ResultViewCollumnEnum.Validate].Text = Msg == string.Empty ? "Да" : "Нет"; if (!string.IsNullOrEmpty(Msg)) { lvi.ForeColor = Colors.FB2NotValidForeColor; } else { lvi.ForeColor = FilesWorker.isFB2File(FilePath) ? Color.FromName("WindowText") : Colors.ZipFB2ForeColor; } } } }
// Обработка файлов private void bw_DoWork(object sender, DoWorkEventArgs e) { m_dtStart = DateTime.Now; FB2Validator fv2Validator = new FB2Validator(); m_listView.BeginUpdate(); if (m_booksValidateMode == BooksValidateModeEnum.CheckedBooks) { // для помеченных книг ListView.CheckedListViewItemCollection checkedItems = m_listView.CheckedItems; if (checkedItems.Count > 0) { this.Text += ": Помеченные книги"; ProgressBar.Maximum = checkedItems.Count; ProgressBar.Value = 0; int i = 0; foreach (ListViewItem lvi in checkedItems) { if ((m_bw.CancellationPending)) { m_listView.EndUpdate(); e.Cancel = true; return; } validateFile(lvi, ref fv2Validator); m_bw.ReportProgress(++i); ProgressBar.Update(); } } } else if (m_booksValidateMode == BooksValidateModeEnum.SelectedBooks) { // для выделенных книг ListView.SelectedListViewItemCollection selItems = m_listView.SelectedItems; this.Text += ": Выделенные книги"; if (selItems.Count > 0) { // группа для выделенной книги ProgressBar.Maximum = selItems.Count; ProgressBar.Value = 0; int i = 0; foreach (ListViewItem lvi in selItems) { if ((m_bw.CancellationPending)) { m_listView.EndUpdate(); e.Cancel = true; return; } validateFile(lvi, ref fv2Validator); m_bw.ReportProgress(++i); ProgressBar.Update(); } } } else { // для всех книг this.Text += ": Выделенные книги"; ListView.ListViewItemCollection lvItemColl = m_listView.Items; if (lvItemColl.Count > 0) { // группа для выделенной книги ProgressBar.Maximum = lvItemColl.Count; ProgressBar.Value = 0; int i = 0; foreach (ListViewItem lvi in lvItemColl) { if ((m_bw.CancellationPending)) { m_listView.EndUpdate(); e.Cancel = true; return; } validateFile(lvi, ref fv2Validator); m_bw.ReportProgress(++i); ProgressBar.Update(); } } } m_listView.EndUpdate(); }