public Task FromPath() { var timestamps = new List <Timestamp>(); foreach (var file in new[] { "/Dir/92cb8761e3e5246f873da524f438f95468eb3d36_2021-03-22T095023_S{etag}.bin", "/Dir/92cb8761e3e5246f873da524f438f95468eb3d36_2021-03-22T095023_Setag.bin", "/Dir/92cb8761e3e5246f873da524f438f95468eb3d36_2021-03-22T095023_W{etag}.bin", "/Dir/92cb8761e3e5246f873da524f438f95468eb3d36_2021-03-22T095023_Wetag.bin", "/Dir/92cb8761e3e5246f873da524f438f95468eb3d36_2021-03-22T095023_.bin", }) { timestamps.Add(Timestamp.FromPath(file)); } return(Verifier.Verify(timestamps)); }
Result HandleFileExists( Uri uri, bool staleIfError, Action <HttpRequestMessage>?modifyRequest, FilePair contentFile, CancellationToken token) { var now = DateTimeOffset.UtcNow; var timestamp = Timestamp.FromPath(contentFile.Content); if (timestamp.Expiry > now) { return(new(contentFile, false, false)); } using var request = BuildRequest(uri, modifyRequest); timestamp.ApplyHeadersToRequest(request); HttpResponseMessage?response; var httpClient = GetClient(); try { response = httpClient.SendEx(request, token); } catch (Exception exception) { if (ShouldReturnStaleIfError(staleIfError, exception, token)) { return(new(contentFile, true, false)); } throw; } var status = response.CacheStatus(staleIfError); switch (status) { case CacheStatus.Hit: case CacheStatus.UseStaleDueToError: { response.Dispose(); return(new(contentFile, true, false)); } case CacheStatus.Stored: case CacheStatus.Revalidate: { using (response) { return(AddItem(response, uri, token)); } } case CacheStatus.NoStore: { return(new(response)); } default: { response.Dispose(); throw new ArgumentOutOfRangeException(); } } }