示例#1
0
        /// <summary>
        /// Хэширование по одинаковым Авторам в пределах сгенерированных групп книг по одинаковым названиям
        /// </summary
        /// <param name="bw">Экземплар фонового обработчика класса BackgroundWorker</param>
        /// <param name="e">Экземпляр класса DoWorkEventArgs</param>
        /// <param name="htFB2ForBT">Заполненная хеш-таблица списками книг по критерию одинакового Названия книг</param>
        /// <param name="htBookTitleAuthors">Заполняемая хеш-таблица списками книг по критерию ( Название книги (Авторы) )</param>
        /// <param name="WithMiddleName">Учитывать ли отчество Авторов (true) или нет (false) при поиске</param>
        /// <returns>Признак непрерывности обработки файлов</returns>
        public bool FilesHashForAuthorsParser(BackgroundWorker bw, DoWorkEventArgs e,
                                              Label StatusLabel, ProgressBar ProgressBar,
                                              HashtableClass htFB2ForBT, HashtableClass htBookTitleAuthors,
                                              bool WithMiddleName)
        {
            StatusLabel.Text   += "Хеширование по Авторам книг...\r";
            ProgressBar.Maximum = htFB2ForBT.Values.Count;
            ProgressBar.Value   = 0;
            // генерация списка ключей хеш-таблицы (для удаления обработанного элемента таблицы)
            List <string> keyList = _compComm.makeSortedKeysForGroups(htFB2ForBT);
            // группировка книг по одинаковым Авторам в пределах сгенерированных Групп книг по одинаковым Названиям
            int i = 0;

            foreach (string key in keyList)
            {
                // разбивка на группы для одинакового Названия по Авторам
                Hashtable htGroupAuthors = FindDupForAuthors((FB2FilesDataInGroup)htFB2ForBT[key], WithMiddleName);
                foreach (FB2FilesDataInGroup fb2List in htGroupAuthors.Values)
                {
                    if (!htBookTitleAuthors.ContainsKey(fb2List.Group))
                    {
                        htBookTitleAuthors.Add(fb2List.Group, fb2List);
                    }
                    else
                    {
                        FB2FilesDataInGroup fb2ListInGroup = (FB2FilesDataInGroup)htBookTitleAuthors[fb2List.Group];
                        fb2ListInGroup.AddRange(fb2List);
                    }
                }

                // удаление обработанной группы книг, сгруппированных по одинаковому названию
                htFB2ForBT.Remove(key);
                bw.ReportProgress(++i);

                if (bw.CancellationPending)
                {
                    e.Cancel = true;
                    return(false);
                }
            }
            return(true);
        }
        /// <summary>
        /// Хэширование fb2-файлов по ID книги в пределах одинаковых Авторов Книги
        /// 10. Автор(ы), Одинаковый Id Книги
        /// </summary
        /// <param name="bw">Экземплар фонового обработчика класса BackgroundWorker</param>
        /// <param name="e">Экземпляр класса DoWorkEventArgs</param>
        /// <param name="htAuthors">Хэш Таблица с книгами по критерию одинаковости их Авторов</param>
        /// <param name="htWorkingBook">Хэш Таблица с книгами по критерию одинаковости их ID</param>
        /// <returns>Признак непрерывности обработки файлов</returns>
        public bool FilesHashForAuthorsBookIDParser(ref BackgroundWorker bw, ref DoWorkEventArgs e,
                                                    Label StatusLabel, ProgressBar ProgressBar,
                                                    ref HashtableClass htBookTitleAuthors, ref HashtableClass htWorkingBook)
        {
            StatusLabel.Text   += "Хэширование по ID книги в пределах одинаковых Авторов...\r";
            ProgressBar.Maximum = htBookTitleAuthors.Count;
            ProgressBar.Value   = 0;
            // генерация списка ключей хеш-таблицы (для удаления обработанного элемента таблицы)
            List <string> keyList = _compComm.makeSortedKeysForGroups(htBookTitleAuthors);
            // группировка книг по одинаковым Id Книги в пределах сгенерированных Групп книг одинаковых Авторов
            int i = 0;

            foreach (string key in keyList)
            {
                // разбивка на группы для одинакового Id книги по Названию и по Авторам
                Hashtable AuthorsTitleBookID = FindDupForAuthorsID((FB2FilesDataInGroup)htBookTitleAuthors[key]);
                foreach (FB2FilesDataInGroup fb2List in AuthorsTitleBookID.Values)
                {
                    if (!htBookTitleAuthors.ContainsKey(fb2List.Group))
                    {
                        htWorkingBook.Add(fb2List.Group, fb2List);
                    }
                    else
                    {
                        FB2FilesDataInGroup fb2ListInGroup = (FB2FilesDataInGroup)htBookTitleAuthors[fb2List.Group];
                        fb2ListInGroup.AddRange(fb2List);
                    }
                }
                // удаление обработанной группы книг, сгруппированных по одинаковому Автору
                htBookTitleAuthors.Remove(key);
                bw.ReportProgress(++i);

                if (bw.CancellationPending)
                {
                    e.Cancel = true;
                    return(false);
                }
            }
            return(true);
        }