diff options
-rw-r--r-- | src/library/dao/directorydao.cpp | 4 | ||||
-rw-r--r-- | src/library/library.cpp | 2 | ||||
-rw-r--r-- | src/library/trackcollection.cpp | 22 | ||||
-rw-r--r-- | src/library/trackcollection.h | 2 | ||||
-rw-r--r-- | src/preferences/upgrade.cpp | 2 |
5 files changed, 24 insertions, 8 deletions
diff --git a/src/library/dao/directorydao.cpp b/src/library/dao/directorydao.cpp index c9ee038daa..8a7ff30988 100644 --- a/src/library/dao/directorydao.cpp +++ b/src/library/dao/directorydao.cpp @@ -14,7 +14,6 @@ int DirectoryDAO::addDirectory(const QString& newDir) { // Do nothing if the dir to add is a child of a directory that is already in // the db. - ScopedTransaction transaction(m_database); QStringList dirs = getDirs(); QString childDir; QString parentDir; @@ -46,7 +45,6 @@ int DirectoryDAO::addDirectory(const QString& newDir) { LOG_FAILED_QUERY(query) << "Adding new dir (" % newDir % ") failed."; return SQL_ERROR; } - transaction.commit(); return ALL_FINE; } @@ -86,7 +84,6 @@ QList<TrackRef> DirectoryDAO::relocateDirectory(const QString& oldFolder, // mysterious ways for example if a track in the oldFolder also has a zombie // track location in newFolder then the replace query will fail because the // location column becomes non-unique. - ScopedTransaction transaction(m_database); QSqlQuery query(m_database); query.prepare("UPDATE " % DIRECTORYDAO_TABLE % " SET " % DIRECTORYDAO_DIR % "=:newFolder WHERE " % DIRECTORYDAO_DIR % " = :oldFolder"); @@ -138,7 +135,6 @@ QList<TrackRef> DirectoryDAO::relocateDirectory(const QString& oldFolder, } qDebug() << "Relocated tracks:" << trackRefs.size(); - transaction.commit(); return trackRefs; } diff --git a/src/library/library.cpp b/src/library/library.cpp index 307a9fa072..d64a1f7bd8 100644 --- a/src/library/library.cpp +++ b/src/library/library.cpp @@ -405,7 +405,7 @@ void Library::slotRequestAddDir(QString dir) { QDir directory(dir); Sandbox::createSecurityToken(directory); - if (!m_pTrackCollection->getDirectoryDAO().addDirectory(dir)) { + if (!m_pTrackCollection->addDirectory(dir)) { QMessageBox::information(0, tr("Add Directory to Library"), tr("Could not add the directory to your library. Either this " "directory is already in your library or you are currently " diff --git a/src/library/trackcollection.cpp b/src/library/trackcollection.cpp index 5d9fb866b1..de733115b3 100644 --- a/src/library/trackcollection.cpp +++ b/src/library/trackcollection.cpp @@ -67,6 +67,21 @@ void TrackCollection::setTrackSource(QSharedPointer<BaseTrackCache> pTrackSource m_pTrackSource = pTrackSource; } +bool TrackCollection::addDirectory(const QString& dir) { + SqlTransaction transaction(m_database); + switch (m_directoryDao.addDirectory(dir)) { + case SQL_ERROR: + return false; + case ALREADY_WATCHING: + return true; + case ALL_FINE: + transaction.commit(); + return true; + } + DEBUG_ASSERT("unreachable"); + return false; +} + void TrackCollection::relocateDirectory(QString oldDir, QString newDir) { DEBUG_ASSERT(QApplication::instance()->thread() == QThread::currentThread()); @@ -79,8 +94,11 @@ void TrackCollection::relocateDirectory(QString oldDir, QString newDir) { QDir directory(newDir); Sandbox::createSecurityToken(directory); - QList<TrackRef> movedTrackRefs( - m_directoryDao.relocateDirectory(oldDir, newDir)); + SqlTransaction transaction(m_database); + QList<TrackRef> movedTrackRefs = + m_directoryDao.relocateDirectory(oldDir, newDir); + transaction.commit(); + QList<QPair<TrackRef, TrackRef>> replacedTrackRefs; replacedTrackRefs.reserve(movedTrackRefs.size()); for (const auto& movedTrackRef : movedTrackRefs) { diff --git a/src/library/trackcollection.h b/src/library/trackcollection.h index 93890460a0..8e470e3a1c 100644 --- a/src/library/trackcollection.h +++ b/src/library/trackcollection.h @@ -95,8 +95,10 @@ class TrackCollection : public QObject, private: friend class Library; + friend class Upgrade; bool purgeTracks(const QList<TrackId>& trackIds); bool purgeAllTracks(const QDir& rootDir); + bool addDirectory(const QString& dir); void relocateDirectory(QString oldDir, QString newDir); UserSettingsPointer m_pConfig; diff --git a/src/preferences/upgrade.cpp b/src/preferences/upgrade.cpp index 8273abb08e..fc810ed023 100644 --- a/src/preferences/upgrade.cpp +++ b/src/preferences/upgrade.cpp @@ -379,7 +379,7 @@ UserSettingsPointer Upgrade::versionUpgrade(const QString& settingsPath) { // Sandbox isn't setup yet at this point in startup because it relies on // the config settings path and this function is what loads the config // so it's not ready yet. - successful = tc.getDirectoryDAO().addDirectory(currentFolder); + successful = tc.addDirectory(currentFolder); tc.disconnectDatabase(); } |