MythTV  master
metaioid3.h
Go to the documentation of this file.
1 #ifndef METAIOID3_H_
2 #define METAIOID3_H_
3 
4 // libmythmetadata
5 #include "metaiotaglib.h"
6 #include "musicmetadata.h"
7 
8 // Taglib
9 #include <id3v1tag.h>
10 #include <id3v2tag.h>
11 #ifdef Q_OS_WIN
12 // The above indirectly includes winuser.h, which unconditionally
13 // redefines the string SendMessage to SendMessageA.
14 #undef SendMessage
15 #endif
16 #include <textidentificationframe.h>
17 #include <attachedpictureframe.h>
18 #include <popularimeterframe.h>
19 #include <tfile.h>
20 
21 // QT
22 #include <QList>
23 
24 using TagLib::ID3v2::UserTextIdentificationFrame;
25 using TagLib::ID3v2::TextIdentificationFrame;
26 using TagLib::ID3v2::PopularimeterFrame;
27 using TagLib::ID3v2::AttachedPictureFrame;
28 
39 {
40  public:
41  MetaIOID3(void) = default;
42  ~MetaIOID3(void) override { CloseFile(); }
43 
44  bool write(const QString &filename, MusicMetadata* mdata) override; // MetaIOTagLib
45  bool writeVolatileMetadata(const QString &filename, MusicMetadata* mdata) override; // MetaIO
46 
47  bool writeAlbumArt(const QString &filename, const AlbumArtImage *albumart) override; // MetaIO
48  bool removeAlbumArt(const QString &filename, const AlbumArtImage *albumart) override; // MetaIO
49 
50  MusicMetadata* read(const QString &filename) override; // MetaIOTagLib
51  AlbumArtList getAlbumArtList(const QString &filename) override; // MetaIO
52  QImage *getAlbumArt(const QString &filename, ImageType type) override; // MetaIO
53 
54  bool supportsEmbeddedImages(void) override { return true; } // MetaIO
55 
56  bool changeImageType(const QString &filename, const AlbumArtImage *albumart,
57  ImageType newType) override; // MetaIO
58 
59  bool TagExists(const QString &filename) override; // MetaIO
60 
61  private:
62  bool OpenFile(const QString &filename, bool forWriting = false);
63  bool SaveFile();
64  void CloseFile();
65 
66  TagLib::ID3v2::Tag* GetID3v2Tag(bool create = false);
67  TagLib::ID3v1::Tag* GetID3v1Tag(bool create = false);
68 
69  static bool writePlayCount(TagLib::ID3v2::Tag *tag, int playcount);
70  static bool writeRating(TagLib::ID3v2::Tag *tag, int rating);
71  static bool writeLastPlay(TagLib::ID3v2::Tag *tag, QDateTime lastPlay);
72 
73  static AlbumArtList readAlbumArt(TagLib::ID3v2::Tag *tag);
74  static UserTextIdentificationFrame* find(TagLib::ID3v2::Tag *tag,
75  const String &description);
76  static PopularimeterFrame* findPOPM(TagLib::ID3v2::Tag *tag, const String &email);
77  static AttachedPictureFrame* findAPIC(TagLib::ID3v2::Tag *tag,
78  AttachedPictureFrame::Type type,
79  const String &description = String());
80  static QString getExtFromMimeType(const QString &mimeType);
81 
82  TagLib::File *m_file {nullptr};
83 
84  enum TagType { kMPEG, kFLAC };
85  TagType m_fileType {kMPEG};
86 };
87 
88 #endif
MetaIO::changeImageType
virtual bool changeImageType([[maybe_unused]] const QString &filename, [[maybe_unused]] const AlbumArtImage *albumart, [[maybe_unused]] ImageType newType)
Definition: metaio.h:86
MetaIO::TagExists
virtual bool TagExists([[maybe_unused]] const QString &filename)
Definition: metaio.h:124
MetaIOTagLib::write
bool write(const QString &filename, MusicMetadata *mdata) override=0
Writes all metadata back to a file.
MusicMetadata
Definition: musicmetadata.h:80
MetaIOTagLib::read
MusicMetadata * read(const QString &filename) override=0
Reads MusicMetadata from a file.
MetaIO::writeVolatileMetadata
virtual bool writeVolatileMetadata([[maybe_unused]] const QString &filename, [[maybe_unused]] MusicMetadata *mdata)
Writes rating and playcount back to a file.
Definition: metaio.h:39
MetaIO::removeAlbumArt
virtual bool removeAlbumArt([[maybe_unused]] const QString &filename, [[maybe_unused]] const AlbumArtImage *albumart)
Definition: metaio.h:80
hardwareprofile.scan.rating
def rating(profile, smoonURL, gate)
Definition: scan.py:37
MetaIO::getAlbumArt
virtual QImage * getAlbumArt([[maybe_unused]] const QString &filename, [[maybe_unused]] ImageType type)
Definition: metaio.h:93
MetaIOID3::TagType
TagType
Definition: metaioid3.h:84
MetaIOTagLib
Base for Taglib metadata classes.
Definition: metaiotaglib.h:20
metaiotaglib.h
MetaIOID3::supportsEmbeddedImages
bool supportsEmbeddedImages(void) override
Does the tag support embedded cover art.
Definition: metaioid3.h:54
AlbumArtList
QList< AlbumArtImage * > AlbumArtList
Definition: musicmetadata.h:56
MetaIO::getAlbumArtList
virtual AlbumArtList getAlbumArtList([[maybe_unused]] const QString &filename)
Reads the list of embedded images in the tag.
Definition: metaio.h:69
AlbumArtImage
Definition: musicmetadata.h:39
MetaIOID3::~MetaIOID3
~MetaIOID3(void) override
Definition: metaioid3.h:42
email
const String email
Definition: metaioid3.cpp:22
build_compdb.filename
filename
Definition: build_compdb.py:21
MetaIOID3
Read and write metadata in MPEG (mp3) ID3V2 tags.
Definition: metaioid3.h:38
META_PUBLIC
#define META_PUBLIC
Definition: mythmetaexp.h:9
ImageType
ImageType
Definition: musicmetadata.h:28
musicmetadata.h
find
static pid_list_t::iterator find(const PIDInfoMap &map, pid_list_t &list, pid_list_t::iterator begin, pid_list_t::iterator end, bool find_open)
Definition: dvbstreamhandler.cpp:363
MetaIO::writeAlbumArt
virtual bool writeAlbumArt([[maybe_unused]] const QString &filename, [[maybe_unused]] const AlbumArtImage *albumart)
Definition: metaio.h:74