Esempio n. 1
0
        private async Task <string> GetRootPath(int pathId, RadarrSettings radarrSettings)
        {
            var rootFoldersResult = await Cache.GetOrSetAsync(CacheKeys.RadarrRootFolders, async() =>
            {
                return(await Task.Run(() => RadarrApi.GetRootFolders(radarrSettings.ApiKey, radarrSettings.FullUri)));
            });

            foreach (var r in rootFoldersResult.Where(r => r.id == pathId))
            {
                return(r.path);
            }

            int outRoot;
            var defaultPath = int.TryParse(radarrSettings.RootPath, out outRoot);

            if (defaultPath)
            {
                // Return default path
                return(rootFoldersResult.FirstOrDefault(x => x.id.Equals(outRoot))?.path ?? string.Empty);
            }
            else
            {
                return(rootFoldersResult.FirstOrDefault()?.path ?? string.Empty);
            }
        }
Esempio n. 2
0
        private MovieSenderResult SendToRadarr(RequestedModel model, RadarrSettings settings, string qualityId)
        {
            var qualityProfile = 0;

            if (!string.IsNullOrEmpty(qualityId)) // try to parse the passed in quality, otherwise use the settings default quality
            {
                int.TryParse(qualityId, out qualityProfile);
            }

            if (qualityProfile <= 0)
            {
                int.TryParse(settings.QualityProfile, out qualityProfile);
            }

            var rootFolderPath = model.RootFolderSelected <= 0 ? settings.FullRootPath : GetRootPath(model.RootFolderSelected, settings);
            var result         = RadarrApi.AddMovie(model.ProviderId, model.Title, model.ReleaseDate.Year, qualityProfile, rootFolderPath, settings.ApiKey, settings.FullUri, true);

            if (!string.IsNullOrEmpty(result.Error?.message))
            {
                Log.Error(result.Error.message);
                return(new MovieSenderResult {
                    Result = false, Error = true, MovieSendingEnabled = true
                });
            }
            if (!string.IsNullOrEmpty(result.title))
            {
                return(new MovieSenderResult {
                    Result = true, MovieSendingEnabled = true
                });
            }
            return(new MovieSenderResult {
                Result = false, MovieSendingEnabled = true
            });
        }
Esempio n. 3
0
        public void Queued()
        {
            var settings = RadarrSettings.GetSettings();

            if (settings.Enabled)
            {
                Job.SetRunning(true, JobNames.RadarrCacher);
                try
                {
                    var movies = RadarrApi.GetMovies(settings.ApiKey, settings.FullUri);
                    if (movies != null)
                    {
                        var movieIds = new List <int>();
                        foreach (var m in movies)
                        {
                            if (m.tmdbId > 0)
                            {
                                movieIds.Add(m.tmdbId);
                            }
                        }
                        //var movieIds = movies.Select(x => x.tmdbId).ToList();
                        Cache.Set(CacheKeys.RadarrMovies, movieIds, CacheKeys.TimeFrameMinutes.SchedulerCaching);
                    }
                }
                catch (System.Exception ex)
                {
                    Log.Error(ex, "Failed caching queued items from Radarr");
                }
                finally
                {
                    Job.Record(JobNames.RadarrCacher);
                    Job.SetRunning(false, JobNames.RadarrCacher);
                }
            }
        }
Esempio n. 4
0
        public async Task <MovieSenderResult> Send(RequestedModel model, string qualityId = "")
        {
            var cpSettings = await CouchPotatoSettings.GetSettingsAsync();

            var watcherSettings = await WatcherSettings.GetSettingsAsync();

            var radarrSettings = await RadarrSettings.GetSettingsAsync();

            if (cpSettings.Enabled)
            {
                return(SendToCp(model, cpSettings, string.IsNullOrEmpty(qualityId) ? cpSettings.ProfileId : qualityId));
            }

            if (watcherSettings.Enabled)
            {
                return(SendToWatcher(model, watcherSettings));
            }

            if (radarrSettings.Enabled)
            {
                return(SendToRadarr(model, radarrSettings));
            }

            return(new MovieSenderResult {
                Result = false, MovieSendingEnabled = false
            });
        }
