public GroupWindowViewModel()
        {
            SetGroup = ReactiveCommand.CreateFromObservable <string, GroupObject>(identity => Locator.Current.GetService <ADFacade>().GetGroup(identity));

            _group = SetGroup
                     .ToProperty(this, vm => vm.Group);

            this.WhenActivated(disposables =>
            {
                SetGroup.ThrownExceptions
                .SelectMany(ex => _messages.Handle(new MessageInfo(MessageType.Error, ex.Message, "Could not load group")))
                .Subscribe()
                .DisposeWith(disposables);
            });
        }
Example #2
0
        public static void InvokeSetGroup(GameObject player, ref UserGroup group, ref bool allow)
        {
            SetGroup setGroup = SetGroupEvent;

            if (setGroup == null)
            {
                return;
            }

            SetGroupEvent ev = new SetGroupEvent()
            {
                Player = Player.GetPlayer(player),
                Group  = group,
                Allow  = allow
            };

            SetGroupEvent?.Invoke(ev);
            allow = ev.Allow;
            group = ev.Group;
        }
Example #3
0
        public EditMembersDialogViewModel()
        {
            SetGroup = ReactiveCommand.CreateFromObservable <string, GroupObject>(identity => _adFacade.GetGroup(identity));

            GetGroupMembers = ReactiveCommand.CreateFromObservable(() => GetGroupMembersImpl(_group.Value));

            Search = ReactiveCommand.Create(() => _adFacade.SearchDirectory(_searchQuery, TaskPoolScheduler.Default).Take(1000));

            OpenSearchResult = ReactiveCommand.CreateFromTask(() => NavigateToPrincipal(_selectedSearchResult.Properties.Get <string>("name")));

            OpenGroupMember = ReactiveCommand.CreateFromTask(() => NavigateToPrincipal(_selectedGroupMember.Properties.Get <string>("name")));

            AddToGroup = ReactiveCommand.Create(
                () =>
            {
                if (_groupMembers.Contains(_selectedSearchResult) || _membersToAdd.Contains(_selectedSearchResult))
                {
                    return;
                }
                _membersToRemove.Remove(_selectedSearchResult);
                _groupMembers.Add(_selectedSearchResult);
                _membersToAdd.Add(_selectedSearchResult);
            },
                this.WhenAnyValue(vm => vm.SelectedSearchResult).IsNotNull());

            RemoveFromGroup = ReactiveCommand.Create(
                () =>
            {
                if (_membersToAdd.Contains(_selectedGroupMember))
                {
                    _membersToAdd.Remove(_selectedGroupMember);
                }
                else
                {
                    _membersToRemove.Add(_selectedGroupMember);
                }
                _groupMembers.Remove(_selectedGroupMember);
            },
                this.WhenAnyValue(vm => vm.SelectedGroupMember).IsNotNull());

            Save = ReactiveCommand.CreateFromTask(
                async() => await SaveImpl(_group.Value, _membersToAdd, _membersToRemove),
                Observable.CombineLatest(_membersToAdd.CountChanged.StartWith(0), _membersToRemove.CountChanged.StartWith(0), (x, y) => x > 0 || y > 0));

            Cancel = ReactiveCommand.Create(() => _close());

            _group = SetGroup
                     .ToProperty(this, vm => vm.Group);

            this.WhenActivated(disposables =>
            {
                GetGroupMembers
                .ObserveOnDispatcher()
                .Subscribe(directoryEntry => _groupMembers.Add(directoryEntry))
                .DisposeWith(disposables);

                Search
                .Do(_ => _searchResults.Clear())
                .Switch()
                .ObserveOnDispatcher()
                .Subscribe(directoryEntry => _searchResults.Add(directoryEntry))
                .DisposeWith(disposables);

                Save
                .SelectMany(groups => groups.Any() ? _messages.Handle(new MessageInfo(MessageType.Warning, $"The following messages were generated:\n{string.Join(Environment.NewLine, groups)}")) : Observable.Return(0))
                .ObserveOnDispatcher()
                .Do(_ => _close())
                .Subscribe()
                .DisposeWith(disposables);

                Observable.Merge <(string Title, string Message)>(
                    SetGroup.ThrownExceptions.Select(ex => (("Could not load group", ex.Message))),
                    GetGroupMembers.ThrownExceptions.Select(ex => (("Could not get members", ex.Message))),
                    Search.ThrownExceptions.Select(ex => (("Could not complete search", ex.Message))),
                    OpenSearchResult.ThrownExceptions.Select(ex => (("Could not open AD object", ex.Message))),
                    OpenGroupMember.ThrownExceptions.Select(ex => (("Could not open AD object", ex.Message))),
                    AddToGroup.ThrownExceptions.Select(ex => (("Could not add member", ex.Message))),
                    RemoveFromGroup.ThrownExceptions.Select(ex => (("Could not remove member", ex.Message))),
                    Save.ThrownExceptions.Select(ex => (("Could not save changes", ex.Message))),
                    Cancel.ThrownExceptions.Select(ex => (("Could not close dialog", ex.Message))))
                .SelectMany(dialogContent => _messages.Handle(new MessageInfo(MessageType.Error, dialogContent.Message, dialogContent.Title)))
                .Subscribe()
                .DisposeWith(disposables);
            });
        }