Example #1
0
        public static void Update(this ShowSql showBdd, ITraktUserHiddenItem item)
        {
            showBdd.Blacklisted = true;

            if (item.Type == TraktHiddenItemType.Show)
            {
                showBdd.Name = item.Show.Title;
                showBdd.Year = item.Show.Year;
            }
            else if (item.Type == TraktHiddenItemType.Movie)
            {
                showBdd.Name = item.Movie.Title;
                showBdd.Year = item.Movie.Year;
            }

            var show = item.Show;

            if (show.Ids.Tmdb.HasValue)
            {
                showBdd.Providers[ProviderSql.Tmdb] = show.Ids.Tmdb.ToString();
            }

            if (!string.IsNullOrEmpty(show.Ids.Imdb))
            {
                showBdd.Providers[ProviderSql.Imdb] = show.Ids.Imdb;
            }
        }
        /// <summary>
        /// Create an NHibernate configuration class.
        /// </summary>
        /// <param name="options">Configuration options.</param>
        /// <returns>The configuration.</returns>
        public NHibernate.Cfg.Configuration CreateNHibernateConfiguration(ConfigurationFlags options)
        {
            var configuration = new NHibernate.Cfg.Configuration();

            if ((options & ConfigurationFlags.Settings) == ConfigurationFlags.Settings)
            {
                configuration.SetProperty("hibernate.connection.connection_string", ConnectionConnectionString);
                configuration.SetProperty("hibernate.connection.provider", ConnectionProvider);
                configuration.SetProperty("hibernate.connection.driver_class", ConnectionDriverClass);
                configuration.SetProperty("hibernate.show_sql",
                                          ShowSql.ToString(CultureInfo.InvariantCulture).ToUpper(
                                              CultureInfo.InvariantCulture));
                configuration.SetProperty("hibernate.dialect", Dialect);
            }

            if ((options & ConfigurationFlags.Mappings) == ConfigurationFlags.Mappings)
            {
                foreach (Assembly assembly in MappingAssemblies)
                {
                    configuration.AddAssembly(assembly);
                }
            }

            if ((options & ConfigurationFlags.Interceptor) == ConfigurationFlags.Interceptor)
            {
                configuration.SetInterceptor(Interceptor);
            }

            return(configuration);
        }
