Esempio n. 1
0
        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;
                }
            }
        }
Esempio n. 2
0
        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();
        }
Esempio n. 5
0
 public bool IsRecentEpisode()
 {
     return(Episodes.Any(e => e.AirDateUtc >= DateTime.UtcNow.Date.AddDays(-14)));
 }
Esempio n. 6
0
        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();
            });
        }
Esempio n. 7
0
        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;
        }