diff options
author | Uwe Klotz <uklotz@mixxx.org> | 2019-09-19 13:35:32 +0200 |
---|---|---|
committer | Uwe Klotz <uklotz@mixxx.org> | 2019-09-21 14:06:34 +0200 |
commit | 2831c4ef7e60a423b57d7655227747044843fd5f (patch) | |
tree | f0474772063fa089abd9a4ee8bca5a0f21adf905 /src/library | |
parent | da22a46777d35566ce7863453ae4fe3c400eb04b (diff) |
Move transaction boundaries from DirectoryDAO into TrackCollection
Diffstat (limited to 'src/library')
-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 |
4 files changed, 23 insertions, 7 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; |