/// <summary> /// Gets the changeset for updates. /// </summary> private Changeset GetChangeset(RelationEditorVM prev, RelationEditorVM next, Guid id, AppUser user, Guid?revertedId, Guid?groupId = null) { if (prev == null && next == null) { throw new ArgumentNullException(); } return(new Changeset { Id = Guid.NewGuid(), RevertedChangesetId = revertedId, GroupId = groupId, ChangeType = ChangesetHelper.GetChangeType(prev, next, revertedId), EntityType = ChangesetEntityType.Relation, Date = DateTime.Now, EditedRelationId = id, Author = user, UpdatedState = next == null ? null : JsonConvert.SerializeObject(next), }); }
/// <summary> /// Gets the changeset for updates. /// </summary> private async Task <Changeset> GetChangesetAsync(MediaEditorVM prev, MediaEditorVM next, Guid id, ClaimsPrincipal principal, Guid?revertedId) { if (prev == null && next == null) { throw new ArgumentNullException(); } var user = await _userMgr.GetUserAsync(principal, "Пользователь не найден"); return(new Changeset { Id = Guid.NewGuid(), RevertedChangesetId = revertedId, ChangeType = ChangesetHelper.GetChangeType(prev, next, revertedId), EntityType = ChangesetEntityType.Media, Date = DateTime.Now, EditedMediaId = id, Author = user, UpdatedState = next == null ? null : JsonConvert.SerializeObject(next), }); }
public ConnectionViewModel(ICompositionService compositionService) { compositionService.SatisfyImportsOnce(this); _changesetHelper = new ChangesetHelper <ICanPort>(); var interfacesBindingDisposable = Observable.Timer( TimeSpan.Zero, TimeSpan.FromMilliseconds(500), RxApp.MainThreadScheduler) .Select(_ => _changesetHelper.ApplyChanges(GetPorts())) .Bind(out _interfaces) .Subscribe(changeSet => { if (Interface != null && changeSet.Removes(Interface)) { Interface = null; } if (Interface == null && changeSet.Adds > 0) { Interface = changeSet.GetFirstAddedItemOrDefault(); } }); var stateIsValid = this.WhenAnyValue( x => x.Interface, x => x.BitRate, (iface, bitRate) => iface != null && bitRate != null); Connect = ReactiveCommand.CreateFromTask <Window>(async window => { Busy = true; try { await Task.Run(async() => { using (var cts = new CancellationTokenSource(Constants.InterfaceConnectionTimeoutMs)) { Driver = await Interface.OpenAsync(BitRate.Value, cts.Token).ConfigureAwait(false); } }); window.DialogResult = true; window.Close(); } catch { Busy = false; throw; } }, canExecute: stateIsValid); var connectThrownExceptionsDisposable = Connect.ThrownExceptions .Subscribe(ex => { ErrorWindow.Show( $"Cannot connect to {Interface.DisplayName} at bitrate {BitRate?.ToString() ?? "<Invalid>"}.", ex.ToString()); }); _cleanUp = new CompositeDisposable( interfacesBindingDisposable, connectThrownExceptionsDisposable); }