コード例 #1
0
        public void OnGet(bool forcerefresh = false, string setimdbuserid = null)
        {
            string userId = ClaimChecker.UserId(User.Identity);

            if (userId == null)
            {
                return;
            }

            string connectionStringMovies = configuration.GetConnectionString("FxMoviesDb");
            string connectionStringImdb   = configuration.GetConnectionString("ImdbDb");

            if (setimdbuserid == null)
            {
                using (var db = FxMoviesDbContextFactory.Create(connectionStringMovies))
                {
                    var user = db.Users.Find(userId);
                    if (user != null)
                    {
                        ImdbUserId = user.ImdbUserId;
                    }
                }
            }
            else if (setimdbuserid == "remove")
            {
                using (var db = FxMoviesDbContextFactory.Create(connectionStringMovies))
                {
                    db.Users.Remove(db.Users.Find(userId));
                    db.UserRatings.RemoveRange(db.UserRatings.Where(ur => ur.UserId == userId));
                    db.SaveChanges();
                }

                ImdbUserId = null;
            }
            else
            {
                var match = Regex.Match(setimdbuserid, @"(ur\d+)");
                if (match.Success)
                {
                    var imdbuserid = match.Groups[1].Value;

                    int           expirationDays = configuration.GetValue("LoginCookieExpirationDays", 30);
                    CookieOptions options        = new CookieOptions();
                    options.Expires = DateTime.Now.AddDays(expirationDays);
                    ImdbUserId      = imdbuserid;

                    forcerefresh = true;
                }
                else
                {
                    ErrorMessage = string.Format("Er werd een ongeldige IMDb Gebruikers ID opgegeven: {0}.", setimdbuserid);
                }
            }

            using (var dbMovies = FxMoviesDbContextFactory.Create(connectionStringMovies))
                using (var dbImdb = ImdbDbContextFactory.Create(connectionStringImdb))
                    if (ImdbUserId != null)
                    {
                        var user = dbMovies.Users.Find(userId);
                        if (user == null)
                        {
                            user            = new User();
                            user.UserId     = userId;
                            user.ImdbUserId = ImdbUserId;
                            dbMovies.Users.Add(user);
                        }

                        if (forcerefresh)
                        {
                            user.RefreshRequestTime = DateTime.UtcNow;
                        }

                        RefreshRequestTime                = user.RefreshRequestTime;
                        LastRefreshRatingsTime            = user.LastRefreshRatingsTime;
                        LastRefreshRatingsResult          = user.LastRefreshRatingsResult;
                        LastRefreshSuccess                = user.LastRefreshSuccess;
                        WatchListLastRefreshTime          = user.WatchListLastRefreshTime;
                        WatchListLastRefreshRatingsResult = user.WatchListLastRefreshResult;
                        WatchListLastRefreshSuccess       = user.WatchListLastRefreshSuccess;
                        user.LastUsageTime                = DateTime.UtcNow;
                        dbMovies.SaveChanges();

                        UserRatingCount    = dbMovies.UserRatings.Where(ur => ur.UserId == userId).Count();
                        UserWatchListCount = dbMovies.UserWatchLists.Where(ur => ur.UserId == userId).Count();
                        var ratingLast = dbMovies.UserRatings
                                         .Where(ur => ur.UserId == userId)
                                         .OrderByDescending(ur => ur.RatingDate)
                                         .FirstOrDefault();
                        if (ratingLast != null)
                        {
                            RatingLastDate   = ratingLast.RatingDate;
                            RatingLastRating = ratingLast.Rating;
                            RatingLastMovie  = ratingLast.ImdbMovieId;
                            var movie = dbImdb.Movies.Find(RatingLastMovie);
                            if (movie != null)
                            {
                                RatingLastMovie = movie.PrimaryTitle;
                            }
                        }
                        var watchListLast = dbMovies.UserWatchLists
                                            .Where(uw => uw.UserId == userId)
                                            .OrderByDescending(uw => uw.AddedDate)
                                            .FirstOrDefault();
                        if (watchListLast != null)
                        {
                            WatchListLastDate  = watchListLast.AddedDate;
                            WatchListLastMovie = watchListLast.ImdbMovieId;
                            var movie = dbImdb.Movies.Find(WatchListLastMovie);
                            if (movie != null)
                            {
                                WatchListLastMovie = movie.PrimaryTitle;
                            }
                        }
                    }
        }
コード例 #2
0
ファイル: Index.cshtml.cs プロジェクト: mukeba/FxMovieAlert
        public void OnGet(int?m            = null, int?typeMask = null, decimal?minrating = null, bool?notyetrated = null, Cert cert = Cert.all,
                          int?movieeventid = null, string setimdbid = null, int?maxdays   = null)
        {
            string userId = ClaimChecker.UserId(User.Identity);

            var now = DateTime.Now;

            // Get the connection string
            string connectionString     = configuration.GetConnectionString("FxMoviesDb");
            string connectionStringImdb = configuration.GetConnectionString("ImdbDb");

            AdsInterval          = configuration.GetValue("AdsInterval", AdsInterval);
            FilterMaxDaysDefault = configuration.GetValue("DefaultMaxDays", FilterMaxDaysDefault);
            FilterMaxDays        = FilterMaxDaysDefault;
            FilterTypeMask       = FilterTypeMaskDefault;

            EditImdbLinks = ClaimChecker.Has(User.Identity, ClaimEditImdbLinks);

            if (typeMask.HasValue)
            {
                FilterTypeMask = typeMask.Value;
            }

            if (minrating.HasValue)
            {
                FilterMinRating = minrating.Value;
            }

            // Only allow setting more days when authenticated
            if (maxdays.HasValue && User.Identity.IsAuthenticated)
            {
                FilterMaxDays = maxdays.Value;
            }

            FilterNotYetRated = notyetrated;
            FilterCert        = cert & Cert.all2;
            if (FilterCert == Cert.all2)
            {
                FilterCert = Cert.all;
            }

            using (var db = FxMoviesDbContextFactory.Create(connectionString))
            {
                if (EditImdbLinks && movieeventid.HasValue && !string.IsNullOrEmpty(setimdbid))
                {
                    bool overwrite = false;
                    var  match     = Regex.Match(setimdbid, @"(tt\d+)");
                    if (match.Success)
                    {
                        setimdbid = match.Groups[0].Value;
                        overwrite = true;
                    }
                    else if (setimdbid.Equals("remove", StringComparison.InvariantCultureIgnoreCase))
                    {
                        setimdbid = null;
                        overwrite = true;
                    }

                    if (overwrite)
                    {
                        var movieEvent = db.MovieEvents.Find(movieeventid.Value);
                        if (movieEvent != null)
                        {
                            if (setimdbid != null)
                            {
                                using (var dbImdb = ImdbDbContextFactory.Create(connectionStringImdb))
                                {
                                    var imdbMovie = dbImdb.Movies.Find(setimdbid);
                                    if (imdbMovie != null)
                                    {
                                        movieEvent.ImdbRating = imdbMovie.Rating;
                                        movieEvent.ImdbVotes  = imdbMovie.Votes;
                                    }
                                }
                            }

                            movieEvent.ImdbId = setimdbid;
                            db.SaveChanges();
                        }
                    }
                }

                if (userId != null)
                {
                    var user = db.Users.Find(userId);
                    if (user != null)
                    {
                        RefreshRequestTime     = user.RefreshRequestTime;
                        LastRefreshRatingsTime = user.LastRefreshRatingsTime;
                        LastRefreshSuccess     = user.LastRefreshSuccess;
                        user.Usages++;
                        user.LastUsageTime = DateTime.UtcNow;
                        ImdbUserId         = user.ImdbUserId;
                        db.SaveChanges();
                    }
                }

                if (m.HasValue)
                {
                    if (m.Value == -2)
                    {
                        throw new Exception("Sentry test exception");
                    }
                    else
                    {
                        MovieEvent = db.MovieEvents.Find(m.Value);
                        if (MovieEvent != null)
                        {
                            int days = (int)(MovieEvent.StartTime.Date - DateTime.Now.Date).TotalDays;
                            if (FilterMaxDays < days)
                            {
                                FilterMaxDays = days;
                            }
                        }
                    }
                }

                Count               = db.MovieEvents.Count();
                CountTypeFilm       = db.MovieEvents.Where(me => me.Type == 1).Count();
                CountTypeShort      = db.MovieEvents.Where(me => me.Type == 2).Count();
                CountTypeSerie      = db.MovieEvents.Where(me => me.Type == 3).Count();
                CountMinRating5     = db.MovieEvents.Where(me => me.ImdbRating >= 50).Count();
                CountMinRating6     = db.MovieEvents.Where(me => me.ImdbRating >= 60).Count();
                CountMinRating7     = db.MovieEvents.Where(me => me.ImdbRating >= 70).Count();
                CountMinRating8     = db.MovieEvents.Where(me => me.ImdbRating >= 80).Count();
                CountMinRating9     = db.MovieEvents.Where(me => me.ImdbRating >= 90).Count();
                CountNotOnImdb      = db.MovieEvents.Where(me => string.IsNullOrEmpty(me.ImdbId)).Count();
                CountNotRatedOnImdb = db.MovieEvents.Where(me => me.ImdbRating == null).Count();
                CountCertNone       = db.MovieEvents.Where(me => string.IsNullOrEmpty(me.Certification)).Count();
                CountCertG          = db.MovieEvents.Where(me => me.Certification == "US:G").Count();
                CountCertPG         = db.MovieEvents.Where(me => me.Certification == "US:PG").Count();
                CountCertPG13       = db.MovieEvents.Where(me => me.Certification == "US:PG-13").Count();
                CountCertR          = db.MovieEvents.Where(me => me.Certification == "US:R").Count();
                CountCertNC17       = db.MovieEvents.Where(me => me.Certification == "US:NC-17").Count();
                CountCertOther      = Count - CountCertNone - CountCertG - CountCertPG - CountCertPG13 - CountCertR - CountCertNC17;
                CountRated          = db.MovieEvents.Where(
                    me => db.UserRatings.Where(ur => ur.UserId == userId).Any(ur => ur.ImdbMovieId == me.ImdbId)).Count();
                CountNotYetRated = Count - CountRated;
                Count3days       = db.MovieEvents.Where(me => me.StartTime.Date <= now.Date.AddDays(3)).Count();
                Count5days       = db.MovieEvents.Where(me => me.StartTime.Date <= now.Date.AddDays(5)).Count();
                Count8days       = db.MovieEvents.Where(me => me.StartTime.Date <= now.Date.AddDays(8)).Count();

                Records = (
                    from me in db.MovieEvents.Include(me => me.Channel)
                    join ur in db.UserRatings.Where(ur => ur.UserId == userId) on me.ImdbId equals ur.ImdbMovieId into urGroup
                    from ur in urGroup.DefaultIfEmpty(null)
                    join uw in db.UserWatchLists.Where(ur => ur.UserId == userId) on me.ImdbId equals uw.ImdbMovieId into uwGroup
                    from uw in uwGroup.DefaultIfEmpty(null)
                    where
                    (FilterMaxDays == 0 || me.StartTime.Date <= now.Date.AddDays(FilterMaxDays))
                    &&
                    (me.EndTime >= now && me.StartTime >= now.AddMinutes(-30))
                    &&
                    (
                        ((FilterTypeMask & 1) == 1 && me.Type == 1) ||
                        ((FilterTypeMask & 2) == 2 && me.Type == 2) ||
                        ((FilterTypeMask & 4) == 4 && me.Type == 3)
                    )
                    &&
                    (!FilterMinRating.HasValue ||
                     (FilterMinRating.Value == NO_IMDB_ID && string.IsNullOrEmpty(me.ImdbId)) ||
                     (FilterMinRating.Value == NO_IMDB_RATING && me.ImdbRating == null) ||
                     (FilterMinRating.Value >= 0.0m && (me.ImdbRating >= FilterMinRating.Value * 10)))
                    &&
                    (!FilterNotYetRated.HasValue || FilterNotYetRated.Value == (ur == null))
                    &&
                    (FilterCert == Cert.all || (ParseCertification(me.Certification) & FilterCert) != 0)
                    select new Record()
                {
                    MovieEvent = me, UserRating = ur, UserWatchListItem = uw
                }
                    ).ToList();

                // MovieEvents = db.MovieEvents.Include(m => m.Channel)
                //     .Where(m => !MinRating.HasValue || m.ImdbRating >= MinRating.Value * 10)
                //     .ToList();
            }
        }