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); }
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()); } }
public FtpFile(FtpMetadata metadata) { Metadata = metadata; }