Exemplo n.º 1
0
        /// <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);
                    }
                }
            }
        }
Exemplo n.º 2
0
        // =============================================================================================
        //                          ВСПОМОГАТЕЛЬНЫЕ МЕТОДЫ ДЛЯ BACKGROUNDWORKER
        // =============================================================================================
        #region BackgroundWorker: Вспомогательные методы
        /// <summary>
        /// поиск невалидных книг
        /// </summary>
        private void searchNotValidateFiles(object sender, DoWorkEventArgs e, List <string> FilesList)
        {
            BackgroundWorker worker = sender as BackgroundWorker;

            ProgressBar.Maximum = FilesList.Count;
            int           i = 0;
            List <string> FinishedFilesList = new List <string>();

            foreach (string FilePath in FilesList)
            {
                if (worker.CancellationPending)
                {
                    // удаление из списка всех файлов обработанные книги (файлы)
                    WorksWithBooks.removeFinishedFilesInFilesList(ref FilesList, ref FinishedFilesList);
                    e.Cancel = true;
                    return;
                }
                createNotValidateBookItem(FilePath, m_fb2Genres, m_fv2Validator, m_sharpZipLib);
                // обработанные файлы
                FinishedFilesList.Add(FilePath);
                worker.ReportProgress(i++);
            }

            // удаление из списка всех файлов обработанные книги (файлы)
            WorksWithBooks.removeFinishedFilesInFilesList(ref FilesList, ref FinishedFilesList);
        }
