-
Notifications
You must be signed in to change notification settings - Fork 17
Expand file tree
/
Copy pathScriptLibraryPage.xaml.cs
More file actions
112 lines (94 loc) · 5.23 KB
/
ScriptLibraryPage.xaml.cs
File metadata and controls
112 lines (94 loc) · 5.23 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
using Microsoft.UI.Xaml;
using Microsoft.UI.Xaml.Controls;
using FluentTaskScheduler.ViewModels;
namespace FluentTaskScheduler
{
public sealed partial class ScriptLibraryPage : Page
{
public ScriptLibraryViewModel ViewModel { get; } = new();
private static string L(string key, string fallback) => Services.LocalizationService.GetString(key, fallback);
private MainPage? _ownerMainPage;
public ScriptLibraryPage()
{
this.InitializeComponent();
Services.LocalizationService.LanguageChanged += LocalizationService_LanguageChanged;
ApplyLocalizedUi();
}
private void LocalizationService_LanguageChanged(object? sender, System.EventArgs e)
{
if (DispatcherQueue == null) return;
DispatcherQueue.TryEnqueue(ApplyLocalizedUi);
}
private void ApplyLocalizedUi()
{
ScriptLibraryTitle.Text = L("ScriptLibraryTitle.Text", "Script Library");
CreateTemplateButton.Content = L("ScriptLibraryCreateBtn.Content", "+ New Template");
ToolTipService.SetToolTip(CreateTemplateButton, L("ScriptLibraryCreateBtn.Content", "+ New Template"));
CreateTemplateDialog.Title = L("ScriptLibraryNewTemplateDialog.Title", "New Template");
CreateTemplateDialog.PrimaryButtonText = L("ScriptLibrarySaveBtn.PrimaryButtonText", "Save");
CreateTemplateDialog.CloseButtonText = L("ScriptLibraryCancelBtn.CloseButtonText", "Cancel");
TemplateName.Header = L("ScriptLibraryNameHeader.Header", "Name");
TemplateName.PlaceholderText = L("ScriptLibraryNamePlaceholder.PlaceholderText", "e.g. Cleanup Script");
TemplateDesc.Header = L("ScriptLibraryDescHeader.Header", "Description");
TemplateDesc.PlaceholderText = L("ScriptLibraryDescPlaceholder.PlaceholderText", "What does this template do?");
TemplateCommand.Header = L("ScriptLibraryCommandHeader.Header", "Command");
TemplateCommand.PlaceholderText = L("ScriptLibraryCommandPlaceholder.PlaceholderText", "e.g. powershell.exe");
TemplateArgs.Header = L("ScriptLibraryArgsHeader.Header", "Arguments");
TemplateArgs.PlaceholderText = L("ScriptLibraryArgsPlaceholder.PlaceholderText", "e.g. -File C:\\scripts\\cleanup.ps1");
TemplateAdmin.Content = L("ScriptLibraryAdminContent.Content", "Run with highest privileges");
}
protected override void OnNavigatedTo(Microsoft.UI.Xaml.Navigation.NavigationEventArgs e)
{
base.OnNavigatedTo(e);
if (e.Parameter is MainPage mp) _ownerMainPage = mp;
}
private async void Page_Loaded(object sender, RoutedEventArgs e)
{
PageScrollViewer.IsScrollInertiaEnabled = FluentTaskScheduler.Services.SettingsService.SmoothScrolling;
await ViewModel.LoadScriptsAsync();
}
private void ScheduleButton_Click(object sender, RoutedEventArgs e)
{
if (sender is Button btn && btn.Tag is ScriptTemplateModel template)
(_ownerMainPage ?? MainPage.Current)?.OpenCreateTaskFromTemplate(template);
}
// ── Custom templates ─────────────────────────────────────────────────────
private async void CreateTemplateButton_Click(object sender, RoutedEventArgs e)
{
TemplateName.Text = "";
TemplateDesc.Text = "";
TemplateCommand.Text = "";
TemplateArgs.Text = "";
TemplateAdmin.IsChecked = false;
CreateTemplateDialog.XamlRoot = this.XamlRoot;
await CreateTemplateDialog.ShowAsync();
}
private void CreateTemplateDialog_PrimaryButtonClick(ContentDialog sender, ContentDialogButtonClickEventArgs args)
{
if (string.IsNullOrWhiteSpace(TemplateName.Text)) { args.Cancel = true; return; }
ViewModel.AddUserTemplate(new ScriptTemplateModel
{
Name = TemplateName.Text.Trim(),
Description = TemplateDesc.Text.Trim(),
Command = TemplateCommand.Text.Trim(),
Arguments = TemplateArgs.Text.Trim(),
RunAsAdmin = TemplateAdmin.IsChecked == true
});
}
private async void DeleteTemplateButton_Click(object sender, RoutedEventArgs e)
{
if (sender is not Button btn || btn.Tag is not ScriptTemplateModel template) return;
var confirm = new ContentDialog
{
Title = L("ScriptLibrary.DeleteTemplate.Title", "Delete Template"),
Content = string.Format(L("ScriptLibrary.DeleteTemplate.Content", "Delete '{0}'?"), template.Name),
PrimaryButtonText = L("Dialog.Delete", "Delete"),
CloseButtonText = L("Dialog.Cancel", "Cancel"),
DefaultButton = ContentDialogButton.Close,
XamlRoot = this.XamlRoot
};
if (await confirm.ShowAsync() == ContentDialogResult.Primary)
ViewModel.DeleteUserTemplate(template);
}
}
}