summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMarcos CARDINOT <mcardinot@gmail.com>2014-05-30 14:30:29 +0100
committerMarcos CARDINOT <mcardinot@gmail.com>2014-05-30 15:19:39 +0100
commit7e33524b7532e0392611a824614f6df370ac7a01 (patch)
treee428702d32e1f0be6f23cde4e4513f8f30da26fa /src
parent73d918f6b0d0fca412c7fc3a546f69e76cc7cd50 (diff)
Improvements in cover art search (TIO::parseCoverArt)
- add method to parse cover arts into sound file (extracting embedded covers) This change is useful to handle existing users
Diffstat (limited to 'src')
-rw-r--r--src/library/coverart.cpp60
-rw-r--r--src/library/coverart.h9
-rw-r--r--src/trackinfoobject.cpp33
-rw-r--r--src/trackinfoobject.h6
4 files changed, 73 insertions, 35 deletions
diff --git a/src/library/coverart.cpp b/src/library/coverart.cpp
index 7eea3c68c6..1d2de1ebd7 100644
--- a/src/library/coverart.cpp
+++ b/src/library/coverart.cpp
@@ -38,6 +38,22 @@ bool CoverArt::saveFile(QImage cover, QString location) {
return false;
}
+QString CoverArt::saveEmbeddedCover(QImage cover, QString artist,
+ QString album, QString filename) {
+ if (cover.isNull()) {
+ return "";
+ }
+
+ QString coverName = getDefaultCoverName(artist, album, filename);
+ QString location = getDefaultCoverLocation(coverName);
+
+ if (saveFile(cover, location)) {
+ return location;
+ }
+
+ return "";
+}
+
QString CoverArt::searchInDiskCache(QString coverArtName) {
// Some image extensions
QStringList extList;
@@ -81,10 +97,6 @@ QString CoverArt::searchInTrackDirectory(QString directory) {
return QString();
}
-QString CoverArt::getDefaultCoverLocation(QString coverArtName) {
- return getStoragePath() + coverArtName + "." + m_cDefaultImageFormat;
-}
-
QString CoverArt::getDefaultCoverName(QString artist,
QString album,
QString filename) {
@@ -95,34 +107,50 @@ QString CoverArt::getDefaultCoverName(QString artist,
}
}
-QString CoverArt::searchCoverArtFile(TrackInfoObject* pTrack) {
- // creates default cover art name
+QString CoverArt::getDefaultCoverLocation(QString coverArtName) {
+ return getStoragePath() + coverArtName + "." + m_cDefaultImageFormat;
+}
+
+QString CoverArt::getDefaultCoverLocation(TrackPointer pTrack) {
+ QString coverArtName = getDefaultCoverName(pTrack->getArtist(),
+ pTrack->getAlbum(),
+ pTrack->getFilename());
+
+ return getDefaultCoverLocation(coverArtName);
+}
+
+QString CoverArt::searchCoverArtFile(TrackPointer pTrack) {
+
QString coverArtName = getDefaultCoverName(pTrack->getArtist(),
pTrack->getAlbum(),
pTrack->getFilename());
//
// Step 1: Look for cover art in disk-cache directory.
- // (all embedded covers will already be there)
//
- QString coverArtLocation = searchInDiskCache(coverArtName);
+ QString coverLocation = searchInDiskCache(coverArtName);
+ if (!coverLocation.isEmpty()) {
+ return coverLocation; // FOUND!
+ }
- if (!coverArtLocation.isEmpty()) {
- return coverArtLocation; // FOUND!
+ //
+ // Step 2: Look for embedded cover art.
+ //
+ coverLocation = pTrack->parseCoverArt();
+ if (!coverLocation.isEmpty()) {
+ return coverLocation; // FOUND!
}
//
- // Step 2: Look for cover stored in track diretory.
+ // Step 3: Look for cover stored in track diretory.
//
QImage image(searchInTrackDirectory(pTrack->getDirectory()));
- // load default location
- coverArtLocation = getDefaultCoverLocation(coverArtName);
-
if (!image.isNull()) {
// try to store the image in our disk-cache!
- if (saveFile(image, coverArtLocation)) {
- return coverArtLocation; // FOUND!
+ coverLocation = getDefaultCoverLocation(coverArtName);
+ if (saveFile(image, coverLocation)) {
+ return coverLocation; // FOUND!
}
}
diff --git a/src/library/coverart.h b/src/library/coverart.h
index 2c2380d737..4fbce99d0b 100644
--- a/src/library/coverart.h
+++ b/src/library/coverart.h
@@ -13,13 +13,14 @@ class CoverArt : public QObject, public Singleton<CoverArt> {
QString getStoragePath() const;
QString getDefaultCoverLocation(QString coverArtName);
- QString getDefaultCoverName(QString artist,
- QString album,
- QString filename);
+ QString getDefaultCoverLocation(TrackPointer pTrack);
+ QString getDefaultCoverName(QString artist, QString album, QString filename);
bool deleteFile(const QString& location);
bool saveFile(QImage cover, QString location);
- QString searchCoverArtFile(TrackInfoObject* pTrack);
+ QString saveEmbeddedCover(QImage cover, QString artist,
+ QString album, QString filename);
+ QString searchCoverArtFile(TrackPointer pTrack);
protected:
CoverArt();
diff --git a/src/trackinfoobject.cpp b/src/trackinfoobject.cpp
index 9bdfea1a97..074b4d6edd 100644
--- a/src/trackinfoobject.cpp
+++ b/src/trackinfoobject.cpp
@@ -202,21 +202,10 @@ void TrackInfoObject::parse() {
setKeyText(pProxiedSoundSource->getKey(),
mixxx::track::io::key::FILE_METADATA);
- // store cover art in disk-cache
QImage image = pProxiedSoundSource->getCoverArt();
- if (!image.isNull()) {
- CoverArt* pCoverArt = CoverArt::instance();
-
- QString coverName = pCoverArt->getDefaultCoverName(
- m_sArtist,
- m_sAlbum,
- m_fileInfo.fileName()
- );
-
- QString coverLocation = pCoverArt->getDefaultCoverLocation(coverName);
-
- CoverArt::instance()->saveFile(image, coverLocation);
- }
+ QString coverLocation = CoverArt::instance()->saveEmbeddedCover(
+ image, getArtist(), getAlbum(), getFilename());
+ setCoverArtLocation(coverLocation);
setHeaderParsed(true);
} else {
@@ -229,6 +218,22 @@ void TrackInfoObject::parse() {
}
}
+QString TrackInfoObject::parseCoverArt() {
+ const QString& canonicalLocation = m_fileInfo.canonicalFilePath();
+ SoundSourceProxy proxy(canonicalLocation, m_pSecurityToken);
+
+ Mixxx::SoundSource* pProxiedSoundSource = proxy.getProxiedSoundSource();
+ if (pProxiedSoundSource != NULL && proxy.parseHeader() == OK) {
+
+ QImage image = pProxiedSoundSource->getCoverArt();
+ QString coverLocation = CoverArt::instance()->saveEmbeddedCover(
+ image, getArtist(), getAlbum(), getFilename());
+ setCoverArtLocation(coverLocation);
+ return coverLocation;
+ }
+ return QString();
+}
+
void TrackInfoObject::parseArtist() {
QMutexLocker lock(&m_qMutex);
QString filename = m_fileInfo.fileName();
diff --git a/src/trackinfoobject.h b/src/trackinfoobject.h
index 025696438b..9d1f30ee9d 100644
--- a/src/trackinfoobject.h
+++ b/src/trackinfoobject.h
@@ -62,6 +62,10 @@ class TrackInfoObject : public QObject {
// artist and title information from the filename.
void parse();
+ // this method will parse the information stored in the sound file
+ // just to extract the embedded cover art
+ QString parseCoverArt();
+
// Returns the duration in seconds
int getDuration() const;
// Set duration in seconds
@@ -148,7 +152,7 @@ class TrackInfoObject : public QObject {
QString getInfo() const;
// Set Cover Art Location
void setCoverArtLocation(const QString &location);
- // Get Cover Art
+ // Get Cover Art Location
QString getCoverArtLocation() const;
QDateTime getDateAdded() const;