From c6680ced12bb809390c8a34c32e5cb3e2ae17618 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=BE=89=E9=B8=AD=E8=9B=8B?= Date: Sat, 17 Aug 2024 16:02:54 +0800 Subject: [PATCH] add js script page --- BetterGenshinImpact/App.xaml.cs | 2 +- .../Core/Script/Group/ScriptGroupProject.cs | 3 - .../Core/Script/Project/Manifest.cs | 7 -- .../Script/AutoCrystalfly/manifest.json | 1 - BetterGenshinImpact/View/MainWindow.xaml | 2 +- .../View/Pages/JsListPage.xaml | 116 ++++++++++++++++++ .../View/Pages/JsListPage.xaml.cs | 19 +++ .../ViewModel/Pages/JsListViewModel.cs | 112 +++++++++++++++++ .../Pages/KeyMouseRecordPageViewModel.cs | 2 - 9 files changed, 249 insertions(+), 15 deletions(-) create mode 100644 BetterGenshinImpact/View/Pages/JsListPage.xaml create mode 100644 BetterGenshinImpact/View/Pages/JsListPage.xaml.cs create mode 100644 BetterGenshinImpact/ViewModel/Pages/JsListViewModel.cs diff --git a/BetterGenshinImpact/App.xaml.cs b/BetterGenshinImpact/App.xaml.cs index ae8bf9aa..f6a16e46 100644 --- a/BetterGenshinImpact/App.xaml.cs +++ b/BetterGenshinImpact/App.xaml.cs @@ -87,7 +87,7 @@ public partial class App : Application services.AddView(); services.AddView(); services.AddView(); - // services.AddView(); + services.AddView(); // My Services services.AddSingleton(); diff --git a/BetterGenshinImpact/Core/Script/Group/ScriptGroupProject.cs b/BetterGenshinImpact/Core/Script/Group/ScriptGroupProject.cs index 7fc7a0be..f144db32 100644 --- a/BetterGenshinImpact/Core/Script/Group/ScriptGroupProject.cs +++ b/BetterGenshinImpact/Core/Script/Group/ScriptGroupProject.cs @@ -11,8 +11,6 @@ public partial class ScriptGroupProject : ObservableObject [ObservableProperty] private int _index; - public string Id { get; set; } = string.Empty; - public string Name { get; set; } = string.Empty; public string FolderName { get; set; } = string.Empty; @@ -48,7 +46,6 @@ public partial class ScriptGroupProject : ObservableObject public ScriptGroupProject(ScriptProject project) { - Id = project.Manifest.Id; Name = project.Manifest.Name; FolderName = project.FolderName; Status = "Enabled"; diff --git a/BetterGenshinImpact/Core/Script/Project/Manifest.cs b/BetterGenshinImpact/Core/Script/Project/Manifest.cs index 1670b03a..cf3947e8 100644 --- a/BetterGenshinImpact/Core/Script/Project/Manifest.cs +++ b/BetterGenshinImpact/Core/Script/Project/Manifest.cs @@ -10,8 +10,6 @@ namespace BetterGenshinImpact.Core.Script.Project; public class Manifest { public int ManifestVersion { get; set; } = 1; - - public string Id { get; set; } = string.Empty; public string Name { get; set; } = string.Empty; public string Version { get; set; } = string.Empty; public string Description { get; set; } = string.Empty; @@ -28,11 +26,6 @@ public class Manifest public void Validate(string path) { - if (string.IsNullOrWhiteSpace(Id)) - { - throw new Exception("manifest.json: id is not supported."); - } - if (string.IsNullOrWhiteSpace(Name)) { throw new Exception("manifest.json: name is required."); diff --git a/BetterGenshinImpact/Script/AutoCrystalfly/manifest.json b/BetterGenshinImpact/Script/AutoCrystalfly/manifest.json index ed01a205..c6084eb2 100644 --- a/BetterGenshinImpact/Script/AutoCrystalfly/manifest.json +++ b/BetterGenshinImpact/Script/AutoCrystalfly/manifest.json @@ -1,6 +1,5 @@ { "manifest_version": 1, - "id": "bgi_crystalfly", "name": "自动采集晶蝶", "version": "1.0", "description": "BetterGI自带脚本,自动采集离传送点较近的晶蝶。", diff --git a/BetterGenshinImpact/View/MainWindow.xaml b/BetterGenshinImpact/View/MainWindow.xaml index aca920ea..7928eda8 100644 --- a/BetterGenshinImpact/View/MainWindow.xaml +++ b/BetterGenshinImpact/View/MainWindow.xaml @@ -96,7 +96,7 @@ + TargetPageType="{x:Type pages:JsListPage}"> diff --git a/BetterGenshinImpact/View/Pages/JsListPage.xaml b/BetterGenshinImpact/View/Pages/JsListPage.xaml new file mode 100644 index 00000000..eb593324 --- /dev/null +++ b/BetterGenshinImpact/View/Pages/JsListPage.xaml @@ -0,0 +1,116 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/BetterGenshinImpact/View/Pages/JsListPage.xaml.cs b/BetterGenshinImpact/View/Pages/JsListPage.xaml.cs new file mode 100644 index 00000000..2cc36708 --- /dev/null +++ b/BetterGenshinImpact/View/Pages/JsListPage.xaml.cs @@ -0,0 +1,19 @@ +using BetterGenshinImpact.ViewModel; +using BetterGenshinImpact.ViewModel.Pages; +using System.Windows.Controls; + +namespace BetterGenshinImpact.View.Pages; + +/// +/// JsListPage.xaml 的交互逻辑 +/// +public partial class JsListPage : Page +{ + private JsListViewModel ViewModel { get; } + + public JsListPage(JsListViewModel viewModel) + { + DataContext = ViewModel = viewModel; + InitializeComponent(); + } +} diff --git a/BetterGenshinImpact/ViewModel/Pages/JsListViewModel.cs b/BetterGenshinImpact/ViewModel/Pages/JsListViewModel.cs new file mode 100644 index 00000000..39272951 --- /dev/null +++ b/BetterGenshinImpact/ViewModel/Pages/JsListViewModel.cs @@ -0,0 +1,112 @@ +using System; +using BetterGenshinImpact.Core.Config; +using BetterGenshinImpact.Model; +using CommunityToolkit.Mvvm.ComponentModel; +using Microsoft.Extensions.Logging; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Diagnostics; +using System.IO; +using System.Linq; +using BetterGenshinImpact.Core.Script.Project; +using Wpf.Ui; +using Wpf.Ui.Controls; +using static Vanara.PInvoke.Gdi32; +using Wpf.Ui.Violeta.Controls; +using CommunityToolkit.Mvvm.Input; +using BetterGenshinImpact.GameTask.Model.Enum; +using BetterGenshinImpact.GameTask; +using System.Threading.Tasks; + +namespace BetterGenshinImpact.ViewModel.Pages; + +public partial class JsListViewModel : ObservableObject, INavigationAware, IViewModel +{ + private readonly ILogger _logger = App.GetLogger(); + private readonly string scriptPath = Global.Absolute("Script"); + + [ObservableProperty] + private ObservableCollection _scriptItems = []; + + private ISnackbarService _snackbarService; + + public JsListViewModel(ISnackbarService snackbarService) + { + _snackbarService = snackbarService; + } + + private void InitScriptListViewData() + { + _scriptItems.Clear(); + var directoryInfos = LoadScriptFolder(scriptPath); + foreach (var f in directoryInfos) + { + try + { + _scriptItems.Add(new ScriptProject(f.Name)); + } + catch (Exception e) + { + Toast.Warning($"脚本 {f.Name} 载入失败:{e.Message}"); + } + } + } + + private IEnumerable LoadScriptFolder(string folder) + { + if (!Directory.Exists(folder)) + { + Directory.CreateDirectory(folder); + } + + var di = new DirectoryInfo(folder); + + return di.GetDirectories(); + } + + public void OnNavigatedTo() + { + InitScriptListViewData(); + } + + public void OnNavigatedFrom() + { + } + + [RelayCommand] + public void OnOpenScriptsFolder() + { + Process.Start("explorer.exe", scriptPath); + } + + [RelayCommand] + public void OnOpenScriptProjectFolder(ScriptProject? item) + { + if (item == null) + { + return; + } + Process.Start("explorer.exe", item.ProjectPath); + } + + [RelayCommand] + public async Task OnStartRun(string name) + { + _logger.LogInformation("重放开始:{Name}", name); + try + { + // var s = await File.ReadAllTextAsync(Path.Combine(scriptPath, name)); + // + // await new TaskRunner(DispatcherTimerOperationEnum.UseSelfCaptureImage) + // .RunAsync(async () => await KeyMouseMacroPlayer.PlayMacro(s, CancellationContext.Instance.Cts.Token)); + } + catch (Exception e) + { + _logger.LogError(e, "重放脚本时发生异常"); + } + finally + { + _logger.LogInformation("重放结束:{Name}", name); + } + } +} diff --git a/BetterGenshinImpact/ViewModel/Pages/KeyMouseRecordPageViewModel.cs b/BetterGenshinImpact/ViewModel/Pages/KeyMouseRecordPageViewModel.cs index 132d8230..e996056c 100644 --- a/BetterGenshinImpact/ViewModel/Pages/KeyMouseRecordPageViewModel.cs +++ b/BetterGenshinImpact/ViewModel/Pages/KeyMouseRecordPageViewModel.cs @@ -1,7 +1,6 @@ using BetterGenshinImpact.Core.Config; using BetterGenshinImpact.Core.Recorder; using BetterGenshinImpact.Core.Script; -using BetterGenshinImpact.Core.Script.Group; using BetterGenshinImpact.GameTask; using BetterGenshinImpact.GameTask.Model.Enum; using BetterGenshinImpact.Model; @@ -19,7 +18,6 @@ using System.Threading.Tasks; using Wpf.Ui; using Wpf.Ui.Controls; using Wpf.Ui.Violeta.Controls; -using MessageBox = System.Windows.MessageBox; namespace BetterGenshinImpact.ViewModel.Pages;