public async Task RefreshLivestreams() { try { await MonitorStreamsModel.RefreshLivestreams(); } catch (AggregateException aggregateException) { foreach (var ex in aggregateException.InnerExceptions) { var messageDialogResult = await this.ShowMessageAsync( "Error refreshing livestreams", ex.ExtractErrorMessage(), MessageDialogStyle.AffirmativeAndNegative, new MetroDialogSettings() { NegativeButtonText = "Ignore" }); if (messageDialogResult == MessageDialogResult.Negative) { MonitorStreamsModel.IgnoreQueryFailure(ex.Message); } } } catch (Exception ex) { await this.ShowMessageAsync("Error refreshing livestreams", ex.ExtractErrorMessage()); } }
private void MonitorStreamsModelOnPropertyChanged(object sender, PropertyChangedEventArgs e) { if (e.PropertyName == nameof(MonitorStreamsModel.CanRefreshLivestreams)) { CanRefreshLivestreams = MonitorStreamsModel.CanRefreshLivestreams; } else if (e.PropertyName == nameof(MonitorStreamsModel.SelectedLivestream) || e.PropertyName == nameof(MonitorStreamsModel.CanOpenStream)) { var selectedLivestream = MonitorStreamsModel.SelectedLivestream; CanOpenChat = selectedLivestream != null && selectedLivestream.ApiClient.HasChatSupport; // would like a nicer way of resetting the stream qualities when changing selected streams or the currently selected stream changes between offline/online StreamQualities.Clear(); if (MonitorStreamsModel.CanOpenStream) { if (selectedLivestream.IsPartner) // twitch partner specific { StreamQualities.AddRange(Enum.GetNames(typeof(StreamQuality))); } else { StreamQualities.AddRange(new[] { StreamQuality.Best.ToString(), StreamQuality.Worst.ToString(), }); } MonitorStreamsModel.SetDefaultSelectedStreamQuality(); } } }
public async Task AddStream() { if (IsNullOrWhiteSpace(StreamName) || !CanAddStream) { return; } CanAddStream = false; var dialogController = await this.ShowProgressAsync("Adding stream", $"Adding new stream '{StreamName}'"); try { await MonitorStreamsModel.AddLivestream(new ChannelIdentifier(SelectedApiClient, StreamName), this); StreamName = null; await dialogController.CloseAsync(); } catch (Exception ex) { CanAddStream = true; // on failure streamname not cleared so the user can try adding again await dialogController.CloseAsync(); var httpException = ex.InnerException as HttpRequestWithStatusException; if (httpException != null && httpException.StatusCode == HttpStatusCode.NotFound) { await this.ShowMessageAsync("Error adding stream.", $"No channel found named '{StreamName}' for stream provider {SelectedApiClient.ApiName}{Environment.NewLine}" + $"{Environment.NewLine}{TIP_ERROR_ADD_STREAM}"); } else { await this.ShowMessageAsync("Error adding stream.", $"{ex.Message}{Environment.NewLine}{TIP_ERROR_ADD_STREAM}"); } } }
public async Task RefreshLivestreams() { try { await MonitorStreamsModel.RefreshLivestreams(); } catch (AggregateException ex) { await this.ShowMessageAsync("Error refreshing livestreams", ex.Flatten().ExtractErrorMessage()); } catch (Exception ex) { await this.ShowMessageAsync("Error refreshing livestreams", ex.ExtractErrorMessage()); } }
public async Task ImportFollows() { if (!SelectedApiClient.HasUserFollowQuerySupport) { await this.ShowMessageAsync("No import support", $"{SelectedApiClient.ApiName} does not have support for importing followed streams"); return; } var dialogSettings = new MetroDialogSettings() { AffirmativeButtonText = "Import" }; var username = await this.ShowDialogAsync("Import Streams", $"Enter username for importing followed streams from '{SelectedApiClient.ApiName}'", dialogSettings); if (!IsNullOrWhiteSpace(username)) { username = username.Trim(); var dialogController = await this.ShowProgressAsync("Importing followed streams", $"Importing followed streams from '{SelectedApiClient.ApiName}' for username '{username}'"); try { await MonitorStreamsModel.ImportFollows(username, SelectedApiClient); } catch (Exception ex) { await dialogController.CloseAsync(); await this.ShowMessageAsync("Error importing channels", ex.Message); // TODO log import error } await dialogController.CloseAsync(); } }