/// <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 bw_DoWork(object sender, DoWorkEventArgs e)
        {
            ProgressBar.Value   = 0;
            StatusTextBox.Text += "Создание списка файлов для Автокорректировки...\r\n";

            foreach (ListViewItemInfo Item in m_ListViewItemInfoList)
            {
                if (Item.IsDirListViewItem)
                {
                    m_SourceDirs.Add(Item.FilePathSource);
                }
                else
                {
                    m_SourceRootFiles.Add(Item.FilePathSource);
                }
            }

            m_NotWorkingFilesList.Clear();
            foreach (string dir in m_SourceDirs)
            {
                m_AllDirs += FilesWorker.recursionDirsSearch(dir, ref m_DirsList, true);
            }

            m_AllFiles = FilesWorker.makeFilesListFromDirs(
                ref m_bw, ref e, ref m_DirsList, ref m_NotWorkingFilesList, true
                );
            m_NotWorkingFilesList.AddRange(m_SourceRootFiles);
            m_AllFiles += m_SourceRootFiles.Count;

            // только теперь добавляем корневой каталог, если в нем выделен / помечен хоть один файл
            if (m_SourceRootFiles.Count > 0)
            {
                m_DirsList.Add(m_SourceRootDir);
                ++m_AllDirs;
            }

            ControlPanel.Enabled = true;
            if (m_bw.CancellationPending)
            {
                e.Cancel = true;
                return;
            }

            // проверка, есть ли хоть один файл в папке для сканирования
            if (m_AllFiles == 0)
            {
                MessageBox.Show(
                    "В папке сканирования не найдено ни одного файла!\r\nРабота прекращена.",
                    m_sMessTitle, MessageBoxButtons.OK, MessageBoxIcon.Information
                    );
                return;
            }

            ControlPanel.Enabled = true;

            // Автокорреетировка книг
            StatusTextBox.Text += "Запуск автокорректировки fb2-файлов...\r\n";
            // при пакетной обработке (не прерывать обработку на вылете корректировки, а переходим к обработке следующей книги)
            BooksAutoCorrectProcessingModeEnum AutoCorrectProcessingMode = (m_NotWorkingFilesList.Count == 1)
                                ? BooksAutoCorrectProcessingModeEnum.OneBookProcessing
                                : BooksAutoCorrectProcessingModeEnum.BatchProcessing;

            autoCorrect(
                AutoCorrectProcessingMode, ref m_bw, ref e, ref m_NotWorkingFilesList, ref m_WorkingFilesList, false
                );

            if (m_bw.CancellationPending)
            {
                e.Cancel = true;
                return;
            }
        }
Beispiel #3
0
        // Обработка файлов
        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;
            }
        }