From ca10920bb546ea3c15fde7c0e4ae86a78fa2f47a Mon Sep 17 00:00:00 2001 From: Jonas Kvinge Date: Sun, 31 Oct 2021 23:24:32 +0100 Subject: [PATCH] Add option for overwriting database rating --- src/collection/collectionwatcher.cpp | 5 +++-- src/collection/collectionwatcher.h | 1 + src/core/song.cpp | 4 ++-- src/core/song.h | 2 +- src/dialogs/edittagdialog.cpp | 2 +- src/settings/collectionsettingspage.cpp | 2 ++ src/settings/collectionsettingspage.ui | 7 +++++++ 7 files changed, 17 insertions(+), 6 deletions(-) diff --git a/src/collection/collectionwatcher.cpp b/src/collection/collectionwatcher.cpp index 815717cf8..4ae04d02e 100644 --- a/src/collection/collectionwatcher.cpp +++ b/src/collection/collectionwatcher.cpp @@ -150,6 +150,7 @@ void CollectionWatcher::ReloadSettings() { song_tracking_ = s.value("song_tracking", false).toBool(); mark_songs_unavailable_ = song_tracking_ ? true : s.value("mark_songs_unavailable", true).toBool(); expire_unavailable_songs_days_ = s.value("expire_unavailable_songs", 60).toInt(); + overwrite_rating_ = s.value("overwrite_rating", false).toBool(); s.endGroup(); best_image_filters_.clear(); @@ -726,7 +727,7 @@ void CollectionWatcher::UpdateCueAssociatedSongs(const QString &file, const Song matching_cue_song = sections_map[new_cue_song.beginning_nanosec()]; new_cue_song.set_id(matching_cue_song.id()); if (!new_cue_song.has_embedded_cover()) new_cue_song.set_art_automatic(image); - new_cue_song.MergeUserSetData(matching_cue_song); + new_cue_song.MergeUserSetData(matching_cue_song, true); AddChangedSong(file, matching_cue_song, new_cue_song, t); used_ids.insert(matching_cue_song.id()); } @@ -769,7 +770,7 @@ void CollectionWatcher::UpdateNonCueAssociatedSong(const QString &file, song_on_disk.set_id(matching_song.id()); song_on_disk.set_fingerprint(fingerprint); if (!song_on_disk.has_embedded_cover()) song_on_disk.set_art_automatic(image); - song_on_disk.MergeUserSetData(matching_song); + song_on_disk.MergeUserSetData(matching_song, !overwrite_rating_); AddChangedSong(file, matching_song, song_on_disk, t); } diff --git a/src/collection/collectionwatcher.h b/src/collection/collectionwatcher.h index c372ed907..80e0f984e 100644 --- a/src/collection/collectionwatcher.h +++ b/src/collection/collectionwatcher.h @@ -213,6 +213,7 @@ class CollectionWatcher : public QObject { bool song_tracking_; bool mark_songs_unavailable_; int expire_unavailable_songs_days_; + bool overwrite_rating_; bool stop_requested_; bool rescan_in_progress_; // True if RescanTracksNow() has been called and is working. diff --git a/src/core/song.cpp b/src/core/song.cpp index eb3e22300..5868c4dec 100644 --- a/src/core/song.cpp +++ b/src/core/song.cpp @@ -1680,13 +1680,13 @@ void Song::ToXesam(QVariantMap *map) const { } -void Song::MergeUserSetData(const Song &other) { +void Song::MergeUserSetData(const Song &other, const bool merge_rating) { if (other.playcount() > 0) { set_playcount(other.playcount()); } - if (other.rating() > 0) { + if (merge_rating && other.rating() > 0.0F) { set_rating(other.rating()); } diff --git a/src/core/song.h b/src/core/song.h index fb90f2d87..fdb49590c 100644 --- a/src/core/song.h +++ b/src/core/song.h @@ -187,7 +187,7 @@ class Song { // Copies important statistics from the other song to this one, overwriting any data that already exists. // Useful when you want updated tags from disk but you want to keep user stats. - void MergeUserSetData(const Song &other); + void MergeUserSetData(const Song &other, const bool merge_rating); // Save void BindToQuery(SqlQuery *query) const; diff --git a/src/dialogs/edittagdialog.cpp b/src/dialogs/edittagdialog.cpp index a2bd9e16b..51e95aa91 100644 --- a/src/dialogs/edittagdialog.cpp +++ b/src/dialogs/edittagdialog.cpp @@ -393,7 +393,7 @@ QList EditTagDialog::LoadData(const SongList &songs) { Song copy(song); TagReaderClient::Instance()->ReadFileBlocking(copy.url().toLocalFile(), ©); if (copy.is_valid()) { - copy.MergeUserSetData(song); + copy.MergeUserSetData(song, false); ret << Data(copy); } } diff --git a/src/settings/collectionsettingspage.cpp b/src/settings/collectionsettingspage.cpp index 74188526d..afd5fe92c 100644 --- a/src/settings/collectionsettingspage.cpp +++ b/src/settings/collectionsettingspage.cpp @@ -212,6 +212,7 @@ void CollectionSettingsPage::Load() { ui_->checkbox_save_playcounts->setChecked(s.value("save_playcounts", false).toBool()); ui_->checkbox_save_ratings->setChecked(s.value("save_ratings", false).toBool()); + ui_->checkbox_overwrite_rating->setChecked(s.value("overwrite_rating", false).toBool()); #if QT_VERSION >= QT_VERSION_CHECK(5, 15, 0) ui_->checkbox_delete_files->setChecked(s.value("delete_files", false).toBool()); @@ -279,6 +280,7 @@ void CollectionSettingsPage::Save() { s.setValue("save_playcounts", ui_->checkbox_save_playcounts->isChecked()); s.setValue("save_ratings", ui_->checkbox_save_ratings->isChecked()); + s.setValue("overwrite_rating", ui_->checkbox_overwrite_rating->isChecked()); s.setValue("delete_files", ui_->checkbox_delete_files->isChecked()); diff --git a/src/settings/collectionsettingspage.ui b/src/settings/collectionsettingspage.ui index 772513ae5..794aea2fd 100644 --- a/src/settings/collectionsettingspage.ui +++ b/src/settings/collectionsettingspage.ui @@ -560,6 +560,13 @@ If there are no matches then it will use the largest image in the directory. + + + + Overwrite database rating when songs are re-read from disk + + +