コード例 #1
0
ファイル: DataAccess.cs プロジェクト: spol/Splice
        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;
        }
コード例 #2
0
ファイル: FileSystemScanner.cs プロジェクト: spol/Splice
        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.
        }
コード例 #3
0
ファイル: DataAccess.cs プロジェクト: spol/Splice
        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;
        }
コード例 #4
0
ファイル: DataAccess.cs プロジェクト: spol/Splice
        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;
        }
コード例 #5
0
ファイル: DataAccess.cs プロジェクト: spol/Splice
        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;
        }
コード例 #6
0
ファイル: DataAccess.cs プロジェクト: spol/Splice
        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;
        }