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;