summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorUwe Klotz <uklotz@mixxx.org>2019-09-19 13:35:32 +0200
committerUwe Klotz <uklotz@mixxx.org>2019-09-21 14:06:34 +0200
commit2831c4ef7e60a423b57d7655227747044843fd5f (patch)
treef0474772063fa089abd9a4ee8bca5a0f21adf905
parentda22a46777d35566ce7863453ae4fe3c400eb04b (diff)
Move transaction boundaries from DirectoryDAO into TrackCollection
-rw-r--r--src/library/dao/directorydao.cpp4
-rw-r--r--src/library/library.cpp2
-rw-r--r--src/library/trackcollection.cpp22
-rw-r--r--src/library/trackcollection.h2
-rw-r--r--src/preferences/upgrade.cpp2
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();
}