示例#1
0
        public void Queued()
        {
            Log.Trace("Getting the settings");

            var settings = CpSettings.GetSettings();

            if (settings.Enabled)
            {
                Job.SetRunning(true, JobNames.CpCacher);
                Log.Trace("Getting all movies from CouchPotato");
                try
                {
                    var movies = CpApi.GetMovies(settings.FullUri, settings.ApiKey, new[] { "active" });
                    if (movies != null)
                    {
                        Cache.Set(CacheKeys.CouchPotatoQueued, movies, CacheKeys.TimeFrameMinutes.SchedulerCaching);
                    }
                }
                catch (System.Exception ex)
                {
                    Log.Error(ex, "Failed caching queued items from CouchPotato");
                }
                finally
                {
                    Job.Record(JobNames.CpCacher);
                    Job.SetRunning(false, JobNames.CpCacher);
                }
            }
        }
示例#2
0
        private async Task <Response> SaveWatcher()
        {
            var settings = this.Bind <WatcherSettings>();
            var valid    = this.Validate(settings);

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

            var cpSettings = await CpSettings.GetSettingsAsync().ConfigureAwait(false);

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

            settings.ApiKey = settings.ApiKey.Trim();
            var result = await WatcherSettings.SaveSettingsAsync(settings);

            return(Response.AsJson(result
                ? new JsonResponseModel {
                Result = true, Message = "Successfully Updated the Settings for Watcher!"
            }
                : new JsonResponseModel {
                Result = false, Message = "Could not update the settings, take a look at the logs."
            }));
        }
示例#3
0
        private async Task <List <QualityModel> > GetQualityProfiles()
        {
            var qualities = new List <QualityModel>();

            if (IsAdmin)
            {
                var cpSettings = CpSettings.GetSettings();
                if (cpSettings.Enabled)
                {
                    try
                    {
                        var result = await Cache.GetOrSetAsync(CacheKeys.CouchPotatoQualityProfiles, async() =>
                        {
                            return(await Task.Run(() => CpApi.GetProfiles(cpSettings.FullUri, cpSettings.ApiKey)).ConfigureAwait(false));
                        });

                        if (result != null)
                        {
                            qualities = result.list.Select(x => new QualityModel {
                                Id = x._id, Name = x.label
                            }).ToList();
                        }
                    }
                    catch (Exception e)
                    {
                        Log.Info(e);
                    }
                }
            }
            return(qualities);
        }
        public void Queued(long check)
        {
            Log.Trace("This is check no. {0}", check);
            Log.Trace("Getting the settings");

            var settings = CpSettings.GetSettings();

            if (settings.Enabled)
            {
                Log.Trace("Getting all movies from CouchPotato");
                var movies = CpApi.GetMovies(settings.FullUri, settings.ApiKey, new[] { "active" });
                Cache.Set(CacheKeys.CouchPotatoQueued, movies, 10);
            }
        }
示例#5
0
        private void ProcessTransientErrors(List <RequestQueue> requests)
        {
            var sonarrSettings   = SonarrSettings.GetSettings();
            var sickrageSettings = SickrageSettings.GetSettings();
            var cpSettings       = CpSettings.GetSettings();
            var hpSettings       = HeadphoneSettings.GetSettings();

            if (!requests.Any())
            {
                return;
            }

            foreach (var request in requests)
            {
                var  model = ByteConverterHelper.ReturnObject <RequestedModel>(request.Content);
                bool result;
                switch (request.Type)
                {
                case RequestType.Movie:
                    result = ProcessMovies(model);
                    break;

                case RequestType.TvShow:
                    result = ProcessTvShow(model, sonarrSettings, sickrageSettings);
                    break;

                case RequestType.Album:
                    result = ProcessAlbums(model, hpSettings);
                    break;

                default:
                    throw new ArgumentOutOfRangeException();
                }

                if (!result)
                {
                    // we now have the info but couldn't add it, so do nothing now.
                    request.LastRetry = DateTime.UtcNow;
                    Repo.Update(request);
                }
                else
                {
                    // Successful, remove from the fault queue
                    Repo.Delete(request);
                }
            }
        }
        private Response GetCpSettings()
        {
            var model = new ApiModel <CouchPotatoSettings>();

            try
            {
                var settings = CpSettings.GetSettings();
                model.Data = settings;
                return(ReturnReponse(model));
            }
            catch (Exception e)
            {
                model.ErrorMessage = e.Message;
                model.Error        = true;
                return(ReturnReponse(model));
            }
        }
