/// <summary>
        /// Call Eztv API for Json array of episodes for show with Imdb ID set
        /// </summary>
        /// <param name="show">Television Show model representing show to query Eztv for episodes</param>
        /// <param name="minSeeds">string minimum number of seeds for episode to be included</param>
        /// <returns>List of EztvResult representing episodes available to download</returns>
        public static List <EztvResult> GetEztvEpisodes(this TelevisionShow show, string minSeeds = null)
        {
            string            finalJson = string.Empty;
            List <EztvResult> finalList = new List <EztvResult>();


            if (!string.IsNullOrEmpty(show.ImdbID))
            {
                string baseUrl = $@"https://eztv.ag/api/get-torrents?imdb_id={ show.ImdbID }";

                if (minSeeds == null)
                {
                    WebRequest  wRequest = WebRequest.Create(baseUrl);
                    WebResponse response = wRequest.GetResponse();
                    Stream      ds       = response.GetResponseStream();

                    using (StreamReader r = new StreamReader(ds))
                    {
                        finalJson = r.ReadToEnd();
                    }

                    var root = JsonConvert.DeserializeObject <EztvRootModel>(finalJson);

                    foreach (EztvResult eztv in root.torrents)
                    {
                        finalList.Add(eztv);
                    }
                }
            }

            return(finalList);
        }
예제 #2
0
        public ActionResult DeleteConfirmed(int id)
        {
            TelevisionShow televisionShow = db.TelevisionShows.Find(id);

            db.TelevisionShows.Remove(televisionShow);
            db.SaveChanges();
            return(RedirectToAction("Index"));
        }
예제 #3
0
 public ActionResult Edit([Bind(Include = "pk_ShowID,ShowName,ShowDriveLetter,ShowHomePath,ShowNumSeasons,ShowNumEpisodes,ShowAlbumArtPath,IsEnabled,TvdbID,ImdbID,fk_MediaType")] TelevisionShow televisionShow)
 {
     if (ModelState.IsValid)
     {
         db.Entry(televisionShow).State = EntityState.Modified;
         db.SaveChanges();
         return(RedirectToAction("Index"));
     }
     return(View(televisionShow));
 }
예제 #4
0
        public ActionResult CreateShow([Bind(Include = "ShowName,ShowDriveLetter,ShowHomePath,ShowNumSeasons,ShowNumEpisodes,ShowAlbumArtPath,IsEnabled,TvdbID,ImdbID,fk_MediaType")] TelevisionShow televisionShow)
        {
            if (ModelState.IsValid)
            {
                db.TelevisionShows.Add(televisionShow);
                db.SaveChanges();
                return(RedirectToAction("SeasonInfo", "Media", new { Id = db.TelevisionShows.First(s => s.ShowName == televisionShow.ShowName) }));
            }

            return(View(televisionShow));
        }
예제 #5
0
        private IProduction ParseTelevisionShow(Match regexMatch)
        {
            var tvShow = new TelevisionShow();

            tvShow.Title = ParseTitle(regexMatch);
            tvShow.Year  = ParseYear(regexMatch);

            tvShow.SeriesNumber  = ParseSeriesNumber(regexMatch);
            tvShow.EpisodeNumber = ParseEpisodeNumber(regexMatch);
            tvShow.EpisodeTitle  = ParseEpisodeTitle(regexMatch);

            return(tvShow);
        }
예제 #6
0
        // GET: TelevisionShows/Delete/5
        public ActionResult Delete(int?id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            TelevisionShow televisionShow = db.TelevisionShows.Find(id);

            if (televisionShow == null)
            {
                return(HttpNotFound());
            }
            return(View(televisionShow));
        }
예제 #7
0
        public void TestParseCreatesValidTelevisionShowObjectWithNonWordCharacters()
        {
            var movieString = @"# ""'Allo 'Allo!"" (1982) {A Marriage of Inconvenience (#5.6)}";
            var expected    = new TelevisionShow
            {
                Title         = "'Allo 'Allo!",
                Year          = 1982,
                EpisodeTitle  = "A Marriage of Inconvenience",
                SeriesNumber  = 5,
                EpisodeNumber = 6
            };

            var logger = new Mock <ILog>();
            var actual = new ProductionParser(logger.Object).Parse(movieString);

            Assert.AreEqual(expected, actual);
        }
 //Show view to create new season
 public ActionResult AddSeason(int?id)
 {
     using (MediaManagerDB shows_db = new MediaManagerDB())
     {
         if (id.HasValue)
         {
             TelevisionShow shows = shows_db.TelevisionShows.Where(showDetails => showDetails.pk_ShowID == id).FirstOrDefault();
             return(View(shows));
         }
         else
         {
             return(View(new TelevisionShow {
                 pk_ShowID = 0, ShowName = null, ShowHomePath = null
             }));
         }
     }
 }