Esempio n. 5
0
        private async Task <SenderResult> SendToRadarr(MovieRequests model, RadarrSettings settings)
        {
            var qualityToUse = int.Parse(settings.DefaultQualityProfile);

            if (model.QualityOverride > 0)
            {
                qualityToUse = model.QualityOverride;
            }

            var rootFolderPath = model.RootPathOverride <= 0 ? settings.DefaultRootPath : await RadarrRootPath(model.RootPathOverride, settings);

            var result = await RadarrApi.AddMovie(model.TheMovieDbId, model.Title, model.ReleaseDate.Year, qualityToUse, rootFolderPath, settings.ApiKey, settings.FullUri, !settings.AddOnly, settings.MinimumAvailability);

            if (!string.IsNullOrEmpty(result.Error?.message))
            {
                Log.LogError(LoggingEvents.RadarrCacher, result.Error.message);
                return(new SenderResult {
                    Success = false, Message = result.Error.message, Sent = false
                });
            }
            if (!string.IsNullOrEmpty(result.title))
            {
                return(new SenderResult {
                    Success = true, Sent = false
                });
            }
            return(new SenderResult {
                Success = true, Sent = false
            });
        }
Esempio n. 6
0
        private async Task Process(RadarrSettings settings)
        {
            if (settings.Enabled)
            {
                try
                {
                    var movies = await _api.GetMovies(settings.ApiKey, settings.FullUri);

                    var existingMovies = _radarrRepo.GetAll();
                    if (movies != null)
                    {
                        var movieIds = new List <RadarrCache>();
                        foreach (var m in movies)
                        {
                            if (m.monitored || m.hasFile)
                            {
                                if (m.tmdbId > 0)
                                {
                                    var is4k = m.movieFile?.quality?.quality?.resolution >= 2160;

                                    // Do we have a cached movie for this already?
                                    var existing = await existingMovies.FirstOrDefaultAsync(x => x.TheMovieDbId == m.tmdbId);

                                    if (existing != null)
                                    {
                                        existing.Has4K   = is4k;
                                        existing.HasFile = m.hasFile;
                                    }
                                    else
                                    {
                                        movieIds.Add(new RadarrCache
                                        {
                                            TheMovieDbId = m.tmdbId,
                                            HasFile      = m.hasFile,
                                            Has4K        = is4k,
                                            HasRegular   = !is4k
                                        });
                                    }
                                }
                                else
                                {
                                    _logger.LogError($"TMDBId is not > 0 for movie {m.title}");
                                }
                            }
                        }
                        // Save from the updates made to the existing movies (they are in the EF Change Tracker)
                        await _radarrRepo.SaveChangesAsync();

                        await _radarrRepo.AddRange(movieIds);
                    }

                    await OmbiQuartz.TriggerJob(nameof(IArrAvailabilityChecker), "DVR");
                }
                catch (System.Exception ex)
                {
                    _logger.LogError(LoggingEvents.Cacher, ex, "Failed caching queued items from Radarr");
                }
            }
        }
Esempio n. 7
0
 public async Task <IEnumerable <RadarrRootFolder> > GetRootFolders([FromBody] RadarrSettings settings)
 {
     if (settings.V3)
     {
         return(await _radarrV3Api.GetRootFolders(settings.ApiKey, settings.FullUri));
     }
     return(await _radarrApi.GetRootFolders(settings.ApiKey, settings.FullUri));
 }
Esempio n. 8
0
        private async Task <string> RadarrRootPath(int overrideId, RadarrSettings settings)
        {
            var paths = await RadarrApi.GetRootFolders(settings.ApiKey, settings.FullUri);

            var selectedPath = paths.FirstOrDefault(x => x.id == overrideId);

            return(selectedPath?.path ?? String.Empty);
        }
Esempio n. 9
0
 public async Task <IActionResult> GetProfiles([FromBody] RadarrSettings settings)
 {
     if (settings.V3)
     {
         return(Ok(await _radarrV3Api.GetProfiles(settings.ApiKey, settings.FullUri)));
     }
     return(Ok(await _radarrApi.GetProfiles(settings.ApiKey, settings.FullUri)));
 }
