Ejemplo n.º 1
0
        public SonarrAddSeries AddSeries(int tvdbId, string title, int qualityId, bool seasonFolders, string rootPath, int seasonCount, int[] seasons, string apiKey, Uri baseUrl)
        {
            Log.Debug("Adding series {0}", title);
            Log.Debug("Seasons = {0}, out of {1} seasons", seasons.DumpJson(), seasonCount);
            var request = new RestRequest
            {
                Resource = "/api/Series?",
                Method   = Method.POST
            };

            var options = new SonarrAddSeries
            {
                seasonFolder     = seasonFolders,
                title            = title,
                qualityProfileId = qualityId,
                tvdbId           = tvdbId,
                titleSlug        = title,
                seasons          = new List <Season>(),
                rootFolderPath   = rootPath
            };

            for (var i = 1; i <= seasonCount; i++)
            {
                var season = new Season
                {
                    seasonNumber = i,
                    monitored    = seasons.Length == 0 || seasons.Any(x => x == i)
                };
                options.seasons.Add(season);
            }

            Log.Debug("Sonarr API Options:");
            Log.Debug(options.DumpJson());

            request.AddHeader("X-Api-Key", apiKey);
            request.AddJsonBody(options);

            SonarrAddSeries result;

            try
            {
                result = Api.ExecuteJson <SonarrAddSeries>(request, baseUrl);
            }
            catch (JsonSerializationException jse)
            {
                Log.Error(jse);
                var error    = Api.ExecuteJson <List <SonarrError> >(request, baseUrl);
                var messages = error?.Select(x => x.errorMessage).ToList();
                messages?.ForEach(x => Log.Error(x));
                result = new SonarrAddSeries {
                    ErrorMessages = messages
                };
            }

            return(result);
        }
Ejemplo n.º 2
0
        public SonarrAddSeries AddSeries(SonarrAddSeries series, string apiKey, Uri baseUrl)
        {
            var request = new RestRequest
            {
                Resource = "/api/Series?",
                Method   = Method.POST
            };

            Log.Debug("Sonarr API Options:");
            Log.Debug(series.DumpJson());

            request.AddHeader("X-Api-Key", apiKey);
            request.AddJsonBody(series);

            SonarrAddSeries result;

            try
            {
                var policy = RetryHandler.RetryAndWaitPolicy((exception, timespan) => Log.Error(exception, "Exception when calling AddSeries for Sonarr, Retrying {0}", timespan), new TimeSpan[] {
                    TimeSpan.FromSeconds(2)
                });

                result = policy.Execute(() => Api.ExecuteJson <SonarrAddSeries>(request, baseUrl));
            }
            catch (JsonSerializationException jse)
            {
                Log.Error(jse);
                var error    = Api.ExecuteJson <List <SonarrError> >(request, baseUrl);
                var messages = error?.Select(x => x.errorMessage).ToList();
                messages?.ForEach(x => Log.Error(x));
                result = new SonarrAddSeries {
                    ErrorMessages = messages
                };
            }

            return(result);
        }
Ejemplo n.º 3
0
        public SonarrAddSeries AddSeries(int tvdbId, string title, int qualityId, bool seasonFolders, string rootPath, int seasonCount, int[] seasons, string apiKey, Uri baseUrl, bool monitor = true, bool searchForMissingEpisodes = false)
        {
            Log.Debug("Adding series {0}", title);
            Log.Debug("Seasons = {0}, out of {1} seasons", seasons.DumpJson(), seasonCount);
            var request = new RestRequest
            {
                Resource = "/api/Series?",
                Method   = Method.POST
            };

            var options = new SonarrAddSeries
            {
                seasonFolder     = seasonFolders,
                title            = title,
                qualityProfileId = qualityId,
                tvdbId           = tvdbId,
                titleSlug        = title,
                seasons          = new List <Season>(),
                rootFolderPath   = rootPath,
                monitored        = monitor
            };

            if (!searchForMissingEpisodes)
            {
                options.addOptions = new AddOptions
                {
                    searchForMissingEpisodes   = false,
                    ignoreEpisodesWithFiles    = true,
                    ignoreEpisodesWithoutFiles = true
                };
            }

            for (var i = 1; i <= seasonCount; i++)
            {
                var season = new Season
                {
                    seasonNumber = i,
                    // ReSharper disable once SimplifyConditionalTernaryExpression
                    monitored = monitor ? seasons.Length == 0 || seasons.Any(x => x == i) : false
                };
                options.seasons.Add(season);
            }

            Log.Debug("Sonarr API Options:");
            Log.Debug(options.DumpJson());

            request.AddHeader("X-Api-Key", apiKey);
            request.AddJsonBody(options);

            SonarrAddSeries result;

            try
            {
                var policy = RetryHandler.RetryAndWaitPolicy((exception, timespan) => Log.Error(exception, "Exception when calling AddSeries for Sonarr, Retrying {0}", timespan), new TimeSpan[] {
                    TimeSpan.FromSeconds(1),
                    TimeSpan.FromSeconds(2),
                });

                result = policy.Execute(() => Api.ExecuteJson <SonarrAddSeries>(request, baseUrl));
            }
            catch (JsonSerializationException jse)
            {
                Log.Error(jse);
                var error    = Api.ExecuteJson <List <SonarrError> >(request, baseUrl);
                var messages = error?.Select(x => x.errorMessage).ToList();
                messages?.ForEach(x => Log.Error(x));
                result = new SonarrAddSeries {
                    ErrorMessages = messages
                };
            }

            return(result);
        }