From 7a95dffc427f6d3559d3ff6cb54981e3a9f7d9f3 Mon Sep 17 00:00:00 2001 From: Max Linke Date: Mon, 8 Sep 2014 18:13:39 +0200 Subject: Make cover in dlgtrackinfo work with cancel We want that changes to the cover in dlgtrackinfo behave similar to changing other values of the track. This required me to rework how WCoverArtMenu works. WCoverArtMenu is now only a common menu that DOES NOT CHANGE the database instead the widget implementing the menu does this now when it sees fit. Another important change to make this work is that 'CoverArtCache::searchImage' can now be called from any class without the need use 'requestCover'. This is necessary to reload the cover from the ID3tags/folder without updating the DB. This is ok in this case because we only search for 1 cover and we will only block the UI thread for a fraction of a second. I also think this is ok in this special case because changing covers won't happen very often and a user will to this one track at a time anyway, while the normal cover display requires us to provides covers for several tracks simultaneously. --- src/widget/wcoverartmenu.cpp | 35 ++++++++++++++++------------------- 1 file changed, 16 insertions(+), 19 deletions(-) (limited to 'src/widget/wcoverartmenu.cpp') 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)); } -- cgit v1.2.3