1 #pragma once 2 3 #include <inttypes.h> 4 #include <vector> 5 #include <string> 6 #include <util/ErrorCode.h> 7 #include <util/Option.h> 8 9 namespace mous { 10 11 enum class CoverFormat : uint8_t 12 { 13 None = 0, 14 JPEG, 15 PNG, 16 }; 17 18 class ITagParser 19 { 20 public: ~ITagParser()21 virtual ~ITagParser() { } 22 23 virtual std::vector<std::string> FileSuffix() const = 0; 24 25 virtual ErrorCode Open(const std::string& path) = 0; 26 virtual void Close() = 0; 27 28 // read tag 29 virtual bool HasTag() const = 0; 30 virtual std::string Title() const = 0; 31 virtual std::string Artist() const = 0; 32 virtual std::string Album() const = 0; 33 virtual std::string Comment() const = 0; 34 virtual std::string Genre() const = 0; 35 virtual int32_t Year() const = 0; 36 virtual int32_t Track() const = 0; 37 38 // edit tag CanEdit()39 virtual bool CanEdit() const { return false; } Save()40 virtual bool Save() { return false; } SetTitle(const std::string & title)41 virtual void SetTitle(const std::string& title) { } SetArtist(const std::string & artist)42 virtual void SetArtist(const std::string& artist) { } SetAlbum(const std::string & album)43 virtual void SetAlbum(const std::string& album) { } SetComment(const std::string & comment)44 virtual void SetComment(const std::string& comment) { } SetGenre(const std::string & genre)45 virtual void SetGenre(const std::string& genre) { } SetYear(int32_t year)46 virtual void SetYear(int32_t year) { } SetTrack(int32_t track)47 virtual void SetTrack(int32_t track) { } 48 49 // cover art DumpCoverArt(std::vector<char> & buf)50 virtual CoverFormat DumpCoverArt(std::vector<char>& buf) { buf.clear(); return CoverFormat::None; } StoreCoverArt(CoverFormat fmt,const char * buf,size_t len)51 virtual bool StoreCoverArt(CoverFormat fmt, const char* buf, size_t len) { return false; } 52 53 // audio property HasAudioProperty()54 virtual bool HasAudioProperty() const { return false; } Duration()55 virtual int32_t Duration() const { return -1; } BitRate()56 virtual int32_t BitRate() const { return -1; } 57 58 // reimplement this to provide options Options(std::vector<const BaseOption * > & list)59 virtual bool Options(std::vector<const BaseOption*>& list) const { list.clear(); return false; } 60 }; 61 62 } 63