Skip to content

Commit bc0f86b

Browse files
committed
feature: add Use context menu entry to apply selected text as commit message
Signed-off-by: leo <longshuang@msn.cn>
1 parent 3b6342d commit bc0f86b

File tree

7 files changed

+28
-18
lines changed

7 files changed

+28
-18
lines changed

src/Resources/Locales/en_US.axaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
<x:String x:Key="Text.AIAssistant" xml:space="preserve">AI Assistant</x:String>
2121
<x:String x:Key="Text.AIAssistant.Regen" xml:space="preserve">RE-GENERATE</x:String>
2222
<x:String x:Key="Text.AIAssistant.Tip" xml:space="preserve">Use AI to generate commit message</x:String>
23+
<x:String x:Key="Text.AIAssistant.Use" xml:space="preserve">Use</x:String>
2324
<x:String x:Key="Text.App.Hide" xml:space="preserve">Hide SourceGit</x:String>
2425
<x:String x:Key="Text.App.ShowAll" xml:space="preserve">Show All</x:String>
2526
<x:String x:Key="Text.Apply" xml:space="preserve">Patch</x:String>

src/Resources/Locales/zh_CN.axaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
<x:String x:Key="Text.AIAssistant" xml:space="preserve">AI助手</x:String>
2525
<x:String x:Key="Text.AIAssistant.Regen" xml:space="preserve">重新生成</x:String>
2626
<x:String x:Key="Text.AIAssistant.Tip" xml:space="preserve">使用AI助手生成提交信息</x:String>
27+
<x:String x:Key="Text.AIAssistant.Use" xml:space="preserve">应用所选</x:String>
2728
<x:String x:Key="Text.App.Hide" xml:space="preserve">隐藏 SourceGit</x:String>
2829
<x:String x:Key="Text.App.ShowAll" xml:space="preserve">显示所有窗口</x:String>
2930
<x:String x:Key="Text.Apply" xml:space="preserve">应用补丁(apply)</x:String>

src/Resources/Locales/zh_TW.axaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
<x:String x:Key="Text.AIAssistant" xml:space="preserve">AI 助理</x:String>
2525
<x:String x:Key="Text.AIAssistant.Regen" xml:space="preserve">重新產生</x:String>
2626
<x:String x:Key="Text.AIAssistant.Tip" xml:space="preserve">使用 AI 產生提交訊息</x:String>
27+
<x:String x:Key="Text.AIAssistant.Use" xml:space="preserve">套用選取</x:String>
2728
<x:String x:Key="Text.App.Hide" xml:space="preserve">隱藏 SourceGit</x:String>
2829
<x:String x:Key="Text.App.ShowAll" xml:space="preserve">顯示所有</x:String>
2930
<x:String x:Key="Text.Apply" xml:space="preserve">套用修補檔 (apply patch)</x:String>

src/ViewModels/AIAssistant.cs

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ public string Text
2222
private set => SetProperty(ref _text, value);
2323
}
2424

