/// <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),
            });
        }
Beispiel #2
0
        /// <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);
        }