Esempio n. 10
0
        private async Task <SenderResult> SendToRadarr(MovieRequests model, RadarrSettings settings)
        {
            var qualityToUse = int.Parse(settings.DefaultQualityProfile);

            if (model.QualityOverride > 0)
            {
                qualityToUse = model.QualityOverride;
            }

            var rootFolderPath = model.RootPathOverride <= 0 ? settings.DefaultRootPath : await RadarrRootPath(model.RootPathOverride, settings);

            // Check if the movie already exists? Since it could be unmonitored
            var movies = await RadarrApi.GetMovies(settings.ApiKey, settings.FullUri);

            var existingMovie = movies.FirstOrDefault(x => x.tmdbId == model.TheMovieDbId);

            if (existingMovie == null)
            {
                var result = await RadarrApi.AddMovie(model.TheMovieDbId, model.Title, model.ReleaseDate.Year,
                                                      qualityToUse, rootFolderPath, settings.ApiKey, settings.FullUri, !settings.AddOnly,
                                                      settings.MinimumAvailability);

                if (!string.IsNullOrEmpty(result.Error?.message))
                {
                    Log.LogError(LoggingEvents.RadarrCacher, result.Error.message);
                    return(new SenderResult {
                        Success = false, Message = result.Error.message, Sent = false
                    });
                }
                if (!string.IsNullOrEmpty(result.title))
                {
                    return(new SenderResult {
                        Success = true, Sent = false
                    });
                }
                return(new SenderResult {
                    Success = true, Sent = false
                });
            }
            // We have the movie, check if we can request it or change the status
            if (!existingMovie.monitored)
            {
                // let's set it to monitored and search for it
                existingMovie.monitored = true;
                await RadarrApi.UpdateMovie(existingMovie, settings.ApiKey, settings.FullUri);

                // Search for it
                await RadarrApi.MovieSearch(new[] { existingMovie.id }, settings.ApiKey, settings.FullUri);

                return(new SenderResult {
                    Success = true, Sent = true
                });
            }

            return(new SenderResult {
                Success = false, Sent = false, Message = "Movie is already monitored"
            });
        }
Esempio n. 11
0
        public async Task <IEnumerable <RadarrRootFolder> > GetRootFolders()
        {
            var settings = await RadarrSettings.GetSettingsAsync();

            if (settings.Enabled)
            {
                return(await RadarrApi.GetRootFolders(settings.ApiKey, settings.FullUri));
            }
            return(null);
        }
Esempio n. 12
0
        private string GetRootPath(int pathId, RadarrSettings sonarrSettings)
        {
            var rootFoldersResult = Cache.GetOrSet(CacheKeys.RadarrRootFolders, () => RadarrApi.GetRootFolders(sonarrSettings.ApiKey, sonarrSettings.FullUri));

            foreach (var r in rootFoldersResult.Where(r => r.id == pathId))
            {
                return(r.path);
            }
            return(string.Empty);
        }
Esempio n. 13
0
        public async Task CacheContent()
        {
            await SemaphoreSlim.WaitAsync();

            try
            {
                var settings = await RadarrSettings.GetSettingsAsync();

                if (settings.Enabled)
                {
                    try
                    {
                        var movies = await RadarrApi.GetMovies(settings.ApiKey, settings.FullUri);

                        if (movies != null)
                        {
                            // Let's remove the old cached data
                            await _ctx.Database.ExecuteSqlCommandAsync("DELETE FROM RadarrCache");

                            var movieIds = new List <RadarrCache>();
                            foreach (var m in movies)
                            {
                                if (m.tmdbId > 0)
                                {
                                    movieIds.Add(new RadarrCache
                                    {
                                        TheMovieDbId = m.tmdbId,
                                        HasFile      = m.hasFile
                                    });
                                }
                                else
                                {
                                    Logger.LogError("TMDBId is not > 0 for movie {0}", m.title);
                                }
                            }
                            await _ctx.RadarrCache.AddRangeAsync(movieIds);

                            await _ctx.SaveChangesAsync();
                        }
                    }
                    catch (System.Exception ex)
                    {
                        Logger.LogError(LoggingEvents.Cacher, ex, "Failed caching queued items from Radarr");
                    }
                }
            }
            catch (Exception)
            {
                Logger.LogInformation(LoggingEvents.RadarrCacher, "Radarr is not setup, cannot cache episodes");
            }
            finally
            {
                SemaphoreSlim.Release();
            }
        }
Esempio n. 14
0
        public async Task <bool> RadarrSettings([FromBody] RadarrSettings settings)
        {
            var result = await Save(settings);

            if (result)
            {
                _cache.Remove(CacheKeys.RadarrRootProfiles);
                _cache.Remove(CacheKeys.RadarrQualityProfiles);
                BackgroundJob.Enqueue(() => _radarrSync.CacheContent());
            }
            return(result);
        }
