From 4d18212f5d9d483575be46e6605e6aad09c1f848 Mon Sep 17 00:00:00 2001 From: Deluan Date: Tue, 8 Sep 2020 11:58:07 -0400 Subject: [PATCH] Extract all id3 frames from file --- scanner/metadata/metadata.go | 12 +++++++----- scanner/metadata/taglib/taglib_parser.cpp | 8 ++++---- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/scanner/metadata/metadata.go b/scanner/metadata/metadata.go index a9cfdaa79..86d3af49f 100644 --- a/scanner/metadata/metadata.go +++ b/scanner/metadata/metadata.go @@ -79,7 +79,7 @@ func (m *baseMetadata) Composer() string { return m.getTag("composer", "t func (m *baseMetadata) Genre() string { return m.getTag("genre") } func (m *baseMetadata) Year() int { return m.parseYear("date") } func (m *baseMetadata) Comment() string { return m.getTag("comment") } -func (m *baseMetadata) Compilation() bool { return m.parseBool("compilation") } +func (m *baseMetadata) Compilation() bool { return m.parseBool("tcmp", "compilation") } func (m *baseMetadata) TrackNumber() (int, int) { return m.parseTuple("track", "tracknumber") } func (m *baseMetadata) DiscNumber() (int, int) { return m.parseTuple("disc", "discnumber") } func (m *baseMetadata) DiscSubtitle() string { @@ -168,10 +168,12 @@ func (m *baseMetadata) parseTuple(tags ...string) (int, int) { return 0, 0 } -func (m *baseMetadata) parseBool(tagName string) bool { - if v, ok := m.tags[tagName]; ok { - i, _ := strconv.Atoi(strings.TrimSpace(v)) - return i == 1 +func (m *baseMetadata) parseBool(tags ...string) bool { + for _, tagName := range tags { + if v, ok := m.tags[tagName]; ok { + i, _ := strconv.Atoi(strings.TrimSpace(v)) + return i == 1 + } } return false } diff --git a/scanner/metadata/taglib/taglib_parser.cpp b/scanner/metadata/taglib/taglib_parser.cpp index 60dfbd53b..968c2d1f3 100644 --- a/scanner/metadata/taglib/taglib_parser.cpp +++ b/scanner/metadata/taglib/taglib_parser.cpp @@ -57,10 +57,10 @@ int taglib_read(const char *filename, unsigned long id) { if (mp3File->ID3v2Tag()) { const auto &frameListMap(mp3File->ID3v2Tag()->frameListMap()); - if (!frameListMap["TCMP"].isEmpty()) - tags.insert("compilation", frameListMap["TCMP"].front()->toString()); - if (!frameListMap["TSST"].isEmpty()) - tags.insert("discsubtitle", frameListMap["TSST"].front()->toString()); + for (const auto &[name, values] : frameListMap) { + if (!values.isEmpty()) + tags.insert(name, values.front()->toString()); + } } }