public ImportListFetchResult FetchSingleList(ImportListDefinition definition)
        {
            var result = new ImportListFetchResult();

            var importList = _importListFactory.GetInstance(definition);

            if (importList == null || !definition.Enable)
            {
                _logger.Debug("Import list {0} is not enabled. No Movies will be added");
                return(result);
            }

            var importListLocal = importList;

            try
            {
                var importListReports = importListLocal.Fetch();

                lock (result)
                {
                    _logger.Debug("Found {0} from {1}", importListReports.Movies.Count, importList.Name);

                    if (!importListReports.AnyFailure)
                    {
                        // TODO some opportunity to bulk map here if we had the tmdbIds
                        var listMovies = importListReports.Movies.Select(x =>
                        {
                            return(MapMovieReport(x));
                        }).Where(x => x.TmdbId > 0).ToList();

                        listMovies = listMovies.DistinctBy(x => x.TmdbId).ToList();

                        result.Movies.AddRange(listMovies);
                        _listMovieService.SyncMoviesForList(listMovies, importList.Definition.Id);
                    }

                    result.AnyFailure |= importListReports.AnyFailure;
                }
            }
            catch (Exception e)
            {
                _logger.Error(e, "Error during Import List Sync for list {0}", importList.Name);
            }

            _logger.Debug("Found {0} reports for list {1}", result.Movies.Count, importList.Name);

            return(result);
        }
        public List <ImportListItemInfo> FetchSingleList(ImportListDefinition definition)
        {
            var result = new List <ImportListItemInfo>();

            var importList = _importListFactory.GetInstance(definition);

            if (importList == null || !definition.EnableAutomaticAdd)
            {
                _logger.Debug("Import list not enabled, skipping.");
                return(result);
            }

            var taskList    = new List <Task>();
            var taskFactory = new TaskFactory(TaskCreationOptions.LongRunning, TaskContinuationOptions.None);

            var importListLocal = importList;

            var task = taskFactory.StartNew(() =>
            {
                try
                {
                    var importListReports = importListLocal.Fetch();

                    lock (result)
                    {
                        _logger.Debug("Found {0} from {1}", importListReports.Count, importList.Name);

                        result.AddRange(importListReports);
                    }
                }
                catch (Exception e)
                {
                    _logger.Error(e, "Error during Import List Sync");
                }
            }).LogExceptions();

            taskList.Add(task);


            Task.WaitAll(taskList.ToArray());

            result = result.DistinctBy(r => new { r.TvdbId, r.Title }).ToList();

            return(result);
        }