Esempio n. 15
0
 public async Task <IEnumerable <RadarrRootFolder> > GetRootFolders()
 {
     return(await Cache.GetOrAdd(CacheKeys.RadarrRootProfiles, async() =>
     {
         var settings = await RadarrSettings.GetSettingsAsync();
         if (settings.Enabled)
         {
             return await RadarrApi.GetRootFolders(settings.ApiKey, settings.FullUri);
         }
         return null;
     }, DateTime.Now.AddHours(1)));
 }
Esempio n. 16
0
        public async Task <bool> RadarrSettings([FromBody] RadarrSettings settings)
        {
            var result = await Save(settings);

            if (result)
            {
                _cache.Remove(CacheKeys.RadarrRootProfiles);
                _cache.Remove(CacheKeys.RadarrQualityProfiles);

                await OmbiQuartz.TriggerJob(nameof(IRadarrSync), "DVR");
            }
            return(result);
        }
Esempio n. 17
0
        public async Task <bool> Radarr([FromBody] RadarrSettings settings)
        {
            try
            {
                var result = await RadarrApi.SystemStatus(settings.ApiKey, settings.FullUri);

                return(result.version != null);
            }
            catch (Exception e)
            {
                Log.LogError(LoggingEvents.Api, e, "Could not test Radarr");
                return(false);
            }
        }
Esempio n. 18
0
        protected virtual void Dispose(bool disposing)
        {
            if (_disposed)
            {
                return;
            }

            if (disposing)
            {
                _ctx?.Dispose();
                RadarrSettings?.Dispose();
            }
            _disposed = true;
        }
Esempio n. 19
0
        private async Task <Response> SaveCouchPotato()
        {
            var couchPotatoSettings = this.Bind <CouchPotatoSettings>();
            var valid = this.Validate(couchPotatoSettings);

            if (!valid.IsValid)
            {
                return(Response.AsJson(valid.SendJsonError()));
            }

            var watcherSettings = await WatcherSettings.GetSettingsAsync();

            if (watcherSettings.Enabled)
            {
                return
                    (Response.AsJson(new JsonResponseModel
                {
                    Result = false,
                    Message = "Cannot have Watcher and CouchPotato both enabled."
                }));
            }

            var radarrSettings = await RadarrSettings.GetSettingsAsync();

            if (radarrSettings.Enabled)
            {
                return
                    (Response.AsJson(new JsonResponseModel
                {
                    Result = false,
                    Message = "Cannot have Radarr and CouchPotato both enabled."
                }));
            }

            couchPotatoSettings.ApiKey = couchPotatoSettings.ApiKey.Trim();
            var result = await CpService.SaveSettingsAsync(couchPotatoSettings);

            return(Response.AsJson(result
                ? new JsonResponseModel {
                Result = true, Message = "Successfully Updated the Settings for CouchPotato!"
            }
                : new JsonResponseModel {
                Result = false, Message = "Could not update the settings, take a look at the logs."
            }));
        }
Esempio n. 20
0
        public async Task <SenderResult> Send(MovieRequests model)
        {
            var cpSettings = await CouchPotatoSettings.GetSettingsAsync();

            //var watcherSettings = await WatcherSettings.GetSettingsAsync();
            var radarrSettings = await RadarrSettings.GetSettingsAsync();

            if (radarrSettings.Enabled)
            {
                return(await SendToRadarr(model, radarrSettings));
            }

            var dogSettings = await DogNzbSettings.GetSettingsAsync();

            if (dogSettings.Enabled)
            {
                await SendToDogNzb(model, dogSettings);

                return(new SenderResult
                {
                    Success = true,
                    Sent = true,
                });
            }

            if (cpSettings.Enabled)
            {
                return(await SendToCp(model, cpSettings, cpSettings.DefaultProfileId));
            }

            //if (watcherSettings.Enabled)
            //{
            //    return SendToWatcher(model, watcherSettings);
            //}


            return(new SenderResult
            {
                Success = true,
                Sent = false,
            });
        }
