ProgressHandler
using Relativity.DataExchange.Logger;
using Relativity.DataExchange.Transfer;
using Relativity.Logging;
using System;
namespace Relativity.DataExchange.Export.VolumeManagerV2.Statistics
{
public abstract class ProgressHandler : IProgressHandler
{
private readonly ILog _logger;
protected IDownloadProgressManager DownloadProgressManager { get; }
protected ProgressHandler(IDownloadProgressManager downloadProgressManager, ILog logger)
{
DownloadProgressManager = downloadProgressManager.ThrowIfNull("downloadProgressManager");
_logger = logger.ThrowIfNull<ILog>("logger");
}
public void Subscribe(ITapiBridge tapiBridge)
{
tapiBridge.ThrowIfNull("tapiBridge");
_logger.LogVerbose("Attached tapi bridge {TapiBridgeInstanceId} to the progress handler.", new object[1] {
tapiBridge.InstanceId
});
tapiBridge.TapiProgress += OnFileProgress;
}
public void Unsubscribe(ITapiBridge tapiBridge)
{
tapiBridge.ThrowIfNull("tapiBridge");
_logger.LogVerbose("Detached tapi bridge {TapiBridgeInstanceId} from the progress handler.", new object[1] {
tapiBridge.InstanceId
});
tapiBridge.TapiProgress -= OnFileProgress;
}
protected abstract void MarkAsTransferCompleted(string targetFile, int lineNumber, bool transferResult);
private void OnFileProgress(object sender, TapiProgressEventArgs e)
{
_logger.LogVerbose("Tapi progress event for {FileName} with status {Successful} ({LineNumber}).", new object[3] {
e.FileName.Secure(),
e.Successful,
e.LineNumber
});
if (e.Completed)
try {
MarkAsTransferCompleted(e.TargetFile, e.LineNumber, e.Successful);
} catch (Exception ex) {
_logger.LogError(ex, "Error while handling Tapi progress event for {FileName} with status {Successful} ({LineNumber})", new object[3] {
e.FileName.Secure(),
e.Successful,
e.LineNumber
});
}
}
}
}