Skip to content

Commit 134d69d

Browse files
committed
feature: supports generate commit message by OpenAI with selected staged changes (#608)
Signed-off-by: leo <[email protected]>
1 parent 9d1840f commit 134d69d

File tree

4 files changed

+72
-18
lines changed

4 files changed

+72
-18
lines changed

src/Resources/Locales/en_US.axaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@
6969
<x:String x:Key="Text.Cancel" xml:space="preserve">CANCEL</x:String>
7070
<x:String x:Key="Text.ChangeCM.CheckoutThisRevision" xml:space="preserve">Reset to This Revision</x:String>
7171
<x:String x:Key="Text.ChangeCM.CheckoutFirstParentRevision" xml:space="preserve">Reset to Parent Revision</x:String>
72+
<x:String x:Key="Text.ChangeCM.GenerateCommitMessage" xml:space="preserve">Generate commit message</x:String>
7273
<x:String x:Key="Text.ChangeDisplayMode" xml:space="preserve">CHANGE DISPLAY MODE</x:String>
7374
<x:String x:Key="Text.ChangeDisplayMode.Grid" xml:space="preserve">Show as File and Dir List</x:String>
7475
<x:String x:Key="Text.ChangeDisplayMode.List" xml:space="preserve">Show as Path List</x:String>

src/Resources/Locales/zh_CN.axaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@
7272
<x:String x:Key="Text.Cancel" xml:space="preserve">取 消</x:String>
7373
<x:String x:Key="Text.ChangeCM.CheckoutThisRevision" xml:space="preserve">重置文件到该版本</x:String>
7474
<x:String x:Key="Text.ChangeCM.CheckoutFirstParentRevision" xml:space="preserve">重置文件到上一版本</x:String>
75+
<x:String x:Key="Text.ChangeCM.GenerateCommitMessage" xml:space="preserve">生成提交信息</x:String>
7576
<x:String x:Key="Text.ChangeDisplayMode" xml:space="preserve">切换变更显示模式</x:String>
7677
<x:String x:Key="Text.ChangeDisplayMode.Grid" xml:space="preserve">文件名+路径列表模式</x:String>
7778
<x:String x:Key="Text.ChangeDisplayMode.List" xml:space="preserve">全路径列表模式</x:String>

src/Resources/Locales/zh_TW.axaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@
7272
<x:String x:Key="Text.Cancel" xml:space="preserve">取 消</x:String>
7373
<x:String x:Key="Text.ChangeCM.CheckoutThisRevision" xml:space="preserve">重設檔案為此版本</x:String>
7474
<x:String x:Key="Text.ChangeCM.CheckoutFirstParentRevision" xml:space="preserve">重設檔案到上一版本</x:String>
75+
<x:String x:Key="Text.ChangeCM.GenerateCommitMessage" xml:space="preserve">產生提交訊息</x:String>
7576
<x:String x:Key="Text.ChangeDisplayMode" xml:space="preserve">切換變更顯示模式</x:String>
7677
<x:String x:Key="Text.ChangeDisplayMode.Grid" xml:space="preserve">檔案名稱 + 路徑列表模式</x:String>
7778
<x:String x:Key="Text.ChangeDisplayMode.List" xml:space="preserve">全路徑列表模式</x:String>

src/ViewModels/WorkingCopy.cs

Lines changed: 69 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
using Avalonia.Threading;
99

1010
using CommunityToolkit.Mvvm.ComponentModel;
11+
using SourceGit.Models;
1112

1213
namespace SourceGit.ViewModels
1314
{
@@ -881,6 +882,44 @@ public ContextMenu CreateContextMenuForStagedChanges()
881882
return null;
882883

883884
var menu = new ContextMenu();
885+
886+
var ai = null as MenuItem;
887+
var services = Preference.Instance.OpenAIServices;
888+
if (services.Count > 0)
889+
{
890+
ai = new MenuItem();
891+
ai.Icon = App.CreateMenuIcon("Icons.AIAssist");
892+
ai.Header = App.Text("ChangeCM.GenerateCommitMessage");
893+
894+
if (services.Count == 1)
895+
{
896+
ai.Click += (_, e) =>
897+
{
898+
var dialog = new Views.AIAssistant(services[0], _repo.FullPath, _selectedStaged, generated => CommitMessage = generated);
899+
App.OpenDialog(dialog);
900+
e.Handled = true;
901+
};
902+
}
903+
else
904+
{
905+
foreach (var service in services)
906+
{
907+
var dup = service;
908+
909+
var item = new MenuItem();
910+
item.Header = service.Name;
911+
item.Click += (_, e) =>
912+
{
913+
var dialog = new Views.AIAssistant(dup, _repo.FullPath, _selectedStaged, generated => CommitMessage = generated);
914+
App.OpenDialog(dialog);
915+
e.Handled = true;
916+
};
917+
918+
ai.Items.Add(item);
919+
}
920+
}
921+
}
922+
884923
if (_selectedStaged.Count == 1)
885924
{
886925
var change = _selectedStaged[0];
@@ -961,24 +1000,6 @@ public ContextMenu CreateContextMenuForStagedChanges()
9611000
e.Handled = true;
9621001
};
9631002

964-
var copyPath = new MenuItem();
965-
copyPath.Header = App.Text("CopyPath");
966-
copyPath.Icon = App.CreateMenuIcon("Icons.Copy");
967-
copyPath.Click += (_, e) =>
968-
{
969-
App.CopyText(change.Path);
970-
e.Handled = true;
971-
};
972-
973-
var copyFileName = new MenuItem();
974-
copyFileName.Header = App.Text("CopyFileName");
975-
copyFileName.Icon = App.CreateMenuIcon("Icons.Copy");
976-
copyFileName.Click += (_, e) =>
977-
{
978-
App.CopyText(Path.GetFileName(change.Path));
979-
e.Handled = true;
980-
};
981-
9821003
menu.Items.Add(explore);
9831004
menu.Items.Add(openWith);
9841005
menu.Items.Add(new MenuItem() { Header = "-" });
@@ -1070,6 +1091,30 @@ public ContextMenu CreateContextMenuForStagedChanges()
10701091
menu.Items.Add(new MenuItem() { Header = "-" });
10711092
}
10721093

1094+
if (ai != null)
1095+
{
1096+
menu.Items.Add(ai);
1097+
menu.Items.Add(new MenuItem() { Header = "-" });
1098+
}
1099+
1100+
var copyPath = new MenuItem();
1101+
copyPath.Header = App.Text("CopyPath");
1102+
copyPath.Icon = App.CreateMenuIcon("Icons.Copy");
1103+
copyPath.Click += (_, e) =>
1104+
{
1105+
App.CopyText(change.Path);
1106+
e.Handled = true;
1107+
};
1108+
1109+
var copyFileName = new MenuItem();
1110+
copyFileName.Header = App.Text("CopyFileName");
1111+
copyFileName.Icon = App.CreateMenuIcon("Icons.Copy");
1112+
copyFileName.Click += (_, e) =>
1113+
{
1114+
App.CopyText(Path.GetFileName(change.Path));
1115+
e.Handled = true;
1116+
};
1117+
10731118
menu.Items.Add(copyPath);
10741119
menu.Items.Add(copyFileName);
10751120
}
@@ -1123,6 +1168,12 @@ public ContextMenu CreateContextMenuForStagedChanges()
11231168
menu.Items.Add(unstage);
11241169
menu.Items.Add(stash);
11251170
menu.Items.Add(patch);
1171+
1172+
if (ai != null)
1173+
{
1174+
menu.Items.Add(new MenuItem() { Header = "-" });
1175+
menu.Items.Add(ai);
1176+
}
11261177
}
11271178

11281179
return menu;

0 commit comments

Comments
 (0)