change validation to be submission callback based
This commit is contained in:
@@ -4,7 +4,6 @@ import (
|
||||
"context"
|
||||
"fmt"
|
||||
"log/slog"
|
||||
"time"
|
||||
|
||||
"github.com/LazyBachelor/LazyPM/internal/models"
|
||||
tea "github.com/charmbracelet/bubbletea"
|
||||
@@ -69,13 +68,19 @@ func (r *TaskRunner) Run(ctx context.Context, t Tasker, i Interface, iType Inter
|
||||
// Validation
|
||||
feedbackChan := make(chan ValidationFeedback, 10)
|
||||
quitChan := make(chan bool, 1)
|
||||
submitChan := make(chan struct{}, 1)
|
||||
|
||||
if validated, ok := i.(ValidatedInterface); ok {
|
||||
validated.SetChannels(feedbackChan, quitChan)
|
||||
validated.SetSubmitChan(submitChan)
|
||||
}
|
||||
|
||||
if r.app != nil {
|
||||
r.app.SubmitChan = submitChan
|
||||
}
|
||||
|
||||
engine := &ValidationEngine{task: t}
|
||||
doneChan, stopChan := engine.Start(ctx, func(feedback ValidationFeedback) {
|
||||
doneChan, stopChan := engine.Start(ctx, submitChan, func(feedback ValidationFeedback) {
|
||||
collector.recordValidation(feedback)
|
||||
|
||||
if feedback.Success {
|
||||
@@ -84,6 +89,10 @@ func (r *TaskRunner) Run(ctx context.Context, t Tasker, i Interface, iType Inter
|
||||
feedback.Message = "Task not completed!"
|
||||
}
|
||||
|
||||
if r.app != nil {
|
||||
r.app.CurrentFeedback = &feedback
|
||||
}
|
||||
|
||||
select {
|
||||
case feedbackChan <- feedback:
|
||||
default:
|
||||
@@ -195,30 +204,3 @@ func runQuestionnaire(t Tasker, iType InterfaceType, collector *taskRunCollector
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func startValidationLoop(ctx context.Context, t Tasker, feedbackChan chan ValidationFeedback, doneChan chan bool, quitChan chan bool) {
|
||||
ticker := time.NewTicker(1 * time.Second)
|
||||
defer ticker.Stop()
|
||||
|
||||
for {
|
||||
select {
|
||||
case <-ticker.C:
|
||||
feedback := t.Validate(ctx)
|
||||
if feedback.Success {
|
||||
if feedback.Message == "" {
|
||||
feedback.Message = "Task completed successfully! Going back to the survey menu..."
|
||||
}
|
||||
feedbackChan <- feedback
|
||||
time.Sleep(4 * time.Second)
|
||||
doneChan <- true
|
||||
return
|
||||
}
|
||||
feedback.Message = "Task not completed!"
|
||||
feedbackChan <- feedback
|
||||
case <-quitChan:
|
||||
return
|
||||
case <-ctx.Done():
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,17 +9,14 @@ type ValidationEngine struct {
|
||||
task Tasker
|
||||
}
|
||||
|
||||
func (v *ValidationEngine) Start(ctx context.Context, onFeedback func(ValidationFeedback)) (done <-chan struct{}, stop chan<- struct{}) {
|
||||
func (v *ValidationEngine) Start(ctx context.Context, submitChan <-chan struct{}, onFeedback func(ValidationFeedback)) (done <-chan struct{}, stop chan<- struct{}) {
|
||||
doneChan := make(chan struct{}, 1)
|
||||
stopChan := make(chan struct{}, 1)
|
||||
|
||||
go func() {
|
||||
ticker := time.NewTicker(time.Second)
|
||||
defer ticker.Stop()
|
||||
|
||||
for {
|
||||
select {
|
||||
case <-ticker.C:
|
||||
case <-submitChan:
|
||||
feedback := v.task.Validate(ctx)
|
||||
|
||||
if onFeedback != nil {
|
||||
|
||||
Reference in New Issue
Block a user