Skip to content

Commit

Permalink
update check frequency setting refactor
Browse files Browse the repository at this point in the history
  • Loading branch information
Ace-Radom committed Oct 3, 2024
1 parent d359b79 commit d3a8b27
Show file tree
Hide file tree
Showing 11 changed files with 170 additions and 194 deletions.
30 changes: 23 additions & 7 deletions LenovoLegionToolkit.Lib/Enums.cs
Original file line number Diff line number Diff line change
Expand Up @@ -610,6 +610,29 @@ public enum TouchpadLockState
On
}

public enum UpdateCheckFrequency
{
[Display(ResourceType = typeof(Resource), Name = "UpdateCheckFrequency_PerHour")]
PerHour,
[Display(ResourceType = typeof(Resource), Name = "UpdateCheckFrequency_PerThreeHours")]
PerThreeHours,
[Display(ResourceType = typeof(Resource), Name = "UpdateCheckFrequency_PerTwelveHours")]
PerTwelveHours,
[Display(ResourceType = typeof(Resource), Name = "UpdateCheckFrequency_PerDay")]
PerDay,
[Display(ResourceType = typeof(Resource), Name = "UpdateCheckFrequency_PerWeek")]
PerWeek,
[Display(ResourceType = typeof(Resource), Name = "UpdateCheckFrequency_PerMonth")]
PerMonth
}

public enum UpdateCheckStatus
{
Success,
RateLimitReached,
Error
}

public enum WhiteKeyboardBacklightState
{
[Display(ResourceType = typeof(Resource), Name = "WhiteKeyboardBacklightState_Off")]
Expand Down Expand Up @@ -639,10 +662,3 @@ public enum WinKeyState
}

public enum WinKeyChanged;

public enum UpdateCheckStatus
{
Success,
RateLimitReached,
Error
}
1 change: 1 addition & 0 deletions LenovoLegionToolkit.Lib/IoCModule.cs
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ protected override void Load(ContainerBuilder builder)
builder.Register<RGBKeyboardSettings>();
builder.Register<SpectrumKeyboardSettings>();
builder.Register<SunriseSunsetSettings>();
builder.Register<UpdateCheckSettings>();

builder.Register<AlwaysOnUSBFeature>();
builder.Register<BatteryFeature>();
Expand Down
54 changes: 54 additions & 0 deletions LenovoLegionToolkit.Lib/Resources/Resource.Designer.cs

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

26 changes: 22 additions & 4 deletions LenovoLegionToolkit.Lib/Resources/Resource.resx
Original file line number Diff line number Diff line change
Expand Up @@ -467,15 +467,33 @@
<value>Unmute</value>
</data>
<data name="PowerModeMappingMode_Disabled" xml:space="preserve">
<value>Disabled</value>
<value>Disabled</value>
</data>
<data name="PowerModeMappingMode_WindowsPowerMode" xml:space="preserve">
<value>Windows Power Mode</value>
<value>Windows Power Mode</value>
</data>
<data name="PowerModeMappingMode_WindowsPowerPlan" xml:space="preserve">
<value>Windows Power Plan</value>
<value>Windows Power Plan</value>
</data>
<data name="RGBKeyboardBacklightPreset_Four" xml:space="preserve">
<value>Preset 4</value>
<value>Preset 4</value>
</data>
<data name="UpdateCheckFrequency_PerDay" xml:space="preserve">
<value>Once per day</value>
</data>
<data name="UpdateCheckFrequency_PerHour" xml:space="preserve">
<value>Once per hour</value>
</data>
<data name="UpdateCheckFrequency_PerMonth" xml:space="preserve">
<value>Once per month</value>
</data>
<data name="UpdateCheckFrequency_PerThreeHours" xml:space="preserve">
<value>Once per 3 hours</value>
</data>
<data name="UpdateCheckFrequency_PerTwelveHours" xml:space="preserve">
<value>Once per 12 hours</value>
</data>
<data name="UpdateCheckFrequency_PerWeek" xml:space="preserve">
<value>Once per week</value>
</data>
</root>
3 changes: 0 additions & 3 deletions LenovoLegionToolkit.Lib/Settings/ApplicationSettings.cs
Original file line number Diff line number Diff line change
Expand Up @@ -47,9 +47,6 @@ public class ApplicationSettingsStore
public bool SynchronizeBrightnessToAllPowerPlans { get; set; }
public ModifierKey SmartFnLockFlags { get; set; }
public bool ResetBatteryOnSinceTimerOnReboot { get; set; }
public int UpdateCheckMiniumTimeSpanHours { get; set; }
public int UpdateCheckMiniumTimeSpanMinutes { get; set; }
public int UpdateCheckMiniumTimeSpanSeconds { get; set; }
}

