mirror of
https://git.um-react.app/um/cli.git
synced 2025-11-28 03:33:02 +00:00
refactor: allow multi-part extensions (#102)
This commit is contained in:
@@ -75,12 +75,21 @@ func main() {
|
||||
|
||||
func printSupportedExtensions() {
|
||||
var exts []string
|
||||
for ext := range common.DecoderRegistry {
|
||||
extSet := make(map[string]int)
|
||||
for _, factory := range common.DecoderRegistry {
|
||||
ext := strings.TrimPrefix(factory.Suffix, ".")
|
||||
if n, ok := extSet[ext]; ok {
|
||||
extSet[ext] = n + 1
|
||||
} else {
|
||||
extSet[ext] = 1
|
||||
}
|
||||
}
|
||||
for ext := range extSet {
|
||||
exts = append(exts, ext)
|
||||
}
|
||||
sort.Strings(exts)
|
||||
for _, ext := range exts {
|
||||
fmt.Printf("%s: %d\n", ext, len(common.DecoderRegistry[ext]))
|
||||
fmt.Printf("%s: %d\n", ext, extSet[ext])
|
||||
}
|
||||
}
|
||||
|
||||
@@ -276,7 +285,19 @@ func (p *processor) processFile(filePath string) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (p *processor) process(inputFile string, allDec []common.NewDecoderFunc) error {
|
||||
func (p *processor) findDecoder(decoders []common.DecoderFactory, params *common.DecoderParams) (*common.Decoder, *common.DecoderFactory, error) {
|
||||
for _, factory := range decoders {
|
||||
dec := factory.Create(params)
|
||||
err := dec.Validate()
|
||||
if err == nil {
|
||||
return &dec, &factory, nil
|
||||
}
|
||||
logger.Warn("try decode failed", zap.Error(err))
|
||||
}
|
||||
return nil, nil, errors.New("no any decoder can resolve the file")
|
||||
}
|
||||
|
||||
func (p *processor) process(inputFile string, allDec []common.DecoderFactory) error {
|
||||
file, err := os.Open(inputFile)
|
||||
if err != nil {
|
||||
return err
|
||||
@@ -284,26 +305,16 @@ func (p *processor) process(inputFile string, allDec []common.NewDecoderFunc) er
|
||||
defer file.Close()
|
||||
logger := logger.With(zap.String("source", inputFile))
|
||||
|
||||
decParams := &common.DecoderParams{
|
||||
pDec, decoderFactory, err := p.findDecoder(allDec, &common.DecoderParams{
|
||||
Reader: file,
|
||||
Extension: filepath.Ext(inputFile),
|
||||
FilePath: inputFile,
|
||||
Logger: logger,
|
||||
})
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
var dec common.Decoder
|
||||
for _, decFunc := range allDec {
|
||||
dec = decFunc(decParams)
|
||||
if err := dec.Validate(); err == nil {
|
||||
break
|
||||
} else {
|
||||
logger.Warn("try decode failed", zap.Error(err))
|
||||
dec = nil
|
||||
}
|
||||
}
|
||||
if dec == nil {
|
||||
return errors.New("no any decoder can resolve the file")
|
||||
}
|
||||
dec := *pDec
|
||||
|
||||
params := &ffmpeg.UpdateMetadataParams{}
|
||||
|
||||
@@ -365,7 +376,7 @@ func (p *processor) process(inputFile string, allDec []common.NewDecoderFunc) er
|
||||
return fmt.Errorf("get relative dir failed: %w", err)
|
||||
}
|
||||
|
||||
inFilename := strings.TrimSuffix(filepath.Base(inputFile), filepath.Ext(inputFile))
|
||||
inFilename := strings.TrimSuffix(filepath.Base(inputFile), decoderFactory.Suffix)
|
||||
outPath := filepath.Join(p.outputDir, inputRelDir, inFilename+params.AudioExt)
|
||||
|
||||
if !p.overwriteOutput {
|
||||
|
||||
Reference in New Issue
Block a user