/// <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); } } } }
// загрузка Жанров для правки 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); } } } } } } } }
// возобновление Автокорректировки - загрузка отчета о необработанных книгах из 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; } }
// генерация списка файлов - создание итемов 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; } }
void GenresListViewSelectedIndexChanged(object sender, EventArgs e) { // Select Группу жанра и сам Жанр в выпадающих списках по выделенному Жанру в списке if (GenresListView.Items.Count > 0 && GenresListView.SelectedItems.Count == 1) { ListViewItem SelItem = GenresListView.SelectedItems[0]; FB2UnionGenres fb2g = new FB2UnionGenres(); string GenreCode = SelItem.Text.Substring(SelItem.Text.IndexOf('(') + 1); GenreCode = GenreCode.Substring(0, GenreCode.Length - 1); string GenreGroup = fb2g.GetFBGenreGroup(GenreCode); GroupComboBox.Text = GenreGroup; GenresComboBox.Text = SelItem.Text; } }
// название жанра (код) public static string cyrillicGenreNameAndCode(string GenreCodes, ref FB2UnionGenres fb2g) { if (GenreCodes.IndexOf(';') != -1) { string ret = string.Empty; string[] Codes = GenreCodes.Split(';'); foreach (string code in Codes) { string Name = fb2g.GetFBGenreName(code.Trim()); ret += (string.IsNullOrEmpty(Name) ? "?" : Name) + " (" + code.Trim() + ")" + "; "; ret.Trim(); } return(ret.Substring(0, ret.LastIndexOf(";")).Trim()); } return(fb2g.GetFBGenreName(GenreCodes) + " (" + GenreCodes + ")"); }
createSubItemsWithMetaData( string FilePath, string SourceFileExt, ListViewItem Item, ref FB2UnionGenres FB2FullSortGenres, ref FB2Validator fv2Validator ) { FB2BookDescription bd = null; try { bd = new FB2BookDescription(FilePath); } catch (System.Exception ex) { Debug.DebugMessage( null, ex, "FB2NotValidateForm.createSubItemsWithMetaData(): Создание заполненных subitems для невалидных книг для Корректора." ); } string valid = bd != null ? bd.IsValidFB2Union : fv2Validator.ValidatingFB2File(FilePath); if (!string.IsNullOrEmpty(valid)) { valid = "Нет"; Item.ForeColor = Colors.FB2NotValidForeColor; } else { return(null); } return(new ListViewItem.ListViewSubItem[] { new ListViewItem.ListViewSubItem(Item, bd != null ? bd.TIBookTitle : string.Empty), new ListViewItem.ListViewSubItem(Item, bd != null ? bd.TIAuthors : string.Empty), new ListViewItem.ListViewSubItem(Item, bd != null ? GenresWorker.cyrillicGenreName(bd.TIGenres, ref FB2FullSortGenres) : string.Empty), new ListViewItem.ListViewSubItem(Item, bd != null ? bd.TISequences : string.Empty), new ListViewItem.ListViewSubItem(Item, bd != null ? bd.TILang : string.Empty), new ListViewItem.ListViewSubItem(Item, bd != null ? bd.DIID : string.Empty), new ListViewItem.ListViewSubItem(Item, bd != null ? bd.DIVersion : string.Empty), new ListViewItem.ListViewSubItem(Item, bd != null ? bd.Encoding : string.Empty), new ListViewItem.ListViewSubItem(Item, valid), new ListViewItem.ListViewSubItem(Item, SourceFileExt), new ListViewItem.ListViewSubItem(Item, bd != null ? bd.FileLength : string.Empty), new ListViewItem.ListViewSubItem(Item, bd != null ? bd.FileCreationTime : string.Empty), new ListViewItem.ListViewSubItem(Item, bd != null ? bd.FileLastWriteTime : string.Empty) }); }
// название жанра по его коду public static string cyrillicGenreName(string GenreCodes, ref FB2UnionGenres fb2g) { if (GenreCodes.IndexOf(';') != -1) { string ret = string.Empty; string[] Codes = GenreCodes.Split(';'); foreach (string code in Codes) { string Name = fb2g.GetFBGenreName(code.Trim()); ret += (string.IsNullOrEmpty(Name) ? "?" : Name) + "; "; ret.Trim(); } string ReturnValue = ret.Substring(0, ret.LastIndexOf(";")).Trim(); return(ReturnValue.IndexOf(";") != 0 ? ReturnValue : GenreCodes); } string RetValue = fb2g.GetFBGenreName(GenreCodes); return(!string.IsNullOrEmpty(RetValue) ? RetValue : GenreCodes); }
// генерация списка файлов с описанием из метаданных 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; } } }