mirror of
https://git.vectorsigma.ru/public/photoview.git
synced 2026-08-03 21:59:12 +00:00
88 lines
2.0 KiB
Go
88 lines
2.0 KiB
Go
package processing_tasks
|
|
|
|
import (
|
|
"io/fs"
|
|
"path"
|
|
"path/filepath"
|
|
"strings"
|
|
|
|
"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/scanner/scanner_utils"
|
|
"github.com/pkg/errors"
|
|
)
|
|
|
|
type CounterpartFilesTask struct {
|
|
scanner_task.ScannerTaskBase
|
|
}
|
|
|
|
func (t CounterpartFilesTask) MediaFound(ctx scanner_task.TaskContext, fileInfo fs.FileInfo, mediaPath string) (skip bool, err error) {
|
|
|
|
// Skip the JPEGs that are compressed version of raw files
|
|
counterpartFile := scanForRawCounterpartFile(mediaPath)
|
|
if counterpartFile != nil {
|
|
return true, nil
|
|
}
|
|
|
|
return false, nil
|
|
}
|
|
|
|
func (t CounterpartFilesTask) BeforeProcessMedia(ctx scanner_task.TaskContext, mediaData *media_encoding.EncodeMediaData) (scanner_task.TaskContext, error) {
|
|
|
|
mediaType, err := ctx.GetCache().GetMediaType(mediaData.Media.Path)
|
|
if err != nil {
|
|
return ctx, errors.Wrap(err, "scan for counterpart file")
|
|
}
|
|
|
|
if !mediaType.IsRaw() {
|
|
return ctx, nil
|
|
}
|
|
|
|
counterpartFile := scanForCompressedCounterpartFile(mediaData.Media.Path)
|
|
if counterpartFile != nil {
|
|
mediaData.CounterpartPath = counterpartFile
|
|
}
|
|
|
|
return ctx, nil
|
|
}
|
|
|
|
func scanForCompressedCounterpartFile(imagePath string) *string {
|
|
ext := filepath.Ext(imagePath)
|
|
fileExtType, found := media_type.GetExtensionMediaType(ext)
|
|
|
|
if found {
|
|
if fileExtType.IsBasicTypeSupported() {
|
|
return nil
|
|
}
|
|
}
|
|
|
|
pathWithoutExt := strings.TrimSuffix(imagePath, path.Ext(imagePath))
|
|
for _, ext := range media_type.TypeJpeg.FileExtensions() {
|
|
testPath := pathWithoutExt + ext
|
|
if scanner_utils.FileExists(testPath) {
|
|
return &testPath
|
|
}
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func scanForRawCounterpartFile(imagePath string) *string {
|
|
ext := filepath.Ext(imagePath)
|
|
fileExtType, found := media_type.GetExtensionMediaType(ext)
|
|
|
|
if found {
|
|
if !fileExtType.IsBasicTypeSupported() {
|
|
return nil
|
|
}
|
|
}
|
|
|
|
rawPath := media_type.RawCounterpart(imagePath)
|
|
if rawPath != nil {
|
|
return rawPath
|
|
}
|
|
|
|
return nil
|
|
}
|