25-
public AIAssistant(string repo, AI.Service service, List<Models.Change> changes)
25+
public AIAssistant(Repository repo, AI.Service service, List<Models.Change> changes)
2626
{
2727
_repo = repo;
2828
_service = service;
@@ -49,7 +49,7 @@ public async Task GenAsync()
4949

5050
try
5151
{
52-
await agent.GenerateCommitMessageAsync(_repo, _changeList, message =>
52+
await agent.GenerateCommitMessageAsync(_repo.FullPath, _changeList, message =>
5353
{
5454
builder.AppendLine(message);
5555
Dispatcher.UIThread.Post(() => Text = builder.ToString());
@@ -72,6 +72,11 @@ await agent.GenerateCommitMessageAsync(_repo, _changeList, message =>
7272
IsGenerating = false;
7373
}
7474

75+
public void Use(string text)
76+
{
77+
_repo.SetCommitMessage(text);
78+
}
79+
7580
public void Cancel()
7681
{
7782
_cancel?.Cancel();
@@ -98,7 +103,7 @@ private void SerializeChange(Models.Change c, StringBuilder builder)
98103
builder.Append(c.Path).AppendLine();
99104
}
100105

101-
private readonly string _repo = null;
106+
private readonly Repository _repo = null;
102107
private readonly AI.Service _service = null;
103108
private readonly string _changeList = null;
104109
private CancellationTokenSource _cancel = null;

src/Views/AIAssistant.axaml.cs

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -93,29 +93,31 @@ protected override void OnPropertyChanged(AvaloniaPropertyChangedEventArgs chang
9393

9494
private void OnTextViewContextRequested(object sender, ContextRequestedEventArgs e)
9595
{
96+
if (DataContext is not ViewModels.AIAssistant vm)
97+
return;
98+
9699
var selected = SelectedText;
97100
if (string.IsNullOrEmpty(selected))
98101
return;
99102

103+
var apply = new MenuItem() { Header = App.Text("AIAssistant.Use") };
104+
apply.Icon = App.CreateMenuIcon("Icons.Check");
105+
apply.Click += (_, ev) =>
106+
{
107+
vm.Use(selected);
108+
ev.Handled = true;
109+
};
110+
100111
var copy = new MenuItem() { Header = App.Text("Copy") };
112+
copy.Icon = App.CreateMenuIcon("Icons.Copy");
101113
copy.Click += async (_, ev) =>
102114
{
103115
await App.CopyTextAsync(selected);
104116
ev.Handled = true;
105117
};
106118

107-
if (this.FindResource("Icons.Copy") is Geometry geo)
108-
{
109-
copy.Icon = new Avalonia.Controls.Shapes.Path()
110-
{
111-
Width = 10,
112-
Height = 10,
113-
Stretch = Stretch.Uniform,
114-
Data = geo,
115-
};
116-
}
117-
118119
var menu = new ContextMenu();
120+
menu.Items.Add(apply);
119121
menu.Items.Add(copy);
120122
menu.Open(TextArea.TextView);
121123

src/Views/CommitMessageToolBox.axaml.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -588,7 +588,7 @@ private async void OnOpenOpenAIHelper(object sender, RoutedEventArgs e)
588588

589589
if (services.Count == 1)
590590
{
591-
await App.ShowDialog(new ViewModels.AIAssistant(repo.FullPath, services[0], vm.Staged));
591+
await App.ShowDialog(new ViewModels.AIAssistant(repo, services[0], vm.Staged));
592592
e.Handled = true;
593593
return;
594594
}
@@ -601,7 +601,7 @@ private async void OnOpenOpenAIHelper(object sender, RoutedEventArgs e)
601601
item.Header = service.Name;
602602
item.Click += async (_, ev) =>
603603
{
604-
await App.ShowDialog(new ViewModels.AIAssistant(repo.FullPath, dup, vm.Staged));
604+
await App.ShowDialog(new ViewModels.AIAssistant(repo, dup, vm.Staged));
605605
ev.Handled = true;
606606
};
607607

src/Views/WorkingCopy.axaml.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -929,7 +929,7 @@ public ContextMenu CreateContextMenuForStagedChanges(ViewModels.WorkingCopy vm,
929929
{
930930
ai.Click += async (_, e) =>
931931
{
932-
await App.ShowDialog(new ViewModels.AIAssistant(repo.FullPath, services[0], selectedStaged));
932+
await App.ShowDialog(new ViewModels.AIAssistant(repo, services[0], selectedStaged));
933933
e.Handled = true;
934934
};
935935
}
@@ -943,7 +943,7 @@ public ContextMenu CreateContextMenuForStagedChanges(ViewModels.WorkingCopy vm,
943943
item.Header = service.Name;
944944
item.Click += async (_, e) =>
945945
{
946-
await App.ShowDialog(new ViewModels.AIAssistant(repo.FullPath, dup, selectedStaged));
946+
await App.ShowDialog(new ViewModels.AIAssistant(repo, dup, selectedStaged));
947947
e.Handled = true;
948948
};
949949

0 commit comments

Comments
 (0)