// Проверяем - это отмена, ошибка, или конец задачи и сообщить
        private void bw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            // очистка временной папки
            FilesWorker.RemoveDir(m_TempDir);
            if (m_autoResizeColumns)
            {
                MiscListView.AutoResizeColumns(m_listView);
            }
            DateTime dtEnd = DateTime.Now;
            string   sTime = dtEnd.Subtract(m_dtStart).ToString() + " (час.:мин.:сек.)";

            if (e.Cancelled)
            {
                m_EndMode.EndMode = EndWorkModeEnum.Cancelled;
                m_EndMode.Message = "Отображение метаданных книг прервано!\nСгенерирован список " + ProgressBar.Value + " каталогов и папок из " + ProgressBar.Maximum + "\nЗатрачено времени: " + sTime;
            }
            else if (e.Error != null)
            {
                m_EndMode.EndMode = EndWorkModeEnum.Error;
                m_EndMode.Message = "Ошибка:\n" + e.Error.Message + "\n" + e.Error.StackTrace + "\nСгенерирован список " + ProgressBar.Value + " каталогов и папок из " + ProgressBar.Maximum + "\nЗатрачено времени: " + sTime;
            }
            else
            {
                m_EndMode.EndMode = EndWorkModeEnum.Done;
                m_EndMode.Message = "Отображение метаданных книг завершено!\nЗатрачено времени: " + sTime;
            }
            this.Close();
        }
        /// <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);
                    }
                }
            }
        }
Beispiel #3
0
        // Проверяем - это отмена, ошибка, или конец задачи и сообщить
        private void bw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            DateTime dtEnd = DateTime.Now;

            FilesWorker.RemoveDir(Settings.Settings.TempDirPath);

            string sTime = dtEnd.Subtract(m_dtStart).ToString().Substring(0, 8) + " (час.:мин.:сек.)";

            if (e.Cancelled)
            {
                m_EndMode.EndMode = EndWorkModeEnum.Cancelled;
                if (m_StopToSave)
                {
                    // остановка поиска копий с сохранением списка необработанных книг в файл
                    m_StopToSave = false;
                    // сохранение в xml-файл списка данных о невалидных и необработанных книг
                    sfdList.Title            = "Укажите файл для будущего возобновления поиска всех невалидных книг:";
                    sfdList.Filter           = "SharpFBTools Файлы хода работы Корректора (*.corr_break)|*.corr_break";
                    sfdList.FileName         = string.Empty;
                    sfdList.InitialDirectory = Settings.Settings.ProgDir;
                    DialogResult result = sfdList.ShowDialog();
                    if (result == DialogResult.OK)
                    {
                        ControlPanel.Enabled = false;
                        StatusLabel.Text    += "Сохранение данных анализа в файл:\r";
                        StatusLabel.Text    += sfdList.FileName;
                        saveSearchedDataToXmlFile(sfdList.FileName, ref m_FilesList);
                        m_EndMode.Message = "Поиск всех невалидных fb2 файлов прерван!\nДанные поиска и список оставшихся для обработки книг сохранены в xml-файл:\n\n" + sfdList.FileName + "\n\nЗатрачено времени: " + sTime;
                    }
                }
                else
                {
                    // остановка поиска без сохранения результата работы в xml-файл
                    m_EndMode.Message = "Поиск всех невалидных fb2-файлов остановлен!\nСписок невалидных fb2-файлов не сформирован полностью!\nЗатрачено времени: " + sTime;
                }
            }
            else if (e.Error != null)
            {
                m_EndMode.EndMode = EndWorkModeEnum.Error;
                m_EndMode.Message = "Ошибка:\n" + e.Error.Message + "\n" + e.Error.StackTrace + "\nЗатрачено времени: " + sTime;
            }
            else
            {
                m_EndMode.EndMode = EndWorkModeEnum.Done;
                m_EndMode.Message = "Поиск всех невалидных fb2-файлов завершен!\nЗатрачено времени: " + sTime;
                if (m_listViewFB2Files.Items.Count == 0)
                {
                    m_EndMode.Message += "\n\nНе найдено НИ ОДНОЙ невалидной книги!";
                }
            }

            m_FilesList.Clear();
            this.Close();
        }
