Invert dependency of metadata and extractors

This commit is contained in:
Deluan
2022-12-18 23:01:57 -05:00
committed by Deluan Quintão
parent 55b0227494
commit 0c22af3585
6 changed files with 43 additions and 30 deletions
+10 -9
View File
@@ -14,25 +14,26 @@ import (
"github.com/navidrome/navidrome/conf"
"github.com/navidrome/navidrome/consts"
"github.com/navidrome/navidrome/log"
"github.com/navidrome/navidrome/scanner/metadata/ffmpeg"
"github.com/navidrome/navidrome/scanner/metadata/taglib"
)
type Parser interface {
Parse(files ...string) (map[string]map[string][]string, error)
type ParsedTags = map[string][]string
type Extractor interface {
Parse(files ...string) (map[string]ParsedTags, error)
}
var parsers = map[string]Parser{
"ffmpeg": &ffmpeg.Parser{},
"taglib": &taglib.Parser{},
var extractors = map[string]Extractor{}
func RegisterExtractor(id string, parser Extractor) {
extractors[id] = parser
}
func Extract(files ...string) (map[string]Tags, error) {
p, ok := parsers[conf.Server.Scanner.Extractor]
p, ok := extractors[conf.Server.Scanner.Extractor]
if !ok {
log.Warn("Invalid 'Scanner.Extractor' option. Using default", "requested", conf.Server.Scanner.Extractor,
"validOptions", "ffmpeg,taglib", "default", consts.DefaultScannerExtractor)
p = parsers[consts.DefaultScannerExtractor]
p = extractors[consts.DefaultScannerExtractor]
}
extractedTags, err := p.Parse(files...)