using AIK.Common.Enum; using AIK.Common.IconString; using AIK.Common.Interface; using AIK.Models; using AIK.Models.SystemSettings; using AIK.Models.VideoModels; using AIK.Service.IService; using AIK.ViewModels.Messages; using CommunityToolkit.Mvvm.ComponentModel; using CommunityToolkit.Mvvm.Input; using CommunityToolkit.Mvvm.Messaging; using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.ComponentModel; using System.Diagnostics; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; namespace AIK.ViewModels { public partial class SettingsViewModel : ObservableObject { private readonly IConfigurationService _configurationService; private readonly ILocalizationService _localizationService; private readonly IDataCacheService _dataCacheService; [ObservableProperty] private string _language; [ObservableProperty] private LanguageItems _selectedLanguage; private ObservableCollection _supLanguageItems; private readonly IModalDialogService _modalDialogService; public ObservableCollection SupLanguageItems { get => _supLanguageItems; set => SetProperty(ref _supLanguageItems, value); } private readonly ISettingsService _settingsService; public SettingsViewModel(IConfigurationService configurationService, ILocalizationService localizationService, IDataCacheService dataCacheService, IModalDialogService modalDialogService, ISettingsService settingsService) { _settingsService = settingsService; _configurationService = configurationService; _localizationService = localizationService; SupLanguageItems = new ObservableCollection(_localizationService.SupportedLanguages); _selectedLanguage = SupLanguageItems.FirstOrDefault(a => a.Code == _settingsService.Load().Language); _dataCacheService = dataCacheService; _modalDialogService = modalDialogService; } #region 通知 partial void OnSelectedLanguageChanged(LanguageItems value) { if (value != null) { _dataCacheService.ClearAllAsync();//清理缓存 _localizationService.SetLanguage(SelectedLanguage.Code); _settingsService.Save(new Common.Language.UserPreferences() { Language = value.Code }); _configurationService.UpdateLanguageAsync(SelectedLanguage.Code); WeakReferenceMessenger.Default.Send(new LocalLanguageMessage(value)); } } #endregion #region 页面方法 //[RelayCommand](弃用) //public void SelectedLanguage(LanguageItems language) //{ // Language = language.Code; //} [RelayCommand] public void ClearAllCache() { _dataCacheService.ClearAllAsync(); _modalDialogService.ShowDialogAsync("提示", "清除缓存完成", MessageTypeEnum.Success, true, true, 3000); // 重启 Process.Start(new ProcessStartInfo { FileName = System.Reflection.Assembly.GetEntryAssembly()?.Location, UseShellExecute = true }); Application.Current.Shutdown(); } #endregion } }