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")); }
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(); }
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(); }
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(); }
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 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(); }
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(); }
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(); }