mirror of
https://github.com/sourcegit-scm/sourcegit.git
synced 2024-12-24 20:57:19 -08:00
Merge pull request #123 from gadfly3173/feat/auto-fetch-interval
feat: Add config of auto fetch interval
This commit is contained in:
commit
51d401bad4
5 changed files with 66 additions and 7 deletions
|
@ -62,14 +62,30 @@ namespace SourceGit.Commands
|
||||||
|
|
||||||
public class AutoFetch
|
public class AutoFetch
|
||||||
{
|
{
|
||||||
private const double INTERVAL = 10 * 60;
|
|
||||||
|
|
||||||
public static bool IsEnabled
|
public static bool IsEnabled
|
||||||
{
|
{
|
||||||
get;
|
get;
|
||||||
set;
|
set;
|
||||||
} = false;
|
} = 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
|
class Job
|
||||||
{
|
{
|
||||||
public Fetch Cmd = null;
|
public Fetch Cmd = null;
|
||||||
|
@ -104,7 +120,7 @@ namespace SourceGit.Commands
|
||||||
foreach (var job in uptodate)
|
foreach (var job in uptodate)
|
||||||
{
|
{
|
||||||
job.Cmd.Exec();
|
job.Cmd.Exec();
|
||||||
job.NextRunTimepoint = DateTime.Now.AddSeconds(INTERVAL);
|
job.NextRunTimepoint = DateTime.Now.AddMinutes(Convert.ToDouble(Interval));
|
||||||
}
|
}
|
||||||
|
|
||||||
Thread.Sleep(2000);
|
Thread.Sleep(2000);
|
||||||
|
@ -117,7 +133,7 @@ namespace SourceGit.Commands
|
||||||
var job = new Job
|
var job = new Job
|
||||||
{
|
{
|
||||||
Cmd = new Fetch(repo, "--all", true, null) { RaiseError = false },
|
Cmd = new Fetch(repo, "--all", true, null) { RaiseError = false },
|
||||||
NextRunTimepoint = DateTime.Now.AddSeconds(INTERVAL),
|
NextRunTimepoint = DateTime.Now.AddMinutes(Convert.ToDouble(Interval)),
|
||||||
};
|
};
|
||||||
|
|
||||||
lock (_lock)
|
lock (_lock)
|
||||||
|
@ -147,12 +163,13 @@ namespace SourceGit.Commands
|
||||||
{
|
{
|
||||||
if (_jobs.TryGetValue(repo, out var value))
|
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 Dictionary<string, Job> _jobs = new Dictionary<string, Job>();
|
||||||
private static readonly object _lock = new object();
|
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.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" 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.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.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.DefaultCloneDir" xml:space="preserve">Default Clone Dir</x:String>
|
||||||
<x:String x:Key="Text.Preference.Git.Email" xml:space="preserve">User Email</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.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" 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.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.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.DefaultCloneDir" xml:space="preserve">默认克隆路径</x:String>
|
||||||
<x:String x:Key="Text.Preference.Git.Email" 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
|
public int ExternalMergeToolType
|
||||||
{
|
{
|
||||||
get => _externalMergeToolType;
|
get => _externalMergeToolType;
|
||||||
|
@ -406,7 +423,8 @@ namespace SourceGit.ViewModels
|
||||||
});
|
});
|
||||||
|
|
||||||
container.Clear();
|
container.Clear();
|
||||||
foreach (var one in list) container.Add(one);
|
foreach (var one in list)
|
||||||
|
container.Add(one);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Repository FindRepository(string path)
|
public static Repository FindRepository(string path)
|
||||||
|
|
|
@ -231,7 +231,7 @@
|
||||||
<TextBlock Classes="tab_header" Text="{DynamicResource Text.Preference.Git}"/>
|
<TextBlock Classes="tab_header" Text="{DynamicResource Text.Preference.Git}"/>
|
||||||
</TabItem.Header>
|
</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"
|
<TextBlock Grid.Row="0" Grid.Column="0"
|
||||||
Text="{DynamicResource Text.Preference.Git.Path}"
|
Text="{DynamicResource Text.Preference.Git.Path}"
|
||||||
HorizontalAlignment="Right"
|
HorizontalAlignment="Right"
|
||||||
|
@ -351,6 +351,28 @@
|
||||||
<CheckBox Grid.Row="7" Grid.Column="1"
|
<CheckBox Grid.Row="7" Grid.Column="1"
|
||||||
Content="{DynamicResource Text.Preference.Git.AutoFetch}"
|
Content="{DynamicResource Text.Preference.Git.AutoFetch}"
|
||||||
IsChecked="{Binding GitAutoFetch, Mode=TwoWay}"/>
|
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>
|
</Grid>
|
||||||
</TabItem>
|
</TabItem>
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue