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