public ApplicationSettings() : base("settings.json")
Expand Down
23 changes: 23 additions & 0 deletions LenovoLegionToolkit.Lib/Settings/UpdateCheckSettings.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace LenovoLegionToolkit.Lib.Settings;

public class UpdateCheckSettings()
: AbstractSettings<UpdateCheckSettings.UpdateCheckSettingsStore>("update_check.json")
{
public class UpdateCheckSettingsStore
{
public DateTime? LastUpdateCheckDateTime { get; set; }
public UpdateCheckFrequency UpdateCheckFrequency { get; set; }
}

protected override UpdateCheckSettingsStore Default => new()
{
LastUpdateCheckDateTime = null,
UpdateCheckFrequency = UpdateCheckFrequency.PerThreeHours
};
}
54 changes: 15 additions & 39 deletions LenovoLegionToolkit.Lib/Utils/UpdateChecker.cs
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,10 @@ namespace LenovoLegionToolkit.Lib.Utils;
public class UpdateChecker
{
private readonly HttpClientFactory _httpClientFactory;
private readonly ApplicationSettings _settings = IoCContainer.Resolve<ApplicationSettings>();
private readonly UpdateCheckSettings _updateCheckSettings = IoCContainer.Resolve<UpdateCheckSettings>();
private readonly AsyncLock _updateSemaphore = new();

private DateTime _lastUpdate = DateTime.MinValue;
private DateTime _lastUpdate;
private TimeSpan _minimumTimeSpanForRefresh;
private Update[] _updates = [];

Expand All @@ -29,11 +29,8 @@ public UpdateChecker(HttpClientFactory httpClientFactory)
{
_httpClientFactory = httpClientFactory;

CheckUpdateCheckMiniumTimeSpanSettings();

_minimumTimeSpanForRefresh = new(_settings.Store.UpdateCheckMiniumTimeSpanHours,
_settings.Store.UpdateCheckMiniumTimeSpanMinutes,
_settings.Store.UpdateCheckMiniumTimeSpanSeconds);
UpdateMiniumTimeSpanForRefresh();
_lastUpdate = _updateCheckSettings.Store.LastUpdateCheckDateTime ?? DateTime.MinValue;
}

public async Task<Version?> CheckAsync(bool forceCheck)
Expand Down Expand Up @@ -103,6 +100,8 @@ public UpdateChecker(HttpClientFactory httpClientFactory)
finally
{
_lastUpdate = DateTime.UtcNow;
_updateCheckSettings.Store.LastUpdateCheckDateTime = _lastUpdate;
_updateCheckSettings.SynchronizeStore();
}
}
}
Expand Down Expand Up @@ -134,37 +133,14 @@ public async Task<string> DownloadLatestUpdateAsync(IProgress<float>? progress =
}
}

public void SetMinimumTimeSpanForRefresh(int hours, int minutes, int seconds) => _minimumTimeSpanForRefresh = new(hours, minutes, seconds);

private void CheckUpdateCheckMiniumTimeSpanSettings()
public void UpdateMiniumTimeSpanForRefresh() => _minimumTimeSpanForRefresh = _updateCheckSettings.Store.UpdateCheckFrequency switch
{
bool changed = false;
if (_settings.Store.UpdateCheckMiniumTimeSpanHours < 3)
{
_settings.Store.UpdateCheckMiniumTimeSpanHours = 3;
changed = true;
}
if (_settings.Store.UpdateCheckMiniumTimeSpanMinutes < 0)
{
_settings.Store.UpdateCheckMiniumTimeSpanMinutes = 0;
changed = true;
}
if (_settings.Store.UpdateCheckMiniumTimeSpanMinutes > 59)
{
_settings.Store.UpdateCheckMiniumTimeSpanMinutes = 59;
changed = true;
}
if (_settings.Store.UpdateCheckMiniumTimeSpanSeconds < 0)
{
_settings.Store.UpdateCheckMiniumTimeSpanSeconds = 0;
changed = true;
}
if (_settings.Store.UpdateCheckMiniumTimeSpanSeconds > 59)
{
_settings.Store.UpdateCheckMiniumTimeSpanSeconds = 59;
changed = true;
}
if (changed)
_settings.SynchronizeStore();
}
UpdateCheckFrequency.PerHour => new(hours: 1, minutes: 0, seconds: 0),
UpdateCheckFrequency.PerThreeHours => new(hours: 3, minutes: 0, seconds: 0),
UpdateCheckFrequency.PerTwelveHours => new(hours: 2, minutes: 0, seconds: 0),
UpdateCheckFrequency.PerDay => new(days: 1, hours: 0, minutes: 0, seconds: 0),
UpdateCheckFrequency.PerWeek => new(days: 7, hours: 0, minutes: 0, seconds: 0),
UpdateCheckFrequency.PerMonth => new(days: 30, hours: 0, minutes: 0, seconds: 0),
_ => throw new ArgumentException(nameof(_updateCheckSettings.Store.UpdateCheckFrequency))
};
}
67 changes: 10 additions & 57 deletions LenovoLegionToolkit.WPF/Pages/SettingsPage.xaml
Original file line number Diff line number Diff line change
Expand Up @@ -248,65 +248,18 @@
Visibility="Hidden" />
</custom:CardControl>

