MythTV master
metaioid3.h
Go to the documentation of this file.
1#ifndef METAIOID3_H_
2#define METAIOID3_H_
3
4#include <QtGlobal>
5#if QT_VERSION >= QT_VERSION_CHECK(6,0,0)
6#include <QtSystemDetection>
7#endif
8
9// libmythmetadata
10#include "metaiotaglib.h"
11#include "musicmetadata.h"
12
13// Taglib
14#include <taglib/id3v1tag.h>
15#include <taglib/id3v2tag.h>
16#ifdef Q_OS_WINDOWS
17// The above indirectly includes winuser.h, which unconditionally
18// redefines the string SendMessage to SendMessageA.
19#undef SendMessage
20#endif
21#include <textidentificationframe.h>
22#include <attachedpictureframe.h>
23#include <popularimeterframe.h>
24#include <tfile.h>
25
26// QT
27#include <QList>
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 TagLib::ID3v2::UserTextIdentificationFrame* find(TagLib::ID3v2::Tag *tag,
75 const TagLib::String &description);
76 static TagLib::ID3v2::PopularimeterFrame* findPOPM(TagLib::ID3v2::Tag *tag, const TagLib::String &email);
77 static TagLib::ID3v2::AttachedPictureFrame* findAPIC(TagLib::ID3v2::Tag *tag,
78 TagLib::ID3v2::AttachedPictureFrame::Type type,
79 const TagLib::String &description = TagLib::String());
80 static QString getExtFromMimeType(const QString &mimeType);
81
82 TagLib::File *m_file {nullptr};
83
84 enum TagType : std::uint8_t { kMPEG, kFLAC };
85 TagType m_fileType {kMPEG};
86};
87
88#endif
Read and write metadata in MPEG (mp3) ID3V2 tags.
Definition: metaioid3.h:39
~MetaIOID3(void) override
Definition: metaioid3.h:42
bool supportsEmbeddedImages(void) override
Does the tag support embedded cover art.
Definition: metaioid3.h:54
MetaIOID3(void)=default
Base for Taglib metadata classes.
Definition: metaiotaglib.h:17
MusicMetadata * read(const QString &filename) override=0
Reads MusicMetadata from a file.
bool write(const QString &filename, MusicMetadata *mdata) override=0
Writes all metadata back to a file.
virtual bool changeImageType(const QString &filename, const AlbumArtImage *albumart, ImageType newType)
Definition: metaio.h:85
virtual bool writeAlbumArt(const QString &filename, const AlbumArtImage *albumart)
Definition: metaio.h:73
virtual QImage * getAlbumArt(const QString &filename, ImageType type)
Definition: metaio.h:92
virtual bool TagExists(const QString &filename)
Definition: metaio.h:123
virtual bool removeAlbumArt(const QString &filename, const AlbumArtImage *albumart)
Definition: metaio.h:79
virtual bool writeVolatileMetadata(const QString &filename, MusicMetadata *mdata)
Writes rating and playcount back to a file.
Definition: metaio.h:38
virtual AlbumArtList getAlbumArtList(const QString &filename)
Reads the list of embedded images in the tag.
Definition: metaio.h:68
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)
const TagLib::String email
Definition: metaioid3.cpp:22
ImageType
Definition: musicmetadata.h:31
QList< AlbumArtImage * > AlbumArtList
Definition: musicmetadata.h:58
#define META_PUBLIC
Definition: mythmetaexp.h:9
def rating(profile, smoonURL, gate)
Definition: scan.py:36