Esempio n. 21
0
        public async Task <TesterResultModel> Radarr([FromBody] RadarrSettings settings)
        {
            try
            {
                var result = await RadarrApi.SystemStatus(settings.ApiKey, settings.FullUri);

                return(new TesterResultModel
                {
                    IsValid = result.urlBase == settings.SubDir || string.IsNullOrEmpty(result.urlBase) && string.IsNullOrEmpty(settings.SubDir),
                    ExpectedSubDir = result.urlBase
                });
            }
            catch (Exception e)
            {
                Log.LogError(LoggingEvents.Api, e, "Could not test Radarr");
                return(new TesterResultModel {
                    IsValid = false
                });
            }
        }
Esempio n. 22
0
        private async Task <Response> SaveRadarr()
        {
            var radarrSettings = this.Bind <RadarrSettings>();

            //Check Watcher and CP make sure they are not enabled
            var watcher = await WatcherSettings.GetSettingsAsync();

            if (watcher.Enabled)
            {
                return(Response.AsJson(new JsonResponseModel {
                    Result = false, Message = "Watcher is enabled, we cannot enable Watcher and Radarr"
                }));
            }

            var cp = await CpSettings.GetSettingsAsync();

            if (cp.Enabled)
            {
                return(Response.AsJson(new JsonResponseModel {
                    Result = false, Message = "CouchPotato is enabled, we cannot enable Watcher and CouchPotato"
                }));
            }

            var valid = this.Validate(radarrSettings);

            if (!valid.IsValid)
            {
                return(Response.AsJson(valid.SendJsonError()));
            }

            radarrSettings.ApiKey = radarrSettings.ApiKey.Trim();
            var result = await RadarrSettings.SaveSettingsAsync(radarrSettings);

            return(Response.AsJson(result
                ? new JsonResponseModel {
                Result = true, Message = "Successfully Updated the Settings for Radarr!"
            }
                : new JsonResponseModel {
                Result = false, Message = "Could not update the settings, take a look at the logs."
            }));
        }
Esempio n. 23
0
        private MovieSenderResult SendToRadarr(RequestedModel model, RadarrSettings settings)
        {
            var qualityProfile = 0;

            int.TryParse(settings.QualityProfile, out qualityProfile);
            var result = RadarrApi.AddMovie(model.ProviderId, model.Title, model.ReleaseDate.Year, qualityProfile, settings.RootPath, settings.ApiKey, settings.FullUri, true);

            if (!string.IsNullOrEmpty(result.Error?.message))
            {
                Log.Error(result.Error.message);
                return(new MovieSenderResult {
                    Result = false, Error = true
                });
            }
            if (!string.IsNullOrEmpty(result.title))
            {
                return(new MovieSenderResult {
                    Result = true, MovieSendingEnabled = true
                });
            }
            return(new MovieSenderResult {
                Result = false, MovieSendingEnabled = true
            });
        }
Esempio n. 24
0
        public async Task <SenderResult> Send(MovieRequests model)
        {
            try
            {
                var cpSettings = await CouchPotatoSettings.GetSettingsAsync();

                //var watcherSettings = await WatcherSettings.GetSettingsAsync();
                var radarrSettings = await RadarrSettings.GetSettingsAsync();

                if (radarrSettings.Enabled)
                {
                    return(await SendToRadarr(model, radarrSettings));
                }

                var dogSettings = await DogNzbSettings.GetSettingsAsync();

                if (dogSettings.Enabled)
                {
                    await SendToDogNzb(model, dogSettings);

                    return(new SenderResult
                    {
                        Success = true,
                        Sent = true,
                    });
                }

                if (cpSettings.Enabled)
                {
                    return(await SendToCp(model, cpSettings, cpSettings.DefaultProfileId));
                }
            }
            catch (Exception e)
            {
                Log.LogError(e, "Error when seing movie to DVR app, added to the request queue");

                // Check if already in request quee
                var existingQueue = await _requestQueuRepository.FirstOrDefaultAsync(x => x.RequestId == model.Id);

                if (existingQueue != null)
                {
                    existingQueue.RetryCount++;
                    existingQueue.Error = e.Message;
                    await _requestQueuRepository.SaveChangesAsync();
                }
                else
                {
                    await _requestQueuRepository.Add(new RequestQueue
                    {
                        Dts        = DateTime.UtcNow,
                        Error      = e.Message,
                        RequestId  = model.Id,
                        Type       = RequestType.Movie,
                        RetryCount = 0
                    });

                    _notificationHelper.Notify(model, NotificationType.ItemAddedToFaultQueue);
                }
            }

            return(new SenderResult
            {
                Success = true,
                Sent = false,
            });
        }