<custom:CardControl x:Name="_updateCheckMiniumTimeSpanCard" Margin="0,0,0,8">
<custom:CardControl x:Name="_updateCheckFrequencyCard" Margin="0,0,0,8">
<custom:CardControl.Header>
<controls:CardHeaderControl Title="{x:Static resources:Resource.SettingsPage_UpdateCheckMiniumTimeSpan_Title}" Subtitle="{x:Static resources:Resource.SettingsPage_UpdateCheckMiniumTimeSpan_Message}" />
<controls:CardHeaderControl Title="{x:Static resources:Resource.SettingsPage_UpdateCheckFrequency_Title}" Subtitle="{x:Static resources:Resource.SettingsPage_UpdateCheckFrequency_Message}" />
</custom:CardControl.Header>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<TextBlock
Grid.Column="0"
Margin="0,0,0,8"
VerticalAlignment="Center"
Text="{x:Static resources:Resource.SettingsPage_UpdateCheckMiniumTimeSpan_Picker_Hours}" />
<wpfui:NumberBox
Grid.Column="1"
x:Name="_updateCheckMiniumTimeSpanPickerHours"
Margin="8,0,0,8"
ClearButtonEnabled="False"
MaxDecimalPlaces="0"
Maximum="1440"
Minimum="3"
ValueChanged="UpdateCheckMiniumTimeSpanPickerHours_ValueChanged"
Visibility="Hidden" />
<TextBlock
Grid.Column="2"
Margin="8,0,0,8"
VerticalAlignment="Center"
Text="{x:Static resources:Resource.SettingsPage_UpdateCheckMiniumTimeSpan_Picker_Minutes}" />
<wpfui:NumberBox
Grid.Column="3"
x:Name="_updateCheckMiniumTimeSpanPickerMinutes"
Margin="8,0,0,8"
ClearButtonEnabled="False"
MaxDecimalPlaces="0"
Maximum="59"
Minimum="0"
ValueChanged="UpdateCheckMiniumTimeSpanPickerMinutes_ValueChanged"
Visibility="Hidden" />
<TextBlock
Grid.Column="4"
Margin="8,0,0,8"
VerticalAlignment="Center"
Text="{x:Static resources:Resource.SettingsPage_UpdateCheckMiniumTimeSpan_Picker_Seconds}" />
<wpfui:NumberBox
Grid.Column="5"
x:Name="_updateCheckMiniumTimeSpanPickerSeconds"
Margin="8,0,0,8"
ClearButtonEnabled="False"
MaxDecimalPlaces="0"
Maximum="59"
Minimum="0"
ValueChanged="UpdateCheckMiniumTimeSpanPickerSeconds_ValueChanged"
Visibility="Hidden" />
</Grid>
<ComboBox
x:Name="_updateCheckFrequencyComboBox"
MinWidth="160"
Margin="0,0,0,8"
AutomationProperties.Name="{x:Static resources:Resource.SettingsPage_UpdateCheckFrequency_Title}"
MaxDropDownHeight="Auto"
SelectionChanged="UpdateCheckFrequencyComboBox_SelectionChanged"
Visibility="Hidden" />
</custom:CardControl>

<TextBlock
Expand Down
Loading

0 comments on commit d3a8b27

Please sign in to comment.