Пример #1
0
        public IList <Tv.Movie> ParseResponse(NetImportResponse importResponse)
        {
            _importResponse = importResponse;

            var movies = new List <Tv.Movie>();

            if (!PreProcess(_importResponse))
            {
                return(movies);
            }

            var jsonResponse = JsonConvert.DeserializeObject <List <StevenLuResponse> >(_importResponse.Content);

            // no movies were return
            if (jsonResponse == null)
            {
                return(movies);
            }

            foreach (var item in jsonResponse)
            {
                movies.AddIfNotNull(new Tv.Movie()
                {
                    Title  = item.title,
                    ImdbId = item.imdb_id,
                });
            }

            return(movies);
        }
Пример #2
0
        protected virtual XDocument LoadXmlDocument(NetImportResponse indexerResponse)
        {
            try
            {
                var content = indexerResponse.Content;
                content = ReplaceEntities.Replace(content, ReplaceEntity);

                using (var xmlTextReader = XmlReader.Create(new StringReader(content), new XmlReaderSettings {
                    DtdProcessing = DtdProcessing.Ignore, IgnoreComments = true
                }))
                {
                    return(XDocument.Load(xmlTextReader));
                }
            }
            catch (XmlException ex)
            {
                var contentSample = indexerResponse.Content.Substring(0, Math.Min(indexerResponse.Content.Length, 512));
                _logger.Debug("Truncated response content (originally {0} characters): {1}", indexerResponse.Content.Length, contentSample);

                ex.Data.Add("ContentLength", indexerResponse.Content.Length);
                ex.Data.Add("ContentSample", contentSample);

                throw;
            }
        }
Пример #3
0
        public virtual IList <Movie> ParseResponse(NetImportResponse importResponse)
        {
            _importResponse = importResponse;

            var movies = new List <Movie>();

            if (!PreProcess(importResponse))
            {
                return(movies);
            }

            var document = LoadXmlDocument(importResponse);
            var items    = GetItems(document);

            foreach (var item in items)
            {
                try
                {
                    var reportInfo = ProcessItem(item);

                    movies.AddIfNotNull(reportInfo);
                }
                catch (Exception itemEx)
                {
                    //itemEx.Data.Add("Item", item.Title());
                    _logger.Error(itemEx, "An error occurred while processing feed item from " + importResponse.Request.Url);
                }
            }

            return(movies);
        }
Пример #4
0
        public IList <Movies.Movie> ParseResponse(NetImportResponse importResponse)
        {
            _importResponse = importResponse;

            var movies = new List <Movies.Movie>();

            if (!PreProcess(_importResponse))
            {
                return(movies);
            }

            var jsonResponse = JsonConvert.DeserializeObject <CouchPotatoResponse>(_importResponse.Content);

            // no movies were return
            if (jsonResponse.total == 0)
            {
                return(movies);
            }

            var responseData = jsonResponse.movies;

            foreach (var item in responseData)
            {
                int tmdbid = item.info?.tmdb_id ?? 0;

                // Fix weird error reported by Madmanali93
                if (item.type != null && item.releases != null)
                {
                    // if there are no releases at all the movie wasn't found on CP, so return movies
                    if (!item.releases.Any() && item.type == "movie")
                    {
                        movies.AddIfNotNull(new Movies.Movie()
                        {
                            Title  = item.title,
                            ImdbId = item.info.imdb,
                            TmdbId = tmdbid
                        });
                    }
                    else
                    {
                        // snatched,missing,available,downloaded
                        // done,seeding
                        bool isCompleted = item.releases.Any(rel => (rel.status == "done" || rel.status == "seeding"));
                        if (!isCompleted)
                        {
                            movies.AddIfNotNull(new Movies.Movie()
                            {
                                Title     = item.title,
                                ImdbId    = item.info.imdb,
                                TmdbId    = tmdbid,
                                Monitored = false
                            });
                        }
                    }
                }
            }

            return(movies);
        }
