1
0
mirror of https://github.com/clementine-player/Clementine synced 2025-02-07 06:35:15 +01:00

Add an option to prefer AlbumArtist tag over Artist when scrobbling to Last.fm. Fixes issue 2901

This commit is contained in:
Kacper "mattrick" Banasik 2012-05-13 16:04:55 +01:00 committed by David Sansome
parent c3fe642779
commit f606ae9ba8
6 changed files with 22 additions and 4 deletions

View File

@ -1001,10 +1001,14 @@ void Song::BindToFtsQuery(QSqlQuery *query) const {
} }
#ifdef HAVE_LIBLASTFM #ifdef HAVE_LIBLASTFM
void Song::ToLastFM(lastfm::Track* track) const { void Song::ToLastFM(lastfm::Track* track, bool prefer_album_artist) const {
lastfm::MutableTrack mtrack(*track); lastfm::MutableTrack mtrack(*track);
mtrack.setArtist(d->artist_); if (prefer_album_artist && !d->albumartist_.isEmpty()) {
mtrack.setArtist(d->albumartist_);
} else {
mtrack.setArtist(d->artist_);
}
mtrack.setAlbum(d->album_); mtrack.setAlbum(d->album_);
mtrack.setTitle(d->title_); mtrack.setTitle(d->title_);
mtrack.setDuration(length_nanosec() / kNsecPerSec); mtrack.setDuration(length_nanosec() / kNsecPerSec);

View File

@ -128,7 +128,7 @@ class Song {
void BindToQuery(QSqlQuery* query) const; void BindToQuery(QSqlQuery* query) const;
void BindToFtsQuery(QSqlQuery* query) const; void BindToFtsQuery(QSqlQuery* query) const;
#ifdef HAVE_LIBLASTFM #ifdef HAVE_LIBLASTFM
void ToLastFM(lastfm::Track* track) const; void ToLastFM(lastfm::Track* track, bool prefer_album_artist) const;
#endif #endif
void ToXesam(QVariantMap* map) const; void ToXesam(QVariantMap* map) const;
void ToProtobuf(pb::tagreader::SongMetadata* pb) const; void ToProtobuf(pb::tagreader::SongMetadata* pb) const;

View File

@ -149,6 +149,7 @@ void LastFMService::ReloadSettings() {
scrobbling_enabled_ = settings.value("ScrobblingEnabled", true).toBool(); scrobbling_enabled_ = settings.value("ScrobblingEnabled", true).toBool();
buttons_visible_ = settings.value("ShowLoveBanButtons", true).toBool(); buttons_visible_ = settings.value("ShowLoveBanButtons", true).toBool();
scrobble_button_visible_ = settings.value("ShowScrobbleButton", true).toBool(); scrobble_button_visible_ = settings.value("ShowScrobbleButton", true).toBool();
prefer_albumartist_ = settings.value("PreferAlbumArtist", false).toBool();
friend_names_.Load(); friend_names_.Load();
//avoid emitting signal if it's not changed //avoid emitting signal if it's not changed
@ -156,6 +157,7 @@ void LastFMService::ReloadSettings() {
emit ScrobblingEnabledChanged(scrobbling_enabled_); emit ScrobblingEnabledChanged(scrobbling_enabled_);
emit ButtonVisibilityChanged(buttons_visible_); emit ButtonVisibilityChanged(buttons_visible_);
emit ScrobbleButtonVisibilityChanged(scrobble_button_visible_); emit ScrobbleButtonVisibilityChanged(scrobble_button_visible_);
emit PreferAlbumArtistChanged(prefer_albumartist_);
} }
void LastFMService::ShowConfig() { void LastFMService::ShowConfig() {
@ -496,7 +498,7 @@ lastfm::Track LastFMService::TrackFromSong(const Song &song) const {
return last_track_; return last_track_;
lastfm::Track ret; lastfm::Track ret;
song.ToLastFM(&ret); song.ToLastFM(&ret, PreferAlbumArtist());
return ret; return ret;
} }

View File

@ -101,6 +101,7 @@ class LastFMService : public InternetService {
bool IsScrobblingEnabled() const { return scrobbling_enabled_; } bool IsScrobblingEnabled() const { return scrobbling_enabled_; }
bool AreButtonsVisible() const { return buttons_visible_; } bool AreButtonsVisible() const { return buttons_visible_; }
bool IsScrobbleButtonVisible() const { return scrobble_button_visible_; } bool IsScrobbleButtonVisible() const { return scrobble_button_visible_; }
bool PreferAlbumArtist() const { return prefer_albumartist_; }
bool HasConnectionProblems() const { return connection_problems_; } bool HasConnectionProblems() const { return connection_problems_; }
void Authenticate(const QString& username, const QString& password); void Authenticate(const QString& username, const QString& password);
@ -132,6 +133,7 @@ class LastFMService : public InternetService {
void ScrobblingEnabledChanged(bool value); void ScrobblingEnabledChanged(bool value);
void ButtonVisibilityChanged(bool value); void ButtonVisibilityChanged(bool value);
void ScrobbleButtonVisibilityChanged(bool value); void ScrobbleButtonVisibilityChanged(bool value);
void PreferAlbumArtistChanged(bool value);
void ScrobblerStatus(int value); void ScrobblerStatus(int value);
void UpdatedSubscriberStatus(bool is_subscriber); void UpdatedSubscriberStatus(bool is_subscriber);
void ScrobbledRadioStream(); void ScrobbledRadioStream();
@ -212,6 +214,7 @@ class LastFMService : public InternetService {
bool scrobbling_enabled_; bool scrobbling_enabled_;
bool buttons_visible_; bool buttons_visible_;
bool scrobble_button_visible_; bool scrobble_button_visible_;
bool prefer_albumartist_;
QStandardItem* root_item_; QStandardItem* root_item_;
QStandardItem* artist_list_; QStandardItem* artist_list_;

View File

@ -86,6 +86,7 @@ void LastFMSettingsPage::Load() {
ui_->scrobble->setChecked(service_->IsScrobblingEnabled()); ui_->scrobble->setChecked(service_->IsScrobblingEnabled());
ui_->love_ban_->setChecked(service_->AreButtonsVisible()); ui_->love_ban_->setChecked(service_->AreButtonsVisible());
ui_->scrobble_button->setChecked(service_->IsScrobbleButtonVisible()); ui_->scrobble_button->setChecked(service_->IsScrobbleButtonVisible());
ui_->prefer_albumartist->setChecked(service_->PreferAlbumArtist());
if (service_->IsAuthenticated()) { if (service_->IsAuthenticated()) {
service_->UpdateSubscriberStatus(); service_->UpdateSubscriberStatus();
@ -116,6 +117,7 @@ void LastFMSettingsPage::Save() {
s.setValue("ScrobblingEnabled", ui_->scrobble->isChecked()); s.setValue("ScrobblingEnabled", ui_->scrobble->isChecked());
s.setValue("ShowLoveBanButtons", ui_->love_ban_->isChecked()); s.setValue("ShowLoveBanButtons", ui_->love_ban_->isChecked());
s.setValue("ShowScrobbleButton", ui_->scrobble_button->isChecked()); s.setValue("ShowScrobbleButton", ui_->scrobble_button->isChecked());
s.setValue("PreferAlbumArtist", ui_->prefer_albumartist->isChecked());
s.endGroup(); s.endGroup();
service_->ReloadSettings(); service_->ReloadSettings();

View File

@ -97,6 +97,13 @@
</property> </property>
</widget> </widget>
</item> </item>
<item>
<widget class="QCheckBox" name="prefer_albumartist">
<property name="text">
<string>Use Album Artist tag when available</string>
</property>
</widget>
</item>
</layout> </layout>
</widget> </widget>
</item> </item>