예제 #9
0
        public void TestParseCreatesValidTelevisionShowObjectWithNoEpisodeTitle()
        {
            var productionDefinition = @"# ""1 quart de 3"" (2008) {(#1.1)}";

            var expected = new TelevisionShow()
            {
                Title = "1 quart de 3",
                Year = 2008,
                SeriesNumber = 1,
                EpisodeNumber = 1,
                EpisodeTitle = string.Empty
            };

            var logger = new Mock<ILog>();
            var actual = new ProductionParser(logger.Object).Parse(productionDefinition);
            Assert.AreEqual(expected, actual);
        }
예제 #10
0
        public void TestParseCreatesValidTelevisionShowObjectWithNoSeriesOrEpisodeNumbers()
        {
            var productionDefinition = @"# ""'t Schaep Met De 5 Pooten"" (1969) {Liedjes uit 't Schaep Met 5 Pooten}";
            var expected             = new TelevisionShow
            {
                Title         = "'t Schaep Met De 5 Pooten",
                Year          = 1969,
                EpisodeTitle  = "Liedjes uit 't Schaep Met 5 Pooten",
                SeriesNumber  = 0,
                EpisodeNumber = 0
            };

            var logger = new Mock <ILog>();
            var actual = new ProductionParser(logger.Object).Parse(productionDefinition);

            Assert.AreEqual(expected, actual);
        }
예제 #11
0
        public void TestParseCreatesValidTelevisionShowObjectWithNoEpisodeTitle()
        {
            var productionDefinition = @"# ""1 quart de 3"" (2008) {(#1.1)}";

            var expected = new TelevisionShow()
            {
                Title         = "1 quart de 3",
                Year          = 2008,
                SeriesNumber  = 1,
                EpisodeNumber = 1,
                EpisodeTitle  = string.Empty
            };

            var logger = new Mock <ILog>();
            var actual = new ProductionParser(logger.Object).Parse(productionDefinition);

            Assert.AreEqual(expected, actual);
        }
예제 #12
0
        /// <summary>
        /// Activates the show in the SDN Media Manager allowing it to be searched and watched
        /// </summary>
        /// <param name="show">Model of show to activate</param>
        /// <param name="conn">DBContext connection to use to activate show</param>
        /// <returns>true if activated successfully</returns>
        public static bool ActivateShow(this TelevisionShow show, MediaManagerDB conn)
        {
            bool finalResult;

            using (conn)
            {
                var db = conn.ActivateShow(show.pk_ShowID);

                if (db == 1)
                {
                    finalResult = true;
                }
                else
                {
                    finalResult = false;
                }
            }

            return(finalResult);
        }
        public ActionResult CreateShow([Bind(Include = "pk_ShowID,ShowName,ShowDriveLetter,ShowHomePath,ShowNumSeasons,ShowNumEpisodes,ShowAlbumArtPath,IsEnabled,TvdbID,ImdbID,fk_MediaType")] TelevisionShow televisionShow)
        {
            MediaManagerDB db = new MediaManagerDB();

            if (ModelState.IsValid)
            {
                televisionShow.ShowAlbumArtPath = televisionShow.ShowAlbumArtPath.Replace("~art", televisionShow.ShowHomePath + @"\art");
                televisionShow.ShowNumSeasons   = 0;
                televisionShow.ShowNumEpisodes  = 0;
                televisionShow.ShowDriveLetter  = televisionShow.ShowHomePath[0].ToString();

                db.TelevisionShows.Add(televisionShow);
                db.SaveChanges();

                //var showID = db.TelevisionShows.Where(s => s.ShowName == televisionShow.ShowName).First().pk_ShowID;

                int.TryParse(db.GetShowIdByName(televisionShow.ShowName, null).ToString(), out int showID);

                return(RedirectToAction("SeasonInfo", "Media", new { id = showID }));
            }
            return(View(televisionShow));
        }
