private async Task ProcessMovies() { // Get all non available var movies = _movieRepo.GetAll().Include(x => x.RequestedUser).Where(x => !x.Available); foreach (var movie in movies) { PlexServerContent item = null; if (movie.ImdbId.HasValue()) { item = await _repo.Get(movie.ImdbId); } if (item == null) { if (movie.TheMovieDbId.ToString().HasValue()) { item = await _repo.Get(movie.TheMovieDbId.ToString()); } } if (item == null) { // We don't yet have this continue; } movie.Available = true; if (movie.Available) { _backgroundJobClient.Enqueue(() => _notificationService.Publish(new NotificationOptions { DateTime = DateTime.Now, NotificationType = NotificationType.RequestAvailable, RequestId = movie.Id, RequestType = RequestType.Movie, Recipient = movie.RequestedUser != null ? movie.RequestedUser.Email : string.Empty })); } } await _movieRepo.Save(); }
private async Task ProcessMovies() { var feature4kEnabled = await _featureService.FeatureEnabled(FeatureNames.Movie4KRequests); // Get all non available var movies = _movieRepo.GetAll().Include(x => x.RequestedUser).Where(x => !x.Available || (!x.Available4K && x.Has4KRequest)); var itemsForAvailbility = new List <AvailabilityModel>(); foreach (var movie in movies) { var has4kRequest = movie.Has4KRequest; PlexServerContent item = null; if (movie.ImdbId.HasValue()) { item = await _repo.Get(movie.ImdbId, ProviderType.ImdbId); } if (item == null) { if (movie.TheMovieDbId.ToString().HasValue()) { item = await _repo.Get(movie.TheMovieDbId.ToString(), ProviderType.TheMovieDbId); } } if (item == null) { // We don't yet have this continue; } _log.LogInformation($"[PAC] - Movie request {movie.Title} - {movie.Id} is now available, sending notification"); var notify = false; if (has4kRequest && item.Has4K && !movie.Available4K && feature4kEnabled) { movie.Available4K = true; movie.Approved4K = true; movie.MarkedAsAvailable4K = DateTime.Now; await _movieRepo.SaveChangesAsync(); notify = true; } if (!feature4kEnabled && !movie.Available) { movie.Available = true; movie.MarkedAsAvailable = DateTime.Now; await _movieRepo.SaveChangesAsync(); notify = true; } // If we have a non-4k versison then mark as available if (item.Quality != null && !movie.Available) { movie.Available = true; movie.Approved = true; movie.MarkedAsAvailable = DateTime.Now; await _movieRepo.SaveChangesAsync(); notify = true; } if (notify) { itemsForAvailbility.Add(new AvailabilityModel { Id = movie.Id, RequestedUser = movie.RequestedUser != null ? movie.RequestedUser.Email : string.Empty }); } } foreach (var i in itemsForAvailbility.DistinctBy(x => x.Id)) { await _notificationService.Notify(new NotificationOptions { DateTime = DateTime.Now, NotificationType = NotificationType.RequestAvailable, RequestId = i.Id, RequestType = RequestType.Movie, Recipient = i.RequestedUser }); } }