public ScreenshotModel() { var status = new Subject <string>().AddTo(Disposer); StatusMsg = status.AsObservable(); SaveToSpecified .Select(_ => ScreenshotUtils.Take(SaveFolder.Value)) .Do(OpenImageFile) .Select(_ => "スクリーンショットを取得しました。") .Catch(Observable.Return("スクリーンショットの取得に失敗しました。")) .Repeat() .Subscribe(status) .AddTo(Disposer); var result = new Subject <string>().AddTo(Disposer); DragAreaMouseMove .Where(e => e.Button.HasFlag(MouseButtons.Left)) .Select(_ => ScreenshotUtils.Take(Path.GetTempPath())) .Do(f => CompleteSaveToTemp(f)) .Catch(Observable.Return("")) .Repeat() .Subscribe(result) .AddTo(Disposer); result .Select(f => string.IsNullOrEmpty(f) ? "スクリーンショットの取得に失敗しました。" : "スクリーンショットを取得しました。") .Subscribe(status) .AddTo(Disposer); result .Where(f => !string.IsNullOrEmpty(f)) .Delay(TimeSpan.FromSeconds(5)) .Do(File.Delete) .Repeat() .Subscribe() .AddTo(Disposer); OpenSaveFolder .Select(_ => SaveFolder.Value) .StartProcess() .Select(r => r ? "フォルダを開きました。" : "フォルダを開けませんでした。") .Subscribe(status) .AddTo(Disposer); }
public RecordModel() { StartRecord = State.Select(s => s == ModelState.Ready).ToReactiveCommand(); EndRecord = State.Select(s => s == ModelState.Recording).ToReactiveCommand(); State.OnNext(ModelState.Ready); StartRecord .ObserveOn(TaskPoolScheduler.Default) .SelectMany(_ => DoRecord()) .CatchIgnore((Exception _) => Status.OnNext("録画に失敗しました。")) .Repeat() .Subscribe(); OpenSaveFolder .Select(_ => SaveFolder.Value) .StartProcess() .Select(r => r ? "フォルダを開きました。" : "フォルダを開けませんでした。") .Subscribe(Status); }