Support album covers and loading tracks from Grooveshark in global

search.
This commit is contained in:
John Maguire 2011-09-30 15:58:24 +02:00
parent dd017e99ee
commit 30014f512e
2 changed files with 47 additions and 1 deletions

View File

@ -1,7 +1,11 @@
#include "groovesharksearchprovider.h"
#include <QIcon>
#include "core/logging.h"
#include "covers/albumcoverloader.h"
#include "internet/groovesharkservice.h"
#include "playlist/songmimedata.h"
GroovesharkSearchProvider::GroovesharkSearchProvider(QObject* parent)
: service_(NULL) {
@ -9,9 +13,20 @@ GroovesharkSearchProvider::GroovesharkSearchProvider(QObject* parent)
void GroovesharkSearchProvider::Init(GrooveSharkService* service) {
service_ = service;
SearchProvider::Init("GrooveShark", "grooveshark", QIcon(), true, true);
SearchProvider::Init("GrooveShark", "grooveshark",
QIcon(":providers/grooveshark.png"), true, false);
connect(service_, SIGNAL(SimpleSearchResults(int, SongList)),
SLOT(SearchDone(int, SongList)));
cover_loader_ = new BackgroundThreadImplementation<AlbumCoverLoader, AlbumCoverLoader>(this);
cover_loader_->Start(true);
cover_loader_->Worker()->SetDesiredHeight(kArtHeight);
cover_loader_->Worker()->SetPadOutputImage(true);
cover_loader_->Worker()->SetScaleOutputImage(true);
connect(cover_loader_->Worker().get(),
SIGNAL(ImageLoaded(quint64, QImage)),
SLOT(AlbumArtLoaded(quint64, QImage)));
}
void GroovesharkSearchProvider::SearchAsync(int id, const QString& query) {
@ -44,9 +59,35 @@ void GroovesharkSearchProvider::SearchDone(int id, SongList songs) {
}
void GroovesharkSearchProvider::LoadArtAsync(int id, const Result& result) {
quint64 loader_id = cover_loader_->Worker()->LoadImageAsync(result.metadata_);
cover_loader_tasks_[loader_id] = id;
}
void GroovesharkSearchProvider::AlbumArtLoaded(quint64 id, const QImage& image) {
if (!cover_loader_tasks_.contains(id)) {
return;
}
int original_id = cover_loader_tasks_.take(id);
emit ArtLoaded(original_id, image);
}
void GroovesharkSearchProvider::LoadTracksAsync(int id, const Result& result) {
SongList ret;
switch (result.type_) {
case Result::Type_Track:
ret << result.metadata_;
break;
default:
// TODO: Implement albums in Grooveshark global search.
Q_ASSERT(0);
}
SortSongs(&ret);
SongMimeData* mime_data = new SongMimeData;
mime_data->songs = ret;
emit TracksLoaded(id, mime_data);
}

View File

@ -2,7 +2,9 @@
#define GROOVESHARKSEARCHPROVIDER_H
#include "searchprovider.h"
#include "core/backgroundthread.h"
class AlbumCoverLoader;
class GrooveSharkService;
class GroovesharkSearchProvider : public SearchProvider {
@ -19,11 +21,14 @@ class GroovesharkSearchProvider : public SearchProvider {
private slots:
void SearchDone(int id, SongList songs);
void AlbumArtLoaded(quint64 id, const QImage& image);
private:
GrooveSharkService* service_;
QMap<int, int> pending_searches_;
BackgroundThread<AlbumCoverLoader>* cover_loader_;
QMap<quint64, int> cover_loader_tasks_;
};
#endif