public void RemoveMediaFile(MediaFileDTO video) { string sql = string.Format("Delete from MediaFile where MediaFile.Id = {0}", video.Id); SqliteCommand command = new SqliteCommand(sql, _connection); command.ExecuteNonQuery(); }
public IEnumerable <TV_ProgramDTO> GetPrograms() { List <TV_ProgramDTO> programsToReturn = new List <TV_ProgramDTO>(); SqliteCommand command = new SqliteCommand( "select TVProgram.Id as 'TVProgramId', TVProgram.name as 'ProgramName', " + "TVProgram.Description, TVProgram.Actors, TVProgram.YearEstablished, TVProgram.AvatarSourcePath, " + "MediaFile.Id as 'MediaFileId', MediaFile.name as 'MediaFileName', MediaFile.CompleteName, " + "MediaFile.Format, MediaFile.FrameSize, MediaFile.TimingInFrames, MediaFile.Program_Id " + "from TVProgram left join MediaFile on MediaFile.Program_Id = TVProgram.Id order by TVProgram.Id", _connection); SqliteDataReader reader = command.ExecuteReader();; int PreviousProgramId = -1; TV_ProgramDTO newProgram = new TV_ProgramDTO(); while (reader.Read()) { if (!reader.HasRows) { break; } // Загружаем программы. // Т.к. используется left join, то возможны ситуации когда одна и та же программа содержит 2 видео. // Что бы избежать дублирования введена проверка (запоминаем предыдущий Id и сравниваем с текущим) // 1Program 1Media <--Программу добавляем // 1Program 2Media <--Программу игнорируем // Принимается что -1 это первый запуск // При этом учитывается что произведена сортировка по восходящей по полю Id - "order by TVProgram.Id" int currentProgramId = int.Parse(reader["TVProgramId"].ToString()); if (PreviousProgramId != currentProgramId || PreviousProgramId == -1) { newProgram = new TV_ProgramDTO(); newProgram.Id = int.Parse(reader["TVProgramId"].ToString()); newProgram.Name = reader["ProgramName"].ToString(); newProgram.Description = reader["Description"].ToString(); newProgram.Actors = reader["Actors"].ToString(); newProgram.AvatarSourcePath = reader["AvatarSourcePath"].ToString(); PreviousProgramId = currentProgramId; int.TryParse(reader["YearEstablished"].ToString(), out int tempYear); newProgram.YearEstablished = tempYear; programsToReturn.Add(newProgram); } //Добавляем зависимые видеозаписи if (!string.IsNullOrEmpty(reader["MediaFileId"].ToString())) { MediaFileDTO newMediaFile = new MediaFileDTO(); newMediaFile.Id = int.Parse(reader["MediaFileId"].ToString()); newMediaFile.Name = reader["MediaFileName"].ToString(); newMediaFile.CompleteName = reader["CompleteName"].ToString(); newMediaFile.Format = reader["Format"].ToString(); newMediaFile.FrameSize = reader["FrameSize"].ToString(); int.TryParse(reader["TimingInFrames"].ToString(), out int tempFrames); newMediaFile.TimingInFrames = tempFrames; newMediaFile.ParentTvProgramId = int.Parse(reader["Program_Id"].ToString()); newProgram.MediaFiles.Add(newMediaFile); } } return(programsToReturn); }
private void DeleteVideoBtn_Click(object sender, RoutedEventArgs e) { Button clickedBtn = sender as Button; MediaFileDTO mediaToDelete = clickedBtn.DataContext as MediaFileDTO; _dataProvider.RemoveMediaFile(mediaToDelete); SelectedProgram.MediaFiles.Remove(mediaToDelete); SelectedProgramChanged(); }
public async void AddVideoFileAsync(MediaFileDTO video) { if (!IsMediaDataValid(video)) { throw new FormatException("Поступило некорректное значение"); } string sql = string.Format( "insert into MediaFile('Name', 'CompleteName', 'Format', 'FrameSize', TimingInFrames, Program_Id) " + "values ('{0}', '{1}', '{2}', '{3}', {4}, '{5}'); SELECT last_insert_rowid();", video.Name, video.CompleteName, video.Format, video.FrameSize, video.TimingInFrames, video.ParentTvProgramId); SqliteCommand command = new SqliteCommand(sql, _connection); object lastInsertedRowId = await command.ExecuteScalarAsync(); video.Id = Convert.ToInt32(lastInsertedRowId); }
private async void AddVideosAsync(string[] Files) { TV_ProgramDTO parentProgram = SelectedProgram; foreach (string file in Files) { if (!_mediaInfoProvider.IsMediaFile(file)) { continue; } await Task.Run(() => { MediaFileDTO video = _mediaInfoProvider.GetMediaFileInfo(file, SelectedProgram); video.ParentTvProgramId = parentProgram.Id; App.Current.Dispatcher.Invoke(() => parentProgram.MediaFiles.Add(video)); App.Current.Dispatcher.Invoke(() => _dataProvider.AddVideoFileAsync(video)); }); } SelectedProgramChanged(); }
private bool IsMediaDataValid(MediaFileDTO video) { return(true); //В рамках ТЗ не требуется, но в проекте я бы реализовал }