Example #3
0
        public IDictionary <string, string> GetProperties()
        {
            if (Provider.IsEmpty())
            {
                throw new ApplicationException("DatabaseSettings unavailable. Make sure your application configuration file has appSetting entries for the necessary DatabaseSettings properties.");
            }
            var properties = new Dictionary <string, string>
            {
                { "connection.provider", Provider },
                { "connection.driver_class", Driver },
                { "dialect", Dialect },
                { "use_outer_join", UseOuterJoin.ToString().ToLowerInvariant() },
                { "connection.connection_string", ConnectionString },
                { "show_sql", ShowSql.ToString().ToLowerInvariant() },
                { "proxyfactory.factory_class", ProxyFactory }
            };

            if (IsCacheEnabled())
            {
                properties.Add("cache.provider_class", CacheProvider);
                properties.Add("cache.use_second_level_cache", "true");
                properties.Add("cache.use_query_cache", "true");
            }

            if (GenerateStatistics)
            {
                properties.Add("generate_statistics", "true");
            }


            return(properties);
        }
 public static IPersistenceConfigurer GetDatabaseConfig(ShowSql showSql)
 {
     return(showSql switch
     {
         ShowSql.No => PostgreSQLConfiguration.Standard.ConnectionString(ConfigurationHelper.ConnectionString),
         ShowSql.UnformattedSql => PostgreSQLConfiguration.Standard.ConnectionString(ConfigurationHelper.ConnectionString).ShowSql(),
         ShowSql.FormattedSql => PostgreSQLConfiguration.Standard.ConnectionString(ConfigurationHelper.ConnectionString).ShowSql().FormatSql(),
         _ => throw new Exception($"Database configuration not found on {nameof(DatabaseConfigurer)}.{nameof(GetDatabaseConfig)}."),
     });
Example #5
0
        public static void Update(this ShowSql showBdd, TMDbConfig config, TvShow item)
        {
            showBdd.PosterUrl = config.Images.SecureBaseUrl + "w500" + item.PosterPath;

            if (item.ExternalIds != null)
            {
                showBdd.Providers[ProviderSql.Imdb] = item.ExternalIds.ImdbId;
            }
        }
Example #6
0
        public bool RefreshMissingEpisodes(IDatabase database)
        {
            List <ShowSql> result = new List <ShowSql>();

            var show = new ShowSql(true)
            {
                Id        = 99718,
                Name      = "Westworld",
                Providers = new Dictionary <ProviderSql, string> {
                    { ProviderSql.Imdb, "tt0475784" }, { ProviderSql.Tmdb, "63247" }
                },
            };

            var season = new SeasonSql()
            {
                SeasonNumber = 2,
            };

            season.Episodes = new List <EpisodeSql>
            {
                new EpisodeSql()
                {
                    EpisodeNumber = 3, Status = EpisodeStatusSql.Missing
                },
                new EpisodeSql()
                {
                    EpisodeNumber = 4, Status = EpisodeStatusSql.Missing
                },
                new EpisodeSql()
                {
                    EpisodeNumber = 5, Status = EpisodeStatusSql.Collected
                }
            };

            show.Seasons = new List <SeasonSql> {
                season
            };

            result.Add(show);

            result.Add(new ShowSql(true)
            {
                Id   = 123,
                Name = "z fake",
            });

            result.Add(new ShowSql(true)
            {
                Id   = 456,
                Name = "9 fake",
            });

            database.AddOrUpdateShows(result);

            return(true);
        }
Example #7
0
        public static void Update(this ShowSql showBdd, TraktShow item)
        {
            showBdd.Name = item.SerieName;
            showBdd.Year = item.Year;

            if (item.Tmdb.HasValue)
            {
                showBdd.Providers[ProviderSql.Tmdb] = item.Tmdb.ToString();
            }

            if (!string.IsNullOrEmpty(item.Imdb))
            {
                showBdd.Providers[ProviderSql.Imdb] = item.Imdb;
            }
        }
Example #8
0
        /// <summary>
        /// Converts this instance to key value pairs specifically for passing
        /// to NHibernate configuration.
        /// </summary>
        public IDictionary <string, string> GetAsNHiberateProperties()
        {
            var properties = new Dictionary <string, string>
            {
                { "connection.provider", Provider },
                { "connection.driver_class", DriverClass },
                { "dialect", Dialect },
                { "use_outer_join", UseOuterJoin.ToString() },
                { "connection.connection_string", ConnectionString },
                { "show_sql", ShowSql.ToString() },
                { "proxyfactory.factory_class", ProxyFactory }
            };

            return(properties);
        }
Example #9
0
        private ShowSql GetShow(IDatabase database, uint id)
        {
            ShowSql localShow = null;

            lock (ShowLock())
            {
                localShow = database.GetShow(id);

                if (localShow == null)
                {
                    localShow = new ShowSql(true)
                    {
                        Id = id,
                    };
                }
            }

            return(localShow);
        }
Example #10
0
        private SeasonSql GetSeason(ShowSql show, int seasonNumber)
        {
            SeasonSql localSeason = null;

            lock (ShowLock())
            {
                localSeason = show.Seasons.SingleOrDefault(s => s.SeasonNumber == seasonNumber);

                if (localSeason == null)
                {
                    localSeason = new SeasonSql(show)
                    {
                        SeasonNumber = seasonNumber,
                    };
                    show.Seasons.Add(localSeason);
                }
            }

            return(localSeason);
        }
Example #11
0
        private async Task <List <ShowSql> > RefreshSeasonHiddenItem(IDatabase database, List <ShowSql> shows)
        {
            Dictionary <uint, ShowSql> res = shows.ToDictionary(s => s.Id);
            TraktPagedResponse <ITraktUserHiddenItem> hiddenSeason = await Client.Users.GetHiddenItemsAsync(TraktHiddenItemsSection.ProgressCollected, TraktHiddenItemType.Season).ConfigureAwait(false);

            TraktPagedResponse <ITraktUserHiddenItem> hiddenSeasonRes = hiddenSeason;

            foreach (ITraktUserHiddenItem traktUserHiddenItem in hiddenSeasonRes)
            {
                ShowSql localShow = res.ContainsKey(traktUserHiddenItem.Show.Ids.Trakt) ? res[traktUserHiddenItem.Show.Ids.Trakt] : GetShow(database, traktUserHiddenItem.Show.Ids.Trakt);

                SeasonSql localSeason = GetSeason(localShow, traktUserHiddenItem.Season.Number.Value);

                localSeason.Update(traktUserHiddenItem);

                res[localShow.Id] = localShow;
            }

            return(res.Values.ToList());
        }
Example #12
0
        private async Task <List <ShowSql> > RefreshShowHiddenItem(IDatabase database)
        {
            List <ShowSql> res = new List <ShowSql>();
            TraktPagedResponse <ITraktUserHiddenItem> hiddenShow = await Client.Users
                                                                   .GetHiddenItemsAsync(TraktHiddenItemsSection.ProgressCollected, TraktHiddenItemType.Show)
                                                                   .ConfigureAwait(false);

            TraktPagedResponse <ITraktUserHiddenItem> hiddenShowRes = hiddenShow;

            foreach (ITraktUserHiddenItem traktUserHiddenItem in hiddenShowRes)
            {
                ShowSql localShow = GetShow(database, traktUserHiddenItem.Show.Ids.Trakt);

                localShow.Update(traktUserHiddenItem);

                res.Add(localShow);
            }

            return(res);
        }
Example #13
0
        public static Shared.Remote.Show Convert(this ShowSql sho)
        {
            Shared.Remote.Show show = new Shared.Remote.Show
            {
                Id          = sho.Id,
                Blacklisted = sho.Blacklisted,
                SerieName   = sho.Name,
                Year        = sho.Year,
                //Providers = sho.Providers.ToDictionary(
                //    pair => (Provider)Enum.Parse(typeof(Provider), Enum.GetName(typeof(ProviderSql), pair.Key)),
                //    pair => pair.Value),
                PosterUrl = sho.PosterUrl,
            };

            foreach (var seasonSqLite in sho.Seasons)
            {
                show.Seasons.Add(seasonSqLite.Convert());
            }

            return(show);
        }
        public static void Initialize(ShowSql showSql)
        {
            _fluentConfiguration = Fluently.Configure()
                                   .Database(DatabaseConfigurer.GetDatabaseConfig(showSql))
                                   .Mappings(m =>
            {
                m.FluentMappings
                .AddFromAssembly(Assembly.Load(ConfigurationHelper.EntitiesMapsNamespace))
                .Conventions.Add(new TableNamingConvention())
                .Conventions.Add(new ColumnNamingConvention())
                .Conventions.Add(new PrimaryKeyNamingConvention())
                .Conventions.Add(new ForeignKeyNamingConvention())
                .Conventions.Add(new ReferenceConvention());
            })
                                   .ExposeConfiguration(x =>
            {
                x.SetInterceptor(new SqlStatementInterceptor());
            });

            _currentSession = _fluentConfiguration.BuildSessionFactory();
        }
Example #15
0
        private async Task RefreshShow(TMDbClient client, ShowSql showSql)
        {
            if (!showSql.Blacklisted && showSql.Providers.ContainsKey(ProviderSql.Tmdb) && !string.IsNullOrEmpty(showSql.Providers[ProviderSql.Tmdb]) && int.TryParse(showSql.Providers[ProviderSql.Tmdb], out var showId))
            {
                bool first = true;

                // Refresh episodes
                foreach (var seasonSql in showSql.Seasons.Where(s => !s.Blacklisted))
                {
                    foreach (var episodeSql in seasonSql.Episodes)
                    {
                        if (string.IsNullOrEmpty(episodeSql.PosterUrl) && episodeSql.Status == EpisodeStatusSql.Missing)
                        {
                            if (first)
                            {
                                first = false;
                            }
                            else
                            {
                                await Task.Delay(1000);
                            }


                            await RefreshEpisode(client, episodeSql, showId);
                        }
                    }
                }

                // Missing show infos
                if (string.IsNullOrEmpty(showSql.PosterUrl))
                {
                    TvShow tvShow = await client.GetTvShowAsync(showId, TvShowMethods.ExternalIds, "fr-FR").ConfigureAwait(false);

                    showSql.Update(client.Config, tvShow);
                }
            }
        }
Example #16
0
        private async Task HandleProgress(TraktShow traktShow, ShowSql bddShow)
        {
            // Remove Season blacklist
            traktShow.Seasons.RemoveAll(s => bddShow.Seasons.Any(b => b.SeasonNumber == s.Season && b.Blacklisted));

            if (traktShow.Seasons.Any())
            {
                TraktResponse <TraktNet.Objects.Get.Shows.ITraktShowCollectionProgress> collectionProgress =
                    await Client.Shows.GetShowCollectionProgressAsync(traktShow.Id.ToString(), false, false, false).ConfigureAwait(false);

                TraktResponse <TraktNet.Objects.Get.Shows.ITraktShowCollectionProgress> collectionProgressRes = collectionProgress;

                foreach (ITraktSeasonCollectionProgress season in collectionProgressRes.Value.Seasons)
                {
                    TraktSeason misSeason = traktShow.Seasons.SingleOrDefault(e => e.Season == season.Number);
                    if (misSeason == null)
                    {
                        misSeason = new TraktSeason {
                            Season = season.Number.Value
                        };
                        traktShow.Seasons.Add(misSeason);
                    }

                    foreach (ITraktEpisodeCollectionProgress episode in season.Episodes)
                    {
                        // Already existing in missing
                        if (misSeason.MissingEpisodes.All(m => m.Episode != episode.Number))
                        {
                            misSeason.MissingEpisodes.Add(new TraktEpisode {
                                Episode = episode.Number.Value, Collected = episode.Completed.HasValue && episode.Completed.Value
                            });
                        }
                    }
                }

                foreach (TraktSeason showSeason in traktShow.Seasons)
                {
                    SeasonSql season = GetSeason(bddShow, showSeason.Season);

                    // BlackList Ended series if complete
                    if ((traktShow.Status == TraktShowStatus.Ended || traktShow.Status == TraktShowStatus.Canceled) && !showSeason.MissingEpisodes.Any())
                    {
                        season.Blacklisted = true;
                    }

                    if (!season.Blacklisted)
                    {
                        // Save missing episode
                        foreach (TraktEpisode missingEpisode in showSeason.MissingEpisodes)
                        {
                            EpisodeSql ep = GetEpisode(season, missingEpisode.Episode);
                            ep.Status = missingEpisode.Collected || missingEpisode.Watched ? EpisodeStatusSql.Collected : EpisodeStatusSql.Missing;
                        }
                    }

                    // Remove watched from missing
                    showSeason.MissingEpisodes.RemoveAll(m => m.Watched);

                    // Remove collected from missing
                    showSeason.MissingEpisodes.RemoveAll(m => m.Collected);
                }

                traktShow.Seasons.RemoveAll(s => !s.MissingEpisodes.Any());
            }
        }
Example #17
0
        public bool RefreshMissingEpisodes(IDatabase database)
        {
            SetupClient(database);

            RefreshHiddenItem(database);

            // Set all missing to unknown
            database.ClearMissingEpisodes();

            Task <TraktListResponse <ITraktCollectionShow> > collected = Client.Users.GetCollectionShowsAsync("me", new TraktExtendedInfo {
                Full = true
            });
            Task <TraktListResponse <ITraktWatchedShow> > watched = Client.Users.GetWatchedShowsAsync("me", new TraktExtendedInfo {
                Full = true
            });

            List <TraktShow> shows = new List <TraktShow>();

            watched.Wait();
            TraktListResponse <ITraktWatchedShow> watchedRes = watched.Result;

            foreach (ITraktWatchedShow traktWatchedShow in watchedRes)
            {
                int watchedEpisodes = traktWatchedShow.WatchedSeasons.Where(s => s.Number != 0).Sum(season => season.Episodes.Count());

                TraktShow show = new TraktShow
                {
                    Id        = traktWatchedShow.Ids.Trakt,
                    Year      = traktWatchedShow.Year,
                    SerieName = traktWatchedShow.Title,
                    Watched   = watchedEpisodes >= traktWatchedShow.AiredEpisodes,
                    Status    = traktWatchedShow.Status,
                    Imdb      = traktWatchedShow.Ids.Imdb,
                    Tmdb      = traktWatchedShow.Ids.Tmdb,
                };

                foreach (ITraktWatchedShowSeason season in traktWatchedShow.WatchedSeasons)
                {
                    TraktSeason traktSeason = new TraktSeason {
                        Season = season.Number.Value
                    };

                    foreach (ITraktWatchedShowEpisode episode in season.Episodes)
                    {
                        traktSeason.MissingEpisodes.Add(new TraktEpisode {
                            Episode = episode.Number.Value, Watched = true
                        });
                    }

                    show.Seasons.Add(traktSeason);
                }

                shows.Add(show);
            }

            collected.Wait();
            TraktListResponse <ITraktCollectionShow> collectedRes = collected.Result;

            foreach (ITraktCollectionShow traktCollectionShow in collectedRes)
            {
                TraktShow show = shows.SingleOrDefault(s => s.Id == traktCollectionShow.Ids.Trakt);
                if (show == null)
                {
                    show = new TraktShow
                    {
                        Id        = traktCollectionShow.Ids.Trakt,
                        Year      = traktCollectionShow.Year,
                        SerieName = traktCollectionShow.Title,
                        Status    = traktCollectionShow.Status,
                        Imdb      = traktCollectionShow.Ids.Imdb,
                        Tmdb      = traktCollectionShow.Ids.Tmdb,
                    };

                    shows.Add(show);
                }

                foreach (ITraktCollectionShowSeason season in traktCollectionShow.CollectionSeasons)
                {
                    TraktSeason misSeason = show.Seasons.SingleOrDefault(e => e.Season == season.Number);
                    if (misSeason == null)
                    {
                        misSeason = new TraktSeason {
                            Season = season.Number.Value
                        };
                        show.Seasons.Add(misSeason);
                    }

                    foreach (ITraktCollectionShowEpisode episode in season.Episodes)
                    {
                        TraktEpisode misEpisode = misSeason.MissingEpisodes.SingleOrDefault(e => e.Episode == episode.Number);
                        if (misEpisode != null)
                        {
                            misEpisode.Collected = true;
                        }
                        else
                        {
                            misSeason.MissingEpisodes.Add(new TraktEpisode {
                                Episode = episode.Number.Value, Collected = true
                            });
                        }
                    }
                }
            }

            shows.RemoveAll(s => s.Watched);

            // PrepareDB
            List <ShowSql> bddShows    = database.GetShows();
            List <ShowSql> updateShows = new List <ShowSql>();

            // Remove Show blacklist
            shows.RemoveAll(s => bddShows.Any(b => b.Id == s.Id && b.Blacklisted));
            List <Task> tasks = new List <Task>();

            foreach (TraktShow traktShow in shows)
            {
                ShowSql localShow = GetShow(database, traktShow.Id);
                localShow.Update(traktShow);
                updateShows.Add(localShow);
                tasks.Add(HandleProgress(traktShow, localShow));
            }

            Task.WaitAll(tasks.ToArray());

            database.AddOrUpdateShows(updateShows);

            database.ClearUnknownEpisodes();

            shows.RemoveAll(s => !s.Seasons.Any());



            return(true);
        }