Skip to content

Commit

Permalink
Cleanup double callback
Browse files Browse the repository at this point in the history
  • Loading branch information
martijn00 authored and Ersan Bozduman committed Jan 25, 2024
1 parent 230c72f commit b76231b
Show file tree
Hide file tree
Showing 4 changed files with 30 additions and 13 deletions.
34 changes: 27 additions & 7 deletions Minio/DataModel/Args/GetObjectArgs.cs
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,7 @@ public GetObjectArgs()
OffsetLengthSet = false;
}

internal Action<Stream> CallBack { get; private set; }
internal Func<Stream, CancellationToken, Task> FuncCallBack { get; private set; }
internal Func<Stream, CancellationToken, Task> CallBack { get; private set; }
internal long ObjectOffset { get; private set; }
internal long ObjectLength { get; private set; }
internal string FileName { get; private set; }
Expand All @@ -38,7 +37,7 @@ public GetObjectArgs()
internal override void Validate()
{
base.Validate();
if (CallBack is null && FuncCallBack is null && string.IsNullOrEmpty(FileName))
if (CallBack is null && string.IsNullOrEmpty(FileName))
throw new MinioException("Atleast one of " + nameof(CallBack) + ", CallBack method or " + nameof(FileName) +
" file path to save need to be set for GetObject operation.");

Expand Down Expand Up @@ -76,8 +75,7 @@ internal override HttpRequestMessageBuilder BuildRequest(HttpRequestMessageBuild
{
if (!string.IsNullOrEmpty(VersionId)) requestMessageBuilder.AddQueryParameter("versionId", $"{VersionId}");

if (CallBack is not null) requestMessageBuilder.ResponseWriter = CallBack;
else requestMessageBuilder.FunctionResponseWriter = FuncCallBack;
requestMessageBuilder.ResponseWriter = CallBack;

if (Headers.TryGetValue(S3ZipExtractKey, out var value))
requestMessageBuilder.AddQueryParameter(S3ZipExtractKey, value);
Expand All @@ -87,13 +85,35 @@ internal override HttpRequestMessageBuilder BuildRequest(HttpRequestMessageBuild

public GetObjectArgs WithCallbackStream(Action<Stream> cb)
{
CallBack = cb;
CallBack = (stream, cancellationToken) =>
{
var taskCompletionSource = new TaskCompletionSource<bool>();

if (cancellationToken.IsCancellationRequested)
{
taskCompletionSource.SetCanceled();
}
else
{
try
{
cb(stream);
taskCompletionSource.SetResult(true);
}
catch (Exception ex)
{
taskCompletionSource.SetException(ex);
}
}

return taskCompletionSource.Task;
};
return this;
}

public GetObjectArgs WithCallbackStream(Func<Stream, CancellationToken, Task> cb)
{
FuncCallBack = cb;
CallBack = cb;
return this;
}

Expand Down
2 changes: 1 addition & 1 deletion Minio/DataModel/Args/ListenBucketNotificationsArgs.cs
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ internal override HttpRequestMessageBuilder BuildRequest(HttpRequestMessageBuild
requestMessageBuilder.AddQueryParameter("prefix", Prefix);
requestMessageBuilder.AddQueryParameter("suffix", Suffix);

requestMessageBuilder.FunctionResponseWriter = async (responseStream, cancellationToken) =>
requestMessageBuilder.ResponseWriter = async (responseStream, cancellationToken) =>
{
using var sr = new StreamReader(responseStream);
while (!sr.EndOfStream)
Expand Down
3 changes: 1 addition & 2 deletions Minio/HttpRequestMessageBuilder.cs
Original file line number Diff line number Diff line change
Expand Up @@ -51,8 +51,7 @@ public HttpRequestMessageBuilder(HttpMethod method, Uri requestUri)
}

public Uri RequestUri { get; set; }
public Action<Stream> ResponseWriter { get; set; }
public Func<Stream, CancellationToken, Task> FunctionResponseWriter { get; set; }
public Func<Stream, CancellationToken, Task> ResponseWriter { get; set; }
public HttpMethod Method { get; }

public HttpRequestMessage Request
Expand Down
4 changes: 1 addition & 3 deletions Minio/RequestExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -98,9 +98,7 @@ private static async Task<ResponseResult> ExecuteTaskCoreAsync(this IMinioClient
.ConfigureAwait(false);
responseResult = new ResponseResult(request, response);
if (requestMessageBuilder.ResponseWriter is not null)
requestMessageBuilder.ResponseWriter(responseResult.ContentStream);
if (requestMessageBuilder.FunctionResponseWriter is not null)
await requestMessageBuilder.FunctionResponseWriter(responseResult.ContentStream, cancellationToken)
await requestMessageBuilder.ResponseWriter(responseResult.ContentStream, cancellationToken)
.ConfigureAwait(false);

var path = request.RequestUri.LocalPath.TrimStart('/').TrimEnd('/').Split('/');
Expand Down

0 comments on commit b76231b

Please sign in to comment.