Пример #1
0
        public static void LoadDataFromXml()
        {
            if (!Directory.Exists(BackupsFolder))
            {
                Directory.CreateDirectory(BackupsFolder);
            }
            var time_stamp = TimeStamp; // DateTime.Now.ToString().Replace(" ", "_").Replace(":", "_").Replace("/", "_");

            CreateBackupFile(CategoriesFileName, string.Format("categories.{0}.xml", time_stamp));
            Categories = CategoryList.Load(CategoriesFileName);

            CreateBackupFile(AuthorsFileName, string.Format("authorts.{0}.xml", time_stamp));
            Authors = AuthorList.Load(AuthorsFileName);

            foreach (var author in Authors)
            {
                author.CheckID();
            }
        }
Пример #2
0
        public static AuthorList Load(string authorsFileName, bool isBackupLoad)
        {
            AuthorList result;
            bool       isCorrect = false;

            if (!File.Exists(authorsFileName))
            {
                result = new AuthorList();
                result.Retreive();
                result.Save(authorsFileName);
                return(result);
            }

            // .bak файл сохраняем там же, где и основное приложение
            var authorsBakFileName = Path.Combine(AppDomain.CurrentDomain.BaseDirectory,
                                                  Path.GetFileName(authorsFileName) + ".bak");

            try
            {
                // перегоняем файл в память (быстро)
                FileStream fstream = new FileStream(authorsFileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
                byte[]     buffer  = new byte[fstream.Length];
                fstream.Read(buffer, 0, (int)fstream.Length);
                MemoryStream mstream = new MemoryStream(buffer);
                // десериализируем (медленно)
                using (var st = new StreamReader(mstream))
                {
                    var sr = new XmlSerializer(typeof(AuthorList));
                    result = (AuthorList)sr.Deserialize(st);
                }
                isCorrect = true;
            }
            catch
            {
                if (!isBackupLoad && MessageBox.Show("Произошла ошибка при загрузке списка авторов.\r\n" +
                                                     "Попытаться восстановить из резервной копии?\r\n", "ВНИМАНИЕ",
                                                     MessageBoxButton.YesNo,
                                                     MessageBoxImage.Warning, MessageBoxResult.Yes) ==
                    MessageBoxResult.Yes)
                {
                    result = Load(authorsBakFileName, true);
                }
                else
                {
                    result = new AuthorList();
                    result.Retreive();
                }
            }

            // создаем резервную копию
            try
            {
                if (!isBackupLoad && isCorrect)
                {
                    result.Save(authorsBakFileName);
                }
            }
            catch
            {
            }

            return(result);
        }
Пример #3
0
        public static AuthorList Load()
        {
            var result = new AuthorList();

            #region Чтение из БД
            using (var con = new SqlCeConnection("Data Source=" + Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Author.sdf")))
            {
                con.Open();
                using (var com = new SqlCeCommand("Select [Id],[Name],[Url],[DateLine],[isIgnored], [Category] from [Author]", con))
                {
                    var dr = com.ExecuteReader();
                    while (dr.Read())
                    {
                        result.Add(new Author {
                            Id = dr.GetInt32(0), Name = dr.GetString(1), URL = dr.GetString(2), UpdateDate = dr.GetDateTime(3), IsIgnored = dr.GetBoolean(4), Category = dr.GetString(5)
                        });
                    }

                    var aTexts = AuthorText.Read();

                    foreach (var aText in aTexts)
                    {
                        var a = result.Find(aText.IdAuthor);
                        if (a != null)
                        {
                            a.Texts.Add(aText);
                        }
                    }

                    foreach (var a in result)
                    {
                        a.PropertyChanged += AuthorPropertyChanged;
                    }
                }
            }
            result.ListChanged += AuthorListChanged;
            #endregion

            if (result.Count > 0)
            {
                return(result);
            }

            #region Если есть данные в старом файле БД (пусть будет версии 0 с БД), то перегоняем оттуда
            if (File.Exists(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Author.sdf_0")))
            {
                using (var con = new SqlCeConnection("Data Source=" + Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Author.sdf_0")))
                {
                    con.Open();
                    using (
                        var com = new SqlCeCommand("Select [Id],[Name],[Url],[DateLine],[isIgnored] from [Author]", con)
                        )
                    {
                        var dr = com.ExecuteReader();
                        while (dr.Read())
                        {
                            Author a = new Author
                            {
                                Id         = dr.GetInt32(0),
                                Name       = dr.GetString(1),
                                URL        = dr.GetString(2),
                                UpdateDate = dr.GetDateTime(3),
                                IsIgnored  = dr.GetBoolean(4)
                            };
                            result.Add(a);


                            a.Texts = new BindingList <AuthorText>();
                            using (
                                var _com =
                                    new SqlCeCommand(
                                        "Select [Id],[Name],[Url],[SectionName],[DateLine],[Genres],[Description],[Size],[LastSize],[IsNew],[IdAuthor] From [AuthorText] Where IdAuthor=" +
                                        a.Id.ToString(), con))
                            {
                                var _dr = _com.ExecuteReader();
                                while (_dr.Read())
                                {
                                    var aText = new AuthorText();
                                    aText.Read(_dr);
                                    aText.Id = 0;// перегенерим айдишку, чтобы произошло добавление в новую БД
                                    a.Texts.Add(aText);
                                    aText.Save();
                                }
                            }
                        }
                    }

                    foreach (var a in result)
                    {
                        a.Id = 0;// перегенерим айдишку, чтобы произошло добавление в новую БД
                        a.Save();
                        a.PropertyChanged += AuthorPropertyChanged;
                    }
                }

                return(result);
            }
            #endregion

            #region Чтение из XML
            try
            {
                using (var st = new StreamReader(InfoUpdater.AuthorsFileName))
                    result = (AuthorList)(new XmlSerializer(typeof(AuthorList))).Deserialize(st);
            }
            catch
            {
                result = new AuthorList();
                result.Retreive();
            }
            result.ListChanged += new ListChangedEventHandler(AuthorListChanged);

            foreach (var a in result)
            {
                a.Save();
                a.PropertyChanged += AuthorPropertyChanged;
            }
            #endregion
            return(result);
        }