void GenreAddButtonClick(object sender, EventArgs e)
 {
     if (!MiscListView.isExistListViewItem(GenresListView, GenresComboBox.Text))
     {
         ListViewItem lvi = new ListViewItem(GenresComboBox.Text);
         lvi.SubItems.Add(MatchMaskedTextBox.Text.Trim());
         GenresListView.Items.Add(lvi);
         MatchMaskedTextBox.Clear();
     }
 }
 // =============================================================================================
 //                                      Анализатор копий книг
 // =============================================================================================
 #region Анализатор копий книг
 // пометить в выбранной группе все "старые" книги
 private void CheckAllOldBooksInGroup(CompareModeEnum mode, ref BackgroundWorker bw, ref DoWorkEventArgs e)
 {
     ListView.SelectedListViewItemCollection si = m_lvResult.SelectedItems;
     if (si.Count > 0)
     {
         // группа для выделенной книги
         ListViewGroup lvg = si[0].Group;
         MiscListView.CheckAllListViewItemsInGroup(lvg, false);
         _CheckAllOldBooksInGroup(mode, lvg, false, ref bw, ref e);
     }
 }
 void GenreDownButtonClick(object sender, EventArgs e)
 {
     if (GenresListView.Items.Count > 0 && GenresListView.SelectedItems.Count > 0)
     {
         if (GenresListView.SelectedItems.Count == 1)
         {
             MiscListView.moveDownSelectedItem(GenresListView);
         }
         else
         {
             MessageBox.Show("Выберите только один Жанр для перемещения!", m_sTitle, MessageBoxButtons.OK, MessageBoxIcon.Warning);
         }
     }
     GenresListView.Select();
 }
 void AuthorDownButtonClick(object sender, EventArgs e)
 {
     if (AuthorsListView.Items.Count > 0 && AuthorsListView.SelectedItems.Count > 0)
     {
         if (AuthorsListView.SelectedItems.Count == 1)
         {
             MiscListView.moveDownSelectedItem(AuthorsListView);
         }
         else
         {
             MessageBox.Show("Выберите только одного Автора для перемещения!", m_sTitle, MessageBoxButtons.OK, MessageBoxIcon.Warning);
         }
     }
     AuthorsListView.Select();
 }
        // пометить в каждой группе все "старые" книги
        private void CheckAllOldBooksInAllGroups(CompareModeEnum mode, ref BackgroundWorker bw, ref DoWorkEventArgs e)
        {
            int iter = 0;

            ProgressBar.Maximum = m_lvResult.Groups.Count;
            MiscListView.UnCheckAllListViewItems(m_lvResult.CheckedItems);
            // перебор всех групп
            foreach (ListViewGroup lvg in m_lvResult.Groups)
            {
                if ((bw.CancellationPending))
                {
                    e.Cancel = true;
                    return;
                }
                // перебор всех книг в выбранной группе
                _CheckAllOldBooksInGroup(mode, lvg, true, ref bw, ref e);
                bw.ReportProgress(++iter);
            }
        }
