diff --git a/DesktopClock.Tests/DateTimeTests.cs b/DesktopClock.Tests/DateTimeTests.cs index 16862d7..bb5cc87 100644 --- a/DesktopClock.Tests/DateTimeTests.cs +++ b/DesktopClock.Tests/DateTimeTests.cs @@ -4,39 +4,6 @@ namespace DesktopClock.Tests; public class DateTimeTests { - [Fact] - public void TimeZones_ShouldContainSystemTimeZones() - { - // Act - var timeZones = DateTimeUtil.TimeZones; - - // Assert - Assert.NotEmpty(timeZones); - Assert.Contains(timeZones, tz => tz.Id == "UTC"); - } - - [Theory] - [InlineData("UTC", true)] - [InlineData("Pacific Standard Time", true)] - [InlineData("NonExistentTimeZone", false)] - public void TryFindSystemTimeZoneById_ShouldReturnExpectedResult(string timeZoneId, bool expectedResult) - { - // Act - var result = DateTimeUtil.TryFindSystemTimeZoneById(timeZoneId, out var timeZoneInfo); - - // Assert - Assert.Equal(expectedResult, result); - if (expectedResult) - { - Assert.NotNull(timeZoneInfo); - Assert.Equal(timeZoneId, timeZoneInfo.Id); - } - else - { - Assert.Null(timeZoneInfo); - } - } - [Theory] [InlineData("2024-07-15T00:00:00Z", "00:00:00")] [InlineData("2024-07-15T00:00:00Z", "01:00:00")] diff --git a/DesktopClock/DateFormatExample.cs b/DesktopClock/DateFormatExample.cs index 45ec038..d6b9416 100644 --- a/DesktopClock/DateFormatExample.cs +++ b/DesktopClock/DateFormatExample.cs @@ -2,9 +2,6 @@ using System.Collections.Generic; using System.Globalization; using System.Linq; -using System.Windows.Data; -using System.Windows.Markup; -using DesktopClock.Properties; namespace DesktopClock; diff --git a/DesktopClock/DateTimeUtil.cs b/DesktopClock/DateTimeUtil.cs index 49724b0..38d45a0 100644 --- a/DesktopClock/DateTimeUtil.cs +++ b/DesktopClock/DateTimeUtil.cs @@ -1,29 +1,9 @@ using System; -using System.Collections.Generic; namespace DesktopClock; public static class DateTimeUtil { - /// - /// A cached collection of all the time zones about which information is available on the local system. - /// - public static IReadOnlyCollection TimeZones { get; } = TimeZoneInfo.GetSystemTimeZones(); - - public static bool TryFindSystemTimeZoneById(string timeZoneId, out TimeZoneInfo timeZoneInfo) - { - try - { - timeZoneInfo = TimeZoneInfo.FindSystemTimeZoneById(timeZoneId); - return true; - } - catch (TimeZoneNotFoundException) - { - timeZoneInfo = null; - return false; - } - } - /// /// Converts a DateTime to a DateTimeOffset, without risking any onerous exceptions /// the framework quite unfortunately throws within the DateTimeOffset constructor, @@ -45,4 +25,4 @@ public static DateTimeOffset ToDateTimeOffset(this DateTime dt, TimeSpan offset) return new DateTimeOffset(dt.Ticks, offset); } -} \ No newline at end of file +} diff --git a/DesktopClock/Properties/Settings.cs b/DesktopClock/Properties/Settings.cs index 8ae0248..0b4f5e4 100644 --- a/DesktopClock/Properties/Settings.cs +++ b/DesktopClock/Properties/Settings.cs @@ -328,8 +328,18 @@ public void ScaleHeight(double steps) /// /// Gets the time zone selected in settings, or local by default. /// - public TimeZoneInfo GetTimeZoneInfo() => - DateTimeUtil.TryFindSystemTimeZoneById(TimeZone, out var timeZoneInfo) ? timeZoneInfo : TimeZoneInfo.Local; + public TimeZoneInfo GetTimeZoneInfo() + { + + try + { + return TimeZoneInfo.FindSystemTimeZoneById(TimeZone); + } + catch (TimeZoneNotFoundException) + { + return TimeZoneInfo.Local; + } + } public void Dispose() { diff --git a/DesktopClock/SettingsWindow.xaml b/DesktopClock/SettingsWindow.xaml index afb662a..5eae2e6 100644 --- a/DesktopClock/SettingsWindow.xaml +++ b/DesktopClock/SettingsWindow.xaml @@ -26,7 +26,7 @@ + SelectionChanged="SelectFormat" /> (SettingsWindowViewModel)DataContext; + + private void SelectFormat(object sender, SelectionChangedEventArgs e) { - var formatExample = e.AddedItems[0] as DateFormatExample; + var value = e.AddedItems[0] as DateFormatExample; - if (formatExample == null) + if (value == null) + { return; + } - ((SettingsWindowViewModel)DataContext).Settings.Format = formatExample.Format; + ViewModel.Settings.Format = value.Format; } private void BrowseBackgroundImagePath(object sender, RoutedEventArgs e) @@ -42,7 +45,7 @@ private void BrowseBackgroundImagePath(object sender, RoutedEventArgs e) return; } - ((SettingsWindowViewModel)DataContext).Settings.BackgroundImagePath = openFileDialog.FileName; + ViewModel.Settings.BackgroundImagePath = openFileDialog.FileName; } private void BrowseWavFilePath(object sender, RoutedEventArgs e) @@ -57,7 +60,7 @@ private void BrowseWavFilePath(object sender, RoutedEventArgs e) return; } - ((SettingsWindowViewModel)DataContext).Settings.WavFilePath = openFileDialog.FileName; + ViewModel.Settings.WavFilePath = openFileDialog.FileName; } } @@ -72,14 +75,24 @@ public SettingsWindowViewModel(Settings settings) TimeZones = TimeZoneInfo.GetSystemTimeZones().Select(tz => tz.Id).ToList(); } + /// + /// All available font families reported by the system. + /// public IList FontFamilies { get; } + + /// + /// All available time zones reported by the system. + /// public IList TimeZones { get; } /// - /// Sets the format string in settings to the given string. + /// Sets the format string in settings. /// [RelayCommand] - public void SetFormat(DateFormatExample formatExample) => Settings.Default.Format = formatExample.Format; + public void SetFormat(DateFormatExample value) + { + Settings.Default.Format = value.Format; + } /// /// Disables countdown mode by resetting the value to default.