Beispiel #4
0
        /// <summary>
        /// Валидация fb2, fb2.zip ли fbz файлов по пути FilePath
        /// </summary>
        /// <returns>Пустая строка, файл валиден; Строка с сообщением, если файл невалиден</returns>
        public string ValidatingFB2File(string FilePath)
        {
            bool   IsZip  = false;
            string Result = validate(FilePath, Settings.Settings.SchemePath, ref IsZip);

            if (IsZip)               //  удаляем временные файлы только, если проверяли архив
            {
                FilesWorker.RemoveDir(_TempDir);
            }
            return(Result);
        }
Beispiel #5
0
        /// <summary>
        /// Хеширование файлов в контексте Id книг:
        /// Одинаковый Id Книги (копии и/или разные версии правки одной и той же книги)
        /// </summary>
        /// <param name="FilesList">Список файлов для сканированияl</param>
        /// <param name="htFB2ForID">Хеш Таблица с книгами с одинаковыми ID</param>
        /// <returns>Признак непрерывности обработки файлов</returns>
        public bool FilesHashForIDParser(BackgroundWorker bw, DoWorkEventArgs e,
                                         Label StatusLabel, ProgressBar ProgressBar, string TempDir,
                                         List <string> FilesList, HashtableClass htFB2ForID)
        {
            StatusLabel.Text   += "Хэширование по Id книг...\r";
            ProgressBar.Maximum = FilesList.Count;
            ProgressBar.Value   = 0;

            List <string> FinishedFilesList = new List <string>();

            for (int i = 0; i != FilesList.Count; ++i)
            {
                if (FilesWorker.isFB2File(FilesList[i]))
                {
                    // заполнение хеш таблицы данными о fb2-книгах в контексте их ID
                    MakeFB2IDHashTable(null, FilesList[i], ref htFB2ForID);
                    // обработанные файлы
                    FinishedFilesList.Add(FilesList[i]);
                }
                else
                {
                    if (FilesWorker.isFB2Archive(FilesList[i]))
                    {
                        try {
                            if (_sharpZipLib.UnZipFB2Files(FilesList[i], TempDir) != -1)
                            {
                                string[] files = Directory.GetFiles(TempDir);
                                if (files.Length > 0)
                                {
                                    if (FilesWorker.isFB2File(files[0]))
                                    {
                                        // заполнение хеш таблицы данными о fb2-книгах в контексте их ID
                                        MakeFB2IDHashTable(FilesList[i], files[0], ref htFB2ForID);
                                        // обработанные файлы
                                        FinishedFilesList.Add(FilesList[i]);
                                    }
                                }
                            }
                        }
                        catch (Exception ex) {
                            Debug.DebugMessage(
                                FilesList[i], ex, "Дубликатор.CompareForm.FilesHashForIDParser(): Хеширование файлов в контексте Id книг."
                                );
                        }
                        FilesWorker.RemoveDir(TempDir);
                    }
                }
                bw.ReportProgress(i); // отобразим данные в контролах

                if (bw.CancellationPending)
                {
                    // удаление из списка всех файлов обработанных книг
                    WorksWithBooks.removeFinishedFilesInFilesList(ref FilesList, ref FinishedFilesList);
                    e.Cancel = true;
                    return(false);
                }
            }
            // удаление элементов таблицы, value (списки) которых состоят из 1-го элемента (это не копии)
            _compComm.removeNotCopiesEntryInHashTable(htFB2ForID);
            // удаление из списка всех файлов обработанных книг
            WorksWithBooks.removeFinishedFilesInFilesList(ref FilesList, ref FinishedFilesList);

            return(true);
        }