public async Task <IAudioExtended> Build() { IAudioExtended service; if (BuildServer) { IMqttAudioService server = Service as IMqttAudioService; if (server != null && (ServerPort != server.Port || windowHandler != server.WindowHandle)) { if (server.IsOpen) { await server.CloseAsync(); } server = null; } if (server == null) { server = new MqttAudioService(ServerPort, windowHandler); } if (!server.IsOpen) { await server.OpenAsync(); } service = server; } else if (BuildClient) { IMqttAudioClient client = Service as IMqttAudioClient; if (client != null && (ServerAddress != client.ServerAddress || ClientPort != client.Port || windowHandler != client.WindowHandle)) { client = null; } if (client == null) { client = clientPort.HasValue ? new MqttAudioClient(serverAddress, clientPort.Value, windowHandler) : new MqttAudioClient(serverAddress, windowHandler); } if (!client.IsOpen) { await client.OpenAsync(); } if (isStreaming.HasValue) { client.IsStreaming = isStreaming.Value; } if (clientVolume.HasValue) { client.ClientVolume = clientVolume.Value; } service = client; } else { service = Service == null || Service is IMqttAudio ? new AudioService(windowHandler) : Service; if (mediaSources == null) { mediaSources = new string[] { Environment.GetFolderPath(Environment.SpecialFolder.MyMusic) } } ; } bool setMediaSources = mediaSources != null && (!ifNon || !service.MediaSources.ToNotNull().Any()); if (setMediaSources && !mediaSources.BothNullOrSequenceEqual(service.MediaSources)) { service.MediaSources = mediaSources; } else if (reload) { service.Reload(); } if (!reload && Service != null && ContainsSameSongs(Service.AllSongsShuffled, service.AllSongsShuffled)) { service.AllSongsShuffled = Service.AllSongsShuffled; service.CurrentSong = Service.CurrentSong; } if (IsAllShuffle.HasValue) { service.IsAllShuffle = IsAllShuffle.Value; } if (IsSearchShuffle.HasValue) { service.IsSearchShuffle = IsSearchShuffle.Value; } if (IsOnlySearch.HasValue) { service.IsOnlySearch = IsOnlySearch.Value; } if (SearchKey != null) { service.SearchKey = SearchKey; } if (play.HasValue) { service.PlayState = play.Value ? PlaybackState.Playing : PlaybackState.Paused; } if (volume.HasValue) { service.Volume = volume.Value; } return(service); }
private ServiceBuilder WithService(IMqttAudioService server) { return(WithServer(server.Port)); }