Exemple #1
0
        public TvSeriesModel Get(int season)
        {
            try
            {
                Logger.Trace("Begin => Get");
                Logger.DebugFormat("Parameters [season={0}]", season);

                TvSeries result = _tvSeriesRepository.Get(season);

                if (result == null)
                {
                    Logger.DebugFormat("Season season={0} not found", season);
                    throw new HttpResponseException(HttpStatusCode.NotFound);
                }

                return TvSeriesModel.CopyFrom(result);
            }
            catch (Exception err)
            {
                Logger.Error("Error in Get", err);
                throw;
            }
            finally
            {
                Logger.Trace("End => Get");
            }
        }
        /// <summary>
        /// returns true if the media file and tv series are compatible. to check this we
        /// condense the titles for both objects, removing whitespace and removing periods , underscores and dashes.
        /// if the two titles are the same after that, they are considered compatible.
        /// </summary>
        /// <param name="mfi"></param>
        /// <param name="series"></param>
        /// <returns>true if the media file and tv series are compatible, otherwise false</returns>
        private bool IsCompatible(MediaFile mfi, TvSeries series)
        {
            string condensedMfiTitle    = mfi.Title.ToLower().Replace(" ", "").Replace(".", "").Replace("_", "").Replace("-", "").Replace(":", "").Replace("'", "").Replace("(", "").Replace(")", "");
            string condensedSeriesTitle = series.Title.ToLower().Replace(" ", "").Replace(".", "").Replace("_", "").Replace("-", "").Replace(":", "").Replace("'", "").Replace("(", "").Replace(")", "");

            return(condensedMfiTitle.Equals(condensedSeriesTitle));
        }
        public IEnumerable<TvSeries> FindTvSeries(string name)
        {
            var series = new List<TvSeries>();
            var url = $"http://thetvdb.com/api/GetSeries.php?seriesname={name}";

            var client = WebRequest.Create(url);
            var xmlDoc = new XmlDocument();

            try
            {
                xmlDoc.Load(client.GetResponse().GetResponseStream());
            }
            catch (WebException ex)
            {
                _logger.ErrorException($"Failed to connect to {url}", ex);
            }

            foreach (XmlNode node in xmlDoc.SelectNodes("Data/Series"))
            {
                if (node["FirstAired"] == null) continue;

                var overview = node["Overview"]?.InnerText ?? string.Empty;

                var tvSeries = new TvSeries()
                {
                    TvDbSeriesId = node["id"].InnerText,
                    Name = node["SeriesName"].InnerText,
                    FirstAired = Convert.ToDateTime(node["FirstAired"].InnerText),
                    Summary = overview
                };
                series.Add(tvSeries);
            }

            return series;
        }
 public static TvSeriesModel CopyFrom(TvSeries series)
 {
     return(new TvSeriesModel()
     {
         Name = series.Name
     });
 }
        private TvSeries UserSelectSeries(WmcItem episode, IList <TvSeries> tvSeries)
        {
            Console.WriteLine("Multiple series matches for {0}", episode.Series.WmcName);
            TvSeries tvs = null;

            for (int i = 0; i < tvSeries.Count; i++)
            {
                Console.WriteLine("{0}: {1}", i + 1, tvSeries[i].TvDbName);
            }

            while (tvs == null)
            {
                Console.Write("Select Series (0 to skip): ");
                string s = Console.ReadLine();
                if (int.TryParse(s, out int x))
                {
                    x--;
                    if (x == -1)
                    {
                        break;
                    }

                    if (x >= 0 && x < tvSeries.Count)
                    {
                        tvs = tvSeries[x];
                    }
                }
            }

            return(tvs);
        }
        private async Task <Tuple <bool, TvSeries> > UserSearchSeries(WmcItem wmcItem, string seriesUrl, ILog logger)
        {
            bool cont = true;

            Console.WriteLine("No series matches for {0}", wmcItem.Series.WmcName);

            Console.Write("Search for series (0 to skip): ");
            string   s      = Console.ReadLine();
            TvSeries series = null;

            if (int.TryParse(s, out int x) && x == 0)
            {
                cont = false;
            }
            else
            {
                series = await GetSeriesInfo(seriesUrl, wmcItem, s, logger);

                if (series != null)
                {
                    cont = false;
                }
            }

            return(new Tuple <bool, TvSeries>(cont, series));
        }
Exemple #7
0
        public TvSeries Get(int season)
        {
            try
            {
                Logger.Trace("Begin -> Get");
                Logger.DebugFormat("Parameters [season={0}]", season);

                using (IGraphClient client = DatabaseFactory.CreateReader())
                {
                    TvSeries result = client.Cypher
                                      .Match(
                        "(series:TvSeries {name: {name} })")
                                      .WithParams(new Dictionary <string, object>
                    {
                        { "name", string.Format("Season {0}", season) }
                    })
                                      .Return(series => series.As <TvSeries>())
                                      .OrderBy(new[] { "series.name" })
                                      .Results.FirstOrDefault();

                    Logger.Trace("End -> Get");
                    return(result);
                }
            }
            catch (Exception err)
            {
                Logger.Error("Error in Get", err);
                throw;
            }
        }
        private async Task <TvSeries> GetSeriesInfo(string seriesUrl, WmcItem episode, string searchName, ILog logger)
        {
            TvSeries tvSeries = null;

            string    url  = string.Format(seriesUrl, WebUtility.UrlEncode(searchName));
            XDocument xdoc = await GetXmlDoc(url, logger);

            IEnumerable <TvSeries> series = (xdoc.Descendants("Series").Select
                                                 (items => new TvSeries
            {
                WmcName = episode.Series.WmcName,
                TvDbId = items.Element("id")?.Value,
                TvDbName = items.Element("SeriesName")?.Value
            }));

            IList <TvSeries> tvs = series as IList <TvSeries> ?? series.ToList();

            if (tvs.Count == 1 && episode.Series.WmcName == tvs[0].TvDbName)
            {
                tvSeries = tvs[0];
            }
            else if (tvs.Count >= 1)
            {
                tvSeries = UserSelectSeries(episode, tvs);
            }

            return(tvSeries);
        }
      public ActionResult DeleteConfirmed(int id)
      {
          TvSeries tvseries = db.Series.Find(id);

          db.Series.Remove(tvseries);
          db.SaveChanges();
          return(RedirectToAction("Index"));
      }
 public ActionResult Edit([Bind(Include = "ID,Title,Genre,Season,Episode")] TvSeries tvseries)
 {
     if (ModelState.IsValid)
     {
         db.Entry(tvseries).State = EntityState.Modified;
         db.SaveChanges();
         return(RedirectToAction("Index"));
     }
     return(View(tvseries));
 }
      public ActionResult Create([Bind(Include = "ID,Title,Genre,Season,Episode")] TvSeries tvseries)
      {
          if (ModelState.IsValid)
          {
              db.Series.Add(tvseries);
              db.SaveChanges();
              return(RedirectToAction("Index"));
          }

          return(View(tvseries));
      }
Exemple #12
0
        public void GetEpisodeBySeriesName_ReturnsEpisode()
        {
            var episode = new TvEpisode()
            {
                Season = 5, EpisodeNumber = 12, Title = "Some Title"
            };
            var series = new TvSeries()
            {
                Name = "The Walking Dead"
            };

            series.Episodes.Add(episode);

            var episodeQueryable = new List <TvEpisode> {
                episode
            }.AsQueryable();
            var seriesList = new List <TvSeries> {
                series
            };

            var seriesSet = new Mock <MockableDbSetWithExtensions <TvSeries> >();

            seriesSet.Setup(ss => ss.SqlQuery(It.IsAny <string>(), It.IsAny <object[]>()))
            .Returns <string, object[]>((sql, param) =>
            {
                var sqlQueryMock = new Mock <DbSqlQuery <TvSeries> >();
                sqlQueryMock.Setup(m => m.AsNoTracking())
                .Returns(sqlQueryMock.Object);
                sqlQueryMock.Setup(m => m.GetEnumerator())
                .Returns(seriesList.GetEnumerator());
                return(sqlQueryMock.Object);
            });

            var episodeSet = new Mock <MockableDbSetWithExtensions <TvEpisode> >();

            episodeSet.As <IQueryable <TvEpisode> >().Setup(m => m.Provider).Returns(episodeQueryable.Provider);
            episodeSet.As <IQueryable <TvEpisode> >().Setup(m => m.Expression).Returns(episodeQueryable.Expression);
            episodeSet.As <IQueryable <TvEpisode> >().Setup(m => m.ElementType).Returns(episodeQueryable.ElementType);
            episodeSet.As <IQueryable <TvEpisode> >().Setup(m => m.GetEnumerator()).Returns(episodeQueryable.GetEnumerator());

            var context = new Mock <ITvContext>();

            context.Setup(c => c.Set <TvSeries>()).Returns(seriesSet.Object);
            context.Setup(c => c.TvEpisodes).Returns(episodeSet.Object);

            var tvService = new TvService(context.Object);

            var result = tvService.GetEpisodeBySeriesName("The Walking Dead", 5, 12, false);

            Assert.That(result, Is.Not.Null);
            Assert.That(result.Title, Is.EqualTo("Some Title"));
        }
        private void PrintTvSeriesUri(TvSeries tvSeries)
        {
            var printString = new StringBuilder();

            foreach (var season in tvSeries.SeasonList)
            {
                foreach (var series in season.EpisodeList)
                {
                    printString.AppendLine(series.FileUri.ToString());
                }
            }
            tbUriList.Text = printString.ToString();
        }
