private async void ConnectorMenuItemOnClicked(object sender, EventArgs eventArgs) { var item = (CSDeskBandMenuAction)sender; if (item.Checked) { item.Checked = false; await UnsubscribeToConnector(_connector); _connector = null; return; } // Uncheck old item and unsubscribe from the current connector var lastItemChecked = _pluginSubMenu.Items.Cast <CSDeskBandMenuAction>().FirstOrDefault(i => i.Text == _connector?.ConnectorName); if (lastItemChecked != null) { lastItemChecked.Checked = false; } await UnsubscribeToConnector(_connector); item.Checked = true; _connector = _connectorManager.AudioConnectors.First(c => c.ConnectorName == item.Text); await SubscribeToConnector(_connector); }
private async Task SubscribeToConnector(IAudioConnector connector) { if (connector == null) { return; } connector.TrackInfoChanged += ConnectorOnTrackInfoChanged; connector.TrackPlaying += ConnectorOnTrackPlaying; connector.TrackPaused += ConnectorOnTrackPaused; connector.TrackProgressChanged += ConnectorOnTrackProgressChanged; _connectorTokenSource = new CancellationTokenSource(); await connector.ActivateAsync(new ConnectorContext(connector.ConnectorName)); _settingsManager.AudioBandSettings.Connector = connector.ConnectorName; }
private async Task UnsubscribeToConnector(IAudioConnector connector) { if (connector == null) { return; } connector.TrackInfoChanged -= ConnectorOnTrackInfoChanged; connector.TrackPlaying -= ConnectorOnTrackPlaying; connector.TrackPaused -= ConnectorOnTrackPaused; connector.TrackProgressChanged -= ConnectorOnTrackProgressChanged; _connectorTokenSource.Cancel(); await connector.DeactivateAsync(); ResetState(); _settingsManager.AudioBandSettings.Connector = null; }