Updated UI/App Settings

Changed interval check from a Numeric spin box, to a pre-defined option
selector.
Now have 1/2 minute, 1 Minute, 30 Minutes, 1 hour, 6 hours, 12 hours and
24 hour intervals.
This commit is contained in:
Mario Steele 2025-08-09 04:11:25 -05:00
parent 7dbb71d921
commit 4f93a21098
3 changed files with 35 additions and 2 deletions

View file

@ -125,6 +125,7 @@ public partial class App : Application
_settings.SyncSearchHistory = @new.SyncSearchHistory;
_settings.SyncSettings = @new.SyncSettings;
_settings.SettingsDirty = false;
_settings.UpdateInterval();
}
public void SaveSettings()
@ -146,11 +147,13 @@ public partial class App : Application
if (!File.Exists(path))
{
_settings = new AppSettings();
_settings.UpdateInterval();
return;
}
var data = File.ReadAllText(path);
_settings = JsonSerializer.Deserialize<AppSettings>(data);
_settings!.UpdateInterval();
}
private string GetAppFolder() => Path.Join(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "FreeTubeSyncer");

View file

@ -24,7 +24,13 @@
<TextBlock Grid.Row="0" Grid.Column="0" VerticalAlignment="Center" HorizontalAlignment="Right" Text="REST API Backend Server: " FontWeight="Bold"/>
<TextBox Grid.Row="0" Grid.Column="1" Watermark="http://localhost:8080" Text="{Binding RestBaseUrl, Mode=TwoWay}"/>
<TextBlock Grid.Row="1" Grid.Column="0" VerticalAlignment="Center" HorizontalAlignment="Right" Text="Refresh Interval: " FontWeight="Bold"/>
<NumericUpDown Grid.Row="1" Grid.Column="1" Watermark="30" suki:NumericUpDownExtensions.Unit="seconds" FormatString="N0" Value="{Binding CheckInterval, Mode=TwoWay}"/>
<ComboBox Grid.Row="1" Grid.Column="1" SelectedValue="{Binding SelectedOption}" ItemsSource="{Binding CheckIntervalOptions}">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Label}"/>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
</Grid>
<Grid
ColumnDefinitions="170,*"

View file

@ -1,5 +1,7 @@
using System.Collections.Generic;
using System.Text.Json.Serialization;
using CommunityToolkit.Mvvm.ComponentModel;
using DynamicData;
namespace FreeTubeSyncer.Models;
@ -13,6 +15,16 @@ public partial class AppSettings : ObservableObject
[ObservableProperty] [property: JsonInclude] private bool _syncSearchHistory = true;
[ObservableProperty] [property: JsonInclude] private bool _syncSettings = true;
[ObservableProperty] [property: JsonIgnore] private bool _settingsDirty = false;
[ObservableProperty] [property: JsonIgnore] private CheckIntervalOption? _selectedOption = null;
[ObservableProperty] [property: JsonIgnore] private List<CheckIntervalOption> _checkIntervalOptions = [
new CheckIntervalOption("1/2 Minute", 30),
new CheckIntervalOption("1 Minute", 60),
new CheckIntervalOption("30 Minutes", 1800),
new CheckIntervalOption("1 Hour", 3600),
new CheckIntervalOption("6 Hours", 21600),
new CheckIntervalOption("12 Hours", 43200),
new CheckIntervalOption("24 Hours", 86400),
];
public AppSettings()
{
@ -21,7 +33,19 @@ public partial class AppSettings : ObservableObject
if (args.PropertyName == nameof(SettingsDirty))
return;
if (args.PropertyName == nameof(SelectedOption))
_checkInterval = SelectedOption?.Interval ?? 30;
SettingsDirty = true;
};
}
}
public void UpdateInterval()
{
int[] intervals = [30, 60, 1800, 3600, 21600, 43200, 86400];
var i = intervals.IndexOf(CheckInterval);
SelectedOption = CheckIntervalOptions[i];
}
}
public record CheckIntervalOption(string Label, int Interval);