Exemple #14
0
        public ActionResult Create([Bind(Include = "Id,Title,Genre,AirDate,Season,Episode,Rating")] TvSeries tvseries)
        {
            if (ModelState.IsValid)
            {
                var id = User.Identity.GetUserId();
                tvseries.ApplicationUserId = db.Users.Find(id);
                db.TvSeries.Add(tvseries);
                db.SaveChanges();
                return(RedirectToAction("Index"));
            }

            return(View(tvseries));
        }
        public void HandleSearchTvSeries(dynamic dynamicObject, HttpListenerContext context)
        {
            try
            {
                if (dynamicObject != null)
                {
                    if (MainWindowViewModel != null)
                    {
                        JValue textObject = dynamicObject.Text;
                        var    strText    = textObject.Value as string;

                        if (strText == null)
                        {
                            MainWindowViewModel.LogManager.PrintWarningMessage("Text field (to search) is empty!");
                            return;
                        }

                        dynamic sendFlexible = new ExpandoObject();

                        var tvSeriesList = new List <TvSeries>();
                        foreach (var tvSeries in MainWindowViewModel.MainDBEntities.TV_Series)
                        {
                            if (tvSeries.Name.ToLower().Contains(strText.ToLower()))
                            {
                                var newTvSeries = new TvSeries
                                {
                                    Name            = tvSeries.Name,
                                    SeriesImagePath = tvSeries.SeriesImagePath,
                                    Hits            = tvSeries.Hits
                                };

                                tvSeriesList.Add(newTvSeries);

                                tvSeries.Hits++;
                            }
                        }

                        sendFlexible.TvSeriesResults = tvSeriesList;

                        SendMessage(context, sendFlexible);
                    }
                }
            }
            catch (Exception exception)
            {
                if (MainWindowViewModel != null)
                {
                    MainWindowViewModel.LogManager.PrintErrorMessage("Message has exception: " + exception.Message + ". InnerMessage: " + exception.InnerException);
                }
            }
        }
      // GET: /TvSeries/Delete/5
      public ActionResult Delete(int?id)
      {
          if (id == null)
          {
              return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
          }
          TvSeries tvseries = db.Series.Find(id);

          if (tvseries == null)
          {
              return(HttpNotFound());
          }
          return(View(tvseries));
      }
Exemple #17
0
 public static int SaveFavoriteTv <T>(string sql, TvSeries data, int userId)
 {
     using var cnn = new NpgsqlConnection(Startup.Db);
     {
         cnn.Open();
         var cmd = new NpgsqlCommand(sql, cnn);
         cmd.Parameters.AddWithValue("id", data.Id);
         cmd.Parameters.AddWithValue("posterPath", data.Poster_path);
         cmd.Parameters.AddWithValue("title", data.Original_name);
         cmd.Parameters.AddWithValue("voteAverage", data.Vote_average);
         cmd.Parameters.AddWithValue("userId", userId);
         return(cmd.ExecuteNonQuery());
     }
 }
