When toggling provider button, check if provider can be used by checking if user is logged-in, it this is necessary to make the provider work
This commit is contained in:
parent
da825d4659
commit
f0c8703dbc
|
@ -223,16 +223,26 @@ int GlobalSearch::LoadTracksAsync(const SearchProvider::Result& result) {
|
||||||
return id;
|
return id;
|
||||||
}
|
}
|
||||||
|
|
||||||
void GlobalSearch::SetProviderEnabled(const SearchProvider* const_provider,
|
bool GlobalSearch::SetProviderEnabled(const SearchProvider* const_provider,
|
||||||
bool enabled) {
|
bool enabled) {
|
||||||
SearchProvider* provider = const_cast<SearchProvider*>(const_provider);
|
SearchProvider* provider = const_cast<SearchProvider*>(const_provider);
|
||||||
if (!providers_.contains(provider))
|
if (!providers_.contains(provider))
|
||||||
return;
|
return true;
|
||||||
|
|
||||||
if (providers_[provider].enabled_ != enabled) {
|
if (providers_[provider].enabled_ != enabled) {
|
||||||
|
// If we try to enable this provider but it is not logged in, don't change
|
||||||
|
// state, and show configuration menu, if any
|
||||||
|
if (enabled && !provider->IsLoggedIn()) {
|
||||||
|
provider->ShowConfig();
|
||||||
|
return false;
|
||||||
|
} else {
|
||||||
providers_[provider].enabled_ = enabled;
|
providers_[provider].enabled_ = enabled;
|
||||||
emit ProviderToggled(provider, enabled);
|
emit ProviderToggled(provider, enabled);
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
// TODO: save providers
|
||||||
|
}
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool GlobalSearch::is_provider_enabled(const SearchProvider* const_provider) const {
|
bool GlobalSearch::is_provider_enabled(const SearchProvider* const_provider) const {
|
||||||
|
|
|
@ -34,7 +34,9 @@ public:
|
||||||
static const char* kSettingsGroup;
|
static const char* kSettingsGroup;
|
||||||
|
|
||||||
void AddProvider(SearchProvider* provider);
|
void AddProvider(SearchProvider* provider);
|
||||||
void SetProviderEnabled(const SearchProvider* provider, bool enabled);
|
// Try to change provider state. Returns false if we can't (e.g. we can't
|
||||||
|
// enable a provider because it requires the user to be logged-in)
|
||||||
|
bool SetProviderEnabled(const SearchProvider* provider, bool enabled);
|
||||||
|
|
||||||
int SearchAsync(const QString& query);
|
int SearchAsync(const QString& query);
|
||||||
int LoadArtAsync(const SearchProvider::Result& result);
|
int LoadArtAsync(const SearchProvider::Result& result);
|
||||||
|
|
|
@ -771,5 +771,8 @@ void GlobalSearchWidget::ProviderButtonToggled(bool on) {
|
||||||
if (!provider)
|
if (!provider)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
engine_->SetProviderEnabled(provider, on);
|
if (!engine_->SetProviderEnabled(provider, on)) {
|
||||||
|
// If we were not able to change provider state, toggle back provider button
|
||||||
|
button->toggle();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -131,6 +131,14 @@ void GroovesharkSearchProvider::LoadTracksAsync(int id, const Result& result) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool GroovesharkSearchProvider::IsLoggedIn() {
|
||||||
|
return (service_ && service_->IsLoggedIn());
|
||||||
|
}
|
||||||
|
|
||||||
|
void GroovesharkSearchProvider::ShowConfig() {
|
||||||
|
service_->ShowConfig();
|
||||||
|
}
|
||||||
|
|
||||||
void GroovesharkSearchProvider::FetchAlbum(int id, const Result& result) {
|
void GroovesharkSearchProvider::FetchAlbum(int id, const Result& result) {
|
||||||
service_->FetchSongsForAlbum(id, result.metadata_.url());
|
service_->FetchSongsForAlbum(id, result.metadata_.url());
|
||||||
}
|
}
|
||||||
|
|
|
@ -35,6 +35,8 @@ class GroovesharkSearchProvider : public SearchProvider {
|
||||||
void SearchAsync(int id, const QString& query);
|
void SearchAsync(int id, const QString& query);
|
||||||
void LoadArtAsync(int id, const Result& result);
|
void LoadArtAsync(int id, const Result& result);
|
||||||
void LoadTracksAsync(int id, const Result& result);
|
void LoadTracksAsync(int id, const Result& result);
|
||||||
|
bool IsLoggedIn();
|
||||||
|
void ShowConfig();
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void SearchDone(int id, const SongList& songs);
|
void SearchDone(int id, const SongList& songs);
|
||||||
|
|
|
@ -94,6 +94,11 @@ public:
|
||||||
// ResultsAvailable. Must emit TracksLoaded exactly once with this ID.
|
// ResultsAvailable. Must emit TracksLoaded exactly once with this ID.
|
||||||
virtual void LoadTracksAsync(int id, const Result& result) = 0;
|
virtual void LoadTracksAsync(int id, const Result& result) = 0;
|
||||||
|
|
||||||
|
// If provider needs user login to search and play songs, this method should
|
||||||
|
// be reimplemented
|
||||||
|
virtual bool IsLoggedIn() { return true; }
|
||||||
|
virtual void ShowConfig() { }
|
||||||
|
|
||||||
static QImage ScaleAndPad(const QImage& image);
|
static QImage ScaleAndPad(const QImage& image);
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
|
|
|
@ -192,4 +192,15 @@ void SpotifySearchProvider::AlbumBrowseResponse(const spotify_pb::BrowseAlbumRes
|
||||||
emit TracksLoaded(orig_id, mime_data);
|
emit TracksLoaded(orig_id, mime_data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool SpotifySearchProvider::IsLoggedIn() {
|
||||||
|
if (server()) {
|
||||||
|
return service_->IsLoggedIn();
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
void SpotifySearchProvider::ShowConfig() {
|
||||||
|
if (service_) {
|
||||||
|
return service_->ShowConfig();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -35,6 +35,9 @@ public:
|
||||||
void LoadArtAsync(int id, const Result& result);
|
void LoadArtAsync(int id, const Result& result);
|
||||||
void LoadTracksAsync(int id, const Result& result);
|
void LoadTracksAsync(int id, const Result& result);
|
||||||
|
|
||||||
|
bool IsLoggedIn();
|
||||||
|
void ShowConfig();
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void ServerDestroyed();
|
void ServerDestroyed();
|
||||||
void SearchFinishedSlot(const spotify_pb::SearchResponse& response);
|
void SearchFinishedSlot(const spotify_pb::SearchResponse& response);
|
||||||
|
|
|
@ -61,7 +61,7 @@ class GroovesharkService : public InternetService {
|
||||||
qint64* length_nanosec);
|
qint64* length_nanosec);
|
||||||
void Login(const QString& username, const QString& password);
|
void Login(const QString& username, const QString& password);
|
||||||
void Logout();
|
void Logout();
|
||||||
bool IsLoggedIn() { return !session_id_.isEmpty(); }
|
bool IsLoggedIn() const { return !session_id_.isEmpty(); }
|
||||||
void RetrieveUserPlaylists();
|
void RetrieveUserPlaylists();
|
||||||
void MarkStreamKeyOver30Secs(const QString& stream_key, const QString& server_id);
|
void MarkStreamKeyOver30Secs(const QString& stream_key, const QString& server_id);
|
||||||
void MarkSongComplete(const QString& song_id, const QString& stream_key, const QString& server_id);
|
void MarkSongComplete(const QString& song_id, const QString& stream_key, const QString& server_id);
|
||||||
|
@ -92,6 +92,9 @@ class GroovesharkService : public InternetService {
|
||||||
void AlbumSearchResult(int id, SongList songs);
|
void AlbumSearchResult(int id, SongList songs);
|
||||||
void AlbumSongsLoaded(int id, SongList songs);
|
void AlbumSongsLoaded(int id, SongList songs);
|
||||||
|
|
||||||
|
public slots:
|
||||||
|
void ShowConfig();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
QModelIndex GetCurrentIndex();
|
QModelIndex GetCurrentIndex();
|
||||||
|
|
||||||
|
@ -107,7 +110,6 @@ class GroovesharkService : public InternetService {
|
||||||
private slots:
|
private slots:
|
||||||
void UpdateTotalSongCount(int count);
|
void UpdateTotalSongCount(int count);
|
||||||
|
|
||||||
void ShowConfig();
|
|
||||||
void SessionCreated();
|
void SessionCreated();
|
||||||
void OpenSearchTab();
|
void OpenSearchTab();
|
||||||
void DoSearch();
|
void DoSearch();
|
||||||
|
|
|
@ -56,6 +56,14 @@ public:
|
||||||
|
|
||||||
virtual QString Icon() { return QString(); }
|
virtual QString Icon() { return QString(); }
|
||||||
|
|
||||||
|
// Services which need user login will need to reimplement this method
|
||||||
|
virtual bool IsLoggedIn() const { return true; }
|
||||||
|
|
||||||
|
public slots:
|
||||||
|
// Show configuration panel for services which have one
|
||||||
|
virtual void ShowConfig() { }
|
||||||
|
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void StreamError(const QString& message);
|
void StreamError(const QString& message);
|
||||||
void StreamMetadataFound(const QUrl& original_url, const Song& song);
|
void StreamMetadataFound(const QUrl& original_url, const Song& song);
|
||||||
|
|
|
@ -68,6 +68,7 @@ public:
|
||||||
|
|
||||||
// Persisted in the settings and updated on each Login().
|
// Persisted in the settings and updated on each Login().
|
||||||
LoginState login_state() const { return login_state_; }
|
LoginState login_state() const { return login_state_; }
|
||||||
|
bool IsLoggedIn() const { return login_state_ == LoginState_LoggedIn; }
|
||||||
|
|
||||||
static void SongFromProtobuf(const spotify_pb::Track& track, Song* song);
|
static void SongFromProtobuf(const spotify_pb::Track& track, Song* song);
|
||||||
|
|
||||||
|
@ -76,6 +77,9 @@ signals:
|
||||||
void LoginFinished(bool success);
|
void LoginFinished(bool success);
|
||||||
void ImageLoaded(const QUrl& url, const QImage& image);
|
void ImageLoaded(const QUrl& url, const QImage& image);
|
||||||
|
|
||||||
|
public slots:
|
||||||
|
void ShowConfig();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual QModelIndex GetCurrentIndex();
|
virtual QModelIndex GetCurrentIndex();
|
||||||
|
|
||||||
|
@ -104,7 +108,6 @@ private slots:
|
||||||
void OpenSearchTab();
|
void OpenSearchTab();
|
||||||
void DoSearch();
|
void DoSearch();
|
||||||
|
|
||||||
void ShowConfig();
|
|
||||||
void SyncPlaylist();
|
void SyncPlaylist();
|
||||||
void BlobDownloadFinished();
|
void BlobDownloadFinished();
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue