Advertisement
Guest User

Untitled

a guest
Mar 27th, 2017
58
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 1.90 KB | None | 0 0
  1. using System;
  2. using System.Reactive.Linq;
  3. using ReactiveUI;
  4. using XmlAuthority.Common;
  5. using XmlAuthority.Common.Extensions;
  6. using XmlAuthority.DocumentManagement.Contracts.Commands.Presentation;
  7. using XmlAuthority.DocumentManagement.Desktop.Properties;
  8. using XmlAuthority.DocumentManagement.Desktop.Services;
  9. using XmlAuthority.Services.Application.Contracts;
  10.  
  11. namespace XmlAuthority.DocumentManagement.Desktop.Commands
  12. {
  13.     internal sealed class SaveDocumentCommand : PresentationCommandBase, ISaveDocumentCommand
  14.     {
  15.         private readonly ICurrentDocumentIdMonitor _currentDocumentIdMonitor;
  16.  
  17.         public SaveDocumentCommand(
  18.             ISaveFileService saveFileService,
  19.             IMessageService messageService,
  20.             ICurrentDocumentIdMonitor currentDocumentIdMonitor)
  21.         {
  22.             _currentDocumentIdMonitor = currentDocumentIdMonitor;
  23.  
  24.             var command = ReactiveCommand.Create(() => { }, CanExecuteWhenDocumentOpen);
  25.  
  26.             Instance = command;
  27.             Instance.ThrownExceptions.Subscribe(ex => messageService.ShowWarning(string.Format(Resources.DocumentSavingErrorMessage, ex.Message)));
  28.  
  29.             command.WithLatestFrom(_currentDocumentIdMonitor.CurrentDocumentIdStream, (_, tgt) => tgt)
  30.                 .Subscribe(async tgt => await saveFileService.SaveAsync(tgt.Value));
  31.         }
  32.  
  33.         private IObservable<bool> CanExecuteWhenDocumentOpen => _currentDocumentIdMonitor.CurrentDocumentIdStream.Select(x => x.HasValue);
  34.     }
  35. }
  36.  
  37.  
  38.         public static IObservable<TResult> WithLatestFrom<TLeft, TRight, TResult>(
  39.             this IObservable<TLeft> source,
  40.             IObservable<TRight> other,
  41.             Func<TLeft, TRight, TResult> resultSelector)
  42.         {
  43.             return source.Publish(os =>
  44.                 other.Select(a => os
  45.                     .Select(b => resultSelector(b, a)))
  46.                     .Switch());
  47.         }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement