using CommunityToolkit.Mvvm.ComponentModel; using CommunityToolkit.Mvvm.Input; using LehrerApp.Templating; using System.Collections.ObjectModel; namespace LehrerApp.Desktop.ViewModels.Settings; public partial class SettingsViewModel { [ObservableProperty] private string _worksheetTemplateStatus = ""; public ObservableCollection WorksheetTemplateList { get; } = []; private void LoadWorksheetTemplates() { WorksheetTemplateList.Clear(); foreach (var template in _worksheetTemplates.Store.GetTemplates()) WorksheetTemplateList.Add(CreateWorksheetItem(template)); } public void ImportWorksheetTemplate(string path) { WorksheetTemplateStatus = ""; try { var template = _worksheetTemplates.Store.Import(path); LoadWorksheetTemplates(); WorksheetTemplateStatus = $"„{template.Name}“ wurde geprüft und lokal importiert."; } catch (Exception ex) when (ex is IOException or InvalidDataException or UnauthorizedAccessException or TemplateValidationException) { WorksheetTemplateStatus = $"Import fehlgeschlagen: {ex.Message}"; } } [RelayCommand] private void ValidateWorksheetTemplate(LetterTemplateListItem? item) { if (item is null) return; try { var refreshed = CreateWorksheetItem(item.Model); var index = WorksheetTemplateList.IndexOf(item); if (index >= 0) WorksheetTemplateList[index] = refreshed; WorksheetTemplateStatus = $"„{item.Name}“ ist gültig (Schema {refreshed.SchemaVersion})."; } catch (Exception ex) when (ex is IOException or InvalidDataException or TemplateValidationException) { WorksheetTemplateStatus = $"„{item.Name}“ ist ungültig: {ex.Message}"; } } [RelayCommand] private void DeleteWorksheetTemplate(LetterTemplateListItem? item) { if (item is null) return; _worksheetTemplates.Store.Delete(item.Id); WorksheetTemplateList.Remove(item); WorksheetTemplateStatus = "Vorlage gelöscht."; } private LetterTemplateListItem CreateWorksheetItem(InstalledTemplate template) { var loaded = _worksheetTemplates.Store.Load(template); return new(template, loaded.Manifest.SchemaVersion, loaded.Manifest.Placeholders.Count(x => !x.IsConstant), loaded.Manifest.Placeholders.Count(x => !x.IsConstant && x.Required)); } }