EditTagDialog: Fix saving play statistics

Fixes #1124
This commit is contained in:
Jonas Kvinge
2023-02-10 22:51:48 +01:00
parent 3d4c98d981
commit a5c1f4b0ee
11 changed files with 93 additions and 41 deletions

View File

@@ -219,9 +219,9 @@ void SCollection::SyncPlaycountAndRatingToFiles() {
}
void SCollection::SongsPlaycountChanged(const SongList &songs) {
void SCollection::SongsPlaycountChanged(const SongList &songs, const bool save_tags) {
if (save_playcounts_to_files_) {
if (save_tags || save_playcounts_to_files_) {
app_->tag_reader_client()->UpdateSongsPlaycount(songs);
}

View File

@@ -78,7 +78,7 @@ class SCollection : public QObject {
private slots:
void ExitReceived();
void SongsPlaycountChanged(const SongList &songs);
void SongsPlaycountChanged(const SongList &songs, const bool save_tags = false);
void SongsRatingChanged(const SongList &songs, const bool save_tags = false);
signals:

View File

@@ -140,8 +140,8 @@ void CollectionBackend::IncrementSkipCountAsync(const int id, const float progre
QMetaObject::invokeMethod(this, "IncrementSkipCount", Qt::QueuedConnection, Q_ARG(int, id), Q_ARG(float, progress));
}
void CollectionBackend::ResetStatisticsAsync(const int id) {
QMetaObject::invokeMethod(this, "ResetStatistics", Qt::QueuedConnection, Q_ARG(int, id));
void CollectionBackend::ResetStatisticsAsync(const int id, const bool save_tags) {
QMetaObject::invokeMethod(this, "ResetStatistics", Qt::QueuedConnection, Q_ARG(int, id), Q_ARG(bool, save_tags));
}
void CollectionBackend::LoadDirectories() {
@@ -714,7 +714,7 @@ void CollectionBackend::UpdateSongsBySongID(const SongMap &new_songs) {
Song old_song = old_songs[new_song.song_id()];
if (!new_song.IsMetadataEqual(old_song)) { // Update existing song.
if (!new_song.IsAllMetadataEqual(old_song)) { // Update existing song.
{
SqlQuery q(db);
@@ -1776,7 +1776,7 @@ void CollectionBackend::IncrementSkipCount(const int id, const float progress) {
}
void CollectionBackend::ResetStatistics(const int id) {
void CollectionBackend::ResetStatistics(const int id, const bool save_tags) {
if (id == -1) return;
@@ -1792,7 +1792,7 @@ void CollectionBackend::ResetStatistics(const int id) {
}
Song new_song = GetSongById(id, db);
emit SongsStatisticsChanged(SongList() << new_song);
emit SongsStatisticsChanged(SongList() << new_song, save_tags);
}
@@ -1927,7 +1927,7 @@ void CollectionBackend::UpdateLastPlayed(const QString &artist, const QString &a
}
void CollectionBackend::UpdatePlayCount(const QString &artist, const QString &title, const int playcount) {
void CollectionBackend::UpdatePlayCount(const QString &artist, const QString &title, const int playcount, const bool save_tags) {
SongList songs = GetSongsBy(artist, QString(), title);
if (songs.isEmpty()) {
@@ -1949,7 +1949,7 @@ void CollectionBackend::UpdatePlayCount(const QString &artist, const QString &ti
}
}
emit SongsStatisticsChanged(SongList() << songs);
emit SongsStatisticsChanged(SongList() << songs, save_tags);
}

View File

@@ -200,7 +200,7 @@ class CollectionBackend : public CollectionBackendInterface {
void IncrementPlayCountAsync(const int id);
void IncrementSkipCountAsync(const int id, const float progress);
void ResetStatisticsAsync(const int id);
void ResetStatisticsAsync(const int id, const bool save_tags = false);
void DeleteAllAsync();
@@ -236,13 +236,13 @@ class CollectionBackend : public CollectionBackendInterface {
void ForceCompilation(const QString &album, const QList<QString> &artists, const bool on);
void IncrementPlayCount(const int id);
void IncrementSkipCount(const int id, const float progress);
void ResetStatistics(const int id);
void ResetStatistics(const int id, const bool save_tags);
void DeleteAll();
void SongPathChanged(const Song &song, const QFileInfo &new_file, const std::optional<int> new_collection_directory_id);
SongList GetSongsBy(const QString &artist, const QString &album, const QString &title);
void UpdateLastPlayed(const QString &artist, const QString &album, const QString &title, const qint64 lastplayed);
void UpdatePlayCount(const QString &artist, const QString &title, const int playcount);
void UpdatePlayCount(const QString &artist, const QString &title, const int playcount, const bool save_tags = false);
void UpdateSongRating(const int id, const float rating, const bool save_tags = false);
void UpdateSongsRating(const QList<int> &id_list, const float rating, const bool save_tags = false);
@@ -256,7 +256,7 @@ class CollectionBackend : public CollectionBackendInterface {
void SongsDiscovered(SongList);
void SongsDeleted(SongList);
void SongsStatisticsChanged(SongList);
void SongsStatisticsChanged(SongList, bool = false);
void DatabaseReset();

View File

@@ -763,7 +763,7 @@ void CollectionWatcher::UpdateNonCueAssociatedSong(const QString &file,
const Song &matching_song = matching_songs.first();
if (cue_deleted) {
for (const Song &song : matching_songs) {
if (!song.IsMetadataAndMoreEqual(matching_song)) {
if (!song.IsAllMetadataEqual(matching_song)) {
t->deleted_songs << song;
}
}
@@ -855,6 +855,14 @@ void CollectionWatcher::AddChangedSong(const QString &file, const Song &matching
changes << "metadata";
notify_new = true;
}
if (!matching_song.IsStatisticsEqual(new_song)) {
changes << "statistics";
notify_new = true;
}
if (!matching_song.IsRatingEqual(new_song)) {
changes << "rating";
notify_new = true;
}
if (matching_song.art_automatic() != new_song.art_automatic() || matching_song.art_manual() != new_song.art_manual()) {
changes << "album art";
notify_new = true;