diff --git a/src/ElectronBot.UI/src/ElectronBot.BraincasePreview/ElectronBot.BraincasePreview/ElectronBot.BraincasePreview.csproj b/src/ElectronBot.UI/src/ElectronBot.BraincasePreview/ElectronBot.BraincasePreview/ElectronBot.BraincasePreview.csproj index 23542f7..223d674 100644 --- a/src/ElectronBot.UI/src/ElectronBot.BraincasePreview/ElectronBot.BraincasePreview/ElectronBot.BraincasePreview.csproj +++ b/src/ElectronBot.UI/src/ElectronBot.BraincasePreview/ElectronBot.BraincasePreview/ElectronBot.BraincasePreview.csproj @@ -42,7 +42,7 @@ - + diff --git a/src/ElectronBot.UI/src/ElectronBot.BraincasePreview/ElectronBot.BraincasePreview/ViewModels/SettingsViewModel.cs b/src/ElectronBot.UI/src/ElectronBot.BraincasePreview/ElectronBot.BraincasePreview/ViewModels/SettingsViewModel.cs index ed11404..a7b1f25 100644 --- a/src/ElectronBot.UI/src/ElectronBot.BraincasePreview/ElectronBot.BraincasePreview/ViewModels/SettingsViewModel.cs +++ b/src/ElectronBot.UI/src/ElectronBot.BraincasePreview/ElectronBot.BraincasePreview/ViewModels/SettingsViewModel.cs @@ -1,5 +1,4 @@ -using System; -using System.Threading.Tasks; +using System.Collections.ObjectModel; using System.Windows.Input; using CommunityToolkit.Mvvm.ComponentModel; @@ -7,6 +6,7 @@ using CommunityToolkit.Mvvm.Input; using ElectronBot.BraincasePreview.Contracts.Services; using ElectronBot.BraincasePreview.Contracts.ViewModels; +using ElectronBot.BraincasePreview.Core.Models; using ElectronBot.BraincasePreview.Helpers; using ElectronBot.BraincasePreview.Models; using Microsoft.UI.Xaml; @@ -21,7 +21,34 @@ public class SettingsViewModel : ObservableRecipient, INavigationAware private readonly ILocalSettingsService _localSettingsService; private ElementTheme _elementTheme; + private ObservableCollection _cameras; + + private ObservableCollection _audioDevs; + + + private ComboxItemModel _cameraSelect; + + private ComboxItemModel _audioSelect; + + private string _customClockTitle; + + public SettingsViewModel( + IThemeSelectorService themeSelectorService, + ILocalSettingsService localSettingsService) + { + _themeSelectorService = themeSelectorService; + _elementTheme = _themeSelectorService.Theme; + _localSettingsService = localSettingsService; + VersionDescription = GetVersionDescription(); + } + + + private ICommand _cameraCommand; + public ICommand CameraCommand => _cameraCommand ??= new RelayCommand(CameraChanged); + + private ICommand _audioCommand; + public ICommand AudioCommand => _audioCommand ??= new RelayCommand(AudioChanged); public ElementTheme ElementTheme { get => _elementTheme; @@ -44,6 +71,46 @@ public class SettingsViewModel : ObservableRecipient, INavigationAware } + + /// + /// 选中的相机 + /// + public ComboxItemModel CameraSelect + { + get => _cameraSelect; + set => SetProperty(ref _cameraSelect, value); + } + + /// + /// 选中的音频设备 + /// + public ComboxItemModel AudioSelect + { + get => _audioSelect; + set => SetProperty(ref _audioSelect, value); + } + + + + /// + /// 相机列表 + /// + public ObservableCollection Cameras + { + get => _cameras; + set => SetProperty(ref _cameras, value); + } + + /// + /// 音频设备列表 + /// + public ObservableCollection AudioDevs + { + get => _audioDevs; + set => SetProperty(ref _audioDevs, value); + } + + private string _versionDescription; public string VersionDescription @@ -97,28 +164,64 @@ public class SettingsViewModel : ObservableRecipient, INavigationAware } } - public SettingsViewModel( - IThemeSelectorService themeSelectorService, - ILocalSettingsService localSettingsService) + /// + /// 音频切换方法 + /// + private async void AudioChanged() { - _themeSelectorService = themeSelectorService; - _elementTheme = _themeSelectorService.Theme; - _localSettingsService = localSettingsService; - VersionDescription = GetVersionDescription(); + var audioName = _audioSelect?.DataKey; + + if (!string.IsNullOrWhiteSpace(audioName)) + { + await _localSettingsService.SaveSettingAsync(Constants.DefaultAudioNameKey, _audioSelect); + } + } + /// + /// 相机选择方法 + /// + private async void CameraChanged() + { + var cameraName = _cameraSelect?.DataKey; + + if (!string.IsNullOrWhiteSpace(cameraName)) + { + await _localSettingsService.SaveSettingAsync(Constants.DefaultCameraNameKey, _cameraSelect); + } } private async Task InitAsync() { - //var ret = await _localSettingsService - // .ReadSettingAsync(Constants.CustomClockTitleKey); - - //CustomClockTitle = ret ?? ""; try { var ret2 = await _localSettingsService .ReadSettingAsync(Constants.CustomClockTitleConfigKey); - ClockTitleConfig = ret2 ?? new CustomClockTitleConfig(); + + var camera = await EbHelper.FindCameraDeviceListAsync(); + + Cameras = new ObservableCollection(camera); + + + var audioDevs = await EbHelper.FindAudioDeviceListAsync(); + + AudioDevs = new ObservableCollection(audioDevs); + + var cameraModel = await _localSettingsService + .ReadSettingAsync(Constants.DefaultCameraNameKey); + + if (cameraModel != null) + { + CameraSelect = Cameras.FirstOrDefault(c => c.DataValue == cameraModel.DataValue); + + } + + var audioModel = await _localSettingsService + .ReadSettingAsync(Constants.DefaultAudioNameKey); + + if (audioModel != null) + { + AudioSelect = AudioDevs.FirstOrDefault(c => c.DataValue == audioModel.DataValue); + } } catch (Exception ex) { diff --git a/src/ElectronBot.UI/src/ElectronBot.BraincasePreview/ElectronBot.BraincasePreview/Views/SettingsPage.xaml b/src/ElectronBot.UI/src/ElectronBot.BraincasePreview/ElectronBot.BraincasePreview/Views/SettingsPage.xaml index 05a426b..c22493b 100644 --- a/src/ElectronBot.UI/src/ElectronBot.BraincasePreview/ElectronBot.BraincasePreview/Views/SettingsPage.xaml +++ b/src/ElectronBot.UI/src/ElectronBot.BraincasePreview/ElectronBot.BraincasePreview/Views/SettingsPage.xaml @@ -13,8 +13,9 @@ - - + + + + + + + + + + + + + + + + + + + 默认设备设置 + + 设置相关默认设备 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - + - - + + + + + + - +