private async UniTaskVoid Start()
    {
        var ap = new AsyncReactiveCommand <string>(_isEnabled);

        WaitCommandAsync(ap).Forget();

        ap.Subscribe(_ => { return(Observable.Timer(TimeSpan.FromSeconds(2)).AsUnitObservable()); });

        Observable.Timer(TimeSpan.FromSeconds(5))
        .Subscribe(_ => ap.Execute("aaa"));
    }
示例#2
0
        public NotificationsViewModel(NotificationTabParameters param, IMastodonClient client) : base(param, null)
        {
            model                  = new NotificationsModel(client);
            Notifications          = new ReadOnlyObservableCollection <Notification>(model);
            IsStreaming            = model.StreamingStarted;
            ReloadCommand          = new AsyncReactiveCommand().WithSubscribe(() => model.FetchPreviousAsync());
            ReloadOlderCommand     = new AsyncReactiveCommand().WithSubscribe(() => model.FetchNextAsync());
            ToggleStreamingCommand = new ReactiveCommand().WithSubscribe(() => model.StreamingStarting.Value = !IsStreaming.Value);

            model.StreamingStarting.Value = param.StreamingOnStartup;
            ReloadCommand.Execute();
        }
示例#3
0
    public void WithSubscribeDisposableOverrideGenericVersion()
    {
        var task1 = new TaskCompletionSource <object>();
        var task2 = new TaskCompletionSource <object>();

        var command = new AsyncReactiveCommand <string>()
                      .WithSubscribe(_ => task1.Task)
                      .WithSubscribe(_ => task2.Task, out var subscription);

        subscription.Dispose();

        command.Execute("x");
        command.CanExecute().IsFalse();
        task1.SetResult(null);
        command.CanExecute().IsTrue();
    }
示例#4
0
    public void RemoveSubscription()
    {
        var command = new AsyncReactiveCommand();
        var task1   = new TaskCompletionSource <object>();
        var task2   = new TaskCompletionSource <object>();

        var subscription1 = command.Subscribe(_ => task1.Task);
        var subscription2 = command.Subscribe(_ => task2.Task);

        subscription2.Dispose();

        command.Execute();
        command.CanExecute().IsFalse();
        task1.SetResult(null);
        command.CanExecute().IsTrue();
    }
示例#5
0
    public void DefaultConstructor()
    {
        var command = new AsyncReactiveCommand();
        var task1   = new TaskCompletionSource <object>();
        var task2   = new TaskCompletionSource <object>();

        command.Subscribe(_ => task1.Task);
        command.Subscribe(_ => task2.Task);

        command.Execute();
        command.CanExecute().IsFalse();
        task1.SetResult(null);
        command.CanExecute().IsFalse();
        task2.SetResult(null);
        command.CanExecute().IsTrue();
    }
示例#6
0
    public void WithSubscribe()
    {
        var task1 = new TaskCompletionSource <object>();
        var task2 = new TaskCompletionSource <object>();

        var subscription = new CompositeDisposable();
        var command      = new AsyncReactiveCommand()
                           .WithSubscribe(() => task1.Task)
                           .WithSubscribe(() => task2.Task, subscription.Add);

        subscription.Dispose();

        command.Execute();
        command.CanExecute().IsFalse();
        task1.SetResult(null);
        command.CanExecute().IsTrue();
    }
示例#7
0
    public void SubscribeAction()
    {
        var         command      = new AsyncReactiveCommand();
        var         task1        = new TaskCompletionSource <object>();
        var         task2        = new TaskCompletionSource <object>();
        Func <Task> asyncAction1 = () => task1.Task;
        Func <Task> asyncAction2 = () => task2.Task;

        command.Subscribe(asyncAction1);
        command.Subscribe(asyncAction2);

        command.Execute();
        command.CanExecute().IsFalse();
        task1.SetResult(null);
        command.CanExecute().IsFalse();
        task2.SetResult(null);
        command.CanExecute().IsTrue();
    }