Пример #5
0
        public IList <Movies.Movie> ParseResponse(NetImportResponse importResponse)
        {
            _importResponse = importResponse;

            var movies = new List <Movies.Movie>();

            if (!PreProcess(_importResponse))
            {
                return(movies);
            }

            if (_settings.ListType != (int)TMDbListType.List)
            {
                var jsonResponse = JsonConvert.DeserializeObject <MovieSearchRoot>(_importResponse.Content);

                // no movies were return
                if (jsonResponse == null)
                {
                    return(movies);
                }

                return(jsonResponse.results.SelectList(_skyhookProxy.MapMovie));
            }
            else
            {
                var jsonResponse = JsonConvert.DeserializeObject <ListResponseRoot>(_importResponse.Content);

                // no movies were return
                if (jsonResponse == null)
                {
                    return(movies);
                }

                foreach (var movie in jsonResponse.items)
                {
                    // Skip non-movie things
                    if (movie.media_type != "movie")
                    {
                        continue;
                    }

                    // Movies with no Year Fix
                    if (string.IsNullOrWhiteSpace(movie.release_date))
                    {
                        continue;
                    }

                    movies.AddIfNotNull(_skyhookProxy.MapMovie(movie));
                }
            }


            return(movies);
        }
Пример #6
0
        public IList <Tv.Movie> ParseResponse(NetImportResponse importResponse)
        {
            _importResponse = importResponse;

            var movies = new List <Tv.Movie>();

            if (!PreProcess(_importResponse))
            {
                return(movies);
            }

            if (_settings.ListType == (int)TraktListType.Popular)
            {
                var jsonResponse = JsonConvert.DeserializeObject <List <Movie> >(_importResponse.Content);

                foreach (var movie in jsonResponse)
                {
                    movies.AddIfNotNull(new Tv.Movie()
                    {
                        Title  = movie.title,
                        ImdbId = movie.ids.imdb,
                        TmdbId = movie.ids.tmdb,
                        Year   = (movie.year ?? 0)
                    });
                }
            }
            else
            {
                var jsonResponse = JsonConvert.DeserializeObject <List <TraktResponse> >(_importResponse.Content);

                // no movies were return
                if (jsonResponse == null)
                {
                    return(movies);
                }

                foreach (var movie in jsonResponse)
                {
                    movies.AddIfNotNull(new Tv.Movie()
                    {
                        Title  = movie.movie.title,
                        ImdbId = movie.movie.ids.imdb,
                        TmdbId = movie.movie.ids.tmdb,
                        Year   = (movie.movie.year ?? 0)
                    });
                }
            }

            return(movies);
        }
Пример #7
0
        protected virtual bool PreProcess(NetImportResponse indexerResponse)
        {
            if (indexerResponse.HttpResponse.StatusCode != HttpStatusCode.OK)
            {
                throw new NetImportException(indexerResponse, "Indexer API call resulted in an unexpected StatusCode [{0}]", indexerResponse.HttpResponse.StatusCode);
            }

            if (indexerResponse.HttpResponse.Headers.ContentType != null && indexerResponse.HttpResponse.Headers.ContentType.Contains("text/json") &&
                indexerResponse.HttpRequest.Headers.Accept != null && !indexerResponse.HttpRequest.Headers.Accept.Contains("text/json"))
            {
                throw new NetImportException(indexerResponse, "Indexer responded with html content. Site is likely blocked or unavailable.");
            }

            return(true);
        }
Пример #8
0
        public IList <Movies.Movie> ParseResponse(NetImportResponse importResponse)
        {
            _importResponse = importResponse;

            var movies = new List <Movies.Movie>();

            if (!PreProcess(_importResponse))
            {
                return(movies);
            }

            var jsonResponse = JsonConvert.DeserializeObject <List <MovieResult> >(_importResponse.Content);

            // no movies were return
            if (jsonResponse == null)
            {
                return(movies);
            }

            return(jsonResponse.SelectList(_skyhookProxy.MapMovie));
        }
Пример #9
0
        protected virtual bool PreProcess(NetImportResponse indexerResponse)
        {
            try
            {
                var error = JsonConvert.DeserializeObject <RadarrError>(indexerResponse.HttpResponse.Content);

                if (error != null && error.Errors != null && error.Errors.Count != 0)
                {
                    throw new RadarrAPIException(error);
                }
            }
            catch (JsonSerializationException)
            {
                //No error!
            }


            if (indexerResponse.HttpResponse.StatusCode != System.Net.HttpStatusCode.OK)
            {
                throw new HttpException(indexerResponse.HttpRequest, indexerResponse.HttpResponse);
            }

            return(true);
        }
Пример #10
0
 public NetImportException(NetImportResponse response, string message, params object[] args)
     : base(message, args)
 {
     _netImportResponse = response;
 }
Пример #11
0
 public NetImportException(NetImportResponse response, string message)
     : base(message)
 {
     _netImportResponse = response;
 }