Skip to content

Commit 21e15a1

Browse files
committed
feature: add a toggle in perference to show author time instead of committer time in graph (sourcegit-scm#558)
1 parent 1f7a54e commit 21e15a1

File tree

7 files changed

+53
-17
lines changed

7 files changed

+53
-17
lines changed

src/Resources/Locales/en_US.axaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -313,6 +313,7 @@
313313
<x:String x:Key="Text.Histories.DisplayMode" xml:space="preserve">Switch Horizontal/Vertical Layout</x:String>
314314
<x:String x:Key="Text.Histories.GraphMode" xml:space="preserve">Switch Curve/Polyline Graph Mode</x:String>
315315
<x:String x:Key="Text.Histories.Header.Author" xml:space="preserve">AUTHOR</x:String>
316+
<x:String x:Key="Text.Histories.Header.AuthorTime" xml:space="preserve">AUTHOR TIME</x:String>
316317
<x:String x:Key="Text.Histories.Header.GraphAndSubject" xml:space="preserve">GRAPH &amp; SUBJECT</x:String>
317318
<x:String x:Key="Text.Histories.Header.SHA" xml:space="preserve">SHA</x:String>
318319
<x:String x:Key="Text.Histories.Header.Time" xml:space="preserve">COMMIT TIME</x:String>
@@ -414,6 +415,7 @@
414415
<x:String x:Key="Text.Preference.General.Check4UpdatesOnStartup" xml:space="preserve">Check for updates on startup</x:String>
415416
<x:String x:Key="Text.Preference.General.Locale" xml:space="preserve">Language</x:String>
416417
<x:String x:Key="Text.Preference.General.MaxHistoryCommits" xml:space="preserve">History Commits</x:String>
418+
<x:String x:Key="Text.Preference.General.ShowAuthorTime" xml:space="preserve">Show author time intead of commit time in graph</x:String>
417419
<x:String x:Key="Text.Preference.General.SubjectGuideLength" xml:space="preserve">Subject Guide Length</x:String>
418420
<x:String x:Key="Text.Preference.Git" xml:space="preserve">GIT</x:String>
419421
<x:String x:Key="Text.Preference.Git.CRLF" xml:space="preserve">Enable Auto CRLF</x:String>

src/Resources/Locales/zh_CN.axaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -316,6 +316,7 @@
316316
<x:String x:Key="Text.Histories.DisplayMode" xml:space="preserve">切换横向/纵向显示</x:String>
317317
<x:String x:Key="Text.Histories.GraphMode" xml:space="preserve">切换曲线/折线显示</x:String>
318318
<x:String x:Key="Text.Histories.Header.Author" xml:space="preserve">作者</x:String>
319+
<x:String x:Key="Text.Histories.Header.AuthorTime" xml:space="preserve">修改时间</x:String>
319320
<x:String x:Key="Text.Histories.Header.GraphAndSubject" xml:space="preserve">路线图与主题</x:String>
320321
<x:String x:Key="Text.Histories.Header.SHA" xml:space="preserve">提交指纹</x:String>
321322
<x:String x:Key="Text.Histories.Header.Time" xml:space="preserve">提交时间</x:String>
@@ -413,6 +414,7 @@
413414
<x:String x:Key="Text.Preference.General.Check4UpdatesOnStartup" xml:space="preserve">启动时检测软件更新</x:String>
414415
<x:String x:Key="Text.Preference.General.Locale" xml:space="preserve">显示语言</x:String>
415416
<x:String x:Key="Text.Preference.General.MaxHistoryCommits" xml:space="preserve">最大历史提交数</x:String>
417+
<x:String x:Key="Text.Preference.General.ShowAuthorTime" xml:space="preserve">在提交路线图中显示修改时间而非提交时间</x:String>
416418
<x:String x:Key="Text.Preference.General.SubjectGuideLength" xml:space="preserve">SUBJECT字数检测</x:String>
417419
<x:String x:Key="Text.Preference.Git" xml:space="preserve">GIT配置</x:String>
418420
<x:String x:Key="Text.Preference.Git.CRLF" xml:space="preserve">自动换行转换</x:String>

src/Resources/Locales/zh_TW.axaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -316,6 +316,7 @@
316316
<x:String x:Key="Text.Histories.DisplayMode" xml:space="preserve">切換橫向/縱向顯示</x:String>
317317
<x:String x:Key="Text.Histories.GraphMode" xml:space="preserve">切換曲線/折線顯示</x:String>
318318
<x:String x:Key="Text.Histories.Header.Author" xml:space="preserve">作者</x:String>
319+
<x:String x:Key="Text.Histories.Header.AuthorTime" xml:space="preserve">修改時間</x:String>
319320
<x:String x:Key="Text.Histories.Header.GraphAndSubject" xml:space="preserve">路線圖與訊息標題</x:String>
320321
<x:String x:Key="Text.Histories.Header.SHA" xml:space="preserve">提交編號</x:String>
321322
<x:String x:Key="Text.Histories.Header.Time" xml:space="preserve">提交時間</x:String>
@@ -417,6 +418,7 @@
417418
<x:String x:Key="Text.Preference.General.Check4UpdatesOnStartup" xml:space="preserve">啟動時檢查軟體更新</x:String>
418419
<x:String x:Key="Text.Preference.General.Locale" xml:space="preserve">顯示語言</x:String>
419420
<x:String x:Key="Text.Preference.General.MaxHistoryCommits" xml:space="preserve">最大歷史提交數</x:String>
421+
<x:String x:Key="Text.Preference.General.ShowAuthorTime" xml:space="preserve">在提交路線圖中顯示修改時間而非提交時間</x:String>
420422
<x:String x:Key="Text.Preference.General.SubjectGuideLength" xml:space="preserve">提交標題字數偵測</x:String>
421423
<x:String x:Key="Text.Preference.Git" xml:space="preserve">Git 設定</x:String>
422424
<x:String x:Key="Text.Preference.Git.CRLF" xml:space="preserve">自動換行轉換</x:String>

src/ViewModels/Preference.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,12 @@ public bool Check4UpdatesOnStartup
132132
set => SetProperty(ref _check4UpdatesOnStartup, value);
133133
}
134134

