예제 #1
0
        public async Task <IActionResult> AddSeries(AddSeriesViewModel addSeries)
        {
            Media media = _context.Medias.SingleOrDefault(m => m.ImdbId == addSeries.ImdbId);

            if (media == null)
            {
                MediaType mediaType = _context.MediaTypes.SingleOrDefault(m => m.Name == SpinningFilmHelper.SeriesType);

                string responseBody = await _apiService.GetWithCreditsAsync(addSeries.TmdbId, SpinningFilmHelper.SeriesType);

                TmdbTVResult tvResult = JsonConvert.DeserializeObject <TmdbTVResult>(responseBody);

                responseBody = await _apiService.GetOmdbResult(addSeries.ImdbId);

                RatingResult ratingResult = JsonConvert.DeserializeObject <RatingResult>(responseBody);

                media = new Media(tvResult, mediaType, ratingResult, addSeries.ImdbId);
                _context.Add(media);

                Series series = new Series(tvResult, media.MediaId);
                _context.Add(series);

                List <Genre> dbGenres = _context.Genres.ToList();
                foreach (var item in tvResult.Genres)
                {
                    var        genre      = dbGenres.SingleOrDefault(g => g.GenreId == item.GenreId) ?? _context.Genres.Add(item).Entity;
                    MediaGenre mediaGenre = new MediaGenre(media.MediaId, genre);
                    _context.Add(mediaGenre);
                }

                tvResult.Credits.Cast.ForEach(c => c.MediaId = media.MediaId);
                _context.Casts.AddRange(tvResult.Credits.Cast);

                tvResult.Credits.Crew.ForEach(c => c.MediaId = media.MediaId);
                _context.Crews.AddRange(tvResult.Credits.Crew);

                _context.SaveChanges();
            }

            if (!_context.PhysicalMedias.Any(m => m.AppUserId == User.Identity.GetNameIdGuid() && m.MediaId == media.MediaId))
            {
                foreach (var number in addSeries.SeasonNumbers)
                {
                    var physicalMedia = addSeries.PhysicalMedias[number - 1];
                    physicalMedia.MediaId   = media.MediaId;
                    physicalMedia.AppUserId = User.Identity.GetNameIdGuid();
                    _context.PhysicalMedias.Add(physicalMedia);

                    PhysicalSeason physicalSeason = new PhysicalSeason(physicalMedia.PhysicalMediaId, number);
                    _context.PhysicalSeasons.Add(physicalSeason);
                }

                _context.SaveChanges();

                return(View("AddMedia", media));
            }

            return(RedirectToAction("Index", "Home"));
        }
예제 #2
0
 public AddSeriesToDatabase(AddSeriesViewModel main)
 {
     if (main == null)
     {
         throw new ArgumentNullException("AddToDatabase command");
     }
     this.main = main;
 }
예제 #3
0
 public AbortSearch(AddSeriesViewModel main)
 {
     if (main == null)
     {
         throw new ArgumentNullException("AbortSearch command");
     }
     this.main = main;
 }
예제 #4
0
        //Zwraca wyszukane seriale, w tym ich: ID, tytuł, opis, najnowszy plakat
        public ObservableCollection <Series> SearchForSeries(string title, AddSeriesViewModel main)
        {
            string JSON = getReply("https://api.thetvdb.com/search/series?name=" + title);
            ObservableCollection <Series> _series = new ObservableCollection <Series>();

            try
            {
                JObject        tvdbSearch = JObject.Parse(JSON);
                IList <JToken> results    = tvdbSearch["data"].Children().ToList();
                int            _found     = 0;

                foreach (JToken result in results)
                {
                    Series searchResult = result.ToObject <Series>();

                    byte[] poster;
                    if ((poster = SearchForPosters(searchResult._id)) != null)
                    {
                        searchResult._poster = poster;
                    }

                    _series.Add(searchResult);

                    if (main.AbortSearch) // Jak naciśnięty przycisk AbortSearch
                    {
                        main.AbortSearch = false;
                        return(_series);
                    }
                    main.FoundSeries = ++_found;
                }
            }
            catch (Exception)
            {
                MessageBox.Show("Nie znalazłem pasujących seriali", "Error", MessageBoxButton.OK, MessageBoxImage.Error);
            }

            return(_series);
        }
예제 #5
0
        public async Task <IActionResult> AddSeriesModal(AddSeriesViewModel addSeries)
        {
            string responseBody = await _apiService.GetWithExternalIdsAsync(addSeries.TmdbId, SpinningFilmHelper.SeriesType);

            TmdbTVResult result = JsonConvert.DeserializeObject <TmdbTVResult>(responseBody);

            addSeries.ImdbId          = result.ExternalIds.ImdbId;
            addSeries.Title           = result.Name;
            addSeries.DiscTypes       = _context.DiscTypes.ToList();
            addSeries.Poster          = TmdbSettings.PosterSmall + result.Poster;
            addSeries.NumberOfSeasons = result.NumberOfSeasons;

            Media media = _context.Medias.SingleOrDefault(m => m.ImdbId == addSeries.ImdbId) ?? new Media();

            Guid userId = User.Identity.GetNameIdGuid();

            for (int i = 0; i < addSeries.NumberOfSeasons; i++)
            {
                addSeries.PhysicalMedias.Add(new PhysicalMedia(media.MediaId, userId));
            }

            return(View(addSeries));
        }
예제 #6
0
        //Wyszukuje plakaty i dodaje je odrazu do _PosterList
        public void SearchForAllPosters(int _seriesID, AddSeriesViewModel main)
        {
            string JSON = getReply("https://api.thetvdb.com/series/" + _seriesID + "/images/query?keyType=poster");

            if (JSON != null)
            {
                JObject        tvdbSearch = JObject.Parse(JSON);
                IList <JToken> results    = tvdbSearch["data"].Children().ToList();

                foreach (JToken result in results)
                {
                    Poster p = result.ToObject <Poster>();

                    byte[] array;
                    using (WebClient client = new WebClient())
                    {
                        array = client.DownloadData(new Uri("http://thetvdb.com/banners/" + p.fileName));
                    }

                    Application.Current.Dispatcher.Invoke(DispatcherPriority.Background, new Action(() =>
                                                                                                    main.PosterList.Add(new Poster(array))));
                }
            }
        }
 public AddSeriesWindow()
 {
     InitializeComponent();
     _viewModel       = new AddSeriesViewModel();
     this.DataContext = _viewModel;
 }