diff options
author | David Schulz <david.schulz@qt.io> | 2021-05-18 09:47:07 +0200 |
---|---|---|
committer | David Schulz <david.schulz@qt.io> | 2021-05-18 14:30:53 +0000 |
commit | a13aef759edbf99b0a5eb3680432b947721573c9 (patch) | |
tree | d4f0a5db95ad769641fb648731ec9b29f6cc5c49 /src/libs | |
parent | 013bf6a743b1de229c029f7108ecd55442670599 (diff) |
Utils: filepathify fileutils
Change-Id: Ic9048369f64d793f5f567cdb0c715488fb5a4ff6
Reviewed-by: Eike Ziller <eike.ziller@qt.io>
Diffstat (limited to 'src/libs')
-rw-r--r-- | src/libs/advanceddockingsystem/dockmanager.cpp | 2 | ||||
-rw-r--r-- | src/libs/qmljs/qmljsplugindumper.cpp | 2 | ||||
-rw-r--r-- | src/libs/utils/fileutils.cpp | 52 | ||||
-rw-r--r-- | src/libs/utils/fileutils.h | 20 | ||||
-rw-r--r-- | src/libs/utils/json.cpp | 2 | ||||
-rw-r--r-- | src/libs/utils/persistentsettings.cpp | 2 | ||||
-rw-r--r-- | src/libs/utils/textfileformat.cpp | 6 |
7 files changed, 46 insertions, 40 deletions
diff --git a/src/libs/advanceddockingsystem/dockmanager.cpp b/src/libs/advanceddockingsystem/dockmanager.cpp index 7ae018b912..bbb4a3b615 100644 --- a/src/libs/advanceddockingsystem/dockmanager.cpp +++ b/src/libs/advanceddockingsystem/dockmanager.cpp @@ -961,7 +961,7 @@ namespace ADS QDir tmp; tmp.mkpath(fileName.toFileInfo().path()); - Utils::FileSaver fileSaver(fileName.toString(), QIODevice::Text); + Utils::FileSaver fileSaver(fileName, QIODevice::Text); if (!fileSaver.hasError()) fileSaver.write(data); diff --git a/src/libs/qmljs/qmljsplugindumper.cpp b/src/libs/qmljs/qmljsplugindumper.cpp index 730743f890..a98f7550d6 100644 --- a/src/libs/qmljs/qmljsplugindumper.cpp +++ b/src/libs/qmljs/qmljsplugindumper.cpp @@ -370,7 +370,7 @@ QFuture<PluginDumper::QmlTypeDescription> PluginDumper::loadQmlTypeDescription(c for (const QString &p: paths) { Utils::FileReader reader; - if (!reader.fetch(p, QFile::Text)) { + if (!reader.fetch(Utils::FilePath::fromString(p), QFile::Text)) { result.errors += reader.errorString(); continue; } diff --git a/src/libs/utils/fileutils.cpp b/src/libs/utils/fileutils.cpp index 1551daddd4..6f028feeed 100644 --- a/src/libs/utils/fileutils.cpp +++ b/src/libs/utils/fileutils.cpp @@ -450,35 +450,41 @@ QByteArray FileUtils::fileId(const FilePath &fileName) QByteArray FileReader::fetchQrc(const QString &fileName) { - QTC_ASSERT(fileName.startsWith(QLatin1Char(':')), return QByteArray()); + QTC_ASSERT(fileName.startsWith(':'), return QByteArray()); QFile file(fileName); bool ok = file.open(QIODevice::ReadOnly); QTC_ASSERT(ok, qWarning() << fileName << "not there!"; return QByteArray()); return file.readAll(); } -bool FileReader::fetch(const QString &fileName, QIODevice::OpenMode mode) +bool FileReader::fetch(const FilePath &filePath, QIODevice::OpenMode mode) { QTC_ASSERT(!(mode & ~(QIODevice::ReadOnly | QIODevice::Text)), return false); - QFile file(fileName); + if (filePath.needsDevice()) { + // TODO: add error handling to FilePath::fileContents + m_data = filePath.fileContents(); + return true; + } + + QFile file(filePath.toString()); if (!file.open(QIODevice::ReadOnly | mode)) { m_errorString = tr("Cannot open %1 for reading: %2").arg( - QDir::toNativeSeparators(fileName), file.errorString()); + filePath.toUserOutput(), file.errorString()); return false; } m_data = file.readAll(); if (file.error() != QFile::NoError) { m_errorString = tr("Cannot read %1: %2").arg( - QDir::toNativeSeparators(fileName), file.errorString()); + filePath.toUserOutput(), file.errorString()); return false; } return true; } -bool FileReader::fetch(const QString &fileName, QIODevice::OpenMode mode, QString *errorString) +bool FileReader::fetch(const FilePath &filePath, QIODevice::OpenMode mode, QString *errorString) { - if (fetch(fileName, mode)) + if (fetch(filePath, mode)) return true; if (errorString) *errorString = m_errorString; @@ -486,9 +492,9 @@ bool FileReader::fetch(const QString &fileName, QIODevice::OpenMode mode, QStrin } #ifdef QT_GUI_LIB -bool FileReader::fetch(const QString &fileName, QIODevice::OpenMode mode, QWidget *parent) +bool FileReader::fetch(const FilePath &filePath, QIODevice::OpenMode mode, QWidget *parent) { - if (fetch(fileName, mode)) + if (fetch(filePath, mode)) return true; if (parent) QMessageBox::critical(parent, tr("File Error"), m_errorString); @@ -545,11 +551,10 @@ bool FileSaverBase::setResult(bool ok) { if (!ok && !m_hasError) { if (!m_file->errorString().isEmpty()) { - m_errorString = tr("Cannot write file %1: %2").arg( - QDir::toNativeSeparators(m_fileName), m_file->errorString()); + m_errorString = tr("Cannot write file %1: %2") + .arg(m_filePath.toUserOutput(), m_file->errorString()); } else { - m_errorString = tr("Cannot write file %1. Disk full?").arg( - QDir::toNativeSeparators(m_fileName)); + m_errorString = tr("Cannot write file %1. Disk full?").arg(m_filePath.toUserOutput()); } m_hasError = true; } @@ -573,9 +578,9 @@ bool FileSaverBase::setResult(QXmlStreamWriter *stream) } -FileSaver::FileSaver(const QString &filename, QIODevice::OpenMode mode) +FileSaver::FileSaver(const FilePath &filePath, QIODevice::OpenMode mode) { - m_fileName = filename; + m_filePath = filePath; // Workaround an assert in Qt -- and provide a useful error message, too: if (HostOsInfo::isWindowsHost()) { // Taken from: https://msdn.microsoft.com/en-us/library/windows/desktop/aa365247(v=vs.85).aspx @@ -583,24 +588,25 @@ FileSaver::FileSaver(const QString &filename, QIODevice::OpenMode mode) = {"CON", "PRN", "AUX", "NUL", "COM1", "COM2", "COM3", "COM4", "COM5", "COM6", "COM7", "COM8", "COM9", "LPT1", "LPT2", "LPT3", "LPT4", "LPT5", "LPT6", "LPT7", "LPT8", "LPT9"}; - const QString fn = QFileInfo(filename).baseName().toUpper(); + const QString fn = filePath.toFileInfo().baseName().toUpper(); if (reservedNames.contains(fn)) { - m_errorString = tr("%1: Is a reserved filename on Windows. Cannot save.").arg(filename); + m_errorString = tr("%1: Is a reserved filename on Windows. Cannot save.") + .arg(filePath.toString()); m_hasError = true; return; } } if (mode & (QIODevice::ReadOnly | QIODevice::Append)) { - m_file.reset(new QFile{filename}); + m_file.reset(new QFile{filePath.toString()}); m_isSafe = false; } else { - m_file.reset(new SaveFile{filename}); + m_file.reset(new SaveFile{filePath.toString()}); m_isSafe = true; } if (!m_file->open(QIODevice::WriteOnly | mode)) { - QString err = QFile::exists(filename) ? + QString err = filePath.exists() ? tr("Cannot overwrite file %1: %2") : tr("Cannot create file %1: %2"); - m_errorString = err.arg(QDir::toNativeSeparators(filename), m_file->errorString()); + m_errorString = err.arg(filePath.toUserOutput(), m_file->errorString()); m_hasError = true; } } @@ -634,14 +640,14 @@ TempFileSaver::TempFileSaver(const QString &templ) tempFile->errorString()); m_hasError = true; } - m_fileName = tempFile->fileName(); + m_filePath = FilePath::fromString(tempFile->fileName()); } TempFileSaver::~TempFileSaver() { m_file.reset(); if (m_autoRemove) - QFile::remove(m_fileName); + QFile::remove(m_filePath.toString()); } /*! \class Utils::FilePath diff --git a/src/libs/utils/fileutils.h b/src/libs/utils/fileutils.h index 77e52eedaa..2240c81e44 100644 --- a/src/libs/utils/fileutils.h +++ b/src/libs/utils/fileutils.h @@ -281,14 +281,14 @@ class QTCREATOR_UTILS_EXPORT FileReader Q_DECLARE_TR_FUNCTIONS(Utils::FileUtils) // sic! public: static QByteArray fetchQrc(const QString &fileName); // Only for internal resources - bool fetch(const QString &fileName, QIODevice::OpenMode mode = QIODevice::NotOpen); // QIODevice::ReadOnly is implicit - bool fetch(const QString &fileName, QIODevice::OpenMode mode, QString *errorString); - bool fetch(const QString &fileName, QString *errorString) - { return fetch(fileName, QIODevice::NotOpen, errorString); } + bool fetch(const FilePath &filePath, QIODevice::OpenMode mode = QIODevice::NotOpen); // QIODevice::ReadOnly is implicit + bool fetch(const FilePath &filePath, QIODevice::OpenMode mode, QString *errorString); + bool fetch(const FilePath &filePath, QString *errorString) + { return fetch(filePath, QIODevice::NotOpen, errorString); } #ifdef QT_GUI_LIB - bool fetch(const QString &fileName, QIODevice::OpenMode mode, QWidget *parent); - bool fetch(const QString &fileName, QWidget *parent) - { return fetch(fileName, QIODevice::NotOpen, parent); } + bool fetch(const FilePath &filePath, QIODevice::OpenMode mode, QWidget *parent); + bool fetch(const FilePath &filePath, QWidget *parent) + { return fetch(filePath, QIODevice::NotOpen, parent); } #endif // QT_GUI_LIB const QByteArray &data() const { return m_data; } const QString &errorString() const { return m_errorString; } @@ -304,7 +304,7 @@ public: FileSaverBase(); virtual ~FileSaverBase(); - QString fileName() const { return m_fileName; } + FilePath filePath() const { return m_filePath; } bool hasError() const { return m_hasError; } QString errorString() const { return m_errorString; } virtual bool finalize(); @@ -324,7 +324,7 @@ public: protected: std::unique_ptr<QFile> m_file; - QString m_fileName; + FilePath m_filePath; QString m_errorString; bool m_hasError = false; @@ -337,7 +337,7 @@ class QTCREATOR_UTILS_EXPORT FileSaver : public FileSaverBase Q_DECLARE_TR_FUNCTIONS(Utils::FileUtils) // sic! public: // QIODevice::WriteOnly is implicit - explicit FileSaver(const QString &filename, QIODevice::OpenMode mode = QIODevice::NotOpen); + explicit FileSaver(const FilePath &filePath, QIODevice::OpenMode mode = QIODevice::NotOpen); bool finalize() override; using FileSaverBase::finalize; diff --git a/src/libs/utils/json.cpp b/src/libs/utils/json.cpp index ff2b5a5948..2d8a8ae75f 100644 --- a/src/libs/utils/json.cpp +++ b/src/libs/utils/json.cpp @@ -734,7 +734,7 @@ JsonSchema *JsonSchemaManager::schemaByName(const QString &baseName) const JsonSchema *JsonSchemaManager::parseSchema(const QString &schemaFileName) const { FileReader reader; - if (reader.fetch(schemaFileName, QIODevice::Text)) { + if (reader.fetch(FilePath::fromString(schemaFileName), QIODevice::Text)) { const QString &contents = QString::fromUtf8(reader.data()); JsonValue *json = JsonValue::create(contents, &m_pool); if (json && json->kind() == JsonValue::Object) diff --git a/src/libs/utils/persistentsettings.cpp b/src/libs/utils/persistentsettings.cpp index 6b5946ecf8..eda01977de 100644 --- a/src/libs/utils/persistentsettings.cpp +++ b/src/libs/utils/persistentsettings.cpp @@ -465,7 +465,7 @@ bool PersistentSettingsWriter::write(const QVariantMap &data, QString *errorStri { QDir tmp; tmp.mkpath(m_fileName.toFileInfo().path()); - FileSaver saver(m_fileName.toString(), QIODevice::Text); + FileSaver saver(m_fileName, QIODevice::Text); if (!saver.hasError()) { const Context ctx; QXmlStreamWriter w(saver.file()); diff --git a/src/libs/utils/textfileformat.cpp b/src/libs/utils/textfileformat.cpp index 150ac8198b..c06bf5dc38 100644 --- a/src/libs/utils/textfileformat.cpp +++ b/src/libs/utils/textfileformat.cpp @@ -208,7 +208,7 @@ TextFileFormat::ReadResult readTextFile(const FilePath &filePath, const QTextCod QByteArray data; try { FileReader reader; - if (!reader.fetch(filePath.toString(), errorString)) + if (!reader.fetch(filePath, errorString)) return TextFileFormat::ReadIOError; data = reader.data(); } catch (const std::bad_alloc &) { @@ -274,7 +274,7 @@ TextFileFormat::ReadResult TextFileFormat::readFileUTF8(const FilePath &filePath QByteArray data; try { FileReader reader; - if (!reader.fetch(filePath.toString(), errorString)) + if (!reader.fetch(filePath, errorString)) return TextFileFormat::ReadIOError; data = reader.data(); } catch (const std::bad_alloc &) { @@ -313,7 +313,7 @@ bool TextFileFormat::writeFile(const FilePath &filePath, QString plainText, QStr if (lineTerminationMode == CRLFLineTerminator) plainText.replace(QLatin1Char('\n'), QLatin1String("\r\n")); - FileSaver saver(filePath.toString(), fileMode); + FileSaver saver(filePath, fileMode); if (!saver.hasError()) { if (hasUtf8Bom && codec->name() == "UTF-8") saver.write("\xef\xbb\xbf", 3); |