Exemple #18
0
        private void api_TvSeriesGetInfoCompleted(object sender, TvSeriesGetInfoCompletedEventArgs e)
        {
            TvSeries alTvSeries   = e.TvSeries;
            int      tvSeriesCode = e.TvSeriesCode;

            //textBox1.AppendText("\r\n\r\n\r\n//Retrieve the details about the TvSeries 'Lost' - EVENT");
            if (alTvSeries.Error != null)
            {
                AppendText("\r\n" + tvSeriesCode + "\t" + alTvSeries.Error.Value);
            }
            else
            {
                AppendText("\r\n" + alTvSeries.Code + "\t" + alTvSeries.OriginalTitle + "\t" + alTvSeries.Title);
            }
        }
Exemple #19
0
        public static int CreateFavoriteTv(int id, string posterPath, string originalName, double voteAverage,
                                           int userId)
        {
            var data = new TvSeries
            {
                Id            = id,
                Poster_path   = posterPath,
                Original_name = originalName,
                Vote_average  = voteAverage
            };
            var sql =
                $"INSERT INTO tv (external_id, poster_path, original_name, vote_average, user_id) " +
                $"VALUES (@id, @posterPath, @title, @voteAverage, @userId);";

            return(SqlDataAccess.SaveFavoriteTv <string>(sql, data, userId));
        }
Exemple #20
0
      public int AddFavoriteTv(int?id, [FromBody] TvSeries model)
      {
          if (!ModelState.IsValid)
          {
              return(0);
          }

          if (id == null)
          {
              return(0);
          }

          var userId         = (int)id;
          var recordsCreated = CreateFavoriteTv(model.Id, model.Poster_path, model.Original_name, model.Vote_average, userId);

          return(recordsCreated);
      }
        /// <summary>
        /// Reads from the specified media item.
        /// </summary>
        /// <param name="item">The item.</param>
        public void ReadFrom(MediaItem item)
        {
            if (item is TvSeries)
            {
                showDetails = (TvSeries)item;
            }
            allSeasons = null;
            lstSeasons.Items.Clear();
            grdEpisodes.DataSource = null;

            foreach (MediaItem child in item.Children)
            {
                if (child is ISeason)
                {
                    lstSeasons.Items.Add(child);
                }
            }
        }
        public Entry ConvertTvSeries(TvShow tmdbSeries)
        {
            // checks
            if (tmdbSeries == null)
            {
                return(DefaultEntry.Instance);
            }

            if (string.IsNullOrEmpty(tmdbSeries.Name))
            {
                return(DefaultEntry.Instance);
            }

            if (!tmdbSeries.FirstAirDate.HasValue || tmdbSeries.FirstAirDate.Value < new DateTime(1930, 1, 1))
            {
                return(DefaultEntry.Instance);
            }

            if (string.IsNullOrEmpty(tmdbSeries.PosterPath))
            {
                return(DefaultEntry.Instance);
            }

            if (tmdbSeries.Popularity < MinPopularity)
            {
                return(DefaultEntry.Instance);
            }

            // build basic values
            var id = Id.FromTvSeriesNumber(tmdbSeries.Id);
            var tv = new TvSeries(id)
            {
                FirstAirDate  = tmdbSeries.FirstAirDate.Value,
                MainImagePath = tmdbSeries.PosterPath,
                Name          = tmdbSeries.Name,
                Popularity    = tmdbSeries.Popularity,
            };

            // TODO: create the connections

            return(tv);
        }
        public void TvSeriesDefaultCtor_ObjectCreation_AllFildsNotNull()
        {
            // Arrange
            List <Uri> uriList = new List <Uri>()
            {
                new Uri("https://test.com"),
                new Uri("https://test.com")
            };
            var tvSeries = new TvSeries(new Uri("https://test.com"), uriList);

            // Act
            var seasonList      = tvSeries.SeasonList;
            var seasonUriList   = tvSeries.SeasonUriList;
            var tvSeriesAddress = tvSeries.Uri;

            // Assert
            Assert.IsNotNull(seasonList);
            Assert.IsNotNull(seasonUriList);
            Assert.IsNotNull(tvSeriesAddress);
        }