示例#7
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."
            }));
        }
        private Response PostCpSettings()
        {
            var newSettings = JsonConvert.DeserializeObject <CouchPotatoSettings>(Request.Body.AsString());
            var result      = this.Validate(newSettings);

            if (!result.IsValid)
            {
                return(ReturnValidationReponse(result));
            }

            var model    = new ApiModel <bool>();
            var settings = CpSettings.SaveSettings(newSettings);

            if (settings)
            {
                model.Data = true;
                return(ReturnReponse(model));
            }

            model.Error        = true;
            model.ErrorMessage = "Could not update the settings";
            return(ReturnReponse(model));
        }
        private Response GetMovies() // TODO: async await the API calls
        {
            var settings = PrSettings.GetSettings();

            List <Task> taskList = new List <Task>();

            List <RequestedModel> dbMovies = new List <RequestedModel>();

            taskList.Add(Task.Factory.StartNew(() =>
            {
                return(Service.GetAll().Where(x => x.Type == RequestType.Movie));
            }).ContinueWith((t) =>
            {
                dbMovies = t.Result.ToList();

                if (settings.UsersCanViewOnlyOwnRequests && !IsAdmin)
                {
                    dbMovies = dbMovies.Where(x => x.UserHasRequested(Username)).ToList();
                }
            }));


            List <QualityModel> qualities = new List <QualityModel>();

            if (IsAdmin)
            {
                var cpSettings = CpSettings.GetSettings();
                if (cpSettings.Enabled)
                {
                    taskList.Add(Task.Factory.StartNew(() =>
                    {
                        return(Cache.GetOrSet(CacheKeys.CouchPotatoQualityProfiles, () =>
                        {
                            return CpApi.GetProfiles(cpSettings.FullUri, cpSettings.ApiKey); // TODO: cache this!
                        }));
                    }).ContinueWith((t) =>
                    {
                        qualities = t.Result.list.Select(x => new QualityModel()
                        {
                            Id = x._id, Name = x.label
                        }).ToList();
                    }));
                }
            }

            Task.WaitAll(taskList.ToArray());

            var viewModel = dbMovies.Select(movie =>
            {
                return(new RequestViewModel
                {
                    ProviderId = movie.ProviderId,
                    Type = movie.Type,
                    Status = movie.Status,
                    ImdbId = movie.ImdbId,
                    Id = movie.Id,
                    PosterPath = movie.PosterPath,
                    ReleaseDate = movie.ReleaseDate,
                    ReleaseDateTicks = movie.ReleaseDate.Ticks,
                    RequestedDate = movie.RequestedDate,
                    Released = DateTime.Now > movie.ReleaseDate,
                    RequestedDateTicks = DateTimeHelper.OffsetUTCDateTime(movie.RequestedDate, DateTimeOffset).Ticks,
                    Approved = movie.Available || movie.Approved,
                    Title = movie.Title,
                    Overview = movie.Overview,
                    RequestedUsers = IsAdmin ? movie.AllUsers.ToArray() : new string[] { },
                    ReleaseYear = movie.ReleaseDate.Year.ToString(),
                    Available = movie.Available,
                    Admin = IsAdmin,
                    Issues = movie.Issues.ToString().CamelCaseToWords(),
                    OtherMessage = movie.OtherMessage,
                    AdminNotes = movie.AdminNote,
                    Qualities = qualities.ToArray()
                });
            }).ToList();

            return(Response.AsJson(viewModel));
        }
示例#10
0
        private async Task <Response> GetMovies()
        {
            var settings = PrSettings.GetSettings();

            var allRequests = await Service.GetAllAsync();

            allRequests = allRequests.Where(x => x.Type == RequestType.Movie);

            var dbMovies = allRequests.ToList();

            if (settings.UsersCanViewOnlyOwnRequests && !IsAdmin)
            {
                dbMovies = dbMovies.Where(x => x.UserHasRequested(Username)).ToList();
            }

            List <QualityModel> qualities = new List <QualityModel>();

            if (IsAdmin)
            {
                var cpSettings = CpSettings.GetSettings();
                if (cpSettings.Enabled)
                {
                    try
                    {
                        var result = await Cache.GetOrSetAsync(CacheKeys.CouchPotatoQualityProfiles, async() =>
                        {
                            return(await Task.Run(() => CpApi.GetProfiles(cpSettings.FullUri, cpSettings.ApiKey)).ConfigureAwait(false));
                        });

                        if (result != null)
                        {
                            qualities = result.list.Select(x => new QualityModel {
                                Id = x._id, Name = x.label
                            }).ToList();
                        }
                    }
                    catch (Exception e)
                    {
                        Log.Info(e);
                    }
                }
            }

            var viewModel = dbMovies.Select(movie => new RequestViewModel
            {
                ProviderId         = movie.ProviderId,
                Type               = movie.Type,
                Status             = movie.Status,
                ImdbId             = movie.ImdbId,
                Id                 = movie.Id,
                PosterPath         = movie.PosterPath,
                ReleaseDate        = movie.ReleaseDate,
                ReleaseDateTicks   = movie.ReleaseDate.Ticks,
                RequestedDate      = movie.RequestedDate,
                Released           = DateTime.Now > movie.ReleaseDate,
                RequestedDateTicks = DateTimeHelper.OffsetUTCDateTime(movie.RequestedDate, DateTimeOffset).Ticks,
                Approved           = movie.Available || movie.Approved,
                Title              = movie.Title,
                Overview           = movie.Overview,
                RequestedUsers     = IsAdmin ? movie.AllUsers.ToArray() : new string[] { },
                ReleaseYear        = movie.ReleaseDate.Year.ToString(),
                Available          = movie.Available,
                Admin              = IsAdmin,
                IssueId            = movie.IssueId,
                Qualities          = qualities.ToArray()
            }).ToList();

            return(Response.AsJson(viewModel));
        }
