diff --git a/src/ClaudeDo.Ui/Services/PrimeScheduleDto.cs b/src/ClaudeDo.Ui/Services/PrimeScheduleDto.cs new file mode 100644 index 0000000..bfb1120 --- /dev/null +++ b/src/ClaudeDo.Ui/Services/PrimeScheduleDto.cs @@ -0,0 +1,17 @@ +namespace ClaudeDo.Ui.Services; + +public sealed record PrimeScheduleDto( + Guid Id, + DateOnly StartDate, + DateOnly EndDate, + TimeSpan TimeOfDay, + bool WorkdaysOnly, + bool Enabled, + DateTimeOffset? LastRunAt, + string? PromptOverride); + +public sealed record PrimeFiredEvent( + Guid ScheduleId, + bool Success, + string Message, + DateTimeOffset FiredAt); diff --git a/src/ClaudeDo.Ui/Services/WorkerClient.cs b/src/ClaudeDo.Ui/Services/WorkerClient.cs index 06b550f..79e3698 100644 --- a/src/ClaudeDo.Ui/Services/WorkerClient.cs +++ b/src/ClaudeDo.Ui/Services/WorkerClient.cs @@ -55,6 +55,8 @@ public partial class WorkerClient : ObservableObject, IAsyncDisposable, IWorkerC public event Action? PlanningMergeAbortedEvent; public event Action? PlanningCompletedEvent; + public event Action? PrimeFired; + public string? LastMergeAllTarget { get; private set; } public WorkerClient(string signalRUrl) @@ -156,6 +158,11 @@ public partial class WorkerClient : ObservableObject, IAsyncDisposable, IWorkerC { Dispatcher.UIThread.Post(() => PlanningCompletedEvent?.Invoke(planningTaskId)); }); + + _hub.On("PrimeFired", (id, ok, msg, when) => + { + Dispatcher.UIThread.Post(() => PrimeFired?.Invoke(new PrimeFiredEvent(id, ok, msg, when))); + }); } public Task StartAsync() @@ -329,6 +336,24 @@ public partial class WorkerClient : ObservableObject, IAsyncDisposable, IWorkerC await _hub.InvokeAsync("UpdateAppSettings", dto); } + public async Task> GetPrimeSchedulesAsync() + { + try { return await _hub.InvokeAsync>("ListPrimeSchedules"); } + catch { return new List(); } + } + + public async Task UpsertPrimeScheduleAsync(PrimeScheduleDto dto) + { + try { return await _hub.InvokeAsync("UpsertPrimeSchedule", dto); } + catch { return null; } + } + + public async Task DeletePrimeScheduleAsync(Guid id) + { + try { await _hub.InvokeAsync("DeletePrimeSchedule", id); } + catch { /* offline */ } + } + public async Task UpdateListAsync(UpdateListDto dto) { await _hub.InvokeAsync("UpdateList", dto);