scanfile/server/internal/processing/processing.go

48 lines
1.3 KiB
Go

package processing
import (
"context"
"log/slog"
"sync"
"time"
"git.jmbit.de/jmb/scanfile/server/internal/database"
"git.jmbit.de/jmb/scanfile/server/internal/processing/basic"
"git.jmbit.de/jmb/scanfile/server/internal/processing/msoffice"
"github.com/jackc/pgx/v5/pgtype"
)
// Used to determine if a task was started by a previous instance that stalled out or died
var startup time.Time
func Setup(wg *sync.WaitGroup) {
startup = time.Now()
}
// Submit() starts the analysis process for a file.
func Submit(ctx context.Context, file pgtype.UUID) error {
// Always start a basic task
job, err := database.NewProcessingJob(ctx, file, TypeBasic)
if err != nil {
slog.Error("Could not submit processing job", "error", err, "file-uuid", file, "type", TypeBasic)
return err
}
go basic.BasicProcessing(job)
mimeType, err := database.GetFileMime(file)
if err != nil {
slog.Error("Could not retrieve MimeType", "error", err, "file-uuid", file)
return err
}
switch TypeFromMime(mimeType) {
case TypeMSOffice:
officeJob, err := database.NewProcessingJob(ctx, file, TypeMSOffice)
if err != nil {
slog.Error("Could not submit processing job", "error", err, "file-uuid", file, "type", TypeMSOffice)
return err
}
go msoffice.MSOfficeProcessing(officeJob)
}
return nil
}