Example #1
0
            public async Task <FtpFile <TPayload> > GetResource(FtpMetadata metadata, IResourceTrackedState lastState, CancellationToken ctk = default)
            {
                var contents = await Policy
                               .Handle <Exception>()
                               .RetryAsync(3)
                               .ExecuteAsync(async ct =>
                {
                    using (var cts1 = new CancellationTokenSource(_config.DownloadTimeout))
                        using (var cts2 = CancellationTokenSource.CreateLinkedTokenSource(cts1.Token, ct))
                        {
                            return(await _ftpClient.DownloadFileAsync(metadata.Entry.FullPath, ctk: cts2.Token));
                        }
                }, ctk);

                var checksum = _computeChecksum(contents);

                if (lastState?.CheckSum == checksum)
                {
                    return(null);
                }

                var file = new FtpFile <TPayload>(metadata)
                {
                    CheckSum    = checksum,
                    RetrievedAt = SystemClock.Instance.GetCurrentInstant(),
                    ParsedData  = _parser.Parse(metadata, contents)
                };

                return(file);
            }
Example #2
0
            public async Task <IEnumerable <FtpMetadata> > GetMetadata(FtpFilter filter, CancellationToken ctk = default)
            {
                IEnumerable <FtpMetadata> res = new FtpMetadata[0];

                using (var cts1 = new CancellationTokenSource(_config.ListingTimeout))
                    using (var cts2 = CancellationTokenSource.CreateLinkedTokenSource(cts1.Token, ctk))
                    {
                        foreach (var f in filter.FoldersToWatch)
                        {
                            var list = await _ftpClient.ListFilesRecursiveAsync(f, x => filter.FolderFilter?.Invoke(x.FullPath) == false, ctk : cts2.Token).ConfigureAwait(false);

                            res = res.Concat(list.Select(e => new FtpMetadata(e)));
                        }
                        return(res.ToList());
                    }
            }
Example #3
0
 public FtpFile(FtpMetadata metadata)
 {
     Metadata = metadata;
 }