示例#1
0
        // возобновление Автокорректировки - загрузка отчета о необработанных книгах из 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;
            }
        }
示例#2
0
        /// <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;
        }
示例#4
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;
            }
        }
        // Обработка файлов
        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;
            }
        }