private bool?ShowBuildOpenWindow(ServiceBuild build) { BuildOpenWindow window = BuildOpenWindow.Current; //BuildOpenWindow window = new BuildOpenWindow(build); window.Build = build; return(window.ShowDialog()); }
private async Task BuildAudioServiceAsync() { while (true) { if (viewModel.Service?.Communicator != null) { viewModel.Service.Communicator.Disconnected -= Communicator_Disconnected; } viewModel.Service = null; ServiceBuild build = ServiceBuild.Build(serviceBuilder, TimeSpan.FromMilliseconds(500)); await Task.WhenAny(build.CompleteToken.ResultTask, Task.Delay(100)); if (build.CompleteToken.IsEnded == BuildEndedType.Canceled || (!build.CompleteToken.IsEnded.HasValue && ShowBuildOpenWindow(build) == false)) { build.Cancel(); Close(); return; } ServiceBuildResult result = await build.CompleteToken.ResultTask; viewModel.Service = result; if (build.CompleteToken.IsEnded is BuildEndedType.Settings) { UpdateBuilders(); } else if (build.CompleteToken.IsEnded != BuildEndedType.Successful) { continue; } if (build.Communicator != null) { build.Communicator.Disconnected += Communicator_Disconnected; } if (!(build.Communicator is IClientCommunicator)) { await Task.Run(async() => { await Task.WhenAll(result.AudioService.SourcePlaylists.Select(p => p.Update())); IDictionary <string, Song> allSongs = result.AudioService.SourcePlaylists .SelectMany(p => p.Songs).Distinct().ToDictionary(s => s.FullPath); foreach (IPlaylist playlist in result.AudioService.Playlists) { Song song = new Song(); playlist.Songs = playlist.Songs .Where(s => allSongs.TryGetValue(s.FullPath, out song)).Select(_ => song).ToArray(); } }); } break; } }
private void Service_PropertyChanged(object sender, PropertyChangedEventArgs e) { ServiceHandler service = (ServiceHandler)sender; ServiceBuild build = service.ServiceOpenBuild; if (e.PropertyName == nameof(ServiceHandler.ServiceOpenBuild) && build != null) { rootFrame.Navigate(typeof(BuildOpenPage), build); } }
protected override void OnNavigatedTo(NavigationEventArgs e) { DataContext = build = (ServiceBuild)e.Parameter; base.OnNavigatedTo(e); IEnumerable <string> frames = Frame.BackStack.Select(s => s.SourcePageType.FullName); tblFrameStack.Text = string.Join("\r\n", frames); BackPressHandler.Current.BackPressed += BackPressHandler_BackPressed; }
private async void OnEnteredBackground(object sender, EnteredBackgroundEventArgs e) { ServiceBuild build = viewModel.Service.ServiceOpenBuild; if (build?.CompleteToken.IsEnded.HasValue != false) { return; } Deferral deferral = e.GetDeferral(); try { await viewModel.Service.CloseAsync(); canceledBuild = true; } finally { deferral.Complete(); } }
private async Task OpenAudioServiceAsync() { while (true) { if (viewModel.Service.Communicator != null) { viewModel.Service.Communicator.Disconnected -= Communicator_Disconnected; } ServiceBuild build = ServiceBuild.Open(viewModel.Service.Communicator, viewModel.Service.AudioService, viewModel.Service.ServicePlayer, viewModel.Service.Data, TimeSpan.FromMilliseconds(500)); await Task.WhenAny(build.CompleteToken.ResultTask, Task.Delay(100)); if (build.CompleteToken.IsEnded == BuildEndedType.Canceled || (!build.CompleteToken.IsEnded.HasValue && ShowBuildOpenWindow(build) == false)) { build.Cancel(); Close(); return; } await build.CompleteToken.ResultTask; if (build.CompleteToken.IsEnded is BuildEndedType.Settings) { UpdateBuilders(); } else if (build.CompleteToken.IsEnded is BuildEndedType.Successful) { if (build.Communicator != null) { build.Communicator.Disconnected += Communicator_Disconnected; } break; } } }