Docker/Voltaserve/conversion/pipeline/office_pipeline.go
2024-04-17 20:22:30 +02:00

87 lines
2.0 KiB
Go

package pipeline
import (
"os"
"path/filepath"
"voltaserve/client"
"voltaserve/config"
"voltaserve/core"
"voltaserve/helper"
"voltaserve/infra"
"voltaserve/processor"
)
type officePipeline struct {
pdfPipeline core.Pipeline
officeProc *processor.OfficeProcessor
pdfProc *processor.PDFProcessor
s3 *infra.S3Manager
config config.Config
apiClient *client.APIClient
}
func NewOfficePipeline() core.Pipeline {
return &officePipeline{
pdfPipeline: NewPDFPipeline(),
officeProc: processor.NewOfficeProcessor(),
pdfProc: processor.NewPDFProcessor(),
s3: infra.NewS3Manager(),
config: config.GetConfig(),
apiClient: client.NewAPIClient(),
}
}
func (p *officePipeline) Run(opts core.PipelineRunOptions) error {
inputPath := filepath.FromSlash(os.TempDir() + "/" + helper.NewID() + filepath.Ext(opts.Key))
if err := p.s3.GetFile(opts.Key, inputPath, opts.Bucket); err != nil {
return err
}
outputPath, err := p.officeProc.PDF(inputPath)
if err != nil {
return err
}
stat, err := os.Stat(outputPath)
if err != nil {
return err
}
thumbnail, err := p.pdfProc.Base64Thumbnail(outputPath)
if err != nil {
return err
}
if err := p.apiClient.UpdateSnapshot(core.SnapshotUpdateOptions{
Options: opts,
Thumbnail: &thumbnail,
}); err != nil {
return err
}
previewKey := opts.FileID + "/" + opts.SnapshotID + "/preview.pdf"
if err := p.s3.PutFile(previewKey, outputPath, helper.DetectMimeFromFile(outputPath), opts.Bucket); err != nil {
return err
}
if err := p.apiClient.UpdateSnapshot(core.SnapshotUpdateOptions{
Options: opts,
Preview: &core.S3Object{
Bucket: opts.Bucket,
Key: previewKey,
Size: stat.Size(),
},
}); err != nil {
return err
}
if err := p.pdfPipeline.Run(core.PipelineRunOptions{
Bucket: opts.Bucket,
Key: previewKey,
FileID: opts.FileID,
SnapshotID: opts.SnapshotID,
}); err != nil {
return err
}
if err := os.Remove(inputPath); err != nil {
return err
}
if err := os.Remove(outputPath); err != nil {
return err
}
return nil
}