-
Notifications
You must be signed in to change notification settings - Fork 7
/
TempStreamService.cs
36 lines (31 loc) · 1.23 KB
/
TempStreamService.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
#nullable enable
namespace NuGet.Insights
{
public class TempStreamService
{
private readonly Func<TempStreamWriter> _tempStreamWriterFactory;
public TempStreamService(Func<TempStreamWriter> tempStreamWriterFactory)
{
_tempStreamWriterFactory = tempStreamWriterFactory;
}
public async Task<TempStreamResult> CopyToTempStreamAsync(Func<Task<Stream>> getStreamAsync, Func<string> getTempFileName, long length, Func<IIncrementalHash> getHashAlgorithm)
{
var writer = GetWriter();
TempStreamResult result;
do
{
using var src = await getStreamAsync();
using var hashAlgorithm = getHashAlgorithm();
result = await writer.CopyToTempStreamAsync(src, getTempFileName, length, hashAlgorithm);
}
while (result.Type == TempStreamResultType.NeedNewStream);
return result;
}
public TempStreamWriter GetWriter()
{
return _tempStreamWriterFactory();
}
}
}