Exemplo n.º 3
0
        // загрузка Жанров для правки
        private void loadGenresFromFB2Files(Enums.TitleInfoEnum TitleInfoType)
        {
            FB2UnionGenres fb2g = new FB2UnionGenres();

            foreach (FB2ItemInfo Info in m_GenreFB2InfoList)
            {
                if (Info.FictionBook != null)
                {
                    IList <Genre> GenresList = TitleInfoType == Enums.TitleInfoEnum.TitleInfo
                                                ? Info.FictionBook.TIGenres : Info.FictionBook.STIGenres;
                    if (GenresList != null)
                    {
                        foreach (Genre g in GenresList)
                        {
                            if (g != null)
                            {
                                if (!WorksWithBooks.genreIsExist(GenresListView, g, fb2g))
                                {
                                    ListViewItem lvi = new ListViewItem(
                                        !string.IsNullOrEmpty(g.Name)
                                                                                ? fb2g.GetFBGenreName(g.Name) + " (" + g.Name + ")"
                                                                                : string.Empty
                                        );
                                    lvi.SubItems.Add(!string.IsNullOrEmpty(g.Math.ToString()) ? g.Math.ToString() : string.Empty);
                                    if (!string.IsNullOrEmpty(g.Name))
                                    {
                                        GenresListView.Items.Add(lvi);
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
Exemplo n.º 4
0
 // удаление всех элементов Списка, для которых отсутствуют файлы на жестком диске для Дубликатора
 public static void deleteAllItemForNonExistFileWithCounter(ListView listView, ListViewItem RemoveListViewItem,
                                                            bool RemoveFast)
 {
     if (!RemoveFast)
     {
         if (listView.Items.Count > 0)
         {
             ListViewGroup lvg = RemoveListViewItem.Group;
             listView.Items.Remove(RemoveListViewItem);
             if (lvg != null && lvg.Items.Count <= 1)
             {
                 if (lvg.Items.Count == 1)
                 {
                     listView.Items[lvg.Items[0].Index].Remove();
                 }
                 listView.Groups.Remove(lvg);
             }
         }
     }
     else
     {
         // пометка цветом и зачеркиванием удаленных книг с диска, но не из списка (быстрый режим удаления)
         WorksWithBooks.markRemoverFileInCopyesList(RemoveListViewItem);
     }
 }
Exemplo n.º 5
0
        private void bw_DoWork(object sender, DoWorkEventArgs e)
        {
            Cursor.Current = Cursors.WaitCursor;
            FB2DescriptionCorrector fB2Corrector = null;

            foreach (FB2ItemInfo Info in m_KeywordsFB2InfoList)
            {
                FictionBook fb2 = Info.FictionBook;
                if (fb2 != null)
                {
                    fB2Corrector = new FB2DescriptionCorrector(fb2);
                    fB2Corrector.recoveryDescriptionNode();

                    XmlNode xmlTI = fb2.getTitleInfoNode(TitleInfoEnum.TitleInfo);
                    if (xmlTI != null)
                    {
                        string kw    = string.Empty;
                        string kwOld = fb2.getKeywordsNode(TitleInfoEnum.TitleInfo).InnerText;
                        if (AddRadioButton.Checked)
                        {
                            // добавить новые ключевые слова к существующим
                            kw = !string.IsNullOrWhiteSpace(kwOld) ?
                                 (kwOld + "," + KeywordsTextBox.Text.Trim())
                                                        : KeywordsTextBox.Text.Trim();
                        }
                        else
                        {
                            // заменить существующие ключевые слова на новые
                            kw = KeywordsTextBox.Text.Trim();
                        }
                        xmlTI.ReplaceChild(
                            fB2Corrector.makeKeywordsNode(kw),
                            fb2.getKeywordsNode(TitleInfoEnum.TitleInfo)
                            );

                        // сохранение fb2 файла
                        if (!Directory.Exists(m_TempDir))
                        {
                            Directory.CreateDirectory(m_TempDir);
                        }
                        string NewPath = Info.IsFromZip ? Info.FilePathIfFromZip : Info.FilePathSource;
                        fb2.saveToFB2File(NewPath, false);
                        if (Info.IsFromZip)
                        {
                            WorksWithBooks.zipMoveTempFB2FileTo(m_sharpZipLib, NewPath, Info.FilePathSource);
                        }
                        if (Info.IsFromZip && File.Exists(NewPath))
                        {
                            File.Delete(NewPath);
                        }
                    }
                }
                m_bw.ReportProgress(1);
                ProgressBar.Update();
            }
            Cursor.Current = Cursors.Default;
        }
        // генерация списка файлов - создание итемов listViewSource
        private void bw_DoWork(object sender, DoWorkEventArgs e)
        {
            m_dtStart = DateTime.Now;
            FB2UnionGenres fb2Genres = new FB2UnionGenres();

            if (!WorksWithBooks.generateBooksListWithMetaData(m_listView, m_dirPath, ref fb2Genres,
                                                              true, false, false,
                                                              this, ProgressBar, m_bw, e))
            {
                e.Cancel = true;
            }
        }
Exemplo n.º 7
0
        private void bw_DoWork(object sender, DoWorkEventArgs e)
        {
            Cursor.Current = Cursors.WaitCursor;
            FB2DescriptionCorrector fB2Corrector = null;

            foreach (FB2ItemInfo Info in m_SequencesFB2InfoList)
            {
                FictionBook fb2 = Info.FictionBook;
                if (fb2 != null)
                {
                    fB2Corrector = new FB2DescriptionCorrector(fb2);
                    fB2Corrector.recoveryDescriptionNode();

                    XmlNode xmlTI = fb2.getTitleInfoNode(TitleInfoEnum.TitleInfo);
                    if (xmlTI != null)
                    {
                        if (RemoveRadioButton.Checked || ReplaceRadioButton.Checked)
                        {
                            // удаление всех Серий
                            foreach (XmlNode node in fb2.getSequencesNode(TitleInfoEnum.TitleInfo))
                            {
                                xmlTI.RemoveChild(node);
                            }
                        }
                        if (AddRadioButton.Checked || ReplaceRadioButton.Checked)
                        {
                            // добавление новой Серии
                            xmlTI.AppendChild(
                                fB2Corrector.makeSequenceNode(SequencesTextBox.Text.Trim(), NumberTextBox.Text.Trim())
                                );
                        }
                        // сохранение fb2 файла
                        if (!Directory.Exists(m_TempDir))
                        {
                            Directory.CreateDirectory(m_TempDir);
                        }
                        string NewPath = Info.IsFromZip ? Info.FilePathIfFromZip : Info.FilePathSource;
                        fb2.saveToFB2File(NewPath, false);
                        if (Info.IsFromZip)
                        {
                            WorksWithBooks.zipMoveTempFB2FileTo(m_sharpZipLib, NewPath, Info.FilePathSource);
                        }
                        if (Info.IsFromZip && File.Exists(NewPath))
                        {
                            File.Delete(NewPath);
                        }
                    }
                }
                m_bw.ReportProgress(1);
                ProgressBar.Update();
            }
            Cursor.Current = Cursors.Default;
        }
Exemplo n.º 8
0
        /// <summary>
        /// Сравнение 2-х файлов: fb2, fb2 из zip или fb2 из fbz
        /// </summary>
        /// <param name="DiffPath">Путь к diff-программе сравнения fb2 файла</param>
        /// <param name="FB2File1Path">Путь к 1-му исходному fb2, zip или fbz-файлу</param>
        /// <param name="FB2File2Path">Путь ко 2-му исходному fb2, zip или fbz-файлу</param>
        /// <param name="TempDirForFile1">Путь к временной папке для 1-го распакованного fb2 файла </param>
        /// <param name="TempDirForFile2">Путь к временной папке для 2-го распакованного fb2 файла </param>
        public static void DiffFB2(string DiffPath, string FB2File1Path, string FB2File2Path, string TempDirForFile1, string TempDirForFile2)
        {
            Cursor.Current = Cursors.WaitCursor;
            string TempFile1Path = null;
            string TempFile2Path = null;

            // создание путей (или распаковка) к исходным fb2 файлам, участвующим в сравнении
            if (FilesWorker.isFB2File(FB2File1Path))
            {
                TempFile1Path = FB2File1Path;
            }
            else if (FilesWorker.isFB2Archive(FB2File1Path))
            {
                TempFile1Path = getFileFromZipFBZ(FB2File1Path, TempDirForFile1);
            }

            if (FilesWorker.isFB2File(FB2File2Path))
            {
                TempFile2Path = FB2File2Path;
            }
            else if (FilesWorker.isFB2Archive(FB2File2Path))
            {
                TempFile2Path = getFileFromZipFBZ(FB2File2Path, TempDirForFile2);
            }

            // Сравнение файлов
            if (!string.IsNullOrWhiteSpace(TempFile1Path) && !string.IsNullOrWhiteSpace(TempFile2Path))
            {
                FilesWorker.StartDiff(true, DiffPath, TempFile1Path, TempFile2Path);
            }

            // завершенн работы (перепаковка файла(ов), если он(они) были извлечены из архива)
            if (FilesWorker.isFB2Archive(FB2File1Path) && !string.IsNullOrWhiteSpace(TempFile1Path))
            {
                WorksWithBooks.zipMoveTempFB2FileTo(m_sharpZipLib, TempFile1Path, FB2File1Path);
            }
            if (FilesWorker.isFB2Archive(FB2File2Path) && !string.IsNullOrWhiteSpace(TempFile2Path))
            {
                WorksWithBooks.zipMoveTempFB2FileTo(m_sharpZipLib, TempFile2Path, FB2File2Path);
            }

            // удаление временных файлов, если они есть
            FilesWorker.RemoveDir(TempDirForFile1);
            FilesWorker.RemoveDir(TempDirForFile2);
            Cursor.Current = Cursors.Default;
        }
Exemplo n.º 9
0
        private void bw_DoWork(object sender, DoWorkEventArgs e)
        {
            Cursor.Current = Cursors.WaitCursor;
            FB2DescriptionCorrector fB2Corrector = null;

            foreach (FB2ItemInfo Info in m_LangFB2InfoList)
            {
                FictionBook fb2 = Info.FictionBook;
                if (fb2 != null)
                {
                    fB2Corrector = new FB2DescriptionCorrector(fb2);
                    fB2Corrector.recoveryDescriptionNode();

                    XmlNode xmlTI = fb2.getTitleInfoNode(TitleInfoEnum.TitleInfo);
                    if (xmlTI != null)
                    {
                        xmlTI.ReplaceChild(
                            fB2Corrector.makeLangNode(LangComboBox.Text.Substring(LangComboBox.Text.IndexOf('(') + 1, 2)),
                            fb2.getLangNode(TitleInfoEnum.TitleInfo)
                            );

                        // сохранение fb2 файла
                        if (!Directory.Exists(m_TempDir))
                        {
                            Directory.CreateDirectory(m_TempDir);
                        }
                        string NewPath = Info.IsFromZip ? Info.FilePathIfFromZip : Info.FilePathSource;
                        fb2.saveToFB2File(NewPath, false);
                        if (Info.IsFromZip)
                        {
                            WorksWithBooks.zipMoveTempFB2FileTo(m_sharpZipLib, NewPath, Info.FilePathSource);
                        }
                        if (Info.IsFromZip && File.Exists(NewPath))
                        {
                            File.Delete(NewPath);
                        }
                    }
                }
                m_bw.ReportProgress(1);
                ProgressBar.Update();
            }
            Cursor.Current = Cursors.Default;
        }
Exemplo n.º 10
0
 /// <summary>
 /// Правка fb2 и перепаковка fb2 из zip, fbz
 /// </summary>
 /// <param name="SourceFilePath">Путь к исходному fb2, zip или fbz-файлу</param>
 /// <param name="FB2ProgramPath">Путь к программе правки fb2 файла</param>
 public static void StartFB2_FBZForEdit(string SourceFilePath, string FB2ProgramPath)
 {
     Cursor.Current = Cursors.WaitCursor;
     if (FilesWorker.isFB2Archive(SourceFilePath))
     {
         string TempFileFromZipPath = getFileFromZipFBZ(SourceFilePath, m_TempDir);
         if (!string.IsNullOrWhiteSpace(TempFileFromZipPath))
         {
             FilesWorker.StartFile(true, FB2ProgramPath, TempFileFromZipPath);
             WorksWithBooks.zipMoveTempFB2FileTo(m_sharpZipLib, TempFileFromZipPath, SourceFilePath);
             FilesWorker.RemoveDir(m_TempDir);
         }
     }
     else
     {
         FilesWorker.StartFile(true, FB2ProgramPath, SourceFilePath);
     }
     Cursor.Current = Cursors.Default;
 }
Exemplo n.º 11
0
        public EditGenreInfoForm(ref IList <FB2ItemInfo> GenreFB2InfoList)
        {
            InitializeComponent();
            initializeBackgroundWorker();

            this.Text         += String.Format(" : {0} книг", GenreFB2InfoList.Count);
            m_GenreFB2InfoList = GenreFB2InfoList;

            // формирование Списка Групп Жанров
            WorksWithBooks.makeListGenresGroups(GroupComboBox);

            // загрузка Жанров для правки
            loadGenresFromFB2Files(TitleInfoEnum.TitleInfo);

            ControlPanel.Enabled      = true;
            GenresSchemePanel.Enabled = true;
            GenreWorkPanel.Enabled    = true;

            ProgressBar.Maximum = GenreFB2InfoList.Count;
        }
Exemplo n.º 12
0
 // =============================================================================================
 //                          ВСПОМОГАТЕЛЬНЫЕ МЕТОДЫ ДЛЯ 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;
             }
         }
     }
 }
Exemplo n.º 13
0
        // генерация списка файлов с описанием из метаданных
        private void bw_DoWork(object sender, DoWorkEventArgs e)
        {
            m_dtStart = DateTime.Now;
            FB2UnionGenres fb2Genres = new FB2UnionGenres();

            if (!m_isCreateItems)
            {
                // отображение/скрытие метаданных данных книг в Списке Сортировщика
                if (m_listViewFB2Files.Items.Count > 0)
                {
                    ProgressBar.Maximum = m_listViewFB2Files.Items.Count;
                    if (
                        !WorksWithBooks.viewOrHideBookMetaDataLocal(
                            m_listViewFB2Files, ref fb2Genres,
                            m_isTagsView, m_bw, e
                            )
                        )
                    {
                        e.Cancel = true;
                    }
                }
            }
            else
            {
                // генерация списка файлов - создание итемов listViewSource
                if (
                    !WorksWithBooks.generateBooksListWithMetaData(
                        m_listViewFB2Files, m_dirPath, ref fb2Genres,
                        m_isTagsView, true, false, this, ProgressBar, m_bw, e
                        )
                    )
                {
                    e.Cancel = true;
                }
            }
        }
Exemplo n.º 14
0
        private void bw_DoWork(object sender, DoWorkEventArgs e)
        {
            Cursor.Current = Cursors.WaitCursor;
            FB2DescriptionCorrector fB2Corrector = null;

            foreach (FB2ItemInfo Info in m_AuthorFB2InfoList)
            {
                FictionBook fb2 = Info.FictionBook;
                if (fb2 != null)
                {
                    // восстанавление раздела description до структуры с необходимыми элементами для валидности
                    fB2Corrector = new FB2DescriptionCorrector(fb2);
                    fB2Corrector.recoveryDescriptionNode();

                    IList <XmlNode> xmlNewAuthors = makeAuthorNode(Enums.AuthorEnum.AuthorOfBook, ref fb2, AuthorsListView);
                    if (xmlNewAuthors != null)
                    {
                        XmlNodeList xmlAuthorList = fb2.getAuthorNodes(TitleInfoEnum.TitleInfo);
                        if (xmlAuthorList != null)
                        {
                            XmlNode xmlBookTitleNode = fb2.getBookTitleNode(TitleInfoEnum.TitleInfo);
                            if (xmlBookTitleNode != null)
                            {
                                XmlNode xmlTINode = fb2.getTitleInfoNode(TitleInfoEnum.TitleInfo);
                                if (xmlTINode != null)
                                {
                                    // удаление старых данных Авторов
                                    foreach (XmlNode Author in xmlAuthorList)
                                    {
                                        xmlTINode.RemoveChild(Author);
                                    }
                                    // добавление новых данных Авторов
                                    foreach (XmlNode Author in xmlNewAuthors)
                                    {
                                        xmlTINode.InsertBefore(Author, xmlBookTitleNode);
                                    }

                                    // сохранение fb2 файла
                                    if (!Directory.Exists(m_TempDir))
                                    {
                                        Directory.CreateDirectory(m_TempDir);
                                    }
                                    string NewPath = Info.IsFromZip ? Info.FilePathIfFromZip : Info.FilePathSource;
                                    fb2.saveToFB2File(NewPath, false);
                                    if (Info.IsFromZip)
                                    {
                                        WorksWithBooks.zipMoveTempFB2FileTo(m_sharpZipLib, NewPath, Info.FilePathSource);
                                    }
                                    if (Info.IsFromZip && File.Exists(NewPath))
                                    {
                                        File.Delete(NewPath);
                                    }
                                }
                            }
                        }
                    }
                }
                m_bw.ReportProgress(1);
                ProgressBar.Update();
            }
            Cursor.Current = Cursors.Default;
        }
Exemplo n.º 15
0
 // загрузка Авторов для правки
 private void loadAuthorsFromFB2Files()
 {
     foreach (FB2ItemInfo Info in m_AuthorFB2InfoList)
     {
         if (Info.FictionBook != null)
         {
             IList <Author> AuthorsList = Info.FictionBook.TIAuthors;
             if (AuthorsList != null)
             {
                 foreach (Author a in AuthorsList)
                 {
                     if (a != null)
                     {
                         if (!WorksWithBooks.authorIsExist(AuthorsListView, a))
                         {
                             ListViewItem lvi = new ListViewItem("");
                             if (a.LastName != null)
                             {
                                 lvi.Text = !string.IsNullOrEmpty(a.LastName.Value) ? a.LastName.Value : string.Empty;
                             }
                             if (a.FirstName != null)
                             {
                                 lvi.SubItems.Add(!string.IsNullOrEmpty(a.FirstName.Value) ? a.FirstName.Value : string.Empty);
                             }
                             else
                             {
                                 lvi.SubItems.Add(string.Empty);
                             }
                             if (a.MiddleName != null)
                             {
                                 lvi.SubItems.Add(!string.IsNullOrEmpty(a.MiddleName.Value) ? a.MiddleName.Value : string.Empty);
                             }
                             else
                             {
                                 lvi.SubItems.Add(string.Empty);
                             }
                             if (a.NickName != null)
                             {
                                 lvi.SubItems.Add(!string.IsNullOrEmpty(a.NickName.Value) ? a.NickName.Value : string.Empty);
                             }
                             else
                             {
                                 lvi.SubItems.Add(string.Empty);
                             }
                             if (a.HomePages != null)
                             {
                                 lvi.SubItems.Add(StringProcessing.makeStringFromListItems(a.HomePages));
                             }
                             else
                             {
                                 lvi.SubItems.Add(string.Empty);
                             }
                             if (a.Emails != null)
                             {
                                 lvi.SubItems.Add(StringProcessing.makeStringFromListItems(a.Emails));
                             }
                             else
                             {
                                 lvi.SubItems.Add(string.Empty);
                             }
                             lvi.SubItems.Add(!string.IsNullOrEmpty(a.ID) ? a.ID : string.Empty);
                             AuthorsListView.Items.Add(lvi);
                         }
                     }
                 }
             }
         }
     }
 }
Exemplo n.º 16
0
 void GroupComboBoxSelectedIndexChanged(object sender, EventArgs e)
 {
     // формирование Списка Жанров в контролы, в зависимости от Группы
     WorksWithBooks.makeListGenres(GenresComboBox, GroupComboBox.Text);
 }
Exemplo n.º 17
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);
        }