Support album covers and loading tracks from Grooveshark in global
search.
This commit is contained in:
parent
dd017e99ee
commit
30014f512e
@ -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);
|
||||
}
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user