Ejemplo n.º 1
0
        // загрузка из 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);
        }
Ejemplo n.º 2
0
        // загрузка из 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);
                }
            }
        }