summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--CMakeLists.txt1
-rw-r--r--src/engine/cachingreader/cachingreaderworker.cpp15
-rw-r--r--src/library/autodj/autodjfeature.cpp2
-rw-r--r--src/library/autodj/autodjprocessor.cpp2
-rw-r--r--src/library/banshee/bansheefeature.cpp4
-rw-r--r--src/library/banshee/bansheeplaylistmodel.cpp6
-rw-r--r--src/library/baseexternalplaylistmodel.cpp2
-rw-r--r--src/library/baseexternaltrackmodel.cpp2
-rw-r--r--src/library/basesqltablemodel.cpp4
-rw-r--r--src/library/basetrackcache.cpp8
-rw-r--r--src/library/basetracktablemodel.cpp2
-rw-r--r--src/library/browse/browsefeature.cpp23
-rw-r--r--src/library/browse/browsetablemodel.cpp5
-rw-r--r--src/library/browse/browsethread.cpp14
-rw-r--r--src/library/coverart.cpp29
-rw-r--r--src/library/coverart.h10
-rw-r--r--src/library/coverartcache.cpp4
-rw-r--r--src/library/coverartdelegate.cpp2
-rw-r--r--src/library/coverartutils.cpp61
-rw-r--r--src/library/coverartutils.h17
-rw-r--r--src/library/dao/directorydao.cpp8
-rw-r--r--src/library/dao/trackdao.cpp116
-rw-r--r--src/library/dao/trackdao.h15
-rw-r--r--src/library/dlgtrackinfo.cpp3
-rw-r--r--src/library/export/engineprimeexportjob.cpp9
-rw-r--r--src/library/export/trackexportworker.cpp40
-rw-r--r--src/library/export/trackexportworker.h7
-rw-r--r--src/library/itunes/itunesfeature.cpp20
-rw-r--r--src/library/library.cpp6
-rw-r--r--src/library/parser.cpp10
-rw-r--r--src/library/parser.h6
-rw-r--r--src/library/parserm3u.cpp2
-rw-r--r--src/library/parserpls.cpp2
-rw-r--r--src/library/rekordbox/rekordboxfeature.cpp3
-rw-r--r--src/library/rhythmbox/rhythmboxfeature.cpp11
-rw-r--r--src/library/scanner/importfilestask.cpp3
-rw-r--r--src/library/scanner/libraryscanner.cpp5
-rw-r--r--src/library/serato/seratofeature.cpp6
-rw-r--r--src/library/trackcollection.cpp23
-rw-r--r--src/library/trackcollection.h2
-rw-r--r--src/library/trackcollectionmanager.cpp2
-rw-r--r--src/library/trackset/crate/cratetablemodel.cpp2
-rw-r--r--src/library/traktor/traktorfeature.cpp6
-rw-r--r--src/mixer/basetrackplayer.cpp11
-rw-r--r--src/mixxx.cpp4
-rw-r--r--src/sources/soundsourceproxy.cpp37
-rw-r--r--src/sources/soundsourceproxy.h16
-rw-r--r--src/test/coverartcache_test.cpp3
-rw-r--r--src/test/coverartutils_test.cpp49
-rw-r--r--src/test/cuecontrol_test.cpp3
-rw-r--r--src/test/directorydaotest.cpp12
-rw-r--r--src/test/globaltrackcache_test.cpp18
-rw-r--r--src/test/hotcuecontrol_test.cpp3
-rw-r--r--src/test/librarytest.cpp2
-rw-r--r--src/test/playlisttest.cpp8
-rw-r--r--src/test/soundproxy_test.cpp18
-rw-r--r--src/test/trackdao_test.cpp12
-rw-r--r--src/test/trackexport_test.cpp64
-rw-r--r--src/test/trackreftest.cpp8
-rw-r--r--src/test/trackupdate_test.cpp3
-rw-r--r--src/track/globaltrackcache.cpp42
-rw-r--r--src/track/globaltrackcache.h37
-rw-r--r--src/track/track.cpp50
-rw-r--r--src/track/track.h52
-rw-r--r--src/track/trackfile.cpp14
-rw-r--r--src/track/trackfile.h132
-rw-r--r--src/track/trackref.h30
-rw-r--r--src/util/dnd.cpp48
-rw-r--r--src/util/dnd.h4
-rw-r--r--src/util/fileaccess.cpp6
-rw-r--r--src/util/sandbox.cpp115
-rw-r--r--src/util/sandbox.h26
-rw-r--r--src/widget/wcoverartmenu.cpp6
-rw-r--r--src/widget/wlibrarysidebar.cpp4
-rw-r--r--src/widget/wsearchrelatedtracksmenu.cpp2
-rw-r--r--src/widget/wtrackmenu.cpp4
-rw-r--r--src/widget/wtracktableview.cpp33
77 files changed, 620 insertions, 776 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index c368e69665..72be447a74 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -832,7 +832,6 @@ add_library(mixxx-lib STATIC EXCLUDE_FROM_ALL
src/track/serato/markers2.cpp
src/track/serato/tags.cpp
src/track/track.cpp
- src/track/trackfile.cpp
src/track/trackinfo.cpp
src/track/trackmetadata.cpp
src/track/tracknumbers.cpp
diff --git a/src/engine/cachingreader/cachingreaderworker.cpp b/src/engine/cachingreader/cachingreaderworker.cpp
index 5353b7b105..3a9fd507a2 100644
--- a/src/engine/cachingreader/cachingreaderworker.cpp
+++ b/src/engine/cachingreader/cachingreaderworker.cpp
@@ -135,17 +135,16 @@ void CachingReaderWorker::loadTrack(const TrackPointer& pTrack) {
// Emit that a new track is loading, stops the current track
emit trackLoading();
- const QString trackLocation = pTrack->getLocation();
- if (trackLocation.isEmpty() || !pTrack->checkFileExists()) {
+ if (!pTrack->getFileInfo().checkFileExists()) {
kLogger.warning()
<< m_group
<< "File not found"
- << trackLocation;
+ << pTrack->getFileInfo();
const auto update = ReaderStatusUpdate::trackUnloaded();
m_pReaderStatusFIFO->writeBlocking(&update, 1);
emit trackLoadFailed(pTrack,
tr("The file '%1' could not be found.")
- .arg(QDir::toNativeSeparators(trackLocation)));
+ .arg(QDir::toNativeSeparators(pTrack->getLocation())));
return;
}
@@ -156,12 +155,12 @@ void CachingReaderWorker::loadTrack(const TrackPointer& pTrack) {
kLogger.warning()
<< m_group
<< "Failed to open file"
- << trackLocation;
+ << pTrack->getFileInfo();
const auto update = ReaderStatusUpdate::trackUnloaded();
m_pReaderStatusFIFO->writeBlocking(&update, 1);
emit trackLoadFailed(pTrack,
tr("The file '%1' could not be loaded.")
- .arg(QDir::toNativeSeparators(trackLocation)));
+ .arg(QDir::toNativeSeparators(pTrack->getLocation())));
return;
}
@@ -173,12 +172,12 @@ void CachingReaderWorker::loadTrack(const TrackPointer& pTrack) {
kLogger.warning()
<< m_group
<< "Failed to open empty file"
- << trackLocation;
+ << pTrack->getFileInfo();
const auto update = ReaderStatusUpdate::trackUnloaded();
m_pReaderStatusFIFO->writeBlocking(&update, 1);
emit trackLoadFailed(pTrack,
tr("The file '%1' is empty and could not be loaded.")
- .arg(QDir::toNativeSeparators(trackLocation)));
+ .arg(QDir::toNativeSeparators(pTrack->getLocation())));
return;
}
diff --git a/src/library/autodj/autodjfeature.cpp b/src/library/autodj/autodjfeature.cpp
index a732951387..de985538a4 100644
--- a/src/library/autodj/autodjfeature.cpp
+++ b/src/library/autodj/autodjfeature.cpp
@@ -256,7 +256,7 @@ void AutoDJFeature::slotAddRandomTrack() {
<< randomTrackId;
continue;
}
- if (!pRandomTrack->checkFileExists()) {
+ if (!pRandomTrack->getFileInfo().checkFileExists()) {
qWarning() << "Track does not exist:"
<< pRandomTrack->getInfo()
<< pRandomTrack->getFileInfo();
diff --git a/src/library/autodj/autodjprocessor.cpp b/src/library/autodj/autodjprocessor.cpp
index 0c41bdd375..a39682797a 100644
--- a/src/library/autodj/autodjprocessor.cpp
+++ b/src/library/autodj/autodjprocessor.cpp
@@ -860,7 +860,7 @@ TrackPointer AutoDJProcessor::getNextTrackFromQueue() {
m_pAutoDJTableModel->index(0, 0));
if (nextTrack) {
- if (nextTrack->checkFileExists()) {
+ if (nextTrack->getFileInfo().checkFileExists()) {
return nextTrack;
} else {
// Remove missing song from auto DJ playlist.
diff --git a/src/library/banshee/bansheefeature.cpp b/src/library/banshee/bansheefeature.cpp
index d7b565ec02..e8ee1580aa 100644
--- a/src/library/banshee/bansheefeature.cpp
+++ b/src/library/banshee/bansheefeature.cpp
@@ -79,7 +79,9 @@ void BansheeFeature::activate() {
qDebug() << m_databaseFile << "does not exist";
}
- if (!Sandbox::askForAccess(m_databaseFile) || !m_connection.open(m_databaseFile)) {
+ mixxx::FileInfo fileInfo(m_databaseFile);
+ if (!Sandbox::askForAccess(&fileInfo) ||
+ !m_connection.open(m_databaseFile)) {
QMessageBox::warning(
nullptr,
tr("Error loading Banshee database"),
diff --git a/src/library/banshee/bansheeplaylistmodel.cpp b/src/library/banshee/bansheeplaylistmodel.cpp
index f0eca64c68..0630fed8cc 100644
--- a/src/library/banshee/bansheeplaylistmodel.cpp
+++ b/src/library/banshee/bansheeplaylistmodel.cpp
@@ -225,7 +225,7 @@ TrackId BansheePlaylistModel::doGetTrackId(const TrackPointer& pTrack) const {
if (pTrack) {
for (int row = 0; row < rowCount(); ++row) {
const QUrl rowUrl(getFieldString(index(row, 0), CLM_URI));
- if (TrackFile::fromUrl(rowUrl) == pTrack->getFileInfo()) {
+ if (mixxx::FileInfo::fromQUrl(rowUrl) == pTrack->getFileInfo()) {
return TrackId(getFieldVariant(index(row, 0), CLM_VIEW_ORDER));
}
}
@@ -253,7 +253,7 @@ TrackPointer BansheePlaylistModel::getTrack(const QModelIndex& index) const {
bool track_already_in_library = false;
TrackPointer pTrack = m_pTrackCollectionManager->getOrAddTrack(
- TrackRef::fromFileInfo(location),
+ TrackRef::fromFilePath(location),
&track_already_in_library);
// If this track was not in the Mixxx library it is now added and will be
@@ -295,7 +295,7 @@ QString BansheePlaylistModel::getTrackLocation(const QModelIndex& index) const {
}
QUrl url(getFieldString(index, CLM_URI));
- QString location = TrackFile::fromUrl(url).location();
+ QString location = mixxx::FileInfo::fromQUrl(url).location();
qDebug() << location << " = " << url;
if (!location.isEmpty()) {
return location;
diff --git a/src/library/baseexternalplaylistmodel.cpp b/src/library/baseexternalplaylistmodel.cpp
index 30762d468a..8f574bb0d3 100644
--- a/src/library/baseexternalplaylistmodel.cpp
+++ b/src/library/baseexternalplaylistmodel.cpp
@@ -34,7 +34,7 @@ TrackPointer BaseExternalPlaylistModel::getTrack(const QModelIndex& index) const
bool track_already_in_library = false;
TrackPointer pTrack = m_pTrackCollectionManager->getOrAddTrack(
- TrackRef::fromFileInfo(location),
+ TrackRef::fromFilePath(location),
&track_already_in_library);
// If this track was not in the Mixxx library it is now added and will be
diff --git a/src/library/baseexternaltrackmodel.cpp b/src/library/baseexternaltrackmodel.cpp
index 1f4649e333..6a0539c6ff 100644
--- a/src/library/baseexternaltrackmodel.cpp
+++ b/src/library/baseexternaltrackmodel.cpp
@@ -59,7 +59,7 @@ TrackPointer BaseExternalTrackModel::getTrack(const QModelIndex& index) const {
bool track_already_in_library = false;
TrackPointer pTrack = m_pTrackCollectionManager->getOrAddTrack(
- TrackRef::fromFileInfo(location),
+ TrackRef::fromFilePath(location),
&track_already_in_library);
if (pTrack) {
diff --git a/src/library/basesqltablemodel.cpp b/src/library/basesqltablemodel.cpp
index a5336bdaa0..011011b7bf 100644
--- a/src/library/basesqltablemodel.cpp
+++ b/src/library/basesqltablemodel.cpp
@@ -842,8 +842,8 @@ QList<TrackRef> BaseSqlTableModel::getTrackRefs(
QList<TrackRef> trackRefs;
trackRefs.reserve(indices.size());
foreach (QModelIndex index, indices) {
- trackRefs.append(TrackRef::fromFileInfo(
- TrackFile(getTrackLocation(index)),
+ trackRefs.append(TrackRef::fromFilePath(
+ getTrackLocation(index),
getTrackId(index)));
}
return trackRefs;
diff --git a/src/library/basetrackcache.cpp b/src/library/basetrackcache.cpp
index d0a5694535..d3fcdd686f 100644
--- a/src/library/basetrackcache.cpp
+++ b/src/library/basetrackcache.cpp
@@ -17,10 +17,10 @@ constexpr bool sDebug = false;
} // namespace
BaseTrackCache::BaseTrackCache(TrackCollection* pTrackCollection,
- const QString& tableName,
- const QString& idColumn,
- const QStringList& columns,
- bool isCaching)
+ const QString& tableName,
+ const QString& idColumn,
+ const QStringList& columns,
+ bool isCaching)
: m_tableName(tableName),
m_idColumn(idColumn),
m_columnCount(columns.size()),
diff --git a/src/library/basetracktablemodel.cpp b/src/library/basetracktablemodel.cpp
index 986d66f3b6..957068bb2b 100644
--- a/src/library/basetracktablemodel.cpp
+++ b/src/library/basetracktablemodel.cpp
@@ -915,7 +915,7 @@ QList<QUrl> BaseTrackTableModel::collectUrls(
continue;
}
visitedRows.insert(index.row());
- QUrl url = TrackFile(getTrackLocation(index)).toUrl();
+ QUrl url = mixxx::FileInfo(getTrackLocation(index)).toQUrl();
if (url.isValid()) {
urls.append(url);
}
diff --git a/src/library/browse/browsefeature.cpp b/src/library/browse/browsefeature.cpp
index 560dcf8600..e69e39b01a 100644
--- a/src/library/browse/browsefeature.cpp
+++ b/src/library/browse/browsefeature.cpp
@@ -253,17 +253,18 @@ void BrowseFeature::activateChild(const QModelIndex& index) {
} else {
// Open a security token for this path and if we do not have access, ask
// for it.
- auto dir = mixxx::FileAccess(mixxx::FileInfo(path));
- if (!dir.isReadable()) {
- if (Sandbox::askForAccess(path)) {
+ auto dirInfo = mixxx::FileInfo(path);
+ auto dirAccess = mixxx::FileAccess(dirInfo);
+ if (!dirAccess.isReadable()) {
+ if (Sandbox::askForAccess(&dirInfo)) {
// Re-create to get a new token.
- dir = mixxx::FileAccess(mixxx::FileInfo(path));
+ dirAccess = mixxx::FileAccess(dirInfo);
} else {
// TODO(rryan): Activate an info page about sandboxing?
return;
}
}
- m_browseModel.setPath(std::move(dir));
+ m_browseModel.setPath(std::move(dirAccess));
}
emit showTrackModel(&m_proxyModel);
emit enableCoverArtDisplay(false);
@@ -485,12 +486,12 @@ QStringList BrowseFeature::getDefaultQuickLinks() const {
bool osDesktopDirIncluded = false;
bool osDocumentsDirIncluded = false;
const auto rootDirs = m_pLibrary->trackCollections()->internalCollection()->loadRootDirs();
- for (const mixxx::FileInfo& fileInfo : rootDirs) {
- const auto dir = fileInfo.toQDir();
+ for (mixxx::FileInfo fileInfo : rootDirs) {
// Skip directories we don't have permission to.
- if (!Sandbox::canAccessDir(dir)) {
+ if (!Sandbox::canAccess(&fileInfo)) {
continue;
}
+ const auto dir = fileInfo.toQDir();
if (dir == osMusicDir) {
osMusicDirIncluded = true;
}
@@ -515,13 +516,11 @@ QStringList BrowseFeature::getDefaultQuickLinks() const {
result << osDownloadsDir.canonicalPath() + "/";
}
- if (!osDesktopDirIncluded &&
- Sandbox::canAccessDir(osDesktopDir)) {
+ if (!osDesktopDirIncluded && Sandbox::canAccessDir(osDesktopDir)) {
result << osDesktopDir.canonicalPath() + "/";
}
- if (!osDocumentsDirIncluded &&
- Sandbox::canAccessDir(osDocumentsDir)) {
+ if (!osDocumentsDirIncluded && Sandbox::canAccessDir(osDocumentsDir)) {
result << osDocumentsDir.canonicalPath() + "/";
}
diff --git a/src/library/browse/browsetablemodel.cpp b/src/library/browse/browsetablemodel.cpp
index e51063a7ad..e35f805079 100644
--- a/src/library/browse/browsetablemodel.cpp
+++ b/src/library/browse/browsetablemodel.cpp
@@ -19,7 +19,6 @@
#include "moc_browsetablemodel.cpp"
#include "track/track.h"
#include "util/compatibility.h"
-#include "util/fileaccess.h"
#include "widget/wlibrarytableview.h"
BrowseTableModel::BrowseTableModel(QObject* parent,
@@ -191,7 +190,7 @@ void BrowseTableModel::setPath(mixxx::FileAccess path) {
}
TrackPointer BrowseTableModel::getTrack(const QModelIndex& index) const {
- return getTrackByRef(TrackRef::fromFileInfo(getTrackLocation(index)));
+ return getTrackByRef(TrackRef::fromFilePath(getTrackLocation(index)));
}
TrackPointer BrowseTableModel::getTrackByRef(const TrackRef& trackRef) const {
@@ -298,7 +297,7 @@ QMimeData* BrowseTableModel::mimeData(const QModelIndexList& indexes) const {
if (index.isValid()) {
if (!rows.contains(index.row())) {
rows.push_back(index.row());
- QUrl url = TrackFile(getTrackLocation(index)).toUrl();
+ QUrl url = mixxx::FileInfo(getTrackLocation(index)).toQUrl();
if (!url.isValid()) {
qDebug() << "ERROR invalid url" << url;
continue;
diff --git a/src/library/browse/browsethread.cpp b/src/library/browse/browsethread.cpp
index 285053aa03..83656f0fa5 100644
--- a/src/library/browse/browsethread.cpp
+++ b/src/library/browse/browsethread.cpp
@@ -151,12 +151,12 @@ void BrowseThread::populateModel() {
item->setData("0", Qt::UserRole);
row_data.insert(COLUMN_PREVIEW, item);
- const QString filepath = fileIt.next();
+ const auto fileAccess = mixxx::FileAccess(
+ mixxx::FileInfo(fileIt.next()),
+ thisPath.token());
{
const TrackPointer pTrack =
- SoundSourceProxy::importTemporaryTrack(
- filepath,
- thisPath.token());
+ SoundSourceProxy::importTemporaryTrack(fileAccess);