From 134d69d403794feb8b353d16d0914972aa00f845 Mon Sep 17 00:00:00 2001 From: leo Date: Mon, 28 Oct 2024 15:56:38 +0800 Subject: [PATCH] feature: supports generate commit message by OpenAI with selected staged changes (#608) Signed-off-by: leo --- src/Resources/Locales/en_US.axaml | 1 + src/Resources/Locales/zh_CN.axaml | 1 + src/Resources/Locales/zh_TW.axaml | 1 + src/ViewModels/WorkingCopy.cs | 87 ++++++++++++++++++++++++------- 4 files changed, 72 insertions(+), 18 deletions(-) diff --git a/src/Resources/Locales/en_US.axaml b/src/Resources/Locales/en_US.axaml index ae386385..46b5d4b9 100644 --- a/src/Resources/Locales/en_US.axaml +++ b/src/Resources/Locales/en_US.axaml @@ -69,6 +69,7 @@ CANCEL Reset to This Revision Reset to Parent Revision + Generate commit message CHANGE DISPLAY MODE Show as File and Dir List Show as Path List diff --git a/src/Resources/Locales/zh_CN.axaml b/src/Resources/Locales/zh_CN.axaml index eea6d169..941ec686 100644 --- a/src/Resources/Locales/zh_CN.axaml +++ b/src/Resources/Locales/zh_CN.axaml @@ -72,6 +72,7 @@ 取 消 重置文件到该版本 重置文件到上一版本 + 生成提交信息 切换变更显示模式 文件名+路径列表模式 全路径列表模式 diff --git a/src/Resources/Locales/zh_TW.axaml b/src/Resources/Locales/zh_TW.axaml index 093d6181..562cd818 100644 --- a/src/Resources/Locales/zh_TW.axaml +++ b/src/Resources/Locales/zh_TW.axaml @@ -72,6 +72,7 @@ 取 消 重設檔案為此版本 重設檔案到上一版本 + 產生提交訊息 切換變更顯示模式 檔案名稱 + 路徑列表模式 全路徑列表模式 diff --git a/src/ViewModels/WorkingCopy.cs b/src/ViewModels/WorkingCopy.cs index 6393c6ad..f6fb81e2 100644 --- a/src/ViewModels/WorkingCopy.cs +++ b/src/ViewModels/WorkingCopy.cs @@ -8,6 +8,7 @@ using Avalonia.Platform.Storage; using Avalonia.Threading; using CommunityToolkit.Mvvm.ComponentModel; +using SourceGit.Models; namespace SourceGit.ViewModels { @@ -881,6 +882,44 @@ namespace SourceGit.ViewModels return null; var menu = new ContextMenu(); + + var ai = null as MenuItem; + var services = Preference.Instance.OpenAIServices; + if (services.Count > 0) + { + ai = new MenuItem(); + ai.Icon = App.CreateMenuIcon("Icons.AIAssist"); + ai.Header = App.Text("ChangeCM.GenerateCommitMessage"); + + if (services.Count == 1) + { + ai.Click += (_, e) => + { + var dialog = new Views.AIAssistant(services[0], _repo.FullPath, _selectedStaged, generated => CommitMessage = generated); + App.OpenDialog(dialog); + e.Handled = true; + }; + } + else + { + foreach (var service in services) + { + var dup = service; + + var item = new MenuItem(); + item.Header = service.Name; + item.Click += (_, e) => + { + var dialog = new Views.AIAssistant(dup, _repo.FullPath, _selectedStaged, generated => CommitMessage = generated); + App.OpenDialog(dialog); + e.Handled = true; + }; + + ai.Items.Add(item); + } + } + } + if (_selectedStaged.Count == 1) { var change = _selectedStaged[0]; @@ -961,24 +1000,6 @@ namespace SourceGit.ViewModels e.Handled = true; }; - var copyPath = new MenuItem(); - copyPath.Header = App.Text("CopyPath"); - copyPath.Icon = App.CreateMenuIcon("Icons.Copy"); - copyPath.Click += (_, e) => - { - App.CopyText(change.Path); - e.Handled = true; - }; - - var copyFileName = new MenuItem(); - copyFileName.Header = App.Text("CopyFileName"); - copyFileName.Icon = App.CreateMenuIcon("Icons.Copy"); - copyFileName.Click += (_, e) => - { - App.CopyText(Path.GetFileName(change.Path)); - e.Handled = true; - }; - menu.Items.Add(explore); menu.Items.Add(openWith); menu.Items.Add(new MenuItem() { Header = "-" }); @@ -1070,6 +1091,30 @@ namespace SourceGit.ViewModels menu.Items.Add(new MenuItem() { Header = "-" }); } + if (ai != null) + { + menu.Items.Add(ai); + menu.Items.Add(new MenuItem() { Header = "-" }); + } + + var copyPath = new MenuItem(); + copyPath.Header = App.Text("CopyPath"); + copyPath.Icon = App.CreateMenuIcon("Icons.Copy"); + copyPath.Click += (_, e) => + { + App.CopyText(change.Path); + e.Handled = true; + }; + + var copyFileName = new MenuItem(); + copyFileName.Header = App.Text("CopyFileName"); + copyFileName.Icon = App.CreateMenuIcon("Icons.Copy"); + copyFileName.Click += (_, e) => + { + App.CopyText(Path.GetFileName(change.Path)); + e.Handled = true; + }; + menu.Items.Add(copyPath); menu.Items.Add(copyFileName); } @@ -1123,6 +1168,12 @@ namespace SourceGit.ViewModels menu.Items.Add(unstage); menu.Items.Add(stash); menu.Items.Add(patch); + + if (ai != null) + { + menu.Items.Add(new MenuItem() { Header = "-" }); + menu.Items.Add(ai); + } } return menu;