summaryrefslogtreecommitdiff
path: root/src/tangara/database
diff options
context:
space:
mode:
authorailurux <ailuruxx@gmail.com>2024-12-30 11:04:33 +1100
committerailurux <ailuruxx@gmail.com>2024-12-30 11:04:33 +1100
commitf2198867538bec387bd54db8dc0ddca8b4a20e60 (patch)
treea2ad6645d6866b281c93c09531423a6107d93297 /src/tangara/database
parentdac29bf98632bb4450932b06e12328af48f1bb9e (diff)
parentff87c9217577783b60ee4cf466a3c59777a2fc40 (diff)
downloadtangara-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.cpp19
-rw-r--r--src/tangara/database/tag_parser.hpp13
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