示例#8
0
        public StatusesViewModel(TimelineModelBase model, IReactiveProperty <Status> inReplyTo, TabsModel tabs, bool streamingOnStartup = false)
        {
            this.model           = model;
            this.inReplyTo       = inReplyTo;
            this.tabs            = tabs;
            IsStreaming          = this.model.StreamingStarted.ToReadOnlyReactiveProperty();
            IsStreamingAvailable = this.model.IsStreamingAvailable;
            Statuses             = this.model.ToReadOnlyReactiveCollection(s => new StatusViewModel(s));

            ReloadCommand = new AsyncReactiveCommand()
                            .WithSubscribe(() => this.model.FetchPreviousAsync());
            ReloadOlderCommand = new AsyncReactiveCommand()
                                 .WithSubscribe(() => this.model.FetchNextAsync());
            ToggleStreamingCommand = Observable.Repeat(IsStreamingAvailable, 1).ToReactiveCommand()
                                     .WithSubscribe(() => this.model.StreamingStarting.Value = !IsStreaming.Value);

            var IsStatusSelected = SelectedStatus.Select(x => x != null);

            OpenCommand = IsStatusSelected.ToReactiveCommand()
                          .WithSubscribe(() => Process.Start(SelectedStatus.Value.Status.Url ?? SelectedStatus.Value.Status.Reblog.Url));
            FavouriteCommand = IsStatusSelected.ToAsyncReactiveCommand()
                               .WithSubscribe(() => this.model.FavouriteAsync(SelectedStatus.Value.Status.Id));
            ReblogCommand = IsStatusSelected.ToAsyncReactiveCommand()
                            .WithSubscribe(() => this.model.ReblogAsync(SelectedStatus.Value.Status.Id));
            ReplyCommand = IsStatusSelected.ToReactiveCommand()
                           .WithSubscribe(() => this.inReplyTo.Value = SelectedStatus.Value.Status);
            DeleteCommand = IsStatusSelected.ToAsyncReactiveCommand()
                            .WithSubscribe(() => this.model.DeleteAsync(SelectedStatus.Value.Status.Id));

            OpenAccountTabCommand = IsStatusSelected.ToReactiveCommand()
                                    .WithSubscribe(() =>
            {
                Account account = SelectedStatus.Value.OriginalStatus.Account;
                this.tabs.SwitchToOrOpen(new AccountTabParameters()
                {
                    Name = $"user: {account.AccountName}", Id = account.Id
                });
            });

            this.model.StreamingStarting.Value = streamingOnStartup;
            ReloadCommand.Execute();
        }
 /// <summary>
 /// Command binding method.
 /// </summary>
 /// <typeparam name="T">IObservable type</typeparam>
 /// <param name="self">IObservable</param>
 /// <param name="command">Command</param>
 /// <returns>Command binding token</returns>
 public static IDisposable SetCommand <T>(this IObservable <T> self, AsyncReactiveCommand command) =>
 self
 .Where(_ => command.CanExecute())
 .Subscribe(x => command.Execute());
        public void DefaultConstructor()
        {
            var command = new AsyncReactiveCommand();
            var task1 = new TaskCompletionSource<object>();
            var task2 = new TaskCompletionSource<object>();

            command.Subscribe(_ => task1.Task);
            command.Subscribe(_ => task2.Task);

            command.Execute();
            command.CanExecute().IsFalse();
            task1.SetResult(null);
            command.CanExecute().IsFalse();
            task2.SetResult(null);
            command.CanExecute().IsTrue();
        }
        public void RemoveSubscription()
        {
            var command = new AsyncReactiveCommand();
            var task1 = new TaskCompletionSource<object>();
            var task2 = new TaskCompletionSource<object>();

            var subscription1 = command.Subscribe(_ => task1.Task);
            var subscription2 = command.Subscribe(_ => task2.Task);

            subscription2.Dispose();

            command.Execute();
            command.CanExecute().IsFalse();
            task1.SetResult(null);
            command.CanExecute().IsTrue();
        }