63 lines
1.5 KiB
Go
63 lines
1.5 KiB
Go
package processing_tasks
|
|
|
|
import (
|
|
"fmt"
|
|
"io/fs"
|
|
|
|
"github.com/photoview/photoview/api/scanner/media_encoding"
|
|
"github.com/photoview/photoview/api/scanner/media_type"
|
|
"github.com/photoview/photoview/api/scanner/scanner_task"
|
|
"github.com/photoview/photoview/api/utils"
|
|
)
|
|
|
|
type CounterpartFilesTask struct {
|
|
scanner_task.ScannerTaskBase
|
|
}
|
|
|
|
func (t CounterpartFilesTask) MediaFound(ctx scanner_task.TaskContext, fileInfo fs.FileInfo, mediaPath string) (skip bool, err error) {
|
|
fileType := media_type.GetMediaType(mediaPath)
|
|
|
|
if !fileType.IsSupported() {
|
|
return true, nil
|
|
}
|
|
|
|
if utils.EnvDisableRawProcessing.GetBool() {
|
|
if !fileType.IsWebCompatible() {
|
|
return true, nil
|
|
}
|
|
|
|
// Don't skip the JPEGs if raw processing is disabled. Treat them as standalone files.
|
|
return false, nil
|
|
}
|
|
|
|
if fileType.IsWebCompatible() {
|
|
_, existed := media_type.FindRawCounterpart(mediaPath)
|
|
if existed {
|
|
return true, nil
|
|
}
|
|
}
|
|
|
|
return false, nil
|
|
}
|
|
|
|
func (t CounterpartFilesTask) BeforeProcessMedia(ctx scanner_task.TaskContext, mediaData *media_encoding.EncodeMediaData) (scanner_task.TaskContext, error) {
|
|
|
|
mediaType := ctx.GetCache().GetMediaType(mediaData.Media.Path)
|
|
if mediaType == media_type.TypeUnknown {
|
|
return ctx, fmt.Errorf("scan for counterpart file %s failed: media type is %s", mediaData.Media.Path, mediaType)
|
|
}
|
|
|
|
if mediaType.IsWebCompatible() {
|
|
return ctx, nil
|
|
}
|
|
|
|
counterpartFile, ok := media_type.FindWebCounterpart(mediaData.Media.Path)
|
|
if !ok {
|
|
return ctx, nil
|
|
}
|
|
|
|
mediaData.CounterpartPath = &counterpartFile
|
|
|
|
return ctx, nil
|
|
}
|