parent
5b468823d6
commit
2b812a76fd
@ -42,8 +42,7 @@ AlbumCoverManager::AlbumCoverManager(QNetworkAccessManager* network, QWidget *pa
|
|||||||
cover_fetcher_(new AlbumCoverFetcher(network, this)),
|
cover_fetcher_(new AlbumCoverFetcher(network, this)),
|
||||||
artist_icon_(":/artist.png"),
|
artist_icon_(":/artist.png"),
|
||||||
all_artists_icon_(":/album.png"),
|
all_artists_icon_(":/album.png"),
|
||||||
context_menu_(new QMenu(this))
|
context_menu_(new QMenu(this)) {
|
||||||
{
|
|
||||||
ui_.setupUi(this);
|
ui_.setupUi(this);
|
||||||
|
|
||||||
// Get a square version of nocover.png
|
// 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.drawImage((120 - nocover.width()) / 2, (120 - nocover.height()) / 2, nocover);
|
||||||
p.end();
|
p.end();
|
||||||
no_cover_icon_ = QPixmap::fromImage(square_nocover);
|
no_cover_icon_ = QPixmap::fromImage(square_nocover);
|
||||||
|
}
|
||||||
|
|
||||||
|
AlbumCoverManager::~AlbumCoverManager() {
|
||||||
|
CancelRequests();
|
||||||
|
}
|
||||||
|
|
||||||
|
void AlbumCoverManager::Init() {
|
||||||
// View menu
|
// View menu
|
||||||
QActionGroup* filter_group = new QActionGroup(this);
|
QActionGroup* filter_group = new QActionGroup(this);
|
||||||
filter_all_ = filter_group->addAction(tr("All albums"));
|
filter_all_ = filter_group->addAction(tr("All albums"));
|
||||||
@ -109,10 +114,6 @@ AlbumCoverManager::AlbumCoverManager(QNetworkAccessManager* network, QWidget *pa
|
|||||||
constructed_ = true;
|
constructed_ = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
AlbumCoverManager::~AlbumCoverManager() {
|
|
||||||
CancelRequests();
|
|
||||||
}
|
|
||||||
|
|
||||||
void AlbumCoverManager::CoverLoaderInitialised() {
|
void AlbumCoverManager::CoverLoaderInitialised() {
|
||||||
connect(cover_loader_->Worker().get(), SIGNAL(ImageLoaded(quint64,QImage)),
|
connect(cover_loader_->Worker().get(), SIGNAL(ImageLoaded(quint64,QImage)),
|
||||||
SLOT(CoverImageLoaded(quint64,QImage)));
|
SLOT(CoverImageLoaded(quint64,QImage)));
|
||||||
@ -143,7 +144,9 @@ void AlbumCoverManager::closeEvent(QCloseEvent *) {
|
|||||||
|
|
||||||
void AlbumCoverManager::CancelRequests() {
|
void AlbumCoverManager::CancelRequests() {
|
||||||
cover_loading_tasks_.clear();
|
cover_loading_tasks_.clear();
|
||||||
|
if (cover_loader_ && cover_loader_->Worker()) {
|
||||||
cover_loader_->Worker()->Clear();
|
cover_loader_->Worker()->Clear();
|
||||||
|
}
|
||||||
|
|
||||||
cover_fetching_tasks_.clear();
|
cover_fetching_tasks_.clear();
|
||||||
cover_fetcher_->Clear();
|
cover_fetcher_->Clear();
|
||||||
@ -229,17 +232,42 @@ void AlbumCoverManager::UpdateFilter() {
|
|||||||
const bool hide_with_covers = filter_without_covers_->isChecked();
|
const bool hide_with_covers = filter_without_covers_->isChecked();
|
||||||
const bool hide_without_covers = filter_with_covers_->isChecked();
|
const bool hide_without_covers = filter_with_covers_->isChecked();
|
||||||
|
|
||||||
|
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) {
|
for (int i = 0; i < ui_.albums->count(); ++i) {
|
||||||
QListWidgetItem* item = ui_.albums->item(i);
|
QListWidgetItem* item = ui_.albums->item(i);
|
||||||
QString text = item->text();
|
item->setHidden(ShouldHide(*item, filter, hide));
|
||||||
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));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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() {
|
void AlbumCoverManager::FetchAlbumCovers() {
|
||||||
for (int i=0 ; i<ui_.albums->count() ; ++i) {
|
for (int i=0 ; i<ui_.albums->count() ; ++i) {
|
||||||
QListWidgetItem* item = ui_.albums->item(i);
|
QListWidgetItem* item = ui_.albums->item(i);
|
||||||
|
@ -22,6 +22,8 @@
|
|||||||
|
|
||||||
#include <boost/shared_ptr.hpp>
|
#include <boost/shared_ptr.hpp>
|
||||||
|
|
||||||
|
#include "gtest/gtest_prod.h"
|
||||||
|
|
||||||
#include "ui_albumcovermanager.h"
|
#include "ui_albumcovermanager.h"
|
||||||
#include "backgroundthread.h"
|
#include "backgroundthread.h"
|
||||||
#include "albumcoverloader.h"
|
#include "albumcoverloader.h"
|
||||||
@ -41,6 +43,8 @@ class AlbumCoverManager : public QDialog {
|
|||||||
|
|
||||||
void Reset();
|
void Reset();
|
||||||
|
|
||||||
|
void Init();
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
void SetBackend(boost::shared_ptr<LibraryBackendInterface> backend);
|
void SetBackend(boost::shared_ptr<LibraryBackendInterface> backend);
|
||||||
|
|
||||||
@ -80,8 +84,16 @@ class AlbumCoverManager : public QDialog {
|
|||||||
Role_PathManual,
|
Role_PathManual,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum HideCovers {
|
||||||
|
Hide_None,
|
||||||
|
Hide_WithCovers,
|
||||||
|
Hide_WithoutCovers,
|
||||||
|
};
|
||||||
|
|
||||||
void CancelRequests();
|
void CancelRequests();
|
||||||
|
|
||||||
|
bool ShouldHide(const QListWidgetItem& item, const QString& filter, HideCovers hide) const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
bool constructed_;
|
bool constructed_;
|
||||||
|
|
||||||
@ -104,6 +116,10 @@ class AlbumCoverManager : public QDialog {
|
|||||||
|
|
||||||
QMenu* context_menu_;
|
QMenu* context_menu_;
|
||||||
QList<QListWidgetItem*> context_menu_items_;
|
QList<QListWidgetItem*> context_menu_items_;
|
||||||
|
|
||||||
|
FRIEND_TEST(AlbumCoverManagerTest, HidesItemsWithCover);
|
||||||
|
FRIEND_TEST(AlbumCoverManagerTest, HidesItemsWithoutCover);
|
||||||
|
FRIEND_TEST(AlbumCoverManagerTest, HidesItemsWithFilter);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // ALBUMCOVERMANAGER_H
|
#endif // ALBUMCOVERMANAGER_H
|
||||||
|
@ -114,6 +114,8 @@ MainWindow::MainWindow(QNetworkAccessManager* network, QWidget *parent)
|
|||||||
|
|
||||||
ui_.radio_view->setModel(radio_model_);
|
ui_.radio_view->setModel(radio_model_);
|
||||||
|
|
||||||
|
cover_manager_->Init();
|
||||||
|
|
||||||
// File view connections
|
// File view connections
|
||||||
connect(ui_.file_view, SIGNAL(Queue(QList<QUrl>)), SLOT(QueueFiles(QList<QUrl>)));
|
connect(ui_.file_view, SIGNAL(Queue(QList<QUrl>)), SLOT(QueueFiles(QList<QUrl>)));
|
||||||
connect(ui_.file_view, SIGNAL(PathChanged(QString)), SLOT(FilePathChanged(QString)));
|
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(albumcoverfetcher_test.cpp)
|
||||||
add_test_file(xspfparser_test.cpp)
|
add_test_file(xspfparser_test.cpp)
|
||||||
add_test_file(library_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::InitGoogleMock(&argc, argv);
|
||||||
|
|
||||||
testing::AddGlobalTestEnvironment(new MetatypesEnvironment);
|
testing::AddGlobalTestEnvironment(new MetatypesEnvironment);
|
||||||
QCoreApplication a(argc, argv);
|
QApplication a(argc, argv);
|
||||||
testing::AddGlobalTestEnvironment(new ResourcesEnvironment);
|
testing::AddGlobalTestEnvironment(new ResourcesEnvironment);
|
||||||
|
|
||||||
return RUN_ALL_TESTS();
|
return RUN_ALL_TESTS();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user