private async void BtnSettings_Click(object sender, RoutedEventArgs e)
        {
            SettingsWindow window = new SettingsWindow(viewModel.Parent, hotKeys);

            window.ShowDialog();

            IAudioExtended service = await window.ServiceBuilder.Build();

            if (service != viewModel.Parent)
            {
                viewModel.Dispose();

                DataContext = viewModel = new ViewModel(service);
            }

            hotKeys = window.HotKeysBuilder.Build();
        }
        public ServiceBuilder WithService(IAudioExtended service)
        {
            if (service is IMqttAudioService)
            {
                WithService(service as IMqttAudioService);
            }
            else if (service is IMqttAudioClient)
            {
                WithService(service as IMqttAudioClient);
            }

            Service = service;

            return(WithMediaSources(service.MediaSources)
                   .WithIsAllShuffle(service.IsAllShuffle)
                   .WithIsSearchShuffle(service.IsSearchShuffle)
                   .WithIsOnlySearch(service.IsOnlySearch)
                   .WithSearchKey(service.SearchKey)
                   .WithPlay(service.PlayState == PlaybackState.Playing)
                   .WithReload(false)
                   .WithSetMediaIfNon(false)
                   .WithVolume(service.Volume)
                   .WithWindowHandler(service.WindowHandle));
        }
 public SettingsWindow(IAudioExtended service, HotKeys hotKeys)
     : this(new ServiceBuilder().WithService(service), new HotKeysBuilder().WithHotKeys(hotKeys))
 {
 }
        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);
        }
Exemple #5
0
 public ViewModel(IAudioExtended parent)
 {
     this.Parent             = parent;
     parent.PropertyChanged += Parent_PropertyChanged;
 }