summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/dlgtrackinfo.cpp18
-rw-r--r--src/dlgtrackinfo.h3
-rw-r--r--src/library/coverartcache.cpp2
-rw-r--r--src/library/coverartcache.h25
-rw-r--r--src/skin/legacyskinparser.cpp3
-rw-r--r--src/widget/wcoverart.cpp27
-rw-r--r--src/widget/wcoverart.h8
-rw-r--r--src/widget/wcoverartmenu.cpp35
-rw-r--r--src/widget/wcoverartmenu.h12
9 files changed, 89 insertions, 44 deletions
diff --git a/src/dlgtrackinfo.cpp b/src/dlgtrackinfo.cpp
index 64b770fa02..cdd9c4a84b 100644
--- a/src/dlgtrackinfo.cpp
+++ b/src/dlgtrackinfo.cpp
@@ -81,9 +81,9 @@ void DlgTrackInfo::init(){
connect(CoverArtCache::instance(), SIGNAL(pixmapFound(int, QPixmap)),
this, SLOT(slotPixmapFound(int, QPixmap)), Qt::DirectConnection);
connect(m_pCoverMenu,
- SIGNAL(coverLocationUpdated(const QString&, const QString&)),
+ SIGNAL(coverLocationUpdated(const QString&, const QString&, QPixmap)),
this,
- SLOT(slotCoverLocationUpdated(const QString&, const QString&)));
+ SLOT(slotCoverLocationUpdated(const QString&, const QString&, QPixmap)));
}
void DlgTrackInfo::closeEvent(QCloseEvent*) {
@@ -229,9 +229,13 @@ QPixmap DlgTrackInfo::scaledCoverArt(QPixmap original) {
}
void DlgTrackInfo::slotCoverLocationUpdated(const QString& newLoc,
- const QString& oldLoc) {
+ const QString& oldLoc,
+ QPixmap px) {
if (isVisible() && m_loadedCover.first == oldLoc) {
m_loadedCover.first = newLoc;
+ px = scaledCoverArt(px);
+ coverArt->setPixmap(px);
+ update();
}
}
@@ -398,6 +402,14 @@ void DlgTrackInfo::saveTrack() {
qDebug() << "Deleting cue" << pCue->getId() << pCue->getHotCue();
m_pLoadedTrack->removeCue(pCue);
}
+
+ bool res = CoverArtCache::instance()->changeCoverArt(m_pLoadedTrack->getId(),
+ m_loadedCover.first);
+
+ if (!res) {
+ QMessageBox::warning(this, tr("Change Cover Art"),
+ tr("Could not change the cover art."));
+ }
}
void DlgTrackInfo::unloadTrack(bool save) {
diff --git a/src/dlgtrackinfo.h b/src/dlgtrackinfo.h
index d50ea09c18..5271cdde99 100644
--- a/src/dlgtrackinfo.h
+++ b/src/dlgtrackinfo.h
@@ -57,7 +57,8 @@ class DlgTrackInfo : public QDialog, public Ui::DlgTrackInfo {
void slotOpenInFileBrowser();
void slotPixmapFound(int trackId, QPixmap pixmap);
- void slotCoverLocationUpdated(const QString& newLoc, const QString& oldLoc);
+ void slotCoverLocationUpdated(const QString& newLoc, const QString& oldLoc,
+ QPixmap px);
void slotCoverMenu(const QPoint& pos);
private:
diff --git a/src/library/coverartcache.cpp b/src/library/coverartcache.cpp
index 239b08d872..331c4eb000 100644
--- a/src/library/coverartcache.cpp
+++ b/src/library/coverartcache.cpp
@@ -55,7 +55,7 @@ bool CoverArtCache::changeCoverArt(int trackId,
}
QImage img = rescaleBigImage(QImage(newCoverLocation));
- QString md5Hash = calculateMD5(img); // NULL is fine
+ QString md5Hash = calculateMD5(img);
if (md5Hash.isEmpty()) {
return false;
}
diff --git a/src/library/coverartcache.h b/src/library/coverartcache.h
index 6d41986a1b..358d098e16 100644
--- a/src/library/coverartcache.h
+++ b/src/library/coverartcache.h
@@ -43,6 +43,20 @@ class CoverArtCache : public QObject, public Singleton<CoverArtCache>
QString getDefaultCoverLocation() { return m_sDefaultCoverLocation; }
QPixmap getDefaultCoverArt() { return m_defaultCover; }
+
+ struct FutureResult {
+ int trackId;
+ QString coverLocation;
+ QString md5Hash;
+ QImage img;
+ QSize croppedSize;
+ bool issueRepaint;
+ bool newImgFound;
+ };
+
+ FutureResult searchImage(CoverArtDAO::CoverArtInfo coverInfo,
+ const QSize& croppedSize,
+ const bool emitSignals);
public slots:
void imageFound();
void imageLoaded();
@@ -59,18 +73,7 @@ class CoverArtCache : public QObject, public Singleton<CoverArtCache>
virtual ~CoverArtCache();
friend class Singleton<CoverArtCache>;
- struct FutureResult {
- int trackId;
- QString coverLocation;
- QString md5Hash;
- QImage img;
- QSize croppedSize;
- bool issueRepaint;
- };
- FutureResult searchImage(CoverArtDAO::CoverArtInfo coverInfo,
- const QSize& croppedSize,
- const bool emitSignals);
FutureResult loadImage(int trackId,
const QString& coverLocation,
const QString& md5Hash,
diff --git a/src/skin/legacyskinparser.cpp b/src/skin/legacyskinparser.cpp
index 6a46de01dd..8696cc7a20 100644
--- a/src/skin/legacyskinparser.cpp
+++ b/src/skin/legacyskinparser.cpp
@@ -961,7 +961,8 @@ QWidget* LegacySkinParser::parseSearchBox(QDomElement node) {
}
QWidget* LegacySkinParser::parseCoverArt(QDomElement node) {
- WCoverArt* pCoverArt = new WCoverArt(m_pParent, m_pConfig);
+ WCoverArt* pCoverArt = new WCoverArt(m_pParent, m_pConfig,
+ m_pLibrary->getTrackCollection());
setupConnections(node, pCoverArt);
setupBaseWidget(node, pCoverArt);
setupWidget(node, pCoverArt);
diff --git a/src/widget/wcoverart.cpp b/src/widget/wcoverart.cpp
index b0297d82e9..37313d08c6 100644
--- a/src/widget/wcoverart.cpp
+++ b/src/widget/wcoverart.cpp
@@ -11,7 +11,8 @@
#include "library/coverartcache.h"
WCoverArt::WCoverArt(QWidget* parent,
- ConfigObject<ConfigValue>* pConfig)
+ ConfigObject<ConfigValue>* pConfig,
+ TrackCollection* pTrackCollection)
: QWidget(parent),
WBaseWidget(this),
m_pConfig(pConfig),
@@ -20,7 +21,8 @@ WCoverArt::WCoverArt(QWidget* parent,
m_bCoverIsVisible(false),
m_pMenu(new WCoverArtMenu(this)),
m_loadedCover(CoverArtCache::instance()->getDefaultCoverArt()),
- m_lastRequestedTrackId(-1) {
+ m_lastRequestedTrackId(-1),
+ m_trackDAO(pTrackCollection->getTrackDAO()) {
// load icon to hide cover
m_iconHide = QPixmap(":/images/library/ic_library_cover_hide.png");
m_iconHide = m_iconHide.scaled(20,
@@ -37,12 +39,29 @@ WCoverArt::WCoverArt(QWidget* parent,
connect(CoverArtCache::instance(), SIGNAL(pixmapFound(int, QPixmap)),
this, SLOT(slotPixmapFound(int, QPixmap)), Qt::DirectConnection);
+ connect(m_pMenu,
+ SIGNAL(coverLocationUpdated(const QString&, const QString&, QPixmap)),
+ this,
+ SLOT(slotCoverLocationUpdated(const QString&, const QString&, QPixmap)));
}
WCoverArt::~WCoverArt() {
delete m_pMenu;
}
+void WCoverArt::slotCoverLocationUpdated(const QString& newLoc,
+ const QString& oldLoc,
+ QPixmap px) {
+ Q_UNUSED(oldLoc);
+ Q_UNUSED(px);
+ bool res = CoverArtCache::instance()->changeCoverArt(m_lastRequestedTrackId,
+ newLoc);
+ if (!res) {
+ QMessageBox::warning(this, tr("Change Cover Art"),
+ tr("Could not change the cover art."));
+ }
+}
+
void WCoverArt::setup(QDomNode node, const SkinContext& context) {
Q_UNUSED(node);
setMouseTracking(TRUE);
@@ -175,9 +194,11 @@ void WCoverArt::mousePressEvent(QMouseEvent* event) {
m_bCoverIsVisible = false;
resize(sizeHint());
} else if (event->button() == Qt::RightButton) { // show context-menu
+ TrackPointer pTrack = m_trackDAO.getTrack(m_lastRequestedTrackId);
m_pMenu->show(event->globalPos(),
m_lastRequestedCover,
- m_lastRequestedTrackId);
+ m_lastRequestedTrackId,
+ pTrack);
}
}
diff --git a/src/widget/wcoverart.h b/src/widget/wcoverart.h
index f3c6b407a1..d4d51a3d7e 100644
--- a/src/widget/wcoverart.h
+++ b/src/widget/wcoverart.h
@@ -9,13 +9,15 @@
#include "configobject.h"
#include "skin/skincontext.h"
#include "trackinfoobject.h"
+#include "library/trackcollection.h"
#include "widget/wbasewidget.h"
#include "widget/wcoverartmenu.h"
class WCoverArt : public QWidget, public WBaseWidget {
Q_OBJECT
public:
- WCoverArt(QWidget* parent, ConfigObject<ConfigValue>* pConfig);
+ WCoverArt(QWidget* parent, ConfigObject<ConfigValue>* pConfig,
+ TrackCollection* pTrackCollection);
virtual ~WCoverArt();
void setup(QDomNode node, const SkinContext& context);
@@ -29,6 +31,9 @@ class WCoverArt : public QWidget, public WBaseWidget {
private slots:
void slotPixmapFound(int trackId, QPixmap pixmap);
+ void slotCoverLocationUpdated(const QString& newLoc,
+ const QString& oldLoc,
+ QPixmap px);
protected:
void paintEvent(QPaintEvent*);
@@ -54,6 +59,7 @@ class WCoverArt : public QWidget, public WBaseWidget {
QPixmap m_iconShow;
int m_lastRequestedTrackId;
+ TrackDAO& m_trackDAO;
QPair<QString, QString> m_lastRequestedCover;
};
diff --git a/src/widget/wcoverartmenu.cpp b/src/widget/wcoverartmenu.cpp
index 9959dea2a9..2464bb968b 100644
--- a/src/widget/wcoverartmenu.cpp
+++ b/src/widget/wcoverartmenu.cpp
@@ -5,6 +5,7 @@
#include "dlgcoverartfullsize.h"
#include "wcoverartmenu.h"
#include "library/coverartcache.h"
+#include "library/dao/coverartdao.h"
WCoverArtMenu::WCoverArtMenu(QWidget *parent)
: QMenu(parent),
@@ -114,24 +115,25 @@ void WCoverArtMenu::slotChange() {
newCover = selectedCover;
}
- bool res = CoverArtCache::instance()->changeCoverArt(m_pTrack->getId(),
- newCover);
- if (!res) {
- QMessageBox::warning(this, tr("Change Cover Art"),
- tr("Could not change the cover art!"));
- return;
- }
-
- emit(coverLocationUpdated(newCover, m_sCoverLocation));
- m_sCoverLocation = newCover;
+ QPixmap px(newCover);
+ emit(coverLocationUpdated(newCover, m_sCoverLocation, px));
}
void WCoverArtMenu::slotReload() {
if (m_iTrackId < 1) {
return;
}
- CoverArtCache::instance()->changeCoverArt(m_iTrackId);
- CoverArtCache::instance()->requestPixmap(m_iTrackId);
+ CoverArtDAO::CoverArtInfo info;
+ info.trackId = m_iTrackId;
+ info.album = m_pTrack->getAlbum();
+ info.trackDirectory = m_pTrack->getDirectory();
+ info.trackLocation = m_pTrack->getLocation();
+ info.trackBaseName = QFileInfo(m_pTrack->getFilename()).baseName();
+ CoverArtCache::FutureResult res =
+ CoverArtCache::instance()->searchImage(info, QSize(0,0), false);
+ QPixmap px;
+ px.convertFromImage(res.img);
+ emit(coverLocationUpdated(res.coverLocation, m_sCoverLocation, px));
}
void WCoverArtMenu::slotUnset() {
@@ -139,11 +141,6 @@ void WCoverArtMenu::slotUnset() {
return;
}
QString newLoc = CoverArtCache::instance()->getDefaultCoverLocation();
- if (!CoverArtCache::instance()->changeCoverArt(m_iTrackId, newLoc)) {
- QMessageBox::warning(this, tr("Unset Cover Art"),
- tr("Could not unset the cover art!"));
- return;
- }
- emit(coverLocationUpdated(newLoc, m_sCoverLocation));
- m_sCoverLocation = newLoc;
+ QPixmap px = CoverArtCache::instance()->getDefaultCoverArt();
+ emit(coverLocationUpdated(newLoc, m_sCoverLocation, px));
}
diff --git a/src/widget/wcoverartmenu.h b/src/widget/wcoverartmenu.h
index 67d6739f4b..040688248d 100644
--- a/src/widget/wcoverartmenu.h
+++ b/src/widget/wcoverartmenu.h
@@ -10,9 +10,12 @@
class WCoverArtMenu : public QMenu {
Q_OBJECT
public:
- // This class implements a context-menu with all CoverArt actions.
- // Callers MUST use the method show(...) to open the menu.
- // do NOT use exec() or popup()
+ // This class implements a context-menu with all CoverArt actions. Callers
+ // MUST use the method show(...) to open the menu. do NOT use exec() or
+ // popup(). This class does NOT CHANGE the database. When the cover is
+ // changed through any of the offered options the 'coverLocationUpdated'
+ // signal will be emitted and the widget using this menu can decide when and
+ // if the new cover should be saved.
WCoverArtMenu(QWidget *parent = 0);
virtual ~WCoverArtMenu();
@@ -21,7 +24,8 @@ class WCoverArtMenu : public QMenu {
signals:
void coverLocationUpdated(const QString& newLocation,
- const QString& oldLocation);
+ const QString& oldLocation,
+ QPixmap px);
private slots:
void slotChange();