示例#11
0
        private async Task <Response> GetMovies()
        {
            var allRequests = await Service.GetAllAsync();

            allRequests = allRequests.Where(x => x.Type == RequestType.Movie);

            var dbMovies = allRequests.ToList();

            if (Security.HasPermissions(User, Permissions.UsersCanViewOnlyOwnRequests) && !IsAdmin)
            {
                dbMovies = dbMovies.Where(x => x.UserHasRequested(Username)).ToList();
            }

            List <QualityModel> qualities = new List <QualityModel>();
            var rootFolders = new List <RootFolderModel>();

            var radarr = await Radarr.GetSettingsAsync();

            if (IsAdmin)
            {
                try
                {
                    var cpSettings = await CpSettings.GetSettingsAsync();

                    if (cpSettings.Enabled)
                    {
                        try
                        {
                            var result = await Cache.GetOrSetAsync(CacheKeys.CouchPotatoQualityProfiles, async() =>
                            {
                                return
                                (await Task.Run(() => CpApi.GetProfiles(cpSettings.FullUri, cpSettings.ApiKey))
                                 .ConfigureAwait(false));
                            });

                            if (result != null)
                            {
                                qualities =
                                    result.list.Select(x => new QualityModel {
                                    Id = x._id, Name = x.label
                                }).ToList();
                            }
                        }
                        catch (Exception e)
                        {
                            Log.Info(e);
                        }
                    }
                    if (radarr.Enabled)
                    {
                        var rootFoldersResult = await Cache.GetOrSetAsync(CacheKeys.RadarrRootFolders, async() =>
                        {
                            return(await Task.Run(() => RadarrApi.GetRootFolders(radarr.ApiKey, radarr.FullUri)));
                        });

                        rootFolders =
                            rootFoldersResult.Select(
                                x => new RootFolderModel {
                            Id = x.id.ToString(), Path = x.path, FreeSpace = x.freespace
                        })
                            .ToList();

                        var result = await Cache.GetOrSetAsync(CacheKeys.RadarrQualityProfiles, async() =>
                        {
                            return(await Task.Run(() => RadarrApi.GetProfiles(radarr.ApiKey, radarr.FullUri)));
                        });

                        qualities = result.Select(x => new QualityModel {
                            Id = x.id.ToString(), Name = x.name
                        }).ToList();
                    }
                }
                catch (Exception e)
                {
                    Log.Error(e);
                }
            }


            var canManageRequest = Security.HasAnyPermissions(User, Permissions.Administrator, Permissions.ManageRequests);
            var allowViewUsers   = Security.HasAnyPermissions(User, Permissions.Administrator, Permissions.ViewUsers);

            var viewModel = dbMovies.Select(movie => new RequestViewModel
            {
                ProviderId         = movie.ProviderId,
                Type               = movie.Type,
                Status             = movie.Status,
                ImdbId             = movie.ImdbId,
                Id                 = movie.Id,
                PosterPath         = movie.PosterPath,
                ReleaseDate        = movie.ReleaseDate,
                ReleaseDateTicks   = movie.ReleaseDate.Ticks,
                RequestedDate      = movie.RequestedDate,
                Released           = DateTime.Now > movie.ReleaseDate,
                RequestedDateTicks = DateTimeHelper.OffsetUTCDateTime(movie.RequestedDate, DateTimeOffset).Ticks,
                Approved           = movie.Available || movie.Approved,
                Title              = movie.Title,
                Overview           = movie.Overview,
                RequestedUsers     = canManageRequest || allowViewUsers ? movie.AllUsers.ToArray() : new string[] { },
                ReleaseYear        = movie.ReleaseDate.Year.ToString(),
                Available          = movie.Available,
                Admin              = canManageRequest,
                IssueId            = movie.IssueId,
                Denied             = movie.Denied,
                DeniedReason       = movie.DeniedReason,
                Qualities          = qualities.ToArray(),
                HasRootFolders     = rootFolders.Any(),
                RootFolders        = rootFolders.ToArray(),
                CurrentRootPath    = radarr.Enabled ? GetRootPath(movie.RootFolderSelected, radarr).Result : null
            }).ToList();

            return(Response.AsJson(viewModel));
        }