<PackageReference Include="Relativity.Server.Import.SDK" Version="2.9.2" />

DownloadTapiBridgeAdapter

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; } } }