Esempio n. 25
0
 public async Task <IEnumerable <RadarrProfile> > GetProfiles([FromBody] RadarrSettings settings)
 {
     return(await RadarrApi.GetProfiles(settings.ApiKey, settings.FullUri));
 }
Esempio n. 26
0
        private async Task <Negotiator> Radarr()
        {
            var settings = await RadarrSettings.GetSettingsAsync();

            return(View["Radarr", settings]);
        }
Esempio n. 27
0
        private async Task <SenderResult> SendToRadarr(MovieRequests model, bool is4K, RadarrSettings settings)
        {
            var qualityToUse = int.Parse(settings.DefaultQualityProfile);

            var rootFolderPath = settings.DefaultRootPath;

            var profiles = await _userProfiles.GetAll().FirstOrDefaultAsync(x => x.UserId == model.RequestedUserId);

            if (profiles != null)
            {
                if (profiles.RadarrRootPath > 0)
                {
                    var tempPath = await RadarrRootPath(profiles.RadarrRootPath, settings);

                    if (tempPath.HasValue())
                    {
                        rootFolderPath = tempPath;
                    }
                }
                if (profiles.RadarrQualityProfile > 0)
                {
                    qualityToUse = profiles.RadarrQualityProfile;
                }
            }

            // Overrides on the request take priority
            if (model.QualityOverride > 0)
            {
                qualityToUse = model.QualityOverride;
            }
            if (model.RootPathOverride > 0)
            {
                rootFolderPath = await RadarrRootPath(model.RootPathOverride, settings);
            }

            List <MovieResponse> movies;

            // Check if the movie already exists? Since it could be unmonitored

            movies = await _radarrV3Api.GetMovies(settings.ApiKey, settings.FullUri);

            var existingMovie = movies.FirstOrDefault(x => x.tmdbId == model.TheMovieDbId);

            if (existingMovie == null)
            {
                var result = await _radarrV3Api.AddMovie(model.TheMovieDbId, model.Title, model.ReleaseDate.Year,
                                                         qualityToUse, rootFolderPath, settings.ApiKey, settings.FullUri, !settings.AddOnly,
                                                         settings.MinimumAvailability);

                if (!string.IsNullOrEmpty(result.Error?.message))
                {
                    _log.LogError(LoggingEvents.RadarrCacher, result.Error.message);
                    return(new SenderResult {
                        Success = false, Message = result.Error.message, Sent = false
                    });
                }
                if (!string.IsNullOrEmpty(result.title))
                {
                    return(new SenderResult {
                        Success = true, Sent = false
                    });
                }
                return(new SenderResult {
                    Success = true, Sent = false
                });
            }
            // We have the movie, check if we can request it or change the status
            if (!existingMovie.monitored)
            {
                // let's set it to monitored and search for it
                existingMovie.monitored = true;

                await _radarrV3Api.UpdateMovie(existingMovie, settings.ApiKey, settings.FullUri);

                // Search for it
                if (!settings.AddOnly)
                {
                    await _radarrV3Api.MovieSearch(new[] { existingMovie.id }, settings.ApiKey, settings.FullUri);
                }

                return(new SenderResult {
                    Success = true, Sent = true
                });
            }

            return(new SenderResult {
                Success = false, Sent = false, Message = "Movie is already monitored"
            });
        }
