Skip to content

Commit cace869

Browse files
committed
feature: add Use back to apply ai generated commit message (#2287)
Signed-off-by: leo <longshuang@msn.cn>
1 parent c1d08e2 commit cace869

5 files changed

Lines changed: 49 additions & 5 deletions

File tree

src/Resources/Locales/zh_CN.axaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
<x:String x:Key="Text.AIAssistant.Model" xml:space="preserve">模型</x:String>
2626
<x:String x:Key="Text.AIAssistant.Regen" xml:space="preserve">重新生成</x:String>
2727
<x:String x:Key="Text.AIAssistant.Tip" xml:space="preserve">使用AI助手生成提交信息</x:String>
28-
<x:String x:Key="Text.AIAssistant.Use" xml:space="preserve">应用所选</x:String>
28+
<x:String x:Key="Text.AIAssistant.Use" xml:space="preserve">应用</x:String>
2929
<x:String x:Key="Text.App.Hide" xml:space="preserve">隐藏 SourceGit</x:String>
3030
<x:String x:Key="Text.App.HideOthers" xml:space="preserve">隐藏其他</x:String>
3131
<x:String x:Key="Text.App.ShowAll" xml:space="preserve">显示全部</x:String>

src/Resources/Locales/zh_TW.axaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
<x:String x:Key="Text.AIAssistant.Model" xml:space="preserve">模型</x:String>
2626
<x:String x:Key="Text.AIAssistant.Regen" xml:space="preserve">重新產生</x:String>
2727
<x:String x:Key="Text.AIAssistant.Tip" xml:space="preserve">使用 AI 產生提交訊息</x:String>
28-
<x:String x:Key="Text.AIAssistant.Use" xml:space="preserve">套用選取</x:String>
28+
<x:String x:Key="Text.AIAssistant.Use" xml:space="preserve">套用</x:String>
2929
<x:String x:Key="Text.App.Hide" xml:space="preserve">隱藏 SourceGit</x:String>
3030
<x:String x:Key="Text.App.HideOthers" xml:space="preserve">隱藏其他</x:String>
3131
<x:String x:Key="Text.App.ShowAll" xml:space="preserve">顯示全部</x:String>

src/ViewModels/AIAssistant.cs

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,12 @@ public string Text
3333
private set => SetProperty(ref _text, value);
3434
}
3535

36+
public string Response
37+
{
38+
get => _response;
39+
private set => SetProperty(ref _response, value);
40+
}
41+
3642
public AIAssistant(Repository repo, AI.Service service, List<Models.Change> changes)
3743
{
3844
_repo = repo;
@@ -55,16 +61,35 @@ public async Task GenAsync()
5561
var builder = new StringBuilder();
5662
builder.AppendLine("Asking AI to generate commit message...").AppendLine();
5763

64+
var responseBuilder = new StringBuilder();
65+
var foundResponse = false;
66+
5867
Text = builder.ToString();
68+
Response = string.Empty;
5969
IsGenerating = true;
6070

6171
try
6272
{
6373
await agent.GenerateCommitMessageAsync(_repo.FullPath, _changeList, message =>
6474
{
6575
builder.AppendLine(message);
76+
77+
if (foundResponse)
78+
{
79+
if (message.Equals("# Token Usage", StringComparison.Ordinal))
80+
foundResponse = false;
81+
else
82+
responseBuilder.AppendLine(message);
83+
}
84+
else if (message.Equals("# Assistant", StringComparison.Ordinal))
85+
{
86+
foundResponse = true;
87+
}
88+
6689
Dispatcher.UIThread.Post(() => Text = builder.ToString());
6790
}, _cancel.Token);
91+
92+
Response = responseBuilder.ToString().Trim();
6893
}
6994
catch (OperationCanceledException)
7095
{
@@ -77,7 +102,9 @@ await agent.GenerateCommitMessageAsync(_repo.FullPath, _changeList, message =>
77102
.AppendLine()
78103
.AppendLine("[ERROR]")
79104
.Append(e.Message);
105+
80106
Text = builder.ToString();
107+
Response = string.Empty;
81108
}
82109

83110
IsGenerating = false;
@@ -120,5 +147,6 @@ private void SerializeChange(Models.Change c, StringBuilder builder)
120147
private CancellationTokenSource _cancel = null;
121148
private bool _isGenerating = false;
122149
private string _text = string.Empty;
150+
private string _response = string.Empty;
123151
}
124152
}

src/Views/AIAssistant.axaml

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@
4545
Content="{Binding Text}"/>
4646

4747
<!-- Options -->
48-
<Grid Grid.Row="2" Margin="8,0,8,8" ColumnDefinitions="Auto,*,18,Auto">
48+
<Grid Grid.Row="2" Margin="8,0,8,8" ColumnDefinitions="Auto,*,18,Auto,Auto">
4949
<TextBlock Grid.Column="0"
5050
Classes="group_header_label"
5151
Text="{DynamicResource Text.AIAssistant.Model}"/>
@@ -62,10 +62,17 @@
6262

6363
<v:LoadingIcon Grid.Column="2"
6464
Width="14" Height="14"
65-
Margin="0,0,8,0"
6665
IsVisible="{Binding IsGenerating}"/>
67-
66+
6867
<Button Grid.Column="3"
68+
Classes="flat"
69+
Height="28"
70+
Margin="8,0" Padding="12,0"
71+
Content="{DynamicResource Text.AIAssistant.Use}"
72+
IsEnabled="{Binding Response, Converter={x:Static StringConverters.IsNotNullOrEmpty}}"
73+
Click="OnUseClicked"/>
74+
75+
<Button Grid.Column="4"
6976
Classes="flat"
7077
Height="28"
7178
Padding="12,0"

src/Views/AIAssistant.axaml.cs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,15 @@ private async void OnModelChanged(object sender, SelectionChangedEventArgs e)
153153
{
154154
if (DataContext is ViewModels.AIAssistant vm && IsLoaded)
155155
await vm.GenAsync();
156+
157+
e.Handled = true;
158+
}
159+
160+
private void OnUseClicked(object sender, RoutedEventArgs e)
161+
{
162+
if (DataContext is ViewModels.AIAssistant vm && !string.IsNullOrEmpty(vm.Response))
163+
vm.Use(vm.Response);
164+
156165
e.Handled = true;
157166
}
158167

0 commit comments

Comments
 (0)