summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/dlgtrackinfo.cpp6
-rw-r--r--src/trackinfoobject.cpp4
-rw-r--r--src/trackinfoobject.h1
-rw-r--r--src/widget/wcoverart.cpp43
-rw-r--r--src/widget/wcoverart.h1
5 files changed, 39 insertions, 16 deletions
diff --git a/src/dlgtrackinfo.cpp b/src/dlgtrackinfo.cpp
index 25577142dc..161c0b75a7 100644
--- a/src/dlgtrackinfo.cpp
+++ b/src/dlgtrackinfo.cpp
@@ -174,6 +174,7 @@ void DlgTrackInfo::populateFields(TrackPointer pTrack) {
m_loadedCover = pTrack->getCoverInfo();
m_loadedCover.trackId = pTrack->getId();
m_loadedCover.trackLocation = pTrack->getLocation();
+ m_pWCoverArtLabel->setCoverArt(pTrack, m_loadedCover, QPixmap());
CoverArtCache* pCache = CoverArtCache::instance();
if (pCache != NULL) {
pCache->requestCover(m_loadedCover);
@@ -192,6 +193,9 @@ void DlgTrackInfo::loadTrack(TrackPointer pTrack) {
populateCues(m_pLoadedTrack);
disconnect(this, SLOT(updateTrackMetadata()));
+
+ // We already listen to changed() so we don't need to listen to individual
+ // signals such as cuesUpdates, coverArtUpdated(), etc.
connect(pTrack.data(), SIGNAL(changed(TrackInfoObject*)),
this, SLOT(updateTrackMetadata()));
}
@@ -424,7 +428,7 @@ void DlgTrackInfo::clear() {
cueTable->setRowCount(0);
m_loadedCover = CoverInfo();
- m_pWCoverArtLabel->setCoverArt(TrackPointer(), CoverInfo(), QPixmap());
+ m_pWCoverArtLabel->setCoverArt(TrackPointer(), m_loadedCover, QPixmap());
}
void DlgTrackInfo::slotBpmDouble() {
diff --git a/src/trackinfoobject.cpp b/src/trackinfoobject.cpp
index 50b7ec7b89..c10dc48178 100644
--- a/src/trackinfoobject.cpp
+++ b/src/trackinfoobject.cpp
@@ -1023,6 +1023,8 @@ void TrackInfoObject::setCoverInfo(const CoverInfo& info) {
m_coverArt = CoverArt();
m_coverArt.info = info;
setDirty(true);
+ lock.unlock();
+ emit(coverArtUpdated());
}
}
@@ -1036,6 +1038,8 @@ void TrackInfoObject::setCoverArt(const CoverArt& cover) {
if (cover != m_coverArt) {
m_coverArt = cover;
setDirty(true);
+ lock.unlock();
+ emit(coverArtUpdated());
}
}
diff --git a/src/trackinfoobject.h b/src/trackinfoobject.h
index 7cf5534a40..4ca054028c 100644
--- a/src/trackinfoobject.h
+++ b/src/trackinfoobject.h
@@ -280,6 +280,7 @@ class TrackInfoObject : public QObject {
signals:
void waveformUpdated();
void waveformSummaryUpdated();
+ void coverArtUpdated();
void analyserProgress(int progress);
void bpmUpdated(double bpm);
void beatsUpdated();
diff --git a/src/widget/wcoverart.cpp b/src/widget/wcoverart.cpp
index 521f381b2c..b7e4b3ec7a 100644
--- a/src/widget/wcoverart.cpp
+++ b/src/widget/wcoverart.cpp
@@ -76,12 +76,10 @@ void WCoverArt::setup(QDomNode node, const SkinContext& context) {
}
void WCoverArt::slotCoverArtSelected(const CoverArt& art) {
- if (m_loadedTrack.isNull()) {
- return;
+ if (m_loadedTrack) {
+ // Will trigger slotTrackCoverArtUpdated().
+ m_loadedTrack->setCoverArt(art);
}
- m_loadedTrack->setCoverArt(art);
- // TODO(rryan): listen to TIO signal instead
- slotLoadTrack(m_loadedTrack);
}
void WCoverArt::slotEnable(bool enable) {
@@ -96,6 +94,10 @@ void WCoverArt::slotEnable(bool enable) {
}
void WCoverArt::slotReset() {
+ if (m_loadedTrack) {
+ disconnect(m_loadedTrack.data(), SIGNAL(coverArtUpdated()),
+ this, SLOT(slotTrackCoverArtUpdated()));
+ }
m_loadedTrack = TrackPointer();
m_lastRequestedCover = CoverInfo();
m_loadedCover = QPixmap();
@@ -114,26 +116,37 @@ void WCoverArt::slotPixmapFound(int trackId, QPixmap pixmap) {
}
}
+void WCoverArt::slotTrackCoverArtUpdated() {
+ if (m_loadedTrack) {
+ m_lastRequestedCover = m_loadedTrack->getCoverInfo();
+ m_lastRequestedCover.trackId = m_loadedTrack->getId();
+ m_lastRequestedCover.trackLocation = m_loadedTrack->getLocation();
+ CoverArtCache* pCache = CoverArtCache::instance();
+ if (pCache != NULL) {
+ pCache->requestCover(m_lastRequestedCover);
+ }
+ }
+}
+
void WCoverArt::slotLoadTrack(TrackPointer pTrack) {
+ if (m_loadedTrack) {
+ disconnect(m_loadedTrack.data(), SIGNAL(coverArtUpdated()),
+ this, SLOT(slotTrackCoverArtUpdated()));
+ }
m_lastRequestedCover = CoverInfo();
m_loadedCover = QPixmap();
m_loadedCoverScaled = QPixmap();
m_loadedTrack = pTrack;
+ if (m_loadedTrack) {
+ connect(m_loadedTrack.data(), SIGNAL(coverArtUpdated()),
+ this, SLOT(slotTrackCoverArtUpdated()));
+ }
if (!m_bEnable) {
return;
}
- if (m_loadedTrack) {
- m_lastRequestedCover = m_loadedTrack->getCoverInfo();
- m_lastRequestedCover.trackId = m_loadedTrack->getId();
- m_lastRequestedCover.trackLocation = m_loadedTrack->getLocation();
-
- CoverArtCache* pCache = CoverArtCache::instance();
- if (pCache != NULL) {
- pCache->requestCover(m_lastRequestedCover);
- }
- }
+ slotTrackCoverArtUpdated();
}
QPixmap WCoverArt::scaledCoverArt(const QPixmap& normal) {
diff --git a/src/widget/wcoverart.h b/src/widget/wcoverart.h
index d071b3ee1b..fcd27f725c 100644
--- a/src/widget/wcoverart.h
+++ b/src/widget/wcoverart.h
@@ -34,6 +34,7 @@ class WCoverArt : public QWidget, public WBaseWidget {
private slots:
void slotPixmapFound(int trackId, QPixmap pixmap);
void slotCoverArtSelected(const CoverArt& art);
+ void slotTrackCoverArtUpdated();
protected:
void paintEvent(QPaintEvent*);