Esempio n. 28
0
        public async Task Execute(IJobExecutionContext job)
        {
            await SemaphoreSlim.WaitAsync();

            try
            {
                var settings = await RadarrSettings.GetSettingsAsync();

                if (settings.Enabled)
                {
                    try
                    {
                        var movies = await RadarrApi.GetMovies(settings.ApiKey, settings.FullUri);

                        if (movies != null)
                        {
                            var strat = _ctx.Database.CreateExecutionStrategy();
                            await strat.ExecuteAsync(async() =>
                            {
                                // Let's remove the old cached data
                                using (var tran = await _ctx.Database.BeginTransactionAsync())
                                {
                                    await _ctx.Database.ExecuteSqlRawAsync("DELETE FROM RadarrCache");
                                    tran.Commit();
                                }
                            });

                            var movieIds = new List <RadarrCache>();
                            foreach (var m in movies)
                            {
                                if (m.monitored || m.hasFile)
                                {
                                    if (m.tmdbId > 0)
                                    {
                                        movieIds.Add(new RadarrCache
                                        {
                                            TheMovieDbId = m.tmdbId,
                                            HasFile      = m.hasFile
                                        });
                                    }
                                    else
                                    {
                                        Logger.LogError("TMDBId is not > 0 for movie {0}", m.title);
                                    }
                                }
                            }
                            strat = _ctx.Database.CreateExecutionStrategy();
                            await strat.ExecuteAsync(async() =>
                            {
                                using (var tran = await _ctx.Database.BeginTransactionAsync())
                                {
                                    await _ctx.RadarrCache.AddRangeAsync(movieIds);

                                    await _ctx.SaveChangesAsync();
                                    tran.Commit();
                                }
                            });
                        }

                        await OmbiQuartz.TriggerJob(nameof(IArrAvailabilityChecker), "DVR");
                    }
                    catch (System.Exception ex)
                    {
                        Logger.LogError(LoggingEvents.Cacher, ex, "Failed caching queued items from Radarr");
                    }
                }
            }
            catch (Exception)
            {
                Logger.LogInformation(LoggingEvents.RadarrCacher, "Radarr is not setup, cannot cache episodes");
            }
            finally
            {
                SemaphoreSlim.Release();
            }
        }
