refactor(securestoremanager): add platform service abstractions and constants

Implement deferred code review findings:
- Add IDialogService/IClipboardService interfaces for testable platform operations
- Create AvaloniaDialogService and AvaloniaClipboardService implementations
- Extract dialog strings and file extensions to centralized Constants classes
- Refactor ViewModels to use DI instead of event delegates
- Update tests to use mock services
This commit is contained in:
Joseph Doherty
2026-01-19 16:54:35 -05:00
parent 1c546c111a
commit fbe58a81e4
33 changed files with 1790 additions and 298 deletions
@@ -86,7 +86,7 @@ public class ScheduleChecker : IScheduleChecker
_logger.LogDebug(
"Mass sync needed for {Table}: last={LastSync}, interval={Interval}m",
config.TableName,
lastMass?.EndDt.ToString("o") ?? "never",
lastMass?.EndDt?.ToString("o") ?? "never",
config.MassConfig.IntervalMinutes);
return CreateTask(config, UpdateTypes.Mass, null);
@@ -100,7 +100,7 @@ public class ScheduleChecker : IScheduleChecker
_logger.LogDebug(
"Daily sync needed for {Table}: last={LastSync}, interval={Interval}m, minDT={MinDT}",
config.TableName,
lastDaily?.EndDt.ToString("o") ?? "never",
lastDaily?.EndDt?.ToString("o") ?? "never",
config.DailyConfig.IntervalMinutes,
minimumDt?.ToString("o") ?? "null");
@@ -115,7 +115,7 @@ public class ScheduleChecker : IScheduleChecker
_logger.LogDebug(
"Hourly sync needed for {Table}: last={LastSync}, interval={Interval}m, minDT={MinDT}",
config.TableName,
lastHourly?.EndDt.ToString("o") ?? "never",
lastHourly?.EndDt?.ToString("o") ?? "never",
config.HourlyConfig.IntervalMinutes,
minimumDt?.ToString("o") ?? "null");
@@ -143,7 +143,8 @@ public class ScheduleChecker : IScheduleChecker
return true;
}
var nextSyncDue = lastMass.EndDt.AddMinutes(config.MassConfig.IntervalMinutes);
// EndDt is set for successful syncs (GetLastDataUpdatesAsync filters WasSuccessful=1)
var nextSyncDue = lastMass.EndDt!.Value.AddMinutes(config.MassConfig.IntervalMinutes);
return now > nextSyncDue;
}
@@ -170,7 +171,8 @@ public class ScheduleChecker : IScheduleChecker
return true;
}
var nextSyncDue = lastDaily.EndDt.AddMinutes(config.DailyConfig.IntervalMinutes);
// EndDt is set for successful syncs (GetLastDataUpdatesAsync filters WasSuccessful=1)
var nextSyncDue = lastDaily.EndDt!.Value.AddMinutes(config.DailyConfig.IntervalMinutes);
return now > nextSyncDue;
}
@@ -202,7 +204,8 @@ public class ScheduleChecker : IScheduleChecker
return true;
}
var nextSyncDue = lastHourly.EndDt.AddMinutes(config.HourlyConfig.IntervalMinutes);
// EndDt is set for successful syncs (GetLastDataUpdatesAsync filters WasSuccessful=1)
var nextSyncDue = lastHourly.EndDt!.Value.AddMinutes(config.HourlyConfig.IntervalMinutes);
return now > nextSyncDue;
}
@@ -217,7 +220,8 @@ public class ScheduleChecker : IScheduleChecker
}
var lookbackMinutes = _options.Value.LookbackMultiplier * intervalMinutes;
return lastUpdate.EndDt.AddMinutes(-lookbackMinutes);
// EndDt is set for successful syncs (GetLastDataUpdatesAsync filters WasSuccessful=1)
return lastUpdate.EndDt!.Value.AddMinutes(-lookbackMinutes);
}
/// <summary>