summaryrefslogtreecommitdiff
path: root/src/database/include
diff options
context:
space:
mode:
authorjacqueline <me@jacqueline.id.au>2023-09-06 10:14:48 +1000
committerjacqueline <me@jacqueline.id.au>2023-09-06 10:14:48 +1000
commitdad14baa73a9a46c450193da43bf960b436f7ec5 (patch)
tree1a14d80682b2bcf4c0e7524b6f854c7c6c9aa164 /src/database/include
parenta9008884c93946f26fd26448aeb716d005693d6c (diff)
downloadtangara-fw-dad14baa73a9a46c450193da43bf960b436f7ec5.tar.gz
Add an opus-specific tag parser
Diffstat (limited to 'src/database/include')
-rw-r--r--src/database/include/tag_parser.hpp17
1 files changed, 16 insertions, 1 deletions
diff --git a/src/database/include/tag_parser.hpp b/src/database/include/tag_parser.hpp
index dcc8aa21..85721357 100644
--- a/src/database/include/tag_parser.hpp
+++ b/src/database/include/tag_parser.hpp
@@ -20,18 +20,27 @@ class ITagParser {
-> bool = 0;
};
+class GenericTagParser : public ITagParser {
+ public:
+ auto ReadAndParseTags(const std::string& path, TrackTags* out)
+ -> bool override;
+};
+
class TagParserImpl : public ITagParser {
public:
+ TagParserImpl();
auto ReadAndParseTags(const std::string& path, TrackTags* out)
-> bool override;
private:
- std::mutex cache_mutex_;
+ std::map<std::string, std::unique_ptr<ITagParser>> extension_to_parser_;
+ GenericTagParser generic_parser_;
/*
* Cache of tags that have already been extracted from files. Ideally this
* cache should be slightly larger than any page sizes in the UI.
*/
+ std::mutex cache_mutex_;
util::LruCache<16, std::string, TrackTags> cache_;
// We could also consider keeping caches of artist name -> shared_string and
@@ -39,4 +48,10 @@ class TagParserImpl : public ITagParser {
// of our UI.
};
+class OpusTagParser : public ITagParser {
+ public:
+ auto ReadAndParseTags(const std::string& path, TrackTags* out)
+ -> bool override;
+};
+
} // namespace database