DownloadTapiBridgeAdapter
public abstract class DownloadTapiBridgeAdapter : IDownloadTapiBridge, IFileTransferProducer, IDisposable
using Relativity.DataExchange.Export.VolumeManagerV2.Statistics;
using Relativity.DataExchange.Logger;
using Relativity.DataExchange.Transfer;
using Relativity.Logging;
using Relativity.Transfer;
using System;
using System.Reactive;
using System.Reactive.Concurrency;
using System.Reactive.Linq;
namespace Relativity.DataExchange.Export.VolumeManagerV2.Download.TapiHelpers
{
public abstract class DownloadTapiBridgeAdapter : IDownloadTapiBridge, IFileTransferProducer, IDisposable
{
private readonly IProgressHandler _progressHandler;
private readonly IMessagesHandler _messageHandler;
private readonly ITransferStatistics _transferStatistics;
protected readonly ILog _logger;
public TapiClient Client => TapiBridge.Client;
public TapiBridgeParameters2 Parameters => TapiBridge.Parameters;
protected ITapiBridge TapiBridge { get; }
public IObservable<string> FileDownloaded => Observable.Select<TapiProgressEventArgs, string>(Observable.Where<TapiProgressEventArgs>(Observable.Select<EventPattern<TapiProgressEventArgs>, TapiProgressEventArgs>(Observable.ObserveOn<EventPattern<TapiProgressEventArgs>>(Observable.FromEventPattern<TapiProgressEventArgs>((Action<EventHandler<TapiProgressEventArgs>>)delegate(EventHandler<TapiProgressEventArgs> h) {
TapiBridge.TapiProgress += h;
_logger.LogVerbose("Attached tapi bridge {TapiBridgeInstanceId} to the events observer.", new object[1] {
TapiBridge.InstanceId
});
}, (Action<EventHandler<TapiProgressEventArgs>>)delegate(EventHandler<TapiProgressEventArgs> h) {
TapiBridge.TapiProgress -= h;
_logger.LogVerbose("Detached tapi bridge {TapiBridgeInstanceId} from the events observer.", new object[1] {
TapiBridge.InstanceId
});
}), Scheduler.get_Default()), (Func<EventPattern<TapiProgressEventArgs>, TapiProgressEventArgs>)((EventPattern<TapiProgressEventArgs> x) => x.get_EventArgs())), (Func<TapiProgressEventArgs, bool>)IsTransferSuccessful), (Func<TapiProgressEventArgs, string>)((TapiProgressEventArgs x) => x.FileName));
protected DownloadTapiBridgeAdapter(ITapiBridge bridge, IProgressHandler progressHandler, IMessagesHandler messageHandler, ITransferStatistics transferStatistics, ILog logger)
{
TapiBridge = bridge.ThrowIfNull("bridge");
_progressHandler = progressHandler.ThrowIfNull("progressHandler");
_messageHandler = messageHandler.ThrowIfNull("messageHandler");
_transferStatistics = transferStatistics.ThrowIfNull("transferStatistics");
_logger = logger.ThrowIfNull<ILog>("logger");
_messageHandler.Subscribe(TapiBridge);
_progressHandler.Subscribe(TapiBridge);
_transferStatistics.Subscribe(TapiBridge);
}
public virtual void Dispose()
{
_progressHandler.Unsubscribe(TapiBridge);
_messageHandler.Unsubscribe(TapiBridge);
_transferStatistics.Unsubscribe(TapiBridge);
TapiBridge.Dispose();
}
public abstract string QueueDownload(TransferPath transferPath);
public abstract void WaitForTransfers();
private bool IsTransferSuccessful(TapiProgressEventArgs arg)
{
_logger.LogVerbose("Long text encoding conversion progress event for file {FileName} with status {Successful}.", new object[2] {
arg.FileName.Secure(),
arg.Successful
});
return arg.Successful;
}
}
}