135+
public bool ShowAuthorTimeInGraph
136+
{
137+
get => _showAuthorTimeInGraph;
138+
set => SetProperty(ref _showAuthorTimeInGraph, value);
139+
}
140+
135141
public string IgnoreUpdateTag
136142
{
137143
get => _ignoreUpdateTag;
@@ -577,6 +583,7 @@ private bool RemoveNodeRecursive(RepositoryNode node, List<RepositoryNode> colle
577583
private int _maxHistoryCommits = 20000;
578584
private int _subjectGuideLength = 50;
579585
private bool _useFixedTabWidth = true;
586+
private bool _showAuthorTimeInGraph = false;
580587

581588
private bool _check4UpdatesOnStartup = true;
582589
private double _lastCheckUpdateTime = 0;

src/Views/Histories.axaml

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,14 @@
5151
<ToggleButton Classes="time_display_mode"
5252
Width="10" Height="10"
5353
IsChecked="{Binding Source={x:Static vm:Preference.Instance}, Path=DisplayTimeAsPeriodInHistories, Mode=TwoWay}"/>
54-
<TextBlock Classes="table_header" Margin="6,0,0,0" Text="{DynamicResource Text.Histories.Header.Time}"/>
54+
<TextBlock Classes="table_header"
55+
Margin="6,0,0,0"
56+
Text="{DynamicResource Text.Histories.Header.Time}"
57+
IsVisible="{Binding Source={x:Static vm:Preference.Instance}, Path=ShowAuthorTimeInGraph, Converter={x:Static BoolConverters.Not}, Mode=OneWay}"/>
58+
<TextBlock Classes="table_header"
59+
Margin="6,0,0,0"
60+
Text="{DynamicResource Text.Histories.Header.AuthorTime}"
61+
IsVisible="{Binding Source={x:Static vm:Preference.Instance}, Path=ShowAuthorTimeInGraph, Mode=OneWay}"/>
5562
</StackPanel>
5663
</Grid>
5764
</Border>
@@ -180,13 +187,13 @@
180187
Opacity="{Binding Opacity}"/>
181188
</Border>
182189

183-
<!-- COMMIT TIME -->
190+
<!-- TIME -->
184191
<Border Grid.Column="3" Padding="4,0" ClipToBounds="True" IsHitTestVisible="False">
185192
<v:CommitTimeTextBlock Classes="primary"
186193
HorizontalAlignment="Center"
187194
FontWeight="{Binding FontWeight}"
188195
Opacity="{Binding Opacity}"
189-
Timestamp="{Binding CommitterTime}"
196+
UseAuthorTime="{Binding Source={x:Static vm:Preference.Instance}, Path=ShowAuthorTimeInGraph, Mode=OneWay}"
190197
ShowAsDateTime="{Binding Source={x:Static vm:Preference.Instance}, Path=!DisplayTimeAsPeriodInHistories}"/>
191198
</Border>
192199
</Grid>

src/Views/Histories.axaml.cs

Lines changed: 24 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -303,13 +303,13 @@ public bool ShowAsDateTime
303303
set => SetValue(ShowAsDateTimeProperty, value);
304304
}
305305

306-
public static readonly StyledProperty<ulong> TimestampProperty =
307-
AvaloniaProperty.Register<CommitTimeTextBlock, ulong>(nameof(Timestamp));
306+
public static readonly StyledProperty<bool> UseAuthorTimeProperty =
307+
AvaloniaProperty.Register<CommitTimeTextBlock, bool>(nameof(UseAuthorTime), true);
308308

309-
public ulong Timestamp
309+
public bool UseAuthorTime
310310
{
311-
get => GetValue(TimestampProperty);
312-
set => SetValue(TimestampProperty, value);
311+
get => GetValue(UseAuthorTimeProperty);
312+
set => SetValue(UseAuthorTimeProperty, value);
313313
}
314314

315315
protected override Type StyleKeyOverride => typeof(TextBlock);
@@ -318,7 +318,7 @@ protected override void OnPropertyChanged(AvaloniaPropertyChangedEventArgs chang
318318
{
319319
base.OnPropertyChanged(change);
320320

321-
if (change.Property == TimestampProperty)
321+
if (change.Property == UseAuthorTimeProperty)
322322
{
323323
SetCurrentValue(TextProperty, GetDisplayText());
324324
}
@@ -347,6 +347,12 @@ protected override void OnUnloaded(RoutedEventArgs e)
347347
StopTimer();
348348
}
349349

350+
protected override void OnDataContextChanged(EventArgs e)
351+
{
352+
base.OnDataContextChanged(e);
353+
SetCurrentValue(TextProperty, GetDisplayText());
354+
}
355+
350356
private void StartTimer()
351357
{
352358
if (_refreshTimer != null)
@@ -376,30 +382,35 @@ private void StopTimer()
376382

377383
private string GetDisplayText()
378384
{
385+
var commit = DataContext as Models.Commit;
386+
if (commit == null)
387+
return string.Empty;
388+
389+
var timestamp = UseAuthorTime ? commit.AuthorTime : commit.CommitterTime;
379390
if (ShowAsDateTime)
380-
return DateTime.UnixEpoch.AddSeconds(Timestamp).ToLocalTime().ToString("yyyy/MM/dd HH:mm:ss");
391+
return DateTime.UnixEpoch.AddSeconds(timestamp).ToLocalTime().ToString("yyyy/MM/dd HH:mm:ss");
381392

382393
var today = DateTime.Today;
383-
var committerTime = DateTime.UnixEpoch.AddSeconds(Timestamp).ToLocalTime();
394+
var localTime = DateTime.UnixEpoch.AddSeconds(timestamp).ToLocalTime();
384395

385-
if (committerTime >= today)
396+
if (localTime >= today)
386397
{
387398
var now = DateTime.Now;
388-
var timespan = now - committerTime;
399+
var timespan = now - localTime;
389400
if (timespan.TotalHours > 1)
390401
return App.Text("Period.HoursAgo", (int)timespan.TotalHours);
391402

392403
return timespan.TotalMinutes < 1 ? App.Text("Period.JustNow") : App.Text("Period.MinutesAgo", (int)timespan.TotalMinutes);
393404
}
394405

395-
var diffYear = today.Year - committerTime.Year;
406+
var diffYear = today.Year - localTime.Year;
396407
if (diffYear == 0)
397408
{
398-
var diffMonth = today.Month - committerTime.Month;
409+
var diffMonth = today.Month - localTime.Month;
399410
if (diffMonth > 0)
400411
return diffMonth == 1 ? App.Text("Period.LastMonth") : App.Text("Period.MonthsAgo", diffMonth);
401412

402-
var diffDay = today.Day - committerTime.Day;
413+
var diffDay = today.Day - localTime.Day;
403414
return diffDay == 1 ? App.Text("Period.Yesterday") : App.Text("Period.DaysAgo", diffDay);
404415
}
405416

src/Views/Preference.axaml

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@
5252
<TabItem.Header>
5353
<TextBlock Classes="tab_header" Text="{DynamicResource Text.Preference.General}"/>
5454
</TabItem.Header>
55-
<Grid Margin="8" RowDefinitions="32,32,32,32,32" ColumnDefinitions="Auto,*">
55+
<Grid Margin="8" RowDefinitions="32,32,32,32,32,32" ColumnDefinitions="Auto,*">
5656
<TextBlock Grid.Row="0" Grid.Column="0"
5757
Text="{DynamicResource Text.Preference.General.Locale}"
5858
HorizontalAlignment="Right"
@@ -116,6 +116,11 @@
116116
Height="32"
117117
Content="{DynamicResource Text.Preference.General.Check4UpdatesOnStartup}"
118118
IsChecked="{Binding Source={x:Static vm:Preference.Instance}, Path=Check4UpdatesOnStartup, Mode=TwoWay}"/>
119+
120+
<CheckBox Grid.Row="5" Grid.Column="1"
121+
Height="32"
122+
Content="{DynamicResource Text.Preference.General.ShowAuthorTime}"
123+
IsChecked="{Binding Source={x:Static vm:Preference.Instance}, Path=ShowAuthorTimeInGraph, Mode=TwoWay}"/>
119124
</Grid>
120125
</TabItem>
121126

0 commit comments

Comments
 (0)