package worker import ( "context" "git.sr.ht/~gabrielgio/img/pkg/components/media" "git.sr.ht/~gabrielgio/img/pkg/coroutine" "git.sr.ht/~gabrielgio/img/pkg/fileop" ) type ( EXIFScanner struct { repository media.Repository } ) var _ BatchProcessor[*media.Media] = &EXIFScanner{} func NewEXIFScanner(repository media.Repository) *EXIFScanner { return &EXIFScanner{ repository: repository, } } func (e *EXIFScanner) Query(ctx context.Context) ([]*media.Media, error) { medias, err := e.repository.GetEmptyEXIF(ctx, &media.Pagination{ Page: 0, Size: 100, }) if err != nil { return nil, err } return medias, nil } func (e *EXIFScanner) Process(ctx context.Context, m *media.Media) error { exif, err := coroutine.WrapProcess(ctx, func() (*media.MediaEXIF, error) { return fileop.ReadExif(m.Path) }) if err != nil { return err } return e.repository.CreateEXIF(ctx, m.ID, exif) }