Beispiel #1
0
        // поиск одинаковых fb2-файлов
        private void bw_DoWork(object sender, DoWorkEventArgs e)
        {
            m_dtStart = DateTime.Now;
            BackgroundWorker worker = sender as BackgroundWorker;

            ControlPanel.Enabled = false;
            m_FilesList.Clear();

            if (string.IsNullOrEmpty(m_fromXmlPath))
            {
                /* непрерывный поиск */
                StatusLabel.Text += "Создание списка файлов для поиска копий fb2 книг...\r";
                List <string> lDirList = new List <string>();

                // сканировать все подпапки исходной папки
                m_AllDirs  = FilesWorker.recursionDirsSearch(m_SourceDir, ref lDirList, true);
                m_AllFiles = FilesWorker.makeFilesListFromDirs(ref worker, ref e, ref lDirList, ref m_FilesList, true);

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

                this.Text        += String.Format(": Всего {0} каталогов; {1} файлов", m_AllDirs, m_AllFiles);
                StatusLabel.Text += String.Format("Осталось проверить {0} книг...\r", m_AllFiles);
                lDirList.Clear();
            }
            else
            {
                /* возобновление поиска */
                // загрузка данных из xml
                StatusLabel.Text += "Возобновление поиска невалидных fb2 книг из xml файла:\r";
                StatusLabel.Text += m_fromXmlPath + "\r";
                StatusLabel.Text += "Загрузка списка непроверенных книг из xml файла...\r";
                XElement xTree = XElement.Load(m_fromXmlPath);

                //загрузка данных о ходе сравнения
                XElement xCompareData = xTree.Element("SearchData");
                m_AllDirs  = Convert.ToInt32(xCompareData.Element("AllDirs").Value);
                m_AllFiles = Convert.ToInt32(xCompareData.Element("AllFiles").Value);
                this.Text += String.Format(": Всего {0} каталогов; {1} файлов", m_AllDirs, m_AllFiles);

                // заполнение списка необработанных файлов
                IEnumerable <XElement> files = xTree.Element("NotWorkingFiles").Elements("File");
                int NotWorkingFiles          = files.ToList().Count;
                StatusLabel.Text   += String.Format("Осталось проверить {0} книг...\r", NotWorkingFiles.ToString());
                ProgressBar.Maximum = NotWorkingFiles;
                int i = 0;
                foreach (XElement element in files)
                {
                    m_FilesList.Add(element.Value);
                    worker.ReportProgress(i++);
                }

                // загрузка из xml-файла в хэш-лист данных о невалидных книгах
                StatusLabel.Text   += "Создание визуального списка невалидных книг из xml файла...\r";
                files               = xTree.Element("FB2NotValidate").Elements("File");
                ProgressBar.Maximum = files.ToList().Count;
                i = 0;
                foreach (XElement element in files)
                {
                    if ((worker.CancellationPending))
                    {
                        e.Cancel = true;
                        return;
                    }
                    createNotValidateBookItem(element.Value, m_fb2Genres, m_fv2Validator, m_sharpZipLib);
                    worker.ReportProgress(i++);
                }
            }

            ControlPanel.Enabled = true;

            if ((worker.CancellationPending))
            {
                e.Cancel = true;
                return;
            }

            // Создание списка невалидных fb2-книг
            searchNotValidateFiles(sender, e, m_FilesList);

            if (m_autoResizeColumns)
            {
                MiscListView.AutoResizeColumns(m_listViewFB2Files);
            }
        }
        // Обработка файлов
        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;
            }
        }