protected override IRetrievalResult <IEnumerable <TRecord>, IRetrievalMetadata, ParserContext> OnRetrieve(ParserContext context)
        {
            context = Arguments.EnsureNotNull(context, nameof(context));

            var metadata = new RetrievalMetadata
            {
                Endpoint = context.Path.ToString(),
            };

            try
            {
                using (var stream = this.CreateStream(context))
                {
                    this.ParseStream(stream);
                }

                metadata.Rows = this.Records.Count();

                foreach (var field in this.FieldHeaders())
                {
                    metadata.AddField(field);
                }
            }
            catch (Exception ex)
            {
                metadata.Exception = ex;
            }

            metadata.EndTime = DateTimeOffset.Now;

            var retrieval = new RetrievalResult <IEnumerable <TRecord>, RetrievalMetadata, ParserContext>(this.Records, metadata, context);

            return(retrieval);
        }
        private bool IsDownloadRequired(IDataLoadEventListener listener)
        {
            if (!IsDownloadPermitted())
            {
                _retrievalResult = RetrievalResult.NotPermitted;
                return(false);
            }

            if (_cacheProgressItems == null)
            {
                listener.OnNotify(this, new NotifyEventArgs(ProgressEventType.Information, "No cache progress provided so nothing to download."));
                _retrievalResult = RetrievalResult.Complete;
                return(false);
            }

            return(true);
        }