public void Remove(TV_ProgramDTO Program)
        {
            string        sql     = string.Format("Delete from TVProgram where TVProgram.Id = {0}", Program.Id);
            SqliteCommand command = new SqliteCommand(sql, _connection);

            command.ExecuteNonQuery();
        }
        private void UpdateWrapPanel()
        {
            CardsWrapPanel.Children.Clear();
            foreach (TV_ProgramDTO program in ItemsSource)
            {
                TV_Card tvCard = new TV_Card(program);
                tvCard.OnClick  += SelectCard;
                tvCard.OnEdit   += EditProgram;
                tvCard.OnDelete += DeleteProgram;

                if (!IsSourceCorrect(tvCard.TV_Image))
                {
                    tvCard.TV_Image.Source = new BitmapImage(new Uri("/Resources/nopicture.jpg", UriKind.Relative));
                }

                CardsWrapPanel.Children.Add(tvCard);
            }
            if (ItemsSource.Count() > 0)
            {
                if (SelectedItem == null)
                {
                    SelectedItem = ItemsSource[0];
                }
                SelectItem(SelectedItem);
            }
        }
        private void EditProgramMethod()
        {
            TV_ProgramDTO EditedProgram = new TV_ProgramDTO
            {
                Actors           = SelectedProgram.Actors,
                AvatarSourcePath = SelectedProgram.AvatarSourcePath,
                Description      = SelectedProgram.Description,
                Name             = SelectedProgram.Name,
                YearEstablished  = SelectedProgram.YearEstablished
            };

            EditProgramWindow editWindow = new EditProgramWindow(EditedProgram);

            if (editWindow.ShowDialog() == true)
            {
                SelectedProgram.Actors           = EditedProgram.Actors;
                SelectedProgram.AvatarSourcePath = EditedProgram.AvatarSourcePath;
                SelectedProgram.Description      = EditedProgram.Description;
                SelectedProgram.Name             = EditedProgram.Name;
                SelectedProgram.YearEstablished  = EditedProgram.YearEstablished;
                _dataProvider.EditProgram(oldValue: SelectedProgram, newValue: EditedProgram);
                if (OnSelectedProgramChanged != null)
                {
                    OnSelectedProgramChanged.Invoke();
                }
                CardsWrapPanel.ReloadCard(SelectedProgram);
            }
        }
        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);
        }
 public void ReloadCard(TV_ProgramDTO changedProgram)
 {
     foreach (TV_Card card in CardsWrapPanel.Children)
     {
         if (card.TVProgram == changedProgram)
         {
             card.Refresh();
             break;
         }
     }
 }
 private void SelectItem(TV_ProgramDTO program)
 {
     foreach (TV_Card card in CardsWrapPanel.Children)
     {
         if (card.TVProgram == program)
         {
             SelectCard(card);
             break;
         }
     }
 }
        public void EditProgram(TV_ProgramDTO oldValue, TV_ProgramDTO newValue)
        {
            if (!IsProgramDataValid(newValue))
            {
                throw new FormatException("Поступило некорректное значение");
            }
            string sql = string.Format("update TVProgram SET name='{0}', Description='{1}', Actors='{2}', YearEstablished={3}, AvatarSourcePath='{4}' where id={5}",
                                       newValue.Name, newValue.Description, newValue.Actors, newValue.YearEstablished, newValue.AvatarSourcePath, oldValue.Id);
            SqliteCommand command = new SqliteCommand(sql, _connection);

            command.ExecuteNonQuery();
        }
 private void DeleteProgramHandle(TV_ProgramDTO program)
 {
     AllPrograms.Remove(program);
     _dataProvider.Remove(program);
     if (SelectedProgram == program && AllPrograms.Count > 0)
     {
         CardsWrapPanel.SelectedItem = AllPrograms[0];
     }
     else if (AllPrograms.Count == 0)
     {
         CardsWrapPanel.SelectedItem = null;
         SelectedProgram             = null;
         SelectedProgramChanged();
     }
 }
        public void AddProgram(TV_ProgramDTO Program)
        {
            if (!IsProgramDataValid(Program))
            {
                throw new FormatException("Поступило некорректное значение");
            }

            string sql = string.Format(
                "insert into TVProgram('Name', 'Description', 'Actors', 'YearEstablished', 'AvatarSourcePath') " +
                "values ('{0}', '{1}', '{2}', {3}, '{4}'); SELECT last_insert_rowid();",
                Program.Name, Program.Description, Program.Actors, Program.YearEstablished, Program.AvatarSourcePath);
            SqliteCommand command           = new SqliteCommand(sql, _connection);
            int           lastInsertedRowId = int.Parse(command.ExecuteScalar().ToString());

            Program.Id = lastInsertedRowId;
        }
        private void AddNewProgram_Click(object sender, RoutedEventArgs e)
        {
            TV_ProgramDTO     EditedProgram = new TV_ProgramDTO();
            EditProgramWindow editWindow    = new EditProgramWindow(EditedProgram);

            if (editWindow.ShowDialog() == true)
            {
                _dataProvider.AddProgram(EditedProgram);
                AllPrograms.Add(EditedProgram);
            }

            if (SelectedProgram == null)
            {
                CardsWrapPanel.SelectedItem = AllPrograms[0];
            }
        }
        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();
        }
Beispiel #12
0
 public TV_Card(TV_ProgramDTO program)
 {
     InitializeComponent();
     OnItemChanged += DrawCard;
     TVProgram      = program;
 }
 private bool IsProgramDataValid(TV_ProgramDTO program)
 {
     return(true); //В рамках ТЗ не требуется, но в проекте я бы реализовал
 }
 public EditProgramWindow(TV_ProgramDTO program)
 {
     InitializeComponent();
     EditedProgram = program;
     InitializeForm();
 }
 private void CardSelectionChanged(object sender)
 {
     SelectedProgram = (sender as TV_Card).TVProgram;
 }