From 002ae1381799f35e01c199553947708cdfe73317 Mon Sep 17 00:00:00 2001 From: David Sansome Date: Sun, 13 Mar 2011 14:43:03 +0000 Subject: [PATCH] Use the canonical file path (resolve symlinks and '..') when adding directories to the library, and when adding files to the playlist. Fixes issue #1494 --- src/core/commandlineoptions.cpp | 2 +- src/library/librarybackend.cpp | 17 ++++++++++------- src/ui/mainwindow.cpp | 4 ++-- src/widgets/fileviewlist.cpp | 2 +- 4 files changed, 14 insertions(+), 11 deletions(-) diff --git a/src/core/commandlineoptions.cpp b/src/core/commandlineoptions.cpp index 641cb6541..067299f3d 100644 --- a/src/core/commandlineoptions.cpp +++ b/src/core/commandlineoptions.cpp @@ -192,7 +192,7 @@ bool CommandlineOptions::Parse() { if (value.contains("://")) urls_ << value; else - urls_ << QUrl::fromLocalFile(QFileInfo(value).absoluteFilePath()); + urls_ << QUrl::fromLocalFile(QFileInfo(value).canonicalFilePath()); } return true; diff --git a/src/library/librarybackend.cpp b/src/library/librarybackend.cpp index d09715148..8c80b06ef 100644 --- a/src/library/librarybackend.cpp +++ b/src/library/librarybackend.cpp @@ -22,12 +22,13 @@ #include "core/scopedtransaction.h" #include "smartplaylists/search.h" -#include -#include -#include -#include #include #include +#include +#include +#include +#include +#include const char* LibraryBackend::kNewScoreSql = "case when playcount <= 0 then (%1 * 100 + score) / 2" @@ -178,18 +179,20 @@ void LibraryBackend::UpdateTotalSongCount() { emit TotalSongCountUpdated(q.value(0).toInt()); } -void LibraryBackend::AddDirectory(const QString &path) { +void LibraryBackend::AddDirectory(const QString& path) { + QString canonical_path = QFileInfo(path).canonicalFilePath(); + QMutexLocker l(db_->Mutex()); QSqlDatabase db(db_->Connect()); QSqlQuery q(QString("INSERT INTO %1 (path, subdirs)" " VALUES (:path, 1)").arg(dirs_table_), db); - q.bindValue(":path", path); + q.bindValue(":path", canonical_path); q.exec(); if (db_->CheckErrors(q)) return; Directory dir; - dir.path = path; + dir.path = canonical_path; dir.id = q.lastInsertId().toInt(); emit DirectoryDiscovered(dir, SubdirectoryList()); diff --git a/src/ui/mainwindow.cpp b/src/ui/mainwindow.cpp index f2b97b795..54f75928a 100644 --- a/src/ui/mainwindow.cpp +++ b/src/ui/mainwindow.cpp @@ -1342,7 +1342,7 @@ void MainWindow::AddFile() { // Convert to URLs QList urls; foreach (const QString& path, file_names) { - urls << QUrl::fromLocalFile(path); + urls << QUrl::fromLocalFile(QFileInfo(path).canonicalFilePath()); } MimeData* data = new MimeData; @@ -1364,7 +1364,7 @@ void MainWindow::AddFolder() { // Add media MimeData* data = new MimeData; - data->setUrls(QList() << QUrl::fromLocalFile(directory)); + data->setUrls(QList() << QUrl::fromLocalFile(QFileInfo(directory).canonicalFilePath())); AddToPlaylist(data); } diff --git a/src/widgets/fileviewlist.cpp b/src/widgets/fileviewlist.cpp index 6e42ce5de..d1697b31a 100644 --- a/src/widgets/fileviewlist.cpp +++ b/src/widgets/fileviewlist.cpp @@ -58,7 +58,7 @@ QList FileViewList::UrlListFromSelection() const { foreach (const QModelIndex& index, menu_selection_.indexes()) { if (index.column() == 0) urls << QUrl::fromLocalFile( - static_cast(model())->filePath(index)); + static_cast(model())->fileInfo(index).canonicalFilePath()); } return urls; }