Exemple #6
0
        // поиск одинаковых fb2-файлов
        private void bw_DoWork(object sender, DoWorkEventArgs e)
        {
            m_dtStart = DateTime.Now;
            BackgroundWorker worker = sender as BackgroundWorker;

            ControlPanel.Enabled = false;
            m_FilesList.Clear();

            if (string.IsNullOrEmpty(m_fromXmlPath))
            {
                /* непрерывный поиск */
                StatusLabel.Text += "Создание списка файлов для поиска копий fb2 книг...\r";
                List <string> lDirList = new List <string>();

                // сканировать все подпапки исходной папки
                m_AllDirs  = FilesWorker.recursionDirsSearch(m_SourceDir, ref lDirList, true);
                m_AllFiles = FilesWorker.makeFilesListFromDirs(ref worker, ref e, ref lDirList, ref m_FilesList, true);

                // проверка, есть ли хоть один файл в папке для сканирования
                if (m_AllFiles == 0)
                {
                    MessageBox.Show("В папке сканирования не найдено ни одного файла!\nРабота прекращена.",
                                    m_sMessTitle, MessageBoxButtons.OK, MessageBoxIcon.Information);
                    return;
                }

                this.Text        += String.Format(": Всего {0} каталогов; {1} файлов", m_AllDirs, m_AllFiles);
                StatusLabel.Text += String.Format("Осталось проверить {0} книг...\r", m_AllFiles);
                lDirList.Clear();
            }
            else
            {
                /* возобновление поиска */
                // загрузка данных из xml
                StatusLabel.Text += "Возобновление поиска невалидных fb2 книг из xml файла:\r";
                StatusLabel.Text += m_fromXmlPath + "\r";
                StatusLabel.Text += "Загрузка списка непроверенных книг из xml файла...\r";
                XElement xTree = XElement.Load(m_fromXmlPath);

                //загрузка данных о ходе сравнения
                XElement xCompareData = xTree.Element("SearchData");
                m_AllDirs  = Convert.ToInt32(xCompareData.Element("AllDirs").Value);
                m_AllFiles = Convert.ToInt32(xCompareData.Element("AllFiles").Value);
                this.Text += String.Format(": Всего {0} каталогов; {1} файлов", m_AllDirs, m_AllFiles);

                // заполнение списка необработанных файлов
                IEnumerable <XElement> files = xTree.Element("NotWorkingFiles").Elements("File");
                int NotWorkingFiles          = files.ToList().Count;
                StatusLabel.Text   += String.Format("Осталось проверить {0} книг...\r", NotWorkingFiles.ToString());
                ProgressBar.Maximum = NotWorkingFiles;
                int i = 0;
                foreach (XElement element in files)
                {
                    m_FilesList.Add(element.Value);
                    worker.ReportProgress(i++);
                }

                // загрузка из xml-файла в хэш-лист данных о невалидных книгах
                StatusLabel.Text   += "Создание визуального списка невалидных книг из xml файла...\r";
                files               = xTree.Element("FB2NotValidate").Elements("File");
                ProgressBar.Maximum = files.ToList().Count;
                i = 0;
                foreach (XElement element in files)
                {
                    if ((worker.CancellationPending))
                    {
                        e.Cancel = true;
                        return;
                    }
                    createNotValidateBookItem(element.Value, m_fb2Genres, m_fv2Validator, m_sharpZipLib);
                    worker.ReportProgress(i++);
                }
            }

            ControlPanel.Enabled = true;

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

            // Создание списка невалидных fb2-книг
            searchNotValidateFiles(sender, e, m_FilesList);

            if (m_autoResizeColumns)
            {
                MiscListView.AutoResizeColumns(m_listViewFB2Files);
            }
        }
 // Отображение результата поиска сравнения
 private void ViewDupProgressData()
 {
     MiscListView.ListViewStatus(m_lvFilesCount, (int)FilesCountViewDupCollumnEnum.AllGroups, m_StatusView.Group);
     MiscListView.ListViewStatus(m_lvFilesCount, (int)FilesCountViewDupCollumnEnum.AllBooksInAllGroups, m_StatusView.AllFB2InGroups);
 }
        // загрузка из xml-файла в хэш таблицу данных о копиях книг
        private void loadCopiesListFromXML(ref BackgroundWorker bw, ref DoWorkEventArgs e, string FromXML)
        {
            XElement xmlTree = XElement.Load(FromXML);

            // выставляем режим сравнения
            m_cboxMode.SelectedIndex = Convert.ToInt16(xmlTree.Element("CompareMode").Attribute("index").Value);

            // устанавливаем данные настройки поиска-сравнения
            m_tboxSourceDir.Text      = xmlTree.Element("SourceDir").Value;
            m_chBoxScanSubDir.Checked = Convert.ToBoolean(xmlTree.Element("Settings").Element("ScanSubDirs").Value);

            //загрузка данных о ходе сравнения
            XElement compareData = xmlTree.Element("CompareData");

            m_StatusView.Group          = Convert.ToInt32(compareData.Element("Groups").Value);
            m_StatusView.AllFB2InGroups = Convert.ToInt32(compareData.Element("AllFB2InGroups").Value);

            ViewDupProgressData();

            // данные поиска
            Hashtable     htBookGroups = new Hashtable(); // хеш-таблица групп одинаковых книг
            ListViewGroup lvg          = null;            // группа одинаковых книг
            ListViewItem  lvi          = null;

            ProgressBar.Maximum = Convert.ToInt32(xmlTree.Element("Groups").Attribute("books").Value);
            IEnumerable <XElement> Groups = xmlTree.Element("Groups").Elements("Group");
            // перебор всех групп копий
            int i = 0;

            foreach (XElement Group in Groups)
            {
                if ((bw.CancellationPending))
                {
                    e.Cancel = true;
                    return;
                }
                string GroupName = Group.Attribute("name").Value;
                // перебор всех книг в группе
                IEnumerable <XElement> books = Group.Elements("Book");
                foreach (XElement book in books)
                {
                    // в список - только существующие на диске книги
                    if (File.Exists(book.Element("Path").Value))
                    {
                        string lviForeColor = book.Element("ForeColor").Value;
                        string lviBackColor = book.Element("BackColor").Value;
                        lvg           = new ListViewGroup(GroupName);
                        lvi           = new ListViewItem(book.Element("Path").Value);
                        lvi.ForeColor = Color.FromName(lviForeColor);
                        lvi.BackColor = Color.FromName(lviBackColor);
                        lvi.SubItems.Add(book.Element("BookTitle").Value);
                        lvi.SubItems.Add(book.Element("Authors").Value);
                        lvi.SubItems.Add(book.Element("Genres").Value);
                        lvi.SubItems.Add(book.Element("BookLang").Value);
                        lvi.SubItems.Add(book.Element("BookID").Value);
                        lvi.SubItems.Add(book.Element("Version").Value);
                        lvi.SubItems.Add(book.Element("Encoding").Value);
                        lvi.SubItems.Add(book.Element("Validation").Value);
                        lvi.SubItems.Add(book.Element("FileLength").Value);
                        lvi.SubItems.Add(book.Element("FileCreationTime").Value);
                        lvi.SubItems.Add(book.Element("FileLastWriteTime").Value);
                        // заносим группу в хеш, если она там отсутствует
                        AddBookGroupInHashTable(ref htBookGroups, ref lvg);
                        // присваиваем группу книге
                        m_listViewFB2Files.Groups.Add((ListViewGroup)htBookGroups[GroupName]);
                        lvi.Group   = (ListViewGroup)htBookGroups[GroupName];
                        lvi.Checked = Convert.ToBoolean(book.Element("IsChecked").Value);
                        m_listViewFB2Files.Items.Add(lvi);
                    }
                    else
                    {
                        --m_StatusView.AllFB2InGroups;
                    }
                    bw.ReportProgress(++i);
                }
            }
            ViewDupProgressData();
            m_LastSelectedItem = Convert.ToInt32(xmlTree.Element("SelectedItem").Value);
            MiscListView.SelectedItemEnsureVisible(m_listViewFB2Files, m_LastSelectedItem == -1 ? 0 : m_LastSelectedItem);
        }
        // загрузка из xml-файла в хэш таблицу данных о копиях книг
        private void loadListFromXML(ref BackgroundWorker bw, ref DoWorkEventArgs e, string FromXML)
        {
            XElement xmlTree = XElement.Load(FromXML);

            if (xmlTree != null)
            {
                XElement xmlBooks = xmlTree.Element("Books");
                if (xmlBooks != null)
                {
                    ProgressBar.Maximum = Convert.ToInt32(xmlBooks.Attribute("count").Value);
                    // устанавливаем данные настройки поиска-сравнения
                    m_textBoxAddress.Text = xmlTree.Element("SourceDir").Value;
                    // перебор книг
                    int                    i     = 0;
                    ListViewItem           lvi   = null;
                    IEnumerable <XElement> Books = xmlBooks.Elements("Book");
                    foreach (XElement book in Books)
                    {
                        if ((bw.CancellationPending))
                        {
                            e.Cancel = true;
                            return;
                        }
                        string BookPath = book.Attribute("path").Value;
                        string type     = book.Attribute("type").Value;
                        // в список - только существующие на диске книги и каталоги
                        bool IsExist = false;
                        if (type == "dir")
                        {
                            IsExist = Directory.Exists(BookPath) ? true : false;
                        }
                        else
                        {
                            IsExist = File.Exists(BookPath) ? true : false;
                        }
                        if (IsExist)
                        {
                            string FileName   = book.Element("FileName").Value;
                            string sForeColor = book.Element("ForeColor").Value;
                            string sBackColor = book.Element("BackColor").Value;
                            if (type == "dir")
                            {
                                if (FileName == "..")
                                {
                                    lvi     = new ListViewItem(FileName, 3);
                                    lvi.Tag = new ListViewItemType("dUp", BookPath);
                                }
                                else
                                {
                                    lvi     = new ListViewItem(FileName, 0);
                                    lvi.Tag = new ListViewItemType("d", BookPath);
                                }
                            }
                            else
                            {
                                lvi     = new ListViewItem(FileName, FilesWorker.isFB2File(BookPath) ? 1 : 2);
                                lvi.Tag = new ListViewItemType("f", BookPath);
                            }
                            lvi.ForeColor = Color.FromName(sForeColor);
                            lvi.BackColor = Color.FromName(sBackColor);
                            lvi.SubItems.Add(book.Element("BookTitle").Value);
                            lvi.SubItems.Add(book.Element("Authors").Value);
                            lvi.SubItems.Add(book.Element("Genres").Value);
                            lvi.SubItems.Add(book.Element("Sequence").Value);
                            lvi.SubItems.Add(book.Element("Lang").Value);
                            lvi.SubItems.Add(book.Element("BookID").Value);
                            lvi.SubItems.Add(book.Element("Version").Value);
                            lvi.SubItems.Add(book.Element("Encoding").Value);
                            lvi.SubItems.Add(book.Element("Validation").Value);
                            lvi.SubItems.Add(book.Element("Format").Value);
                            lvi.SubItems.Add(book.Element("FileLength").Value);
                            lvi.SubItems.Add(book.Element("FileCreationTime").Value);
                            lvi.SubItems.Add(book.Element("FileLastWriteTime").Value);
                            lvi.Checked = Convert.ToBoolean(book.Element("IsChecked").Value);
                            m_listViewFB2Files.Items.Add(lvi);
                        }
                        bw.ReportProgress(++i);
                    }
                    m_LastSelectedItem = Convert.ToInt32(xmlTree.Element("SelectedItem").Value);
                    MiscListView.SelectedItemEnsureVisible(m_listViewFB2Files, m_LastSelectedItem == -1 ? 0 : m_LastSelectedItem);
                }
            }
        }
Exemple #10
0
 void AuthorsListViewColumnClick(object sender, ColumnClickEventArgs e)
 {
     MiscListView.SortColumnClick(AuthorsListView, m_lvwColumnSorter, e);
 }
Exemple #11
0
 void AuthorDeleteAllButtonClick(object sender, EventArgs e)
 {
     MiscListView.deleteAllItems(AuthorsListView, m_sTitle, "Авторов Книг");
 }
 void GenreDeleteAllButtonClick(object sender, EventArgs e)
 {
     MiscListView.deleteAllItems(GenresListView, m_sTitle, "Жанров");
 }