fix: notification system
This commit is contained in:
@@ -2,11 +2,13 @@ package processor
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"screenmark/screenmark/.gen/haystack/haystack/model"
|
||||
"screenmark/screenmark/agents"
|
||||
"screenmark/screenmark/agents/client"
|
||||
"screenmark/screenmark/limits"
|
||||
"screenmark/screenmark/models"
|
||||
"screenmark/screenmark/notifications"
|
||||
"sync"
|
||||
|
||||
"github.com/charmbracelet/log"
|
||||
@@ -24,6 +26,8 @@ type ImageProcessor struct {
|
||||
// TODO: add the notifier here
|
||||
|
||||
Processor *Processor[model.Image]
|
||||
|
||||
notifier *notifications.Notifier[notifications.Notification]
|
||||
}
|
||||
|
||||
func (p *ImageProcessor) setImageToProcess(ctx context.Context, image model.Image) {
|
||||
@@ -71,6 +75,19 @@ func (p *ImageProcessor) processImage(image model.Image) {
|
||||
var wg sync.WaitGroup
|
||||
wg.Add(2)
|
||||
|
||||
imageNotification := notifications.GetImageNotification(notifications.ImageNotification{
|
||||
Type: notifications.IMAGE_TYPE,
|
||||
ImageID: image.ID,
|
||||
ImageName: image.ImageName,
|
||||
Status: string(model.Progress_InProgress),
|
||||
})
|
||||
|
||||
err := p.notifier.SendAndCreate(image.UserID.String(), imageNotification)
|
||||
if err != nil {
|
||||
p.logger.Error("sending in progress notification", "err", err)
|
||||
return
|
||||
}
|
||||
|
||||
go func() {
|
||||
p.describe(ctx, image)
|
||||
wg.Done()
|
||||
@@ -82,9 +99,34 @@ func (p *ImageProcessor) processImage(image model.Image) {
|
||||
}()
|
||||
|
||||
wg.Wait()
|
||||
|
||||
// TODO: there is some repeated code here. The ergonomicts of the notifications,
|
||||
// isn't the best.
|
||||
imageNotification = notifications.GetImageNotification(notifications.ImageNotification{
|
||||
Type: notifications.IMAGE_TYPE,
|
||||
ImageID: image.ID,
|
||||
ImageName: image.ImageName,
|
||||
Status: string(model.Progress_Complete),
|
||||
})
|
||||
|
||||
err = p.notifier.SendAndCreate(image.UserID.String(), imageNotification)
|
||||
if err != nil {
|
||||
p.logger.Error("sending done notification", "err", err)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
func NewImageProcessor(logger *log.Logger, imageModel models.ImageModel, listModel models.StackModel, limitsManager limits.LimitsManagerMethods) ImageProcessor {
|
||||
func NewImageProcessor(
|
||||
logger *log.Logger,
|
||||
imageModel models.ImageModel,
|
||||
listModel models.StackModel,
|
||||
limitsManager limits.LimitsManagerMethods,
|
||||
notifier *notifications.Notifier[notifications.Notification],
|
||||
) (ImageProcessor, error) {
|
||||
if notifier == nil {
|
||||
return ImageProcessor{}, fmt.Errorf("notifier is nil")
|
||||
}
|
||||
|
||||
descriptionAgent := agents.NewDescriptionAgent(logger, imageModel)
|
||||
stackAgent := agents.NewListAgent(logger, listModel, limitsManager)
|
||||
|
||||
@@ -93,9 +135,11 @@ func NewImageProcessor(logger *log.Logger, imageModel models.ImageModel, listMod
|
||||
logger: logger,
|
||||
descriptionAgent: descriptionAgent,
|
||||
stackAgent: stackAgent,
|
||||
|
||||
notifier: notifier,
|
||||
}
|
||||
|
||||
imageProcessor.Processor = NewProcessor(int(IMAGE_PROCESS_AT_A_TIME), imageProcessor.processImage)
|
||||
|
||||
return imageProcessor
|
||||
return imageProcessor, nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user