Esempio n. 29
0
        private static string GetCode(DiscordSettings settings, RadarrSettings radarrSettings, SonarrSettings sonarrSettings, OverseerrSettings overseerrSettings)
        {
            var code = File.ReadAllText("SlashCommands.txt");

            code = code.Replace("[REQUEST_GROUP_NAME]", Language.Current.DiscordCommandRequestGroupName);
            code = code.Replace("[REQUEST_GROUP_DESCRIPTION]", Language.Current.DiscordCommandRequestGroupDescription);
            code = code.Replace("[REQUEST_MOVIE_TITLE_DESCRIPTION]", Language.Current.DiscordCommandMovieRequestTitleDescription);
            code = code.Replace("[REQUEST_MOVIE_TITLE_OPTION_NAME]", Language.Current.DiscordCommandMovieRequestTitleOptionName);
            code = code.Replace("[REQUEST_MOVIE_TITLE_OPTION_DESCRIPTION]", Language.Current.DiscordCommandMovieRequestTitleOptionDescription);
            code = code.Replace("[REQUEST_MOVIE_TMDB_DESCRIPTION]", Language.Current.DiscordCommandMovieRequestTmbdDescription);
            code = code.Replace("[REQUEST_MOVIE_TMDB_OPTION_NAME]", Language.Current.DiscordCommandMovieRequestTmbdOptionName);
            code = code.Replace("[REQUEST_MOVIE_TMDB_OPTION_DESCRIPTION]", Language.Current.DiscordCommandMovieRequestTmbdOptionDescription);
            code = code.Replace("[REQUEST_TV_TITLE_DESCRIPTION]", Language.Current.DiscordCommandTvRequestTitleDescription);
            code = code.Replace("[REQUEST_TV_TITLE_OPTION_NAME]", Language.Current.DiscordCommandTvRequestTitleOptionName);
            code = code.Replace("[REQUEST_TV_TITLE_OPTION_DESCRIPTION]", Language.Current.DiscordCommandTvRequestTitleOptionDescription);
            code = code.Replace("[REQUEST_TV_TVDB_DESCRIPTION]", Language.Current.DiscordCommandTvRequestTvdbDescription);
            code = code.Replace("[REQUEST_TV_TVDB_OPTION_NAME]", Language.Current.DiscordCommandTvRequestTvdbOptionName);
            code = code.Replace("[REQUEST_TV_TVDB_OPTION_DESCRIPTION]", Language.Current.DiscordCommandTvRequestTvdbOptionDescription);
            code = code.Replace("[REQUEST_PING_NAME]", Language.Current.DiscordCommandPingRequestName);
            code = code.Replace("[REQUEST_PING_DESCRIPTION]", Language.Current.DiscordCommandPingRequestDescription);
            code = code.Replace("[REQUEST_HELP_NAME]", Language.Current.DiscordCommandHelpRequestName);
            code = code.Replace("[REQUEST_HELP_DESCRIPTION]", Language.Current.DiscordCommandHelpRequestDescription);
            code = code.Replace("[REQUIRED_MOVIE_ROLE_IDS]", string.Join(",", settings.MovieRoles.Select(x => $"{x}UL")));
            code = code.Replace("[REQUIRED_TV_ROLE_IDS]", string.Join(",", settings.TvShowRoles.Select(x => $"{x}UL")));
            code = code.Replace("[REQUIRED_CHANNEL_IDS]", string.Join(",", settings.MonitoredChannels.Select(x => $"{x}UL")));

            if (settings.MovieDownloadClient == DownloadClient.Disabled && settings.TvShowDownloadClient == DownloadClient.Disabled)
            {
                var beginIndex = code.IndexOf("[REQUEST_COMMAND_START]");
                var endIndex   = code.IndexOf("[REQUEST_COMMAND_END]") + "[REQUEST_COMMAND_END]".Length;

                code = code.Replace(code.Substring(beginIndex, endIndex - beginIndex), string.Empty);
            }
            else
            {
                if (settings.MovieDownloadClient == DownloadClient.Disabled)
                {
                    var beginIndex = code.IndexOf("[MOVIE_COMMAND_START]");
                    var endIndex   = code.IndexOf("[MOVIE_COMMAND_END]") + "[MOVIE_COMMAND_END]".Length;

                    code = code.Replace(code.Substring(beginIndex, endIndex - beginIndex), string.Empty);
                }
                else if (settings.MovieDownloadClient == DownloadClient.Radarr)
                {
                    code = GenerateMovieCategories(radarrSettings.Categories.Select(x => new Category {
                        Id = x.Id, Name = x.Name
                    }).ToArray(), code);
                }
                else if (settings.MovieDownloadClient == DownloadClient.Overseerr && overseerrSettings.Movies.Categories.Any())
                {
                    code = GenerateMovieCategories(overseerrSettings.Movies.Categories.Select(x => new Category {
                        Id = x.Id, Name = x.Name
                    }).ToArray(), code);
                }
                else
                {
                    code = code.Replace("[REQUEST_MOVIE_TITLE_NAME]", Language.Current.DiscordCommandMovieRequestTitleName);
                    code = code.Replace("[REQUEST_MOVIE_TMDB_NAME]", Language.Current.DiscordCommandMovieRequestTmbdName);
                    code = code.Replace("[MOVIE_COMMAND_START]", string.Empty);
                    code = code.Replace("[MOVIE_COMMAND_END]", string.Empty);
                    code = code.Replace("[TMDB_COMMAND_START]", string.Empty);
                    code = code.Replace("[TMDB_COMMAND_END]", string.Empty);
                    code = code.Replace("[MOVIE_CATEGORY_ID]", "99999");
                }

                if (settings.TvShowDownloadClient == DownloadClient.Disabled)
                {
                    var beginIndex = code.IndexOf("[TV_COMMAND_START]");
                    var endIndex   = code.IndexOf("[TV_COMMAND_END]") + "[TV_COMMAND_END]".Length;

                    code = code.Replace(code.Substring(beginIndex, endIndex - beginIndex), string.Empty);
                }
                else if (settings.TvShowDownloadClient == DownloadClient.Sonarr)
                {
                    code = GenerateTvShowCategories(sonarrSettings.Categories.Select(x => new Category {
                        Id = x.Id, Name = x.Name
                    }).ToArray(), code);
                }
                else if (settings.TvShowDownloadClient == DownloadClient.Overseerr && overseerrSettings.TvShows.Categories.Any())
                {
                    code = GenerateTvShowCategories(overseerrSettings.TvShows.Categories.Select(x => new Category {
                        Id = x.Id, Name = x.Name
                    }).ToArray(), code);
                }
                else
                {
                    code = code.Replace("[REQUEST_TV_TITLE_NAME]", Language.Current.DiscordCommandTvRequestTitleName);
                    code = code.Replace("[REQUEST_TV_TVDB_NAME]", Language.Current.DiscordCommandTvRequestTvdbName);
                    code = code.Replace("[TV_COMMAND_START]", string.Empty);
                    code = code.Replace("[TV_COMMAND_END]", string.Empty);
                    code = code.Replace("[TVDB_COMMAND_START]", string.Empty);
                    code = code.Replace("[TVDB_COMMAND_END]", string.Empty);
                    code = code.Replace("[TV_CATEGORY_ID]", "99999");
                }

                code = code.Replace("[REQUEST_COMMAND_START]", string.Empty);
                code = code.Replace("[REQUEST_COMMAND_END]", string.Empty);
            }

            return(code);
        }