Exemple #24
0
        private async Task <TvSeries> GetSeriesInfo(WmcItem episode, string searchName)
        {
            TvSeries tvSeries = null;

            var doc = await _tvDbClient.SearchSeries(searchName);



            //IList<TvSeries> tvs = series as IList<TvSeries> ?? series.ToList();
            //if (tvs.Count == 1 && episode.Series.WmcName == tvs[0].TvDbName)
            //{
            //    tvSeries = tvs[0];
            //}
            //else if (tvs.Count >= 1)
            //{
            //    tvSeries = UserSelectSeries(episode, tvs);
            //}

            return(tvSeries);
        }
        private void makeTvSeriesDisplayable(TvSeries tv)
        {
            tv.backdrop_path      = "https://image.tmdb.org/t/p/w500" + tv.backdrop_path;
            this.FirstEpisodeDate = "Első rész megjelenés: " + tv.first_air_date;
            this.Genres           = "Műfaj:";
            int counter = 0;

            foreach (var genre in tv.genres)
            {
                if (counter == 0)
                {
                    this.Genres = this.Genres + " " + genre;
                }
                else
                {
                    this.Genres = this.Genres + " ," + genre;
                }
            }
            this.LastEpisodeDate = tv.last_air_date ?? "Utolsó epizód megjelenés: " + tv.last_air_date;
            this.Rating          = $"{tv.vote_average}/10, {tv.vote_count} értékelésből";
            this.Status          = "Jelenleg: " + tv.status;
        }
Exemple #26
0
        public IEnumerable <TvSeries> FindTvSeries(string name)
        {
            var series = new List <TvSeries>();
            var url    = $"http://thetvdb.com/api/GetSeries.php?seriesname={name}";

            var client = WebRequest.Create(url);
            var xmlDoc = new XmlDocument();

            try
            {
                xmlDoc.Load(client.GetResponse().GetResponseStream());
            }
            catch (WebException ex)
            {
                _logger.ErrorException($"Failed to connect to {url}", ex);
            }

            foreach (XmlNode node in xmlDoc.SelectNodes("Data/Series"))
            {
                if (node["FirstAired"] == null)
                {
                    continue;
                }

                var overview = node["Overview"]?.InnerText ?? string.Empty;

                var tvSeries = new TvSeries()
                {
                    TvDbSeriesId = node["id"].InnerText,
                    Name         = node["SeriesName"].InnerText,
                    FirstAired   = Convert.ToDateTime(node["FirstAired"].InnerText),
                    Summary      = overview
                };
                series.Add(tvSeries);
            }

            return(series);
        }
Exemple #27
0
        public void SaveTvSeries(TvSeries tvSeries)
        {
            _validationContext.ValidateAnnotations(tvSeries);
            _validationContext.ThrowIfHasErrors();
            // Episodes[0].Title : StringLength - The field Ttile must be a string with a maximum length of 40
            // Episodes[1].Title : NonUniqueTitle - Episode 1 has non unique Title field

            _dbContext.Series.Add(tvSeries);

            for (int i = 0; i < tvSeries.Episodes.Count; i++)
            {
                using (_validationContext.WithPrefix($"Episodes[{i}]"))
                {
                    SaveEpisode(tvSeries.Episodes[i]);
                }
            }

            _validationContext.ThrowIfHasErrors();
            // Episodes[0].ActorIds : HasUnknownActors - Episode 0 has unknown actors
            // Episodes[1].ActorIds : HasUnknownActors - Episode 1 has unknown actors

            _dbContext.SaveChanges();
        }
