private void UpdateShow(TVShow Show) { Reporting.Log("Updating show: " + Show.Title); string[] VideoPaths = Directory.GetFiles(Show.Location, "*.*", SearchOption.AllDirectories); List<VideoFileInfo> Videos = new List<VideoFileInfo>(); foreach (string VidPath in VideoPaths) { if (!ConfigurationManager.CurrentConfiguration.VideoExtensions.Contains(new FileInfo(VidPath).Extension.Trim('.'))) { continue; } Reporting.Log(VidPath); VideoFileInfo VidFile = new VideoFileInfo(VidPath); VideoFileInfo CurrentFile = DataAccess.GetVideoFileFromHash(VidFile.Hash); Reporting.Log(VidFile.Hash); if (CurrentFile != null) { // File has been seen before. Reporting.Log("Already seen"); if (CurrentFile.Path != VidFile.Path) { Reporting.Log("Updating location."); // Update video file location. CurrentFile.Path = VidFile.Path; DataAccess.SaveVideoFile(CurrentFile); } } else { // new file. // Save filesize FileInfo Info = new FileInfo(VidFile.Path); VidFile.Size = Info.Length; string RelativePath = VidPath.Replace(Show.Location, ""); int SeasonNumber = -1; int EpisodeNumber = -1; foreach (string Regex in ConfigurationManager.CurrentConfiguration.TVRegexes) { Regex R = new Regex(Regex); Match M = R.Match(RelativePath); if (M.Success) { if (M.Groups.Count < 1) { continue; } else if (M.Groups.Count == 2) { EpisodeNumber = Convert.ToInt32(M.Groups[1].Value); } else { SeasonNumber = Convert.ToInt32(M.Groups[1].Value); EpisodeNumber = Convert.ToInt32(M.Groups[2].Value); } break; } } if (EpisodeNumber == 0) { Reporting.Log(RelativePath + " does not match any TV regexes in config file."); return; } // check for presence of season TVSeason Season = DataAccess.GetTVSeason(Show, SeasonNumber); if (Season == null) { // insert season if not present. Season = new TVSeason() { SeasonNumber = SeasonNumber, ShowId = Show.Id }; Season = DataAccess.SaveSeason(Season); TvdbDownloader Downloader = new TvdbDownloader(TvdbApiKey); List<TvdbBanner> Banners = Downloader.DownloadBanners(Show.TvdbId); List<TvdbSeasonBanner> SeasonBanners = new List<TvdbSeasonBanner>(); foreach (TvdbBanner Banner in Banners) { if (Banner.GetType() == typeof(TvdbSeasonBanner)) { TvdbSeasonBanner SeasonBanner = (TvdbSeasonBanner)Banner; if (SeasonBanner.Season == SeasonNumber) { SeasonBanners.Add(SeasonBanner); } } } Season.Art = CacheManager.SaveArtwork(Season.Id, SeasonBanners[0].BannerPath, ArtworkType.Poster); Season = DataAccess.SaveSeason(Season); } // check for presence of episode TVEpisode Episode = DataAccess.GetTVEpisode(Show, Season, EpisodeNumber); // insert ep if not present if (Episode == null) { TvdbEpisode TvdbEp = LookupEpisode(Show, Season, EpisodeNumber); if (TvdbEp == null) { Reporting.Log(String.Format("Episode not found: {0} - {1}x{2} ({3})", Show.Title, Season.SeasonNumber, EpisodeNumber, VidFile.Path)); continue; } Episode = new TVEpisode() { EpisodeNumber = EpisodeNumber, SeasonId = Season.Id, AirDate = TvdbEp.FirstAired, Rating = TvdbEp.Rating, Summary = TvdbEp.Overview, Title = TvdbEp.EpisodeName, TvdbId = TvdbEp.Id, }; Episode = DataAccess.SaveEpisode(Episode); Episode.Thumb = CacheManager.SaveArtwork(Episode.Id, TvdbEp.BannerPath, ArtworkType.Banner); DataAccess.SaveEpisode(Episode); } // save video file VidFile.LoadMetaDataFromFile(); VidFile = DataAccess.SaveVideoFile(VidFile); // add video file to episode. DataAccess.AssocVideoWithEpisode(VidFile, Episode); } } // TODO: Clean up missing files. }
private TvdbEpisode LookupEpisode(TVShow Show, TVSeason Season, Int32 EpisodeNumber) { TvdbHandler Handler = new TvdbHandler(TvdbApiKey); return Handler.GetEpisode(Show.TvdbId, Season.SeasonNumber, EpisodeNumber, TvdbEpisode.EpisodeOrdering.DefaultOrder, TvdbLanguage.DefaultLanguage); }
private TVSeason UpdateSeason(DirectoryInfo Dir, TVShow Show, int SeasonNumber) { TVSeason Season = DataAccess.GetTVSeason(Show, SeasonNumber); if (Season != null) { return Season; } else { Season = new TVSeason() { SeasonNumber = SeasonNumber, ShowId = Show.Id, Art = "" }; return DataAccess.SaveSeason(Season); } }
public static TVSeason SaveSeason(TVSeason Season) { SQLiteCommand cmd = Connection.CreateCommand(); if (Season.Id == 0) { Season.Id = GetNewGlobalId("season"); cmd.CommandText = String.Format(@"INSERT INTO tv_seasons (id, seasonNumber, title, showId, art) VALUES ( @Id, @SeasonNumber, @Title, @ShowId, @Art);"); } else { cmd.CommandText = String.Format(@"UPDATE tv_seasons SET seasonNumber = @SeasonNumber, title = @Title, showId = @ShowId, art = @Art WHERE id = @Id;"); } cmd.Parameters.Add(new SQLiteParameter("@Id", DbType.Int32) { Value = Season.Id }); cmd.Parameters.Add(new SQLiteParameter("@SeasonNumber", DbType.Int32) { Value = Season.SeasonNumber }); cmd.Parameters.Add(new SQLiteParameter("@Title", DbType.String) { Value = Season.Title }); cmd.Parameters.Add(new SQLiteParameter("@ShowId", DbType.Int32) { Value = Season.ShowId }); cmd.Parameters.Add(new SQLiteParameter("@Art", DbType.String) { Value = Season.Art }); cmd.ExecuteNonQuery(); return Season; }
public static TVSeason GetTVSeason(TVShow Show, int SeasonNumber) { SQLiteCommand cmd = Connection.CreateCommand(); cmd.CommandText = "SELECT * FROM tv_seasons WHERE seasonNumber = @SeasonNumber AND showId = @ShowId"; cmd.Parameters.Add(new SQLiteParameter("@SeasonNumber", DbType.Int32) { Value = SeasonNumber }); cmd.Parameters.Add(new SQLiteParameter("@ShowId", DbType.Int32) { Value = Show.Id }); SQLiteDataAdapter da = new SQLiteDataAdapter(cmd); DataTable SeasonsTable = new DataTable(); da.Fill(SeasonsTable); if (SeasonsTable.Rows.Count == 1) { DataRow SeasonRow = SeasonsTable.Rows[0]; TVSeason Season = new TVSeason(); Season.Id = Convert.ToInt32(SeasonRow["id"]); Season.SeasonNumber = Convert.ToInt32(SeasonRow["seasonNumber"]); Season.ShowId = Convert.ToInt32(SeasonRow["showId"]); //Season.Art = Convert.ToString(showRow["art"] == DBNull.Value ? "" : showRow["art"]); return Season; } else { return null; } }
public static List<TVEpisode> GetTVEpisodes(TVSeason Season) { SQLiteCommand Cmd = Connection.CreateCommand(); Cmd.CommandText = "SELECT * FROM tv_episodes WHERE seasonId = @SeasonId;"; Cmd.Parameters.Add(new SQLiteParameter("@SeasonId", DbType.Int32) { Value = Season.Id }); SQLiteDataAdapter DA = new SQLiteDataAdapter(Cmd); DataTable EpisodesTable = new DataTable(); DA.Fill(EpisodesTable); List<TVEpisode> Episodes = new List<TVEpisode>(); foreach (DataRow Row in EpisodesTable.Rows) { TVEpisode Episode = new TVEpisode(Row); Episode.VideoFiles = DataAccess.GetVideoFilesForEpisode(Episode.Id); Episodes.Add(Episode); } return Episodes; }
public static TVEpisode GetTVEpisode(TVShow Show, TVSeason Season, int EpisodeNumber) { SQLiteCommand cmd = Connection.CreateCommand(); cmd.CommandText = "SELECT * FROM tv_episodes WHERE episodeNumber = @EpisodeNumber AND seasonId = @SeasonId"; cmd.Parameters.Add(new SQLiteParameter("@EpisodeNumber", DbType.Int32) { Value = EpisodeNumber }); cmd.Parameters.Add(new SQLiteParameter("@SeasonId", DbType.Int32) { Value = Season.Id }); SQLiteDataAdapter da = new SQLiteDataAdapter(cmd); DataTable EpisodeTable = new DataTable(); da.Fill(EpisodeTable); if (EpisodeTable.Rows.Count >= 1) { DataRow Row = EpisodeTable.Rows[0]; TVEpisode Episode = new TVEpisode(Row); return Episode; } return null; }