private void OnDeleteEpisode(object parameter) { if (SelectedEpisode != null) { string episodeName = SelectedEpisode.Name; MessageBoxResult result = MessageBox.Show($"Are you sure you want to delete the {episodeName} episode from series?", "Delete Episode", MessageBoxButton.YesNo); switch (result) { case MessageBoxResult.Yes: Episodes.Remove(SelectedEpisode); EpisodeOperationFeedback = "Episode Deleted"; if (Episodes.Any()) { SelectedEpisode = Episodes[0]; } break; case MessageBoxResult.No: EpisodeOperationFeedback = "Episode Deletion Canceled"; break; } } }
private void DeleteEpisode(object parameter) { if (SelectedEpisode != null) { string episodeName = SelectedEpisode.Name; MessageBoxResult result = MessageBox.Show($"Are you sure you want to delete the {episodeName} episode from inventory?", "Delete Episodes", MessageBoxButton.YesNo); switch (result) { case MessageBoxResult.Yes: Episodes.Remove(SelectedEpisode); MessageBox.Show($"{episodeName} Episode Deleted", "Delete Episodes"); if (Episodes.Any()) { SelectedEpisode = Episodes[0]; } break; case MessageBoxResult.No: MessageBox.Show($"{episodeName} Episode Deletion Canceled", "Delete Episodes"); break; } } }
internal bool IsPostable() { return((Movies != null && Movies.Any()) || (Shows != null && Shows.Any()) || (Seasons != null && Seasons.Any()) || (Episodes != null && Episodes.Any()) || (People != null && People.Any())); }
/// <summary> /// Добавить эпизоды /// </summary> public void AddEpisodes() { var number = Episodes.Count; var lastNumber = Episodes.LastOrDefault()?.Number ?? 0; var episodes = new List <Episode>(); var name = $"{TranslateFileName(ESVM.SelectedFilm.Name)}_S{CurrentSeason.Number}_E"; for (var i = 0; i < AddingEpisodeValue; i++) { if (number > 0 && number != lastNumber) { for (var j = 1; j <= lastNumber; j++) { if (Episodes.Any(e => e.Number == j) || episodes.Any(e => e.Number == j)) { continue; } episodes.Add(new Episode { Name = name + j, Number = j, Season = CurrentSeason, Film = ESVM.SelectedFilm }); lastNumber++; break; } continue; } episodes.Add(new Episode { Name = name + ++number, Number = number, Season = CurrentSeason, Film = ESVM.SelectedFilm, }); lastNumber++; } InsertEntityListToDb(episodes); Episodes = new BindableCollection <Episode>(CurrentSeason.Episodes); SelectedEpisode = Episodes.LastOrDefault(); }
public bool IsRecentEpisode() { return(Episodes.Any(e => e.AirDateUtc >= DateTime.UtcNow.Date.AddDays(-14))); }
private void LoadUpcomingEpisodes() { _tvshowtimeApiService.GetAgenda(_currentPage, _pageSize) .Subscribe(async(agendaResponse) => { await DispatcherHelper.ExecuteOnUIThreadAsync(() => { foreach (var episode in agendaResponse.Episodes) { // Do not add the same show twice if (Episodes.Any(e => e.Id == episode.Id)) { continue; } // Do not add episode if already aired if (episode.AirDate < DateTime.Now) { continue; } string diffTime = string.Empty; var timeSpanDiff = episode.AirDate.Value.Subtract(DateTime.Now.ToUniversalTime()); if (episode.AirTime.HasValue) { timeSpanDiff = timeSpanDiff .Add(TimeSpan.FromHours(episode.AirTime.Value.DateTime.Hour)); timeSpanDiff = timeSpanDiff .Add(TimeSpan.FromMinutes(episode.AirTime.Value.DateTime.Minute)); } if (timeSpanDiff.Days >= 7) { diffTime += $"{timeSpanDiff.Days} days"; } else { if (timeSpanDiff.Days >= 1) { diffTime += $"{timeSpanDiff.Days} day"; if (timeSpanDiff.Days > 1) { diffTime += "s"; } } if (timeSpanDiff.Hours >= 1) { if (!string.IsNullOrWhiteSpace(diffTime)) { diffTime += Environment.NewLine; } diffTime += $"{timeSpanDiff.Hours} hour"; if (timeSpanDiff.Hours > 1) { diffTime += "s"; } } if (timeSpanDiff.Minutes >= 1) { if (!string.IsNullOrWhiteSpace(diffTime)) { diffTime += Environment.NewLine; } diffTime += $"{timeSpanDiff.Minutes} min."; } } Episodes.Add(new UpcomingEpisodeViewModel { Id = episode.Id, Season = episode.Season, Number = episode.Number, Show = episode.Show, DiffTime = diffTime.Trim(), Original = episode }); } if (agendaResponse.Episodes.Count >= _pageSize) { _currentPage++; LoadUpcomingEpisodes(); } }); }, (error) => { throw new Exception(); }); }
private void UpdateAll() { dgrid.Columns.Clear(); if (!Episodes.Any()) { return; } var episodesSorted = Episodes.OrderBy(e => e, EpisodeComparer); //sort Episodes by season, episode var uploadsSorted = episodesSorted.SelectMany(e => e.Downloads.Select(d => d.Upload)).Distinct(); //get a unique collection of the uploads; if (Settings.Instance.UseFavorites) { uploadsSorted = uploadsSorted.OrderBy(u => u, UploadComparer); //sort by fav/nofav } List <Header> headers = new List <Header>(); _cells = new List <Cell>(); int i = 0; //Idea: In the following Loop we create 1 Header instance for ALL Uploads (regardless of the season) which have the same String-Representation foreach (var upload in uploadsSorted) { String title = BuildUploadTitle(upload); var existingHeader = headers.FirstOrDefault(h => h.Title == title); if (existingHeader == null) { Header newHeader = new Header(); newHeader.Title = BuildUploadTitle(upload); newHeader.ToggleCommand = new SimpleCommand <object, string>(s => ToggleColumn(newHeader, s)); newHeader.ToggleAllCommand = new SimpleCommand <object, object>(o => ToggleFullColumn(newHeader)); newHeader.Hosters = episodesSorted.SelectMany(e => e.Downloads) .Where(d => d.Upload == upload) .SelectMany(d => d.Links.Keys) .Distinct().ToList(); headers.Add(newHeader); DataGridTemplateColumn column = new DataGridTemplateColumn(); column.Header = newHeader; column.HeaderTemplate = new DataTemplate(); column.HeaderTemplate.VisualTree = new FrameworkElementFactory(typeof(MultiDownloadSelectionHeader)); column.HeaderStyle = (Style)FindResource("CenterGridHeaderStyle"); column.CellTemplate = new DataTemplate(); column.CellTemplate.VisualTree = new FrameworkElementFactory(typeof(MultiDownloadSelectionCell)); column.CellTemplate.VisualTree.SetBinding(DataContextProperty, new Binding("Cells[" + i + "]")); dgrid.Columns.Add(column); i++; } else //there's already an upload existing (maybe in another Season) with the same string represenation { existingHeader.Hosters = episodesSorted.SelectMany(e => e.Downloads) .Where(d => d.Upload == upload) .SelectMany(d => d.Links.Keys).Union(existingHeader.Hosters) .Distinct().ToList(); } } DataGridTemplateColumn fColumn = new DataGridTemplateColumn(); fColumn.HeaderStyle = (Style)FindResource("RemovedHeaderContentStyle"); fColumn.Width = new DataGridLength(1, DataGridLengthUnitType.Star); dgrid.Columns.Add(fColumn); List <Row> rows = new List <Row>(); foreach (var episode in episodesSorted) { Row r = new Row(); r.Title = "S" + episode.Season.Number + " E" + episode.Number; if (episode.EpisodeInformation != null && !String.IsNullOrWhiteSpace(episode.EpisodeInformation.Title)) { r.Tooltip = episode.EpisodeInformation.Title; } r.Cells = new List <Cell>(); bool singleUpload = (episode.Downloads.Select(d => d.Upload) .Distinct() .Select(BuildUploadTitle) .Distinct() .Count() == 1); //if we only have downloads from one upload for this episode bool firstSelected = Settings.Instance.UseFavorites; //initialize state flag with a value from settings //if this is set to false, all following headers will not have any checkboxes ticked //if this is set to true, the next header from a favorized upload will have its checkboxes checked foreach (var header in headers) { var c = new Cell(); c.Header = header; c.Entries = new List <CellEntry>(); c.Episode = episode; DownloadData dloads = episode.Downloads.FirstOrDefault(da => BuildUploadTitle(da.Upload) == header.Title); bool selected = dloads != null && dloads.Upload.Favorized; //select this episode because it's favorized if (firstSelected && selected) { firstSelected = false; } else if (!firstSelected) { selected = false; } foreach (var hoster in header.Hosters) { if (dloads != null && dloads.Links.ContainsKey(hoster)) { c.Entries.Add(new CellEntry { Visibility = Visibility.Visible, Enabled = true, Link = dloads.Links[hoster], Checked = selected || singleUpload }); } else { c.Entries.Add(new CellEntry { Visibility = Visibility.Hidden, Enabled = false, Link = "", Checked = false }); } } _cells.Add(c); r.Cells.Add(c); } rows.Add(r); } dgrid.ItemsSource = rows; }