Exemple #28
0
 public void AddOrUpdate(TvSeries series)
 {
     _context.TvSeries.Add(series);
 }
        public async Task ProcessEpisodes(List <WmcItem> wmcItems)
        {
            HashSet <string> updatedSeries = new HashSet <string>();

            _settings.TvDbLastUpdate = await GetLastDbUpdate(_updateUrl, _settings.TvDbLastUpdate, updatedSeries, _logger);

            await _settings.Save(_logger);

            foreach (WmcItem wmcItem in wmcItems)
            {
                if (!IgnoreWmcItem(wmcItem, _settings.IgnoreItems))
                {
                    if (wmcItem.Type == ItemType.Tv && !string.IsNullOrEmpty(wmcItem.Series.WmcName))
                    {
                        TvSeries series = FindKnownSeries(wmcItem, _settings.TvSeries);

                        if (series == null)
                        {
                            if (!UserIgnore(wmcItem, _settings.IgnoreItems))
                            {
                                series = await GetSeriesInfo(_seriesUrl, wmcItem, wmcItem.Series.WmcName, _logger);

                                if (series == null)
                                {
                                    Tuple <bool, TvSeries> cont = await UserSearchSeries(wmcItem, _seriesUrl, _logger);

                                    while (cont.Item1)
                                    {
                                        cont = await UserSearchSeries(wmcItem, _seriesUrl, _logger);
                                    }

                                    series = cont.Item2;
                                }

                                if (series != null)
                                {
                                    _settings.TvSeries.Add(series);
                                }
                            }

                            if (series != null)
                            {
                                wmcItem.Series = series;
                            }
                        }
                        else
                        {
                            wmcItem.Series = series;
                        }

                        if (wmcItem.Series.TvDbName != null)
                        {
                            wmcItem.Series.FolderName = CleanFolderName(wmcItem.Series.TvDbName);

                            Match match = _title.Match(wmcItem.Title);
                            if (match.Success)
                            {
                                wmcItem.TvDbEpisode = new TvDbEpisode
                                {
                                    SeasonNumber  = Convert.ToInt32(match.Groups[1].Value),
                                    EpisodeNumber = Convert.ToInt32(match.Groups[2].Value),
                                    Name          = match.Groups[3].Value
                                };
                            }
                        }
                    }
                    else if (wmcItem.Type == ItemType.Movie)
                    {
                        UserIgnore(wmcItem, _settings.IgnoreItems);
                    }
                }
            }

            // find the ones where we could not extract the season and episode from the title
            IEnumerable <IGrouping <string, WmcItem> > distinctSeries = wmcItems.Where(file => file.Type == ItemType.Tv && file.TvDbEpisode == null).GroupBy(file => file.Series.TvDbId);

            await distinctSeries.ForEachAsync(5, async (item) =>
            {
                WmcItem episode = item.FirstOrDefault();

                if (episode != null && episode.Series.TvDbName != null)
                {
                    if (!IsKnownSeries(episode.Series.TvDbId, _settings.TvSeries) || updatedSeries.Contains(episode.Series.TvDbId))
                    {
                        await GetEpisodeData(_episodeUrl, episode, _settings.WorkingDirectory);
                    }
                }
            });

            await _settings.Save(_logger);
        }
Exemple #30
0
        public TvSeries GetTvSeries(string id)
        {
            var url = $"http://thetvdb.com/api/{_TvDbApiKey}/series/{id}/all/en.zip";
            var temporaryFilePath = Path.GetTempFileName();

            TvSeries tvSeries = null;

            var client = new System.Net.WebClient();
            client.DownloadFile(url, temporaryFilePath);

            if (!File.Exists(temporaryFilePath)) return tvSeries;

            var extractFolder = temporaryFilePath + "_extract\\";
            ZipFile.ExtractToDirectory(temporaryFilePath, extractFolder);

            var xmlDoc = new XmlDocument();
            xmlDoc.Load(extractFolder + "en.xml");

            var seriesNode = xmlDoc.SelectSingleNode("Data/Series");

            var overview = seriesNode["Overview"]?.InnerText ?? string.Empty;

            tvSeries = new TvSeries()
            {
                TvDbSeriesId = seriesNode["id"].InnerText,
                Name = seriesNode["SeriesName"].InnerText,
                FirstAired = Convert.ToDateTime(seriesNode["FirstAired"].InnerText),
                Status = seriesNode["Status"].InnerText,
                Summary = overview,
                AirsTimeOfDay = seriesNode["Airs_Time"]?.InnerText ?? string.Empty,
                Network = seriesNode["Network"]?.InnerText ?? string.Empty,
                Rating = seriesNode["ContentRating"]?.InnerText ?? string.Empty,
            };

            if (seriesNode["Airs_DayOfWeek"] != null)
            {
                DayOfWeek airDate;
                Enum.TryParse<DayOfWeek>(seriesNode["Airs_DayOfWeek"].InnerText, out airDate);
                tvSeries.AirsDayOfWeek = airDate;

            }

            tvSeries.LastUpdated = seriesNode["LastUpdated"] != null ? Convert.ToInt64(seriesNode["LastUpdated"]?.InnerText).FromEpochTime() : DateTime.Now;

            if (seriesNode["Genre"] != null)
                tvSeries.Genres = GetGenres(seriesNode["Genre"].InnerText);

            var episodeNodes = xmlDoc.SelectNodes("Data/Episode");

            if (episodeNodes != null)
            {

                foreach (XmlNode node in episodeNodes)
                {

                    if (string.IsNullOrEmpty(node["FirstAired"]?.InnerText)) continue;

                    var episode = new TvEpisode();
                    episode.EpisodeNumber = Convert.ToInt32(node["EpisodeNumber"].InnerText);
                    episode.Season = Convert.ToInt32(node["SeasonNumber"].InnerText);
                    episode.Title = node["EpisodeName"].InnerText;
                    episode.FirstAired = Convert.ToDateTime(node["FirstAired"].InnerText);

                    //TODO Make initial download status configurable
                    episode.DownloadStatus = "WANT";

                    overview = node["Overview"]?.InnerText ?? string.Empty;
                    episode.Summary = overview;

                    tvSeries.Episodes.Add(episode);
                }
            }

            File.Delete(temporaryFilePath);
            Directory.Delete(extractFolder, recursive: true);

            return tvSeries;
        }
Exemple #31
0
 public void AddOrUpdate(TvSeries series)
 {
     _context.TvSeries.Add(series);
 }
Exemple #32
0
        public TvSeries GetTvSeries(string id)
        {
            var url = $"http://thetvdb.com/api/{_TvDbApiKey}/series/{id}/all/en.zip";
            var temporaryFilePath = Path.GetTempFileName();

            TvSeries tvSeries = null;

            var client = new System.Net.WebClient();

            client.DownloadFile(url, temporaryFilePath);

            if (!File.Exists(temporaryFilePath))
            {
                return(tvSeries);
            }

            var extractFolder = temporaryFilePath + "_extract\\";

            ZipFile.ExtractToDirectory(temporaryFilePath, extractFolder);

            var xmlDoc = new XmlDocument();

            xmlDoc.Load(extractFolder + "en.xml");

            var seriesNode = xmlDoc.SelectSingleNode("Data/Series");

            var overview = seriesNode["Overview"]?.InnerText ?? string.Empty;

            tvSeries = new TvSeries()
            {
                TvDbSeriesId  = seriesNode["id"].InnerText,
                Name          = seriesNode["SeriesName"].InnerText,
                FirstAired    = Convert.ToDateTime(seriesNode["FirstAired"].InnerText),
                Status        = seriesNode["Status"].InnerText,
                Summary       = overview,
                AirsTimeOfDay = seriesNode["Airs_Time"]?.InnerText ?? string.Empty,
                Network       = seriesNode["Network"]?.InnerText ?? string.Empty,
                Rating        = seriesNode["ContentRating"]?.InnerText ?? string.Empty,
            };

            if (seriesNode["Airs_DayOfWeek"] != null)
            {
                DayOfWeek airDate;
                Enum.TryParse <DayOfWeek>(seriesNode["Airs_DayOfWeek"].InnerText, out airDate);
                tvSeries.AirsDayOfWeek = airDate;
            }

            tvSeries.LastUpdated = seriesNode["LastUpdated"] != null?Convert.ToInt64(seriesNode["LastUpdated"]?.InnerText).FromEpochTime() : DateTime.Now;

            if (seriesNode["Genre"] != null)
            {
                tvSeries.Genres = GetGenres(seriesNode["Genre"].InnerText);
            }


            var episodeNodes = xmlDoc.SelectNodes("Data/Episode");

            if (episodeNodes != null)
            {
                foreach (XmlNode node in episodeNodes)
                {
                    if (string.IsNullOrEmpty(node["FirstAired"]?.InnerText))
                    {
                        continue;
                    }

                    var episode = new TvEpisode();
                    episode.EpisodeNumber = Convert.ToInt32(node["EpisodeNumber"].InnerText);
                    episode.Season        = Convert.ToInt32(node["SeasonNumber"].InnerText);
                    episode.Title         = node["EpisodeName"].InnerText;
                    episode.FirstAired    = Convert.ToDateTime(node["FirstAired"].InnerText);

                    //TODO Make initial download status configurable
                    episode.DownloadStatus = "WANT";

                    overview        = node["Overview"]?.InnerText ?? string.Empty;
                    episode.Summary = overview;

                    tvSeries.Episodes.Add(episode);
                }
            }

            File.Delete(temporaryFilePath);
            Directory.Delete(extractFolder, recursive: true);

            return(tvSeries);
        }
Exemple #33
0
 public string[] ParseTvSeries()
 {
     return(TvSeries.Split(SplitDelimiter));
 }