public static void _gebugTestIsSameBookData(bool CompareAndMiddleName) { FictionBook fb2_1 = new FictionBook("1.fb2"); FictionBook fb2_2 = new FictionBook("2.fb2"); BookData bd1 = new BookData( fb2_1.TIBookTitle, fb2_1.TIAuthors, fb2_1.TIGenres, fb2_1.TILang, fb2_1.DIID, fb2_1.DIVersion, fb2_1.DIAuthors, fb2_1.getFilePath(), fb2_1.getEncoding() ); BookData bd2 = new BookData( fb2_2.TIBookTitle, fb2_2.TIAuthors, fb2_2.TIGenres, fb2_2.TILang, fb2_2.DIID, fb2_2.DIVersion, fb2_2.DIAuthors, fb2_2.getFilePath(), fb2_2.getEncoding() ); if (bd1.isSameBook(bd2, CompareAndMiddleName, false)) { MessageBox.Show("Одинаковые:\n" + "bd1: " + bd1.BookTitle.Value + "\n" + "bd2: " + bd2.BookTitle.Value, "Test - BookData", MessageBoxButtons.OK, MessageBoxIcon.Information); } else { MessageBox.Show("Нет:\n" + "bd1: " + bd1.BookTitle.Value + "\n" + "bd2: " + bd2.BookTitle.Value, "Test - BookData", MessageBoxButtons.OK, MessageBoxIcon.Information); } }
/// <summary> /// Заполнение хеш таблицы данными о fb2-книгах в контексте Авторов с одинаковой Фамилией и инициалами /// </summary> /// <param name="ZipPath">путь к zip-архиву. Если книга - не запакована в zip, то ZipPath = null</param> /// <param name="SrcPath">путь к fb2-файлу</param> /// <param name="htFB2ForAuthorFIO">Хеш Таблица с книгами одинаковых Авторов</param> /// <param name="WithMiddleName">Учитывать ли отчество Авторов (true) или нет (false) при поиске</param> private void MakeFB2AuthorFIOHashTable(string ZipPath, string SrcPath, ref HashtableClass htFB2ForAuthorFIO, bool WithMiddleName) { FictionBook fb2 = null; try { fb2 = new FictionBook(SrcPath); } catch (Exception ex) { Debug.DebugMessage( SrcPath, ex, "Дубликатор.CompareForm.MakeFB2AuthorFIOHashTable(): Заполнение хеш таблицы данными о fb2-книгах в контексте Авторов с одинаковой Фамилией и инициалами." ); _nonOpenedFileList = _compComm.collectBadFB2(!string.IsNullOrEmpty(ZipPath) ? ZipPath : SrcPath); return; } string Encoding = fb2.getEncoding(); if (string.IsNullOrWhiteSpace(Encoding)) { Encoding = "?"; } IList <Author> AuthorsList = fb2.TIAuthors; string sAuthor = "<Автор книги отсутствует>"; if (AuthorsList != null) { foreach (Author a in AuthorsList) { if (a.LastName != null && !string.IsNullOrEmpty(a.LastName.Value)) { sAuthor = a.LastName.Value; } if (a.FirstName != null && !string.IsNullOrEmpty(a.FirstName.Value)) { sAuthor += " " + a.FirstName.Value.Substring(0, 1); } if (WithMiddleName) { if (a.MiddleName != null && !string.IsNullOrEmpty(a.MiddleName.Value)) { sAuthor += " " + a.MiddleName.Value.Substring(0, 1); } } if (a.NickName != null && !string.IsNullOrWhiteSpace(a.NickName.Value)) { sAuthor += a.NickName.Value; } sAuthor = sAuthor.Trim(); // Заполнение хеш таблицы данными о fb2-книгах в контексте Авторов FB2AuthorFIOSetHashTable(fb2, ZipPath, SrcPath, Encoding, sAuthor, ref htFB2ForAuthorFIO); } } else { // Заполнение хеш таблицы данными о fb2-книгах в контексте Авторов FB2AuthorFIOSetHashTable(fb2, ZipPath, SrcPath, Encoding, sAuthor, ref htFB2ForAuthorFIO); } }
/// <summary> /// Заполнение хеш таблицы данными о fb2-книгах в контексте их md5 /// </summary> /// <param name="ZipPath">путь к zip-архиву. Если книга - не запакована в zip, то ZipPath = null</param> /// <param name="SrcPath">путь к fb2-файлу;</param> /// <param name="htFB2ForMd5">Хеш Таблица с книгами с одинаковыми значениями Md5</param> private void MakeFB2Md5HashTable(string ZipPath, string SrcPath, ref HashtableClass htFB2ForMd5) { string md5 = ComputeMD5Checksum(SrcPath); FictionBook fb2 = null; try { fb2 = new FictionBook(SrcPath); } catch (Exception ex) { Debug.DebugMessage( SrcPath, ex, "Дубликатор.CompareForm.MakeFB2Md5HashTable(): Заполнение хеш таблицы данными о fb2-книгах в контексте их md5." ); _nonOpenedFileList = _compComm.collectBadFB2(!string.IsNullOrEmpty(ZipPath) ? ZipPath : SrcPath); return; } string Encoding = fb2.getEncoding(); if (string.IsNullOrWhiteSpace(Encoding)) { Encoding = "?"; } string ID = fb2.DIID; if (ID == null) { return; } if (ID.Trim().Length == 0) { ID = "Тег <id> в этих книгах \"пустой\""; } // данные о книге BookData fb2BookData = new BookData( fb2.TIBookTitle, fb2.TIAuthors, fb2.TIGenres, fb2.TILang, ID, fb2.DIVersion, fb2.DIAuthors, SrcPath, Encoding ); if (ZipPath != null) { fb2BookData.Path = ZipPath; } if (!htFB2ForMd5.ContainsKey(md5)) { // такой книги в числе дублей еще нет FB2FilesDataInGroup fb2f = new FB2FilesDataInGroup(fb2BookData, md5); htFB2ForMd5.Add(md5, fb2f); } else { // такая книга в числе дублей уже есть FB2FilesDataInGroup fb2f = (FB2FilesDataInGroup)htFB2ForMd5[md5]; fb2f.Add(fb2BookData); //htFB2ForMd5[md5] = fb2f; //ИЗБЫТОЧНЫЙ КОД } }
/// <summary> /// Заполнение хеш таблицы данными о fb2-книгах в контексте их Названия /// </summary> /// <param name="ZipPath">путь к zip-архиву. Если книга - не запакована в zip, то ZipPath = null</param> /// <param name="SrcPath">путь к fb2-файлу;</param> /// <param name="htFB2ForBT">Хеш Таблица с книгами с одинаковыми Названиями</param> private void MakeFB2BTHashTable(string ZipPath, string SrcPath, HashtableClass htFB2ForBT) { FictionBook fb2 = null; try { fb2 = new FictionBook(SrcPath); } catch (Exception ex) { Debug.DebugMessage( SrcPath, ex, "Дубликатор.CompareForm.MakeFB2BTHashTable(): Заполнение хеш таблицы данными о fb2-книгах в контексте их Названия." ); _nonOpenedFileList = _compComm.collectBadFB2(!string.IsNullOrEmpty(ZipPath) ? ZipPath : SrcPath); return; } string Encoding = fb2.getEncoding(); if (string.IsNullOrWhiteSpace(Encoding)) { Encoding = "?"; } BookTitle bookTitle = fb2.TIBookTitle; string BT = "<Название книги отсутствует>"; if (bookTitle != null && !string.IsNullOrWhiteSpace(bookTitle.Value)) { BT = bookTitle.Value.Trim(); } // данные о книге BookData fb2BookData = new BookData( bookTitle, fb2.TIAuthors, fb2.TIGenres, fb2.TILang, fb2.DIID, fb2.DIVersion, fb2.DIAuthors, SrcPath, Encoding ); if (ZipPath != null) { fb2BookData.Path = ZipPath; } if (!htFB2ForBT.ContainsKey(BT)) { // такой книги в числе дублей еще нет FB2FilesDataInGroup fb2f = new FB2FilesDataInGroup(fb2BookData, BT); htFB2ForBT.Add(BT, fb2f); } else { // такая книга в числе дублей уже есть FB2FilesDataInGroup fb2f = (FB2FilesDataInGroup)htFB2ForBT[BT]; fb2f.Add(fb2BookData); //htFB2ForBT[sBT] = fb2f; //ИЗБЫТОЧНЫЙ КОД } }
/// <summary> /// Заполнение хеш таблицы данными о fb2-книгах в контексте их ID /// </summary> /// <param name="ZipPath">путь к zip-архиву. Если книга - не запакована в zip, то ZipPath = null</param> /// <param name="SrcPath">путь к fb2-файлу;</param> /// <param name="htFB2ForID">Хеш Таблица с книгами с одинаковыми ID</param> private void MakeFB2IDHashTable(string ZipPath, string SrcPath, ref HashtableClass htFB2ForID) { FictionBook fb2 = null; try { fb2 = new FictionBook(SrcPath); } catch (Exception ex) { Debug.DebugMessage( SrcPath, ex, "Дубликатор.CompareForm.MakeFB2IDHashTable(): Заполнение хеш таблицы данными о fb2-книгах в контексте их ID." ); _nonOpenedFileList = _compComm.collectBadFB2(!string.IsNullOrEmpty(ZipPath) ? ZipPath : SrcPath); return; } string Encoding = fb2.getEncoding(); if (string.IsNullOrWhiteSpace(Encoding)) { Encoding = "?"; } string ID = fb2.DIID; if (string.IsNullOrEmpty(ID) || string.IsNullOrWhiteSpace(ID)) { ID = _compComm.NoOrEmptyBookIDString; } // данные о книге BookData fb2BookData = new BookData( fb2.TIBookTitle, fb2.TIAuthors, fb2.TIGenres, fb2.TILang, ID, fb2.DIVersion, fb2.DIAuthors, SrcPath, Encoding ); if (ZipPath != null) { fb2BookData.Path = ZipPath; } if (!htFB2ForID.ContainsKey(ID)) { // такой книги в числе дублей еще нет FB2FilesDataInGroup fb2f = new FB2FilesDataInGroup(fb2BookData, ID); htFB2ForID.Add(ID, fb2f); } else { // такая книга в числе дублей уже есть FB2FilesDataInGroup fb2f = (FB2FilesDataInGroup)htFB2ForID[ID]; fb2f.Add(fb2BookData); //htFB2ForID[sID] = fb2f; //ИЗБЫТОЧНЫЙ КОД } }