public static Boolean AssocVideoWithEpisode(VideoFileInfo VidFile, TVEpisode Episode) { SQLiteCommand cmd = Connection.CreateCommand(); cmd.CommandText = String.Format(@"INSERT INTO episode2video (episodeId, videoId) VALUES ( @EpisodeId, @VideoId);"); cmd.Parameters.Add(new SQLiteParameter("@EpisodeId", DbType.Int32) { Value = Episode.Id }); cmd.Parameters.Add(new SQLiteParameter("@VideoId", DbType.Int32) { Value = VidFile.Id }); return cmd.ExecuteNonQuery() > 0; }
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. }
public static TVEpisode SaveEpisode(TVEpisode Episode) { SQLiteCommand cmd = Connection.CreateCommand(); if (Episode.Id == 0) { Episode.Id = GetNewGlobalId("episode"); cmd.CommandText = String.Format(@"INSERT INTO tv_episodes (id, title, episodeNumber, seasonId, summary, rating, airDate, thumb) VALUES ( @Id, @Title, @EpisodeNumber, @SeasonId, @Summary, @Rating, @AirDate, @Thumb);"); } else { cmd.CommandText = String.Format(@"UPDATE tv_episodes SET title = @Title, episodeNumber = @EpisodeNumber, seasonId = @SeasonId, summary = @Summary, rating = @Rating, airDate = @AirDate, thumb = @Thumb WHERE id = @Id;"); } cmd.Parameters.Add(new SQLiteParameter("@Id", DbType.String) { Value = Episode.Id }); cmd.Parameters.Add(new SQLiteParameter("@Title", DbType.String) { Value = Episode.Title }); cmd.Parameters.Add(new SQLiteParameter("@EpisodeNumber", DbType.Int32) { Value = Episode.EpisodeNumber }); cmd.Parameters.Add(new SQLiteParameter("@SeasonId", DbType.Int32) { Value = Episode.SeasonId }); cmd.Parameters.Add(new SQLiteParameter("@Summary", DbType.String) { Value = Episode.Summary }); cmd.Parameters.Add(new SQLiteParameter("@Rating", DbType.Double) { Value = Episode.Rating }); cmd.Parameters.Add(new SQLiteParameter("@AirDate", DbType.DateTime) { Value = Episode.AirDate }); cmd.Parameters.Add(new SQLiteParameter("@Thumb", DbType.String) { Value = Episode.Thumb }); cmd.ExecuteNonQuery(); return Episode; }
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(Int32 Id) { SQLiteCommand cmd = Connection.CreateCommand(); cmd.CommandText = "SELECT * FROM tv_episodes WHERE id = @EpisodeId;"; cmd.Parameters.Add(new SQLiteParameter("@EpisodeId", DbType.Int32) { Value = 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; }
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; }