/// <summary> /// Добавление нового фильма /// </summary> /// <param name="newFilmInfo"></param> public void AddFilm(FilmInfo newFilmInfo) { FindDisk(newFilmInfo.Number); this.mFilmInfo.Add(newFilmInfo); SortFilms(); Save(); }
/// <summary> /// Редактирование фильма /// </summary> /// <param name="oldFilmInfo"></param> /// <param name="newFilmInfo"></param> public void EditFilm(FilmInfo oldFilmInfo, FilmInfo newFilmInfo) { FindDisk(newFilmInfo.Number); this.mFilmInfo.RemoveAt(FindFilm(oldFilmInfo)); this.mFilmInfo.Add(newFilmInfo); SortFilms(); Save(); }
public AddEditFilmForm(MainForm mainForm, AddEditState currentState, FilmotecClass filmotecClass, SettingClass settingClass, FilmInfo editFilmInfo) { InitializeComponent(); this.mMainForm = mainForm; this.mCurrentState = currentState; this.mFilmotecClass = filmotecClass; this.mSettingClass = settingClass; this.mOldFilmInfo = editFilmInfo; }
/// <summary> /// Найти фильм по номеру диска и названию /// </summary> private int FindFilm(FilmInfo findFilmInfo) { int findIndex = this.mFilmInfo.TakeWhile(filmInfo => filmInfo.Number != findFilmInfo.Number || filmInfo.Name != findFilmInfo.Name).Count(); if (findIndex == this.mFilmInfo.Count) { throw new MyException( string.Format("Фильм {0} на диске номер {1} не найден", findFilmInfo.Name, findFilmInfo.Number)); } return(findIndex); }
/// <summary> /// Загрузить базы данных из файла /// </summary> /// <returns>Success - true, oherwise - false</returns> private void Load() { this.mDiskInfo = new List <DiskInfo>(); this.mFilmInfo = new List <FilmInfo>(); var fi = new FileInfo(this.mPathDb); if (!fi.Exists) { return; } FileStream fs = File.OpenRead(this.mPathDb); var bytesBuffer = new byte[fs.Length]; fs.Read(bytesBuffer, 0, (int)fs.Length); fs.Close(); fs.Dispose(); byte[] rez = UnpackXML(bytesBuffer); if (rez.Length > 0) { string text = Encoding.GetEncoding("windows-1251").GetString(rez); string[] parseText = text.Split(new[] { "^^!!&&^^" }, StringSplitOptions.None); var diskStr = new string[0]; if (parseText.Length > 0 && parseText[0].Length > 0) { diskStr = parseText[0].Split(new[] { "^!&^" }, StringSplitOptions.None); } var filmStr = new string[0]; if (parseText.Length > 1 && parseText[1].Length > 0) { filmStr = parseText[1].Split(new[] { "^!&^" }, StringSplitOptions.None); } for (int i = 0; i < diskStr.Length; i += 2) { if (i + 1 < diskStr.Length) { var diskInfo = new DiskInfo { Number = Convert.ToInt32(diskStr[i]) }; if (diskStr[i + 1] == "Buy") { diskInfo.Info = DiskType.Buy; } else if (diskStr[i + 1] == "OwnR") { diskInfo.Info = DiskType.OwnR; } else if (diskStr[i + 1] == "OwnRW") { diskInfo.Info = DiskType.OwnRW; } else { diskInfo.Info = DiskType.Empty; } this.mDiskInfo.Add(diskInfo); } } for (int i = 0; i < filmStr.Length; i += 4) { if (i + 3 < filmStr.Length) { GenreType genre = Helper.StringToGenre(filmStr[i + 3]); var filmInfo = new FilmInfo { Number = Convert.ToInt32(filmStr[i]), Name = filmStr[i + 1], Info = filmStr[i + 2], Genre = genre }; this.mFilmInfo.Add(filmInfo); } } } else { throw new MyException("Файл с сохранённой информацией повреждён"); } }
/// <summary> /// Удаление фильма /// </summary> /// <param name="deleteFilmInfo"></param> public void DeleteFilm(FilmInfo deleteFilmInfo) { this.mFilmInfo.RemoveAt(FindFilm(deleteFilmInfo)); SortFilms(); Save(); }
/// <summary> /// Кнопка подтверждения /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void buttonOK_Click(object sender, EventArgs e) { try { Convert.ToInt32(textBoxDiskNumber.Text); } catch { MessageBox.Show("Непонятный номер диска", "Предупреждение", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); textBoxDiskNumber.Focus(); return; } GenreType genreType = Helper.StringToGenre(comboBoxFilterGenre.Text); var newFilmInfo = new FilmInfo { Number = Convert.ToInt32(textBoxDiskNumber.Text), Name = textBoxFilmName.Text, Info = textBoxFilmInfo.Text, Genre = genreType }; try { if (this.mCurrentState == AddEditState.Add) { this.mFilmotecClass.AddFilm(newFilmInfo); if (this.mSettingClass.IsCloseFilmForm) { Close(); } else { if (checkBoxClearFields.Checked) { textBoxFilmInfo.Text = string.Empty; textBoxFilmName.Text = string.Empty; } textBoxFilmName.Focus(); textBoxFilmName.SelectionStart = 0; textBoxFilmName.SelectionLength = textBoxFilmName.Text.Length; } } else { this.mFilmotecClass.EditFilm(this.mOldFilmInfo, newFilmInfo); this.mMainForm.NewFilmName = newFilmInfo.Name; Close(); } } catch (MyException ex) { MessageBox.Show(ex.Message, "Предупреждение", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } catch (Exception ex) { MessageBox.Show("Произошла непредвиденная ошибка: \r\n\r\n" + ex.Message + "\r\n\r\nСообщите разработчикам", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); } }