parent
5b468823d6
commit
2b812a76fd
@ -42,8 +42,7 @@ AlbumCoverManager::AlbumCoverManager(QNetworkAccessManager* network, QWidget *pa
|
||||
cover_fetcher_(new AlbumCoverFetcher(network, this)),
|
||||
artist_icon_(":/artist.png"),
|
||||
all_artists_icon_(":/album.png"),
|
||||
context_menu_(new QMenu(this))
|
||||
{
|
||||
context_menu_(new QMenu(this)) {
|
||||
ui_.setupUi(this);
|
||||
|
||||
// Get a square version of nocover.png
|
||||
@ -55,7 +54,13 @@ AlbumCoverManager::AlbumCoverManager(QNetworkAccessManager* network, QWidget *pa
|
||||
p.drawImage((120 - nocover.width()) / 2, (120 - nocover.height()) / 2, nocover);
|
||||
p.end();
|
||||
no_cover_icon_ = QPixmap::fromImage(square_nocover);
|
||||
}
|
||||
|
||||
AlbumCoverManager::~AlbumCoverManager() {
|
||||
CancelRequests();
|
||||
}
|
||||
|
||||
void AlbumCoverManager::Init() {
|
||||
// View menu
|
||||
QActionGroup* filter_group = new QActionGroup(this);
|
||||
filter_all_ = filter_group->addAction(tr("All albums"));
|
||||
@ -109,10 +114,6 @@ AlbumCoverManager::AlbumCoverManager(QNetworkAccessManager* network, QWidget *pa
|
||||
constructed_ = true;
|
||||
}
|
||||
|
||||
AlbumCoverManager::~AlbumCoverManager() {
|
||||
CancelRequests();
|
||||
}
|
||||
|
||||
void AlbumCoverManager::CoverLoaderInitialised() {
|
||||
connect(cover_loader_->Worker().get(), SIGNAL(ImageLoaded(quint64,QImage)),
|
||||
SLOT(CoverImageLoaded(quint64,QImage)));
|
||||
@ -143,7 +144,9 @@ void AlbumCoverManager::closeEvent(QCloseEvent *) {
|
||||
|
||||
void AlbumCoverManager::CancelRequests() {
|
||||
cover_loading_tasks_.clear();
|
||||
cover_loader_->Worker()->Clear();
|
||||
if (cover_loader_ && cover_loader_->Worker()) {
|
||||
cover_loader_->Worker()->Clear();
|
||||
}
|
||||
|
||||
cover_fetching_tasks_.clear();
|
||||
cover_fetcher_->Clear();
|
||||
@ -229,15 +232,40 @@ void AlbumCoverManager::UpdateFilter() {
|
||||
const bool hide_with_covers = filter_without_covers_->isChecked();
|
||||
const bool hide_without_covers = filter_with_covers_->isChecked();
|
||||
|
||||
for (int i=0 ; i<ui_.albums->count() ; ++i) {
|
||||
QListWidgetItem* item = ui_.albums->item(i);
|
||||
QString text = item->text();
|
||||
bool has_cover = item->icon().cacheKey() != no_cover_icon_.cacheKey();
|
||||
|
||||
item->setHidden((!filter.isEmpty() && !text.toLower().contains(filter)) ||
|
||||
(has_cover && hide_with_covers) ||
|
||||
(!has_cover && hide_without_covers));
|
||||
HideCovers hide = Hide_None;
|
||||
if (hide_with_covers) {
|
||||
hide = Hide_WithCovers;
|
||||
} else if (hide_without_covers) {
|
||||
hide = Hide_WithoutCovers;
|
||||
}
|
||||
|
||||
for (int i = 0; i < ui_.albums->count(); ++i) {
|
||||
QListWidgetItem* item = ui_.albums->item(i);
|
||||
item->setHidden(ShouldHide(*item, filter, hide));
|
||||
}
|
||||
}
|
||||
|
||||
bool AlbumCoverManager::ShouldHide(
|
||||
const QListWidgetItem& item, const QString& filter, HideCovers hide) const {
|
||||
bool has_cover = item.icon().cacheKey() != no_cover_icon_.cacheKey();
|
||||
if (hide == Hide_WithCovers && has_cover) {
|
||||
return true;
|
||||
} else if (hide == Hide_WithoutCovers && !has_cover) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (filter.isEmpty()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
QStringList query = filter.split(' ');
|
||||
foreach (const QString& s, query) {
|
||||
if (item.text().contains(s, Qt::CaseInsensitive)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void AlbumCoverManager::FetchAlbumCovers() {
|
||||
|
@ -22,6 +22,8 @@
|
||||
|
||||
#include <boost/shared_ptr.hpp>
|
||||
|
||||
#include "gtest/gtest_prod.h"
|
||||
|
||||
#include "ui_albumcovermanager.h"
|
||||
#include "backgroundthread.h"
|
||||
#include "albumcoverloader.h"
|
||||
@ -41,6 +43,8 @@ class AlbumCoverManager : public QDialog {
|
||||
|
||||
void Reset();
|
||||
|
||||
void Init();
|
||||
|
||||
public slots:
|
||||
void SetBackend(boost::shared_ptr<LibraryBackendInterface> backend);
|
||||
|
||||
@ -80,8 +84,16 @@ class AlbumCoverManager : public QDialog {
|
||||
Role_PathManual,
|
||||
};
|
||||
|
||||
enum HideCovers {
|
||||
Hide_None,
|
||||
Hide_WithCovers,
|
||||
Hide_WithoutCovers,
|
||||
};
|
||||
|
||||
void CancelRequests();
|
||||
|
||||
bool ShouldHide(const QListWidgetItem& item, const QString& filter, HideCovers hide) const;
|
||||
|
||||
private:
|
||||
bool constructed_;
|
||||
|
||||
@ -104,6 +116,10 @@ class AlbumCoverManager : public QDialog {
|
||||
|
||||
QMenu* context_menu_;
|
||||
QList<QListWidgetItem*> context_menu_items_;
|
||||
|
||||
FRIEND_TEST(AlbumCoverManagerTest, HidesItemsWithCover);
|
||||
FRIEND_TEST(AlbumCoverManagerTest, HidesItemsWithoutCover);
|
||||
FRIEND_TEST(AlbumCoverManagerTest, HidesItemsWithFilter);
|
||||
};
|
||||
|
||||
#endif // ALBUMCOVERMANAGER_H
|
||||
|
@ -114,6 +114,8 @@ MainWindow::MainWindow(QNetworkAccessManager* network, QWidget *parent)
|
||||
|
||||
ui_.radio_view->setModel(radio_model_);
|
||||
|
||||
cover_manager_->Init();
|
||||
|
||||
// File view connections
|
||||
connect(ui_.file_view, SIGNAL(Queue(QList<QUrl>)), SLOT(QueueFiles(QList<QUrl>)));
|
||||
connect(ui_.file_view, SIGNAL(PathChanged(QString)), SLOT(FilePathChanged(QString)));
|
||||
|
@ -75,3 +75,4 @@ add_test_file(librarybackend_test.cpp)
|
||||
add_test_file(albumcoverfetcher_test.cpp)
|
||||
add_test_file(xspfparser_test.cpp)
|
||||
add_test_file(library_test.cpp)
|
||||
add_test_file(albumcovermanager_test.cpp)
|
||||
|
42
tests/albumcovermanager_test.cpp
Normal file
42
tests/albumcovermanager_test.cpp
Normal file
@ -0,0 +1,42 @@
|
||||
#include "albumcovermanager.h"
|
||||
|
||||
#include "gtest/gtest.h"
|
||||
|
||||
#include "mock_networkaccessmanager.h"
|
||||
|
||||
class AlbumCoverManagerTest : public ::testing::Test {
|
||||
protected:
|
||||
AlbumCoverManagerTest()
|
||||
: manager_(&network_) {
|
||||
}
|
||||
|
||||
MockNetworkAccessManager network_;
|
||||
AlbumCoverManager manager_;
|
||||
};
|
||||
|
||||
TEST_F(AlbumCoverManagerTest, HidesItemsWithCover) {
|
||||
QListWidgetItem hidden_item;
|
||||
EXPECT_TRUE(manager_.ShouldHide(hidden_item, QString(), AlbumCoverManager::Hide_WithCovers));
|
||||
QListWidgetItem shown_item;
|
||||
shown_item.setIcon(manager_.no_cover_icon_);
|
||||
EXPECT_FALSE(manager_.ShouldHide(shown_item, QString(), AlbumCoverManager::Hide_WithCovers));
|
||||
}
|
||||
|
||||
TEST_F(AlbumCoverManagerTest, HidesItemsWithoutCover) {
|
||||
QListWidgetItem hidden_item;
|
||||
hidden_item.setIcon(manager_.no_cover_icon_);
|
||||
EXPECT_TRUE(manager_.ShouldHide(hidden_item, QString(), AlbumCoverManager::Hide_WithoutCovers));
|
||||
QListWidgetItem shown_item;
|
||||
EXPECT_FALSE(manager_.ShouldHide(shown_item, QString(), AlbumCoverManager::Hide_WithoutCovers));
|
||||
}
|
||||
|
||||
TEST_F(AlbumCoverManagerTest, HidesItemsWithFilter) {
|
||||
QListWidgetItem hidden_item;
|
||||
hidden_item.setText("barbaz");
|
||||
EXPECT_TRUE(manager_.ShouldHide(hidden_item, "foo", AlbumCoverManager::Hide_None));
|
||||
EXPECT_TRUE(manager_.ShouldHide(hidden_item, "foo abc", AlbumCoverManager::Hide_None));
|
||||
QListWidgetItem shown_item;
|
||||
shown_item.setText("foobar");
|
||||
EXPECT_FALSE(manager_.ShouldHide(shown_item, "foo", AlbumCoverManager::Hide_None));
|
||||
EXPECT_FALSE(manager_.ShouldHide(shown_item, "abc bar", AlbumCoverManager::Hide_None));
|
||||
}
|
@ -25,7 +25,7 @@ int main(int argc, char** argv) {
|
||||
testing::InitGoogleMock(&argc, argv);
|
||||
|
||||
testing::AddGlobalTestEnvironment(new MetatypesEnvironment);
|
||||
QCoreApplication a(argc, argv);
|
||||
QApplication a(argc, argv);
|
||||
testing::AddGlobalTestEnvironment(new ResourcesEnvironment);
|
||||
|
||||
return RUN_ALL_TESTS();
|
||||
|
Loading…
x
Reference in New Issue
Block a user