From ba314dd7340fd261765e95a31dacab2996637c4a Mon Sep 17 00:00:00 2001 From: Jonas Kvinge Date: Tue, 2 Jul 2019 00:48:40 +0200 Subject: [PATCH] Set source in backends to fix losing source in InitFromFilePartial() when updating path --- src/collection/collection.cpp | 2 +- src/collection/collectionbackend.cpp | 4 +++- src/collection/collectionbackend.h | 3 ++- src/collection/collectionwatcher.cpp | 3 ++- src/device/connecteddevice.cpp | 1 + src/qobuz/qobuzservice.cpp | 6 +++--- src/subsonic/subsonicservice.cpp | 2 +- src/tidal/tidalservice.cpp | 6 +++--- 8 files changed, 16 insertions(+), 11 deletions(-) diff --git a/src/collection/collection.cpp b/src/collection/collection.cpp index 5364d9f9f..6d1fe12a1 100644 --- a/src/collection/collection.cpp +++ b/src/collection/collection.cpp @@ -55,7 +55,7 @@ SCollection::SCollection(Application *app, QObject *parent) backend_ = new CollectionBackend(); backend()->moveToThread(app->database()->thread()); - backend_->Init(app->database(), kSongsTable, kDirsTable, kSubdirsTable, kFtsTable); + backend_->Init(app->database(), Song::Source_Collection, kSongsTable, kDirsTable, kSubdirsTable, kFtsTable); model_ = new CollectionModel(backend_, app_, this); diff --git a/src/collection/collectionbackend.cpp b/src/collection/collectionbackend.cpp index 579f0440f..057aa5b36 100644 --- a/src/collection/collectionbackend.cpp +++ b/src/collection/collectionbackend.cpp @@ -53,8 +53,9 @@ CollectionBackend::CollectionBackend(QObject *parent) : CollectionBackendInterface(parent), db_(nullptr) {} -void CollectionBackend::Init(Database *db, const QString &songs_table, const QString &dirs_table, const QString &subdirs_table, const QString &fts_table) { +void CollectionBackend::Init(Database *db, const Song::Source source, const QString &songs_table, const QString &dirs_table, const QString &subdirs_table, const QString &fts_table) { db_ = db; + source_ = source; songs_table_ = songs_table; dirs_table_ = dirs_table; subdirs_table_ = subdirs_table; @@ -328,6 +329,7 @@ void CollectionBackend::SongPathChanged(const Song &song, const QFileInfo &new_f // Take a song and update its path Song updated_song = song; updated_song.InitFromFilePartial(new_file.absoluteFilePath()); + updated_song.set_source(source_); SongList updated_songs; updated_songs << updated_song; AddOrUpdateSongs(updated_songs); diff --git a/src/collection/collectionbackend.h b/src/collection/collectionbackend.h index 323a05705..dbb541a60 100644 --- a/src/collection/collectionbackend.h +++ b/src/collection/collectionbackend.h @@ -123,7 +123,7 @@ class CollectionBackend : public CollectionBackendInterface { static const char *kSettingsGroup; Q_INVOKABLE CollectionBackend(QObject *parent = nullptr); - void Init(Database *db, const QString &songs_table, const QString &dirs_table, const QString &subdirs_table, const QString &fts_table); + void Init(Database *db, const Song::Source source, const QString &songs_table, const QString &dirs_table, const QString &subdirs_table, const QString &fts_table); Database *db() const { return db_; } @@ -238,6 +238,7 @@ signals: private: Database *db_; + Song::Source source_; QString songs_table_; QString dirs_table_; QString subdirs_table_; diff --git a/src/collection/collectionwatcher.cpp b/src/collection/collectionwatcher.cpp index aad789c20..784d461f6 100644 --- a/src/collection/collectionwatcher.cpp +++ b/src/collection/collectionwatcher.cpp @@ -357,7 +357,7 @@ void CollectionWatcher::ScanSubdirectory(const QString &path, const Subdirectory // associated cue QString matching_cue = NoExtensionPart(file) + ".cue"; - Song matching_song; + Song matching_song(source_); if (FindSongByPath(songs_in_db, file, &matching_song)) { uint matching_cue_mtime = GetMtimeForCue(matching_cue); @@ -553,6 +553,7 @@ SongList CollectionWatcher::ScanNewFile(const QString &file, const QString &path Song song(source_); TagReaderClient::Instance()->ReadFileBlocking(file, &song); if (song.is_valid()) { + song.set_source(source_); song_list << song; } } diff --git a/src/device/connecteddevice.cpp b/src/device/connecteddevice.cpp index 0e9756929..18b7ca1a8 100644 --- a/src/device/connecteddevice.cpp +++ b/src/device/connecteddevice.cpp @@ -58,6 +58,7 @@ ConnectedDevice::ConnectedDevice(const QUrl &url, DeviceLister *lister, const QS connect(backend_, SIGNAL(TotalSongCountUpdated(int)), SLOT(BackendTotalSongCountUpdated(int))); backend_->Init(app_->database(), + Song::Source_Device, QString("device_%1_songs").arg(database_id), QString("device_%1_directories").arg(database_id), QString("device_%1_subdirectories").arg(database_id), diff --git a/src/qobuz/qobuzservice.cpp b/src/qobuz/qobuzservice.cpp index 6024e5c68..38ceb30a2 100644 --- a/src/qobuz/qobuzservice.cpp +++ b/src/qobuz/qobuzservice.cpp @@ -110,15 +110,15 @@ QobuzService::QobuzService(Application *app, QObject *parent) artists_collection_backend_ = new CollectionBackend(); artists_collection_backend_->moveToThread(app_->database()->thread()); - artists_collection_backend_->Init(app_->database(), kArtistsSongsTable, QString(), QString(), kArtistsSongsFtsTable); + artists_collection_backend_->Init(app_->database(), Song::Source_Qobuz, kArtistsSongsTable, QString(), QString(), kArtistsSongsFtsTable); albums_collection_backend_ = new CollectionBackend(); albums_collection_backend_->moveToThread(app_->database()->thread()); - albums_collection_backend_->Init(app_->database(), kAlbumsSongsTable, QString(), QString(), kAlbumsSongsFtsTable); + albums_collection_backend_->Init(app_->database(), Song::Source_Qobuz, kAlbumsSongsTable, QString(), QString(), kAlbumsSongsFtsTable); songs_collection_backend_ = new CollectionBackend(); songs_collection_backend_->moveToThread(app_->database()->thread()); - songs_collection_backend_->Init(app_->database(), kSongsTable, QString(), QString(), kSongsFtsTable); + songs_collection_backend_->Init(app_->database(), Song::Source_Qobuz, kSongsTable, QString(), QString(), kSongsFtsTable); artists_collection_model_ = new CollectionModel(artists_collection_backend_, app_, this); albums_collection_model_ = new CollectionModel(albums_collection_backend_, app_, this); diff --git a/src/subsonic/subsonicservice.cpp b/src/subsonic/subsonicservice.cpp index 8dacc9a51..289605f22 100644 --- a/src/subsonic/subsonicservice.cpp +++ b/src/subsonic/subsonicservice.cpp @@ -79,7 +79,7 @@ SubsonicService::SubsonicService(Application *app, QObject *parent) collection_backend_ = new CollectionBackend(); collection_backend_->moveToThread(app_->database()->thread()); - collection_backend_->Init(app_->database(), kSongsTable, QString(), QString(), kSongsFtsTable); + collection_backend_->Init(app_->database(), Song::Source_Subsonic, kSongsTable, QString(), QString(), kSongsFtsTable); // Model diff --git a/src/tidal/tidalservice.cpp b/src/tidal/tidalservice.cpp index 20007f515..a81290815 100644 --- a/src/tidal/tidalservice.cpp +++ b/src/tidal/tidalservice.cpp @@ -116,15 +116,15 @@ TidalService::TidalService(Application *app, QObject *parent) artists_collection_backend_ = new CollectionBackend(); artists_collection_backend_->moveToThread(app_->database()->thread()); - artists_collection_backend_->Init(app_->database(), kArtistsSongsTable, QString(), QString(), kArtistsSongsFtsTable); + artists_collection_backend_->Init(app_->database(), Song::Source_Tidal, kArtistsSongsTable, QString(), QString(), kArtistsSongsFtsTable); albums_collection_backend_ = new CollectionBackend(); albums_collection_backend_->moveToThread(app_->database()->thread()); - albums_collection_backend_->Init(app_->database(), kAlbumsSongsTable, QString(), QString(), kAlbumsSongsFtsTable); + albums_collection_backend_->Init(app_->database(), Song::Source_Tidal, kAlbumsSongsTable, QString(), QString(), kAlbumsSongsFtsTable); songs_collection_backend_ = new CollectionBackend(); songs_collection_backend_->moveToThread(app_->database()->thread()); - songs_collection_backend_->Init(app_->database(), kSongsTable, QString(), QString(), kSongsFtsTable); + songs_collection_backend_->Init(app_->database(), Song::Source_Tidal, kSongsTable, QString(), QString(), kSongsFtsTable); artists_collection_model_ = new CollectionModel(artists_collection_backend_, app_, this); albums_collection_model_ = new CollectionModel(albums_collection_backend_, app_, this);