public static async Task SingleEpisodeCheck(bool useImdb, IQueryable <EmbyEpisode> allEpisodes, EpisodeRequests episode, SeasonRequests season, EmbyContent item, bool useTheMovieDb, bool useTvDb) { EmbyEpisode epExists = null; if (useImdb) { epExists = await allEpisodes.FirstOrDefaultAsync(x => x.EpisodeNumber == episode.EpisodeNumber && x.SeasonNumber == season.SeasonNumber && x.Series.ImdbId == item.ImdbId); } if (useTheMovieDb) { epExists = await allEpisodes.FirstOrDefaultAsync(x => x.EpisodeNumber == episode.EpisodeNumber && x.SeasonNumber == season.SeasonNumber && x.Series.TheMovieDbId == item.TheMovieDbId); } if (useTvDb) { epExists = await allEpisodes.FirstOrDefaultAsync(x => x.EpisodeNumber == episode.EpisodeNumber && x.SeasonNumber == season.SeasonNumber && x.Series.TvDbId == item.TvDbId); } if (epExists != null) { episode.Available = true; } }
private async Task ProcessMovies() { var movies = _movieRepo.GetAll().Include(x => x.RequestedUser).Where(x => !x.Available || (!x.Available4K && x.Has4KRequest)); foreach (var movie in movies) { var has4kRequest = movie.Has4KRequest; EmbyContent embyContent = null; if (movie.TheMovieDbId > 0) { embyContent = await _repo.GetByTheMovieDbId(movie.TheMovieDbId.ToString()); } else if (movie.ImdbId.HasValue()) { embyContent = await _repo.GetByImdbId(movie.ImdbId); } if (embyContent == null) { // We don't have this yet continue; } _log.LogInformation("We have found the request {0} on Emby, sending the notification", movie?.Title ?? string.Empty); var notify = false; if (has4kRequest && embyContent.Has4K && !movie.Available4K) { movie.Available4K = true; movie.MarkedAsAvailable4K = DateTime.Now; notify = true; } // If we have a non-4k versison then mark as available if (embyContent.Quality != null && !movie.Available) { movie.Available = true; movie.MarkedAsAvailable = DateTime.Now; notify = true; } if (notify) { var recipient = movie.RequestedUser.Email.HasValue() ? movie.RequestedUser.Email : string.Empty; _log.LogDebug("MovieId: {0}, RequestUser: {1}", movie.Id, recipient); await _notificationService.Notify(new NotificationOptions { DateTime = DateTime.Now, NotificationType = NotificationType.RequestAvailable, RequestId = movie.Id, RequestType = RequestType.Movie, Recipient = recipient, }); } } await _movieRepo.Save(); }
public async Task <EmbyContent> Add(EmbyContent content) { await Db.EmbyContent.AddAsync(content); await Db.SaveChangesAsync(); return(content); }
public async Task <RuleResult> Execute(SearchViewModel obj) { EmbyContent item = null; if (obj.ImdbId.HasValue()) { item = await EmbyContentRepository.GetByImdbId(obj.ImdbId); } if (item == null) { if (obj.TheMovieDbId.HasValue()) { item = await EmbyContentRepository.GetByTheMovieDbId(obj.TheMovieDbId); } if (item == null) { if (obj.TheTvDbId.HasValue()) { item = await EmbyContentRepository.GetByTvDbId(obj.TheTvDbId); } } } if (item != null) { obj.Available = true; obj.EmbyUrl = item.Url; if (obj.Type == RequestType.TvShow) { var search = (SearchTvShowViewModel)obj; // Let's go through the episodes now if (search.SeasonRequests.Any()) { var allEpisodes = EmbyContentRepository.GetAllEpisodes().Include(x => x.Series); foreach (var season in search.SeasonRequests) { foreach (var episode in season.Episodes) { EmbyEpisode epExists = null; epExists = await allEpisodes.FirstOrDefaultAsync(x => x.EpisodeNumber == episode.EpisodeNumber && x.SeasonNumber == season.SeasonNumber && x.Series.ProviderId == item.ProviderId.ToString()); if (epExists != null) { episode.Available = true; } } } } } } return(Success()); }
private async Task ProcessMovies() { var movies = _movieRepo.GetAll().Include(x => x.RequestedUser).Where(x => !x.Available); foreach (var movie in movies) { EmbyContent embyContent = null; if (movie.TheMovieDbId > 0) { embyContent = await _repo.GetByTheMovieDbId(movie.TheMovieDbId.ToString()); } else if (movie.ImdbId.HasValue()) { embyContent = await _repo.GetByImdbId(movie.ImdbId); } if (embyContent == null) { // We don't have this yet continue; } _log.LogInformation("We have found the request {0} on Emby, sending the notification", movie?.Title ?? string.Empty); movie.Available = true; movie.MarkedAsAvailable = DateTime.Now; if (movie.Available) { var recipient = movie.RequestedUser.Email.HasValue() ? movie.RequestedUser.Email : string.Empty; _log.LogDebug("MovieId: {0}, RequestUser: {1}", movie.Id, recipient); BackgroundJob.Enqueue(() => _notificationService.Publish(new NotificationOptions { DateTime = DateTime.Now, NotificationType = NotificationType.RequestAvailable, RequestId = movie.Id, RequestType = RequestType.Movie, Recipient = recipient, })); } } await _movieRepo.Save(); }
public async Task <RuleResult> Execute(SearchViewModel obj) { EmbyContent item = null; var useImdb = false; var useTheMovieDb = false; var useTvDb = false; if (obj.ImdbId.HasValue()) { item = await EmbyContentRepository.GetByImdbId(obj.ImdbId); if (item != null) { useImdb = true; } } if (item == null) { if (obj.TheMovieDbId.HasValue()) { item = await EmbyContentRepository.GetByTheMovieDbId(obj.TheMovieDbId); if (item != null) { useTheMovieDb = true; } } if (item == null) { if (obj.TheTvDbId.HasValue()) { item = await EmbyContentRepository.GetByTvDbId(obj.TheTvDbId); if (item != null) { useTvDb = true; } } } } if (item != null) { if (obj is SearchMovieViewModel movie) { var is4kEnabled = await _featureService.FeatureEnabled(FeatureNames.Movie4KRequests); if (item.Has4K && is4kEnabled) { movie.Available4K = true; obj.EmbyUrl = item.Url; } else { obj.Available = true; obj.EmbyUrl = item.Url; obj.Quality = item.Quality; } if (item.Quality.HasValue()) { obj.Available = true; obj.EmbyUrl = item.Url; obj.Quality = item.Quality; } } else { obj.Available = true; obj.EmbyUrl = item.Url; } if (obj.Type == RequestType.TvShow) { var search = (SearchTvShowViewModel)obj; // Let's go through the episodes now if (search.SeasonRequests.Any()) { var allEpisodes = EmbyContentRepository.GetAllEpisodes().Include(x => x.Series); foreach (var season in search.SeasonRequests) { foreach (var episode in season.Episodes) { await AvailabilityRuleHelper.SingleEpisodeCheck(useImdb, allEpisodes, episode, season, item, useTheMovieDb, useTvDb, Log); } } } AvailabilityRuleHelper.CheckForUnairedEpisodes(search); } } return(Success()); }
public async Task <RuleResult> Execute(SearchViewModel obj) { EmbyContent item = null; var useImdb = false; var useTheMovieDb = false; var useTvDb = false; if (obj.ImdbId.HasValue()) { item = await EmbyContentRepository.GetByImdbId(obj.ImdbId); if (item != null) { useImdb = true; } } if (item == null) { if (obj.TheMovieDbId.HasValue()) { item = await EmbyContentRepository.GetByTheMovieDbId(obj.TheMovieDbId); if (item != null) { useTheMovieDb = true; } } if (item == null) { if (obj.TheTvDbId.HasValue()) { item = await EmbyContentRepository.GetByTvDbId(obj.TheTvDbId); if (item != null) { useTvDb = true; } } } } if (item != null) { obj.Available = true; var s = await EmbySettings.GetSettingsAsync(); var server = s.Servers.FirstOrDefault(x => x.ServerHostname != null); if ((server?.ServerHostname ?? string.Empty).HasValue()) { obj.EmbyUrl = EmbyHelper.GetEmbyMediaUrl(item.EmbyId, server?.ServerHostname, s.IsJellyfin); } else { obj.EmbyUrl = EmbyHelper.GetEmbyMediaUrl(item.EmbyId, null, s.IsJellyfin); } if (obj.Type == RequestType.TvShow) { var search = (SearchTvShowViewModel)obj; // Let's go through the episodes now if (search.SeasonRequests.Any()) { var allEpisodes = EmbyContentRepository.GetAllEpisodes().Include(x => x.Series); foreach (var season in search.SeasonRequests) { foreach (var episode in season.Episodes) { await AvailabilityRuleHelper.SingleEpisodeCheck(useImdb, allEpisodes, episode, season, item, useTheMovieDb, useTvDb); } } } AvailabilityRuleHelper.CheckForUnairedEpisodes(search); } } return(Success()); }
public async Task Update(EmbyContent existingContent) { Db.EmbyContent.Update(existingContent); await Db.SaveChangesAsync(); }
private void UpdateRecentlyAdded(IDbConnection con) { //Delete the recently added table, lets start again Log.DeleteAll("RecentlyAddedLog"); // Plex var plexAllContent = PlexContent.GetAll(); var content = new HashSet<RecentlyAddedLog>(); foreach (var plexContent in plexAllContent) { if(plexContent.Type == PlexMediaType.Artist) continue; content.Add(new RecentlyAddedLog { AddedAt = DateTime.UtcNow, ProviderId = plexContent.ProviderId }); } Log.BatchInsert(content, "RecentlyAddedLog"); var plexEpisodeses = PlexEpisodes.GetAll(); content.Clear(); foreach (var ep in plexEpisodeses) { content.Add(new RecentlyAddedLog { AddedAt = DateTime.UtcNow, ProviderId = ep.RatingKey }); } Log.BatchInsert(content, "RecentlyAddedLog"); // Emby content.Clear(); var embyContent = EmbyContent.GetAll(); foreach (var plexContent in embyContent) { content.Add(new RecentlyAddedLog { AddedAt = DateTime.UtcNow, ProviderId = plexContent.EmbyId }); } Log.BatchInsert(content, "RecentlyAddedLog"); var embyEpisodes = EmbyEpisodes.GetAll(); content.Clear(); foreach (var ep in embyEpisodes) { content.Add(new RecentlyAddedLog { AddedAt = DateTime.UtcNow, ProviderId = ep.EmbyId }); } Log.BatchInsert(content, "RecentlyAddedLog"); }