Skip to content

Commit fb8d4a2

Browse files
committed
code_review: PR #1055
- since the author and time are already shown in the blame view, use the full message as tooltip is better. - cache the commit message in `ViewModels.Blame` since the `Tooltip` of control may change. - querying commit message synchronously (it's very fast) to avoid similar issues in commit details panel. Signed-off-by: leo <[email protected]>
1 parent 2699035 commit fb8d4a2

File tree

3 files changed

+17
-43
lines changed

3 files changed

+17
-43
lines changed

src/ViewModels/Blame.cs

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
using System.Threading.Tasks;
1+
using System.Collections.Generic;
2+
using System.Threading.Tasks;
23

34
using Avalonia.Threading;
45

@@ -57,12 +58,18 @@ public void NavigateToCommit(string commitSHA)
5758
}
5859
}
5960

60-
public Models.Commit GetCommitInfo(string commitSHA)
61+
public string GetCommitMessage(string sha)
6162
{
62-
return new Commands.QuerySingleCommit(_repo, commitSHA).Result();
63+
if (_commitMessages.TryGetValue(sha, out var msg))
64+
return msg;
65+
66+
msg = new Commands.QueryCommitFullMessage(_repo, sha).Result();
67+
_commitMessages[sha] = msg;
68+
return msg;
6369
}
6470

6571
private readonly string _repo;
6672
private Models.BlameData _data = null;
73+
private Dictionary<string, string> _commitMessages = new Dictionary<string, string>();
6774
}
6875
}

src/Views/Blame.axaml

Lines changed: 1 addition & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
33
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
44
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
5-
xmlns:m="using:SourceGit.Models"
65
xmlns:vm="using:SourceGit.ViewModels"
76
xmlns:v="using:SourceGit.Views"
87
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
@@ -60,21 +59,7 @@
6059
FontFamily="{DynamicResource Fonts.Monospace}"
6160
FontSize="{Binding Source={x:Static vm:Preferences.Instance}, Path=EditorFontSize}"
6261
TabWidth="{Binding Source={x:Static vm:Preferences.Instance}, Path=EditorTabWidth}"
63-
BlameData="{Binding Data}">
64-
<v:BlameTextEditor.DataTemplates>
65-
<DataTemplate DataType="m:Commit">
66-
<StackPanel MinWidth="400" Orientation="Vertical">
67-
<Grid ColumnDefinitions="Auto,*,Auto">
68-
<v:Avatar Grid.Column="0" Width="16" Height="16" VerticalAlignment="Center" IsHitTestVisible="False" User="{Binding Author}"/>
69-
<TextBlock Grid.Column="1" Classes="primary" Text="{Binding Author.Name}" Margin="8,0,0,0"/>
70-
<TextBlock Grid.Column="2" Classes="primary" Text="{Binding CommitterTimeStr}" Foreground="{DynamicResource Brush.FG2}" Margin="8,0,0,0"/>
71-
</Grid>
72-
73-
<TextBlock Classes="primary" Margin="0,8,0,0" Text="{Binding Subject}" TextWrapping="Wrap"/>
74-
</StackPanel>
75-
</DataTemplate>
76-
</v:BlameTextEditor.DataTemplates>
77-
</v:BlameTextEditor>
62+
BlameData="{Binding Data}"/>
7863

7964
<!-- Not supported mask (for binary files) -->
8065
<StackPanel Orientation="Vertical"

src/Views/Blame.axaml.cs

Lines changed: 6 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
using System;
22
using System.Collections.Generic;
33
using System.Globalization;
4-
using System.Threading.Tasks;
4+
55
using Avalonia;
66
using Avalonia.Controls;
77
using Avalonia.Input;
88
using Avalonia.Interactivity;
99
using Avalonia.Media;
10-
using Avalonia.Threading;
10+
1111
using AvaloniaEdit;
1212
using AvaloniaEdit.Document;
1313
using AvaloniaEdit.Editing;
@@ -162,8 +162,7 @@ protected override void OnPointerMoved(PointerEventArgs e)
162162
break;
163163

164164
var info = _editor.BlameData.LineInfos[lineNumber - 1];
165-
var y = line.GetTextLineVisualYPosition(line.TextLines[0], VisualYPosition.TextTop)
166-
- view.VerticalOffset;
165+
var y = line.GetTextLineVisualYPosition(line.TextLines[0], VisualYPosition.TextTop) - view.VerticalOffset;
167166
var shaLink = new FormattedText(
168167
info.CommitSHA,
169168
CultureInfo.CurrentCulture,
@@ -177,28 +176,11 @@ protected override void OnPointerMoved(PointerEventArgs e)
177176
{
178177
Cursor = Cursor.Parse("Hand");
179178

180-
// check if the tooltip is already set
181-
var tooltip = ToolTip.GetTip(this);
182-
if (tooltip is Models.Commit existedCommit && existedCommit.SHA == info.CommitSHA)
183-
return;
184-
185179
if (DataContext is ViewModels.Blame blame)
186180
{
187-
Task.Run(() =>
188-
{
189-
var commit = blame.GetCommitInfo(info.CommitSHA);
190-
if (commit == null)
191-
return;
192-
193-
Dispatcher.UIThread.Invoke(() =>
194-
{
195-
if (IsEffectivelyVisible && IsPointerOver)
196-
{
197-
ToolTip.SetTip(this, commit);
198-
ToolTip.SetIsOpen(this, true);
199-
}
200-
});
201-
});
181+
var msg = blame.GetCommitMessage(info.CommitSHA);
182+
ToolTip.SetTip(this, msg);
183+
ToolTip.SetIsOpen(this, true);
202184
}
203185

204186
return;

0 commit comments

Comments
 (0)