private void CreateRecogStream() { recSt?.Dispose(); recSt = Observable.CombineLatest(ClipImages.Select(clip => clip.Text)).Subscribe(list => RecognizedText.OnNext(list.ToList())); }
public MainWindowViewModel() { StartCapture = new ReactiveCommand(); StartCapture.Subscribe(() => { if (CreateCaptureItemForWindow(SelectedWindow.Value.Hwnd, out var result)) { var item = (GraphicsCaptureItem)Marshal.GetObjectForIUnknown(result); CurrentGraphicsCaptureItem.Value = item; util.StartCaptureInternal(item); } }); AddClip.Subscribe(() => { if (util == null) { return; } var clip = new App1.ClipImage(); var vm = new ClipImageViewModel(clip); var co = new App1.ClipImageConteir(clip); util.ClipImages.Add(clip, co); ClipImages.Add(vm); CreateRecogStream(); }); RemoveClip.Subscribe(vm => { if (vm == null) { return; } if (util != null) { var co = util.ClipImages.GetValueOrDefault(vm.ClipImage); util.ClipImages.Remove(vm.ClipImage); co.Dispose(); } if (SelectedClipImage.Value == vm) { SelectedClipImage.Value = null; } ClipImages.Remove(vm); CreateRecogStream(); }); ScriptReslut = Observable.CombineLatest(Script, RecognizedText.Pairwise(), (script, pair) => (script, pair)).SelectMany(async scriptData => { try { var state = await CSharpScript.RunAsync <ScriptResult>(scriptData.script, globals: new ScriptModel(scriptData.pair.OldItem, scriptData.pair.NewItem)); return(state.ReturnValue); } catch (Exception e) { return(new ScriptResult { IsRead = false, Text = e.ToString() }); } } ).ToReadOnlyReactiveProperty(); ScriptReslut.Where(result => result != null).Where(result => !string.IsNullOrWhiteSpace(result.Text)).Where(result => result.IsRead).Select(result => result.Text).Distinct().Subscribe(async text => { if (!Reading.Value) { return; } var json = System.Text.Json.JsonSerializer.Serialize(new VoiceloidParam { Effects = new VoiceloidEffects { Volume = Volume.Value, Speed = Speed.Value, Pitch = Pitch.Value, Intonation = Intonation.Value }, Talktext = text }, new System.Text.Json.JsonSerializerOptions { PropertyNamingPolicy = System.Text.Json.JsonNamingPolicy.CamelCase }); var content = new StringContent(json, Encoding.UTF8, @"application/json"); try { await httpClient.PostAsync("http://localhost:7180//PLAY2/1700", content); } catch { } }); var byteArray = Encoding.ASCII.GetBytes(string.Format("{0}:{1}", "SeikaServerUser", "SeikaServerPassword")); httpClient.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Basic", Convert.ToBase64String(byteArray)); RefreshWindow.Subscribe(() => RefreshWindows()); RefreshWindows(); }