mirror of
https://github.com/sourcegit-scm/sourcegit.git
synced 2024-10-31 13:03:20 -07:00
feat: Add config of auto fetch interval
This commit is contained in:
parent
62838e5b05
commit
7520a2a7b6
5 changed files with 66 additions and 7 deletions
|
@ -62,14 +62,30 @@ namespace SourceGit.Commands
|
|||
|
||||
public class AutoFetch
|
||||
{
|
||||
private const double INTERVAL = 10 * 60;
|
||||
|
||||
public static bool IsEnabled
|
||||
{
|
||||
get;
|
||||
set;
|
||||
} = false;
|
||||
|
||||
public static int Interval
|
||||
{
|
||||
get => _interval;
|
||||
set
|
||||
{
|
||||
if (value < 1)
|
||||
return;
|
||||
_interval = value;
|
||||
lock (_lock)
|
||||
{
|
||||
foreach (var job in _jobs)
|
||||
{
|
||||
job.Value.NextRunTimepoint = DateTime.Now.AddMinutes(Convert.ToDouble(_interval));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class Job
|
||||
{
|
||||
public Fetch Cmd = null;
|
||||
|
@ -104,7 +120,7 @@ namespace SourceGit.Commands
|
|||
foreach (var job in uptodate)
|
||||
{
|
||||
job.Cmd.Exec();
|
||||
job.NextRunTimepoint = DateTime.Now.AddSeconds(INTERVAL);
|
||||
job.NextRunTimepoint = DateTime.Now.AddMinutes(Convert.ToDouble(Interval));
|
||||
}
|
||||
|
||||
Thread.Sleep(2000);
|
||||
|
@ -117,7 +133,7 @@ namespace SourceGit.Commands
|
|||
var job = new Job
|
||||
{
|
||||
Cmd = new Fetch(repo, "--all", true, null) { RaiseError = false },
|
||||
NextRunTimepoint = DateTime.Now.AddSeconds(INTERVAL),
|
||||
NextRunTimepoint = DateTime.Now.AddMinutes(Convert.ToDouble(Interval)),
|
||||
};
|
||||
|
||||
lock (_lock)
|
||||
|
@ -147,12 +163,13 @@ namespace SourceGit.Commands
|
|||
{
|
||||
if (_jobs.TryGetValue(repo, out var value))
|
||||
{
|
||||
value.NextRunTimepoint = DateTime.Now.AddSeconds(INTERVAL);
|
||||
value.NextRunTimepoint = DateTime.Now.AddMinutes(Convert.ToDouble(Interval));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static readonly Dictionary<string, Job> _jobs = new Dictionary<string, Job>();
|
||||
private static readonly object _lock = new object();
|
||||
private static int _interval = 10;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -274,6 +274,7 @@
|
|||
<x:String x:Key="Text.Preference.General.UseFixedTabWidth" xml:space="preserve">Use fixed tab width in titlebar</x:String>
|
||||
<x:String x:Key="Text.Preference.Git" xml:space="preserve">GIT</x:String>
|
||||
<x:String x:Key="Text.Preference.Git.AutoFetch" xml:space="preserve">Fetch remotes automatically</x:String>
|
||||
<x:String x:Key="Text.Preference.Git.AutoFetchInterval" xml:space="preserve">Auto Fetch Interval</x:String>
|
||||
<x:String x:Key="Text.Preference.Git.CRLF" xml:space="preserve">Enable Auto CRLF</x:String>
|
||||
<x:String x:Key="Text.Preference.Git.DefaultCloneDir" xml:space="preserve">Default Clone Dir</x:String>
|
||||
<x:String x:Key="Text.Preference.Git.Email" xml:space="preserve">User Email</x:String>
|
||||
|
|
|
@ -274,6 +274,7 @@
|
|||
<x:String x:Key="Text.Preference.General.UseFixedTabWidth" xml:space="preserve">使用固定宽度的标题栏标签</x:String>
|
||||
<x:String x:Key="Text.Preference.Git" xml:space="preserve">GIT配置</x:String>
|
||||
<x:String x:Key="Text.Preference.Git.AutoFetch" xml:space="preserve">启用定时自动拉取远程更新</x:String>
|
||||
<x:String x:Key="Text.Preference.Git.AutoFetchInterval" xml:space="preserve">自动拉取间隔</x:String>
|
||||
<x:String x:Key="Text.Preference.Git.CRLF" xml:space="preserve">自动换行转换</x:String>
|
||||
<x:String x:Key="Text.Preference.Git.DefaultCloneDir" xml:space="preserve">默认克隆路径</x:String>
|
||||
<x:String x:Key="Text.Preference.Git.Email" xml:space="preserve">邮箱</x:String>
|
||||
|
|
|
@ -232,6 +232,23 @@ namespace SourceGit.ViewModels
|
|||
}
|
||||
}
|
||||
|
||||
public int? GitAutoFetchInterval
|
||||
{
|
||||
get => Commands.AutoFetch.Interval;
|
||||
set
|
||||
{
|
||||
if (value is null or < 1)
|
||||
{
|
||||
return;
|
||||
}
|
||||
if (Commands.AutoFetch.Interval != value)
|
||||
{
|
||||
Commands.AutoFetch.Interval = (int)value;
|
||||
OnPropertyChanged(nameof(GitAutoFetchInterval));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public int ExternalMergeToolType
|
||||
{
|
||||
get => _externalMergeToolType;
|
||||
|
@ -406,7 +423,8 @@ namespace SourceGit.ViewModels
|
|||
});
|
||||
|
||||
container.Clear();
|
||||
foreach (var one in list) container.Add(one);
|
||||
foreach (var one in list)
|
||||
container.Add(one);
|
||||
}
|
||||
|
||||
public static Repository FindRepository(string path)
|
||||
|
|
|
@ -231,7 +231,7 @@
|
|||
<TextBlock Classes="tab_header" Text="{DynamicResource Text.Preference.Git}"/>
|
||||
</TabItem.Header>
|
||||
|
||||
<Grid Margin="8" RowDefinitions="32,32,Auto,32,32,32,32,32" ColumnDefinitions="Auto,*">
|
||||
<Grid Margin="8" RowDefinitions="32,32,Auto,32,32,32,32,32,32" ColumnDefinitions="Auto,*">
|
||||
<TextBlock Grid.Row="0" Grid.Column="0"
|
||||
Text="{DynamicResource Text.Preference.Git.Path}"
|
||||
HorizontalAlignment="Right"
|
||||
|
@ -351,6 +351,28 @@
|
|||
<CheckBox Grid.Row="7" Grid.Column="1"
|
||||
Content="{DynamicResource Text.Preference.Git.AutoFetch}"
|
||||
IsChecked="{Binding GitAutoFetch, Mode=TwoWay}"/>
|
||||
|
||||
<TextBlock Grid.Row="8" Grid.Column="0"
|
||||
IsVisible="{Binding GitAutoFetch}"
|
||||
Text="{DynamicResource Text.Preference.Git.AutoFetchInterval}"
|
||||
HorizontalAlignment="Right"
|
||||
Margin="0,0,16,0"/>
|
||||
<Grid Grid.Row="8" Grid.Column="1" ColumnDefinitions="*,Auto" IsVisible="{Binding GitAutoFetch}">
|
||||
<NumericUpDown Grid.Column="0"
|
||||
Minimum="1" Maximum="60" Increment="1"
|
||||
Height="28"
|
||||
Padding="4"
|
||||
BorderThickness="1" BorderBrush="{DynamicResource Brush.Border1}"
|
||||
CornerRadius="3"
|
||||
ParsingNumberStyle="Integer"
|
||||
FormatString="0"
|
||||
Value="{Binding GitAutoFetchInterval, Mode=TwoWay, FallbackValue=10}">
|
||||
</NumericUpDown>
|
||||
<TextBlock Grid.Column="1"
|
||||
VerticalAlignment="Center"
|
||||
Margin="5,0,0,0"
|
||||
Text="min (1-60)" />
|
||||
</Grid>
|
||||
</Grid>
|
||||
</TabItem>
|
||||
|
||||
|
|
Loading…
Reference in a new issue