// загрузка из 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); } } }