410 changes: 410 additions & 0 deletions mythplugins/mythmusic/mythmusic/musicbrainz.cpp

Large diffs are not rendered by default.

70 changes: 70 additions & 0 deletions mythplugins/mythmusic/mythmusic/musicbrainz.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
#ifndef MUSICBRAINZ_H
#define MUSICBRAINZ_H

#include "config.h"

// Qt
#include <QString>
#include <QMap>

// MythTV
#include <libmythmetadata/musicmetadata.h>

class MusicBrainz
{
public:
/**
* Query music metadata using disc id of specified device
*
* @param [in] deviceName name of the CD device to query metadata for
* @return true if query was successful, false otherwise
*/
bool queryForDevice(const QString &deviceName);

/**
* Checks if metadata for given track exists
*
* @param track [in] track number to check metadata for
* @return true if metadata was found, false otherwise
*/
bool hasMetadata(int track) const;

/**
* Creates and return metadata for specified track
*
* @param [in] track the track number for which to return the metadata
* @return pointer to newly created metadata object, nullptr if no metadata for this track exists
*/
MusicMetadata *getMetadata(int track) const;

/**
* Reset last queried metadata
*/
void reset();
private:

/**
* Sets compilation flag for all metadata
*/
void setCompilationFlag(bool isCompilation);

#ifdef HAVE_MUSICBRAINZ

/// Query disc id for specified device
std::string queryDiscId(const std::string &device);

/// Query release id and release metadata
std::string queryRelease(const std::string &disc_id);

/// Query coverart for given release id
QString queryCoverart(const std::string &releaseId);

std::string m_discId; ///< disc id corresponding to current metadata

#endif // HAVE_MUSICBRAINZ

QMap<int, MusicMetadata> m_tracks;
AlbumArtImage m_albumArt;
};

#endif // MUSICBRAINZ_H
5 changes: 5 additions & 0 deletions mythplugins/mythmusic/mythmusic/mythmusic.pro
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,11 @@ cdio {
LIBS += -lcdio -lcdio_cdda -lcdio_paranoia
}

musicbrainz {
HEADERS += musicbrainz.h
SOURCES += musicbrainz.cpp
}

mingw {
LIBS += -logg

Expand Down
19 changes: 18 additions & 1 deletion mythtv/libs/libmythmetadata/musicmetadata.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -122,7 +122,10 @@ MusicMetadata& MusicMetadata::operator=(const MusicMetadata &rhs)
m_compartistId = rhs.m_compartistId;
m_albumId = rhs.m_albumId;
m_genreId = rhs.m_genreId;
m_albumArt = nullptr;
if (rhs.m_albumArt)
{
m_albumArt = new AlbumArtImages(this, *rhs.m_albumArt);
}
m_lyricsData = nullptr;
m_format = rhs.m_format;
m_changed = rhs.m_changed;
Expand Down Expand Up @@ -1296,6 +1299,11 @@ QString MusicMetadata::getAlbumArtFile(void)

res = albumart_image->m_filename;
}
else if (repo == RT_CD)
{
// CD tracks can only be played locally, so coverart is local too
return res;
}
else
{
// check for the image in the storage group
Expand Down Expand Up @@ -1890,6 +1898,15 @@ AlbumArtImages::AlbumArtImages(MusicMetadata *metadata, bool loadFromDB)
findImages();
}

AlbumArtImages::AlbumArtImages(MusicMetadata *metadata, const AlbumArtImages &other)
: m_parent(metadata)
{
for (auto &srcImage : qAsConst(other.m_imageList))
{
m_imageList.append(new AlbumArtImage(srcImage));
}
}

AlbumArtImages::~AlbumArtImages()
{
while (!m_imageList.empty())
Expand Down
1 change: 1 addition & 0 deletions mythtv/libs/libmythmetadata/musicmetadata.h
Original file line number Diff line number Diff line change
Expand Up @@ -523,6 +523,7 @@ class META_PUBLIC AlbumArtImages

public:
explicit AlbumArtImages(MusicMetadata *metadata, bool loadFromDB = true);
explicit AlbumArtImages(MusicMetadata *metadata, const AlbumArtImages &other);
~AlbumArtImages();

void scanForImages(void);
Expand Down