예제 #14
0
        public static async Task Main(string[] args)
        {
            using (EpisodateClient client = new EpisodateClient()) {
                PopularShows popularShows = await client.GetPopularShowsAsync().ConfigureAwait(false);

                if (popularShows == null)
                {
                    Console.WriteLine("Request failed!");
                    Console.WriteLine("Check your connection and restart!");
                    Console.WriteLine("Press any key to exit...");
                    Console.ReadKey();
                }

                for (int i = 0; i < popularShows.ShowsCollection.Length; i++)
                {
                    TelevisionShow show = popularShows.ShowsCollection[i];
                    Console.WriteLine(show.Name);
                    Console.WriteLine(show.CurrentStatus);
                }

                Console.ReadKey();
            }
        }
예제 #15
0
        /// <summary>
        /// Get total file size of all show episodes
        /// </summary>
        /// <param name="uShow">Show to sum episode file sizes</param>
        /// <param name="seasonNumber">optional season number to limit sum of episode filesizes to</param>
        /// <param name="episodeNumber">optional number of single episode of which to get filesize</param>
        /// <returns>long int total bytes of all episodes for show</returns>
        public static long ShowFileSize(this TelevisionShow uShow, int?seasonNumber, int?episodeNumber)
        {
            long finalSize = 0;

            using (MediaManagerDB db = new MediaManagerDB())
            {
                foreach (TelevisionShow show in db.TelevisionShows.Where(s => s.ShowName == uShow.ShowName))
                {
                    if (!seasonNumber.HasValue)
                    {
                        foreach (TelevisionSeason season in show.TelevisionSeasons)
                        {
                            finalSize += season.SeasonFileSize();
                        }
                    }
                    else
                    {
                        foreach (TelevisionSeason season in show.TelevisionSeasons.Where(s => s.SeasonNum == seasonNumber))
                        {
                            if (!episodeNumber.HasValue)
                            {
                                finalSize += season.SeasonFileSize();
                            }
                            else
                            {
                                foreach (TelevisionEpisode episode in season.TelevisionEpisodes.Where(e => e.EpisodeNum == episodeNumber))
                                {
                                    finalSize += GetFileSize(episode.EpisodePath);
                                }
                            }
                        }
                    }
                }
            }

            return(finalSize);
        }
예제 #16
0
        public void TestParseCreatesValidTelevisionShowObjectWithNonWordCharacters()
        {
            var movieString = @"# ""'Allo 'Allo!"" (1982) {A Marriage of Inconvenience (#5.6)}";
            var expected = new TelevisionShow
            {
                Title = "'Allo 'Allo!",
                Year = 1982,
                EpisodeTitle = "A Marriage of Inconvenience",
                SeriesNumber = 5,
                EpisodeNumber = 6
            };

            var logger = new Mock<ILog>();
            var actual = new ProductionParser(logger.Object).Parse(movieString);
            Assert.AreEqual(expected, actual);
        }
예제 #17
0
        public void TestParseCreatesValidTelevisionShowObjectWithNoSeriesOrEpisodeNumbers()
        {
            var productionDefinition = @"# ""'t Schaep Met De 5 Pooten"" (1969) {Liedjes uit 't Schaep Met 5 Pooten}";
            var expected = new TelevisionShow
            {
                Title = "'t Schaep Met De 5 Pooten",
                Year = 1969,
                EpisodeTitle = "Liedjes uit 't Schaep Met 5 Pooten",
                SeriesNumber = 0,
                EpisodeNumber = 0
            };

            var logger = new Mock<ILog>();
            var actual = new ProductionParser(logger.Object).Parse(productionDefinition);
            Assert.AreEqual(expected, actual);
        }
예제 #18
0
        private IProduction ParseTelevisionShow(Match regexMatch)
        {
            var tvShow = new TelevisionShow();

            tvShow.Title = ParseTitle(regexMatch);
            tvShow.Year = ParseYear(regexMatch);

            tvShow.SeriesNumber = ParseSeriesNumber(regexMatch);
            tvShow.EpisodeNumber = ParseEpisodeNumber(regexMatch);
            tvShow.EpisodeTitle = ParseEpisodeTitle(regexMatch);

            return tvShow;
        }