using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Diagnostics; using System.Text; using System.Windows.Input; using Windows.ApplicationModel; using CommunityToolkit.Mvvm.ComponentModel; using CommunityToolkit.Mvvm.Input; using ElectronBot.Braincase.Contracts.Services; using ElectronBot.Braincase.Contracts.ViewModels; using ElectronBot.Braincase.Helpers; using ElectronBot.Braincase.Models; using Windows.Management.Deployment; using Controls; using Microsoft.UI.Xaml.Controls; using ElectronBot.Braincase.Core.Models; namespace ElectronBot.Braincase.ViewModels; public partial class GestureAppConfigViewModel : ObservableRecipient,INavigationAware { private readonly ILocalSettingsService _localSettingsService; private ObservableCollection _gestureAppConfigs = new(); public ObservableCollection GestureAppConfigs { get => _gestureAppConfigs; set => SetProperty(ref _gestureAppConfigs, value); } private readonly PackageManager _packageManager = new(); public List GestureLabels { get; set; } = new() { Constants.Land, Constants.Up, Constants.Down, Constants.Right, Constants.Left, Constants.Stop, Constants.Forward, Constants.Back, Constants.FingerHeart, Constants.ThirdFinger, }; [ObservableProperty] private ObservableCollection _appPackages; public GestureAppConfigViewModel(ILocalSettingsService localSettingsService) { _localSettingsService = localSettingsService; Init(); } public async void Init() { var gestureAppConfigs = (await _localSettingsService.ReadSettingAsync> (Constants.CustomGestureAppConfigKey)) ?? new List(); GestureAppConfigs = new ObservableCollection(gestureAppConfigs); } /// /// 保存配置Command /// private ICommand _saveConfigCommand; public ICommand SaveConfigCommand => _saveConfigCommand ??= new RelayCommand(SaveConfig); /// /// 保存配置 /// public async void SaveConfig() { await _localSettingsService.SaveSettingAsync>(Constants.CustomGestureAppConfigKey, GestureAppConfigs.ToList()); Init(); } /// /// 删除配置项Command /// private ICommand _delConfigCommand; public ICommand DelConfigCommand => _delConfigCommand ??= new RelayCommand(DelConfig); /// /// 删除配置项 /// /// public async void DelConfig(string id) { int index = -1; for(int i = 0; i < GestureAppConfigs.Count; i++) { if (GestureAppConfigs[i].Id == id) { index = i; break; } } if (index >= 0) { GestureAppConfigs.RemoveAt(index); } } /// /// 添加配置项Command /// private ICommand _addConfigCommand; public ICommand AddConfigCommand => _addConfigCommand ??= new RelayCommand(AddConfig); /// /// 删除配置项 /// public async void AddConfig() { var gestureAppConfig = new GestureAppConfig() { Id = Guid.NewGuid().ToString(), }; GestureAppConfigs.Add(gestureAppConfig); } [RelayCommand] public async Task AddLaunchApp() { try { var theme = App.GetService(); var addLaunchApDialog = new ContentDialog() { Title = "AddRandomContentTitle".GetLocalized(), PrimaryButtonText = "AddEmojisOkBtnContent".GetLocalized(), CloseButtonText = "AddEmojisCancelBtnContent".GetLocalized(), DefaultButton = ContentDialogButton.Primary, XamlRoot = App.MainWindow.Content.XamlRoot, Content = new LaunchAppPage(), RequestedTheme = theme.Theme }; addLaunchApDialog.Closed += LaunchAppDialog_Closed; await addLaunchApDialog.ShowAsync(); } catch { } } private async void LaunchAppDialog_Closed(ContentDialog sender, ContentDialogClosedEventArgs args) { var list = (await _localSettingsService.ReadSettingAsync>(Constants.LaunchAppListKey)) ?? new List(); } public void OnNavigatedTo(object parameter) { Task.Run(() => { var apps = _packageManager.FindPackagesForUser(string.Empty) .Where(p => p.IsFramework == false && !string.IsNullOrEmpty(p.DisplayName)).ToList(); App.MainWindow.DispatcherQueue.TryEnqueue(() => AppPackages = new ObservableCollection(apps)); }); } public void OnNavigatedFrom() { } }