diff options
| author | ailurux <ailuruxx@gmail.com> | 2024-12-30 11:04:33 +1100 |
|---|---|---|
| committer | ailurux <ailuruxx@gmail.com> | 2024-12-30 11:04:33 +1100 |
| commit | f2198867538bec387bd54db8dc0ddca8b4a20e60 (patch) | |
| tree | a2ad6645d6866b281c93c09531423a6107d93297 /src/tangara/database | |
| parent | dac29bf98632bb4450932b06e12328af48f1bb9e (diff) | |
| parent | ff87c9217577783b60ee4cf466a3c59777a2fc40 (diff) | |
| download | tangara-fw-f2198867538bec387bd54db8dc0ddca8b4a20e60.tar.gz | |
Merge branch 'main' of codeberg.org:cool-tech-zone/tangara-fw
Diffstat (limited to 'src/tangara/database')
| -rw-r--r-- | src/tangara/database/tag_parser.cpp | 19 | ||||
| -rw-r--r-- | src/tangara/database/tag_parser.hpp | 13 |
2 files changed, 32 insertions, 0 deletions
diff --git a/src/tangara/database/tag_parser.cpp b/src/tangara/database/tag_parser.cpp index a6a25555..15323a7c 100644 --- a/src/tangara/database/tag_parser.cpp +++ b/src/tangara/database/tag_parser.cpp @@ -171,9 +171,11 @@ OggTagParser::OggTagParser() { nameToTag_["ALBUM"] = Tag::kAlbum; nameToTag_["ARTIST"] = Tag::kArtist; nameToTag_["ALBUMARTIST"] = Tag::kAlbumArtist; + nameToTag_["TRACK"] = Tag::kTrack; nameToTag_["TRACKNUMBER"] = Tag::kTrack; nameToTag_["GENRE"] = Tag::kGenres; nameToTag_["DISC"] = Tag::kDisc; + nameToTag_["DISCNUMBER"] = Tag::kDisc; } auto OggTagParser::ReadAndParseTags(std::string_view p) @@ -310,6 +312,23 @@ auto GenericTagParser::ReadAndParseTags(std::string_view p) -> std::shared_ptr<TrackTags> { std::string path{p}; libtags::Aux aux; + + // Fail fast if trying to parse a file that doesn't appear to be a supported audio format + // For context, see: https://codeberg.org/cool-tech-zone/tangara-fw/issues/149 + bool found = false; + for (const auto& ext : supported_exts) { + // Case-insensitive file extension check + if (std::equal(ext.rbegin(), ext.rend(), path.rbegin(), + [](char a, char b) { return std::tolower(a) == std::tolower(b); })) { + found=true; + break; + } + } + if (!found) { + ESP_LOGD(kTag, "skipping unsupported file: %s", path.c_str()); + return {}; + } + auto out = TrackTags::create(); aux.tags = out.get(); diff --git a/src/tangara/database/tag_parser.hpp b/src/tangara/database/tag_parser.hpp index 642c4876..9130b306 100644 --- a/src/tangara/database/tag_parser.hpp +++ b/src/tangara/database/tag_parser.hpp @@ -55,6 +55,19 @@ class GenericTagParser : public ITagParser { public: auto ReadAndParseTags(std::string_view path) -> std::shared_ptr<TrackTags> override; + + private: + // Supported file extensions for parsing tags, derived from the list of + // supported audio formats here: + // https://cooltech.zone/tangara/docs/music-library/ + static constexpr std::string supported_exts[] = { + "flac", + "mp3", + "ogg", + "ogx", + "opus", + "wav" + }; }; } // namespace database |
