Exemple #1
0
        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;
            }
        }
Exemple #2
0
        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);
        }
Exemple #4
0
        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();
        }
Exemple #6
0
        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());
        }
Exemple #7
0
        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();
 }
Exemple #9
0
        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");


        }