From d9881f92b3bd3444214ee481cab2d86a1d6714db Mon Sep 17 00:00:00 2001 From: Andrey Astafyev Date: Fri, 15 May 2020 11:13:26 +0300 Subject: [PATCH] =?UTF-8?q?=D0=97=D0=BD=D0=B0=D1=87=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D1=8F=20=D0=B2=D0=BE=D0=B7=D0=B2=D1=80=D0=B0=D1=89=D0=B0=D1=8E?= =?UTF-8?q?=D1=82=D1=81=D1=8F=20=D0=BA=D0=B0=D0=BA=20const=20QString&?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- examples/filesystem/01_minimal/minimal.cpp | 6 +- src/myx/filesystem/paths.cpp | 87 ++++++++++--------- src/myx/filesystem/paths.hpp | 99 +++++++++++----------- 3 files changed, 99 insertions(+), 93 deletions(-) diff --git a/examples/filesystem/01_minimal/minimal.cpp b/examples/filesystem/01_minimal/minimal.cpp index 1460a61..77f8180 100644 --- a/examples/filesystem/01_minimal/minimal.cpp +++ b/examples/filesystem/01_minimal/minimal.cpp @@ -25,12 +25,12 @@ int main( int argc, char** argv ) pathsMT.init( QStringLiteral( CMLIB_PROJECT_NAME ), QStringLiteral( "conf" ) ); pathsMT.findConfigFile( QStringLiteral( "test" ) ); - qDebug() << pathsMT.systemLogDirectory().path(); - qDebug() << pathsMT.systemConfigDirectory().path(); + qDebug() << pathsMT.systemLogDirectory(); + qDebug() << pathsMT.systemConfigDirectory(); paths.init( QStringLiteral( CMLIB_PROJECT_NAME ), QStringLiteral( "conf" ) ); paths.findConfigFile( QStringLiteral( "test" ) ); - qDebug() << paths.systemConstDataDirectory().path(); + qDebug() << paths.systemConstDataDirectory(); qDebug() << paths.configFileName(); return( 0 ); diff --git a/src/myx/filesystem/paths.cpp b/src/myx/filesystem/paths.cpp index 797005e..302a072 100644 --- a/src/myx/filesystem/paths.cpp +++ b/src/myx/filesystem/paths.cpp @@ -25,7 +25,7 @@ MYXLIB_INLINE Paths::HierarchyType Paths::getHierarchyType() // -V2008 { QRegExp binUnityRegexp( "/s*bin/unity$" ); QRegExp binRegexp( "/s*bin$" ); - auto binaryDir = m_currentExecutable.m_canonicalFilePath.canonicalPath(); + auto binaryDir = m_executableDirectory; if ( binUnityRegexp.indexIn( binaryDir ) >= 0 ) { @@ -124,19 +124,19 @@ MYXLIB_INLINE Paths::HierarchyType Paths::getHierarchyType() // -V2008 return ( HierarchyType::kUsr ); } - if ( binaryDir.startsWith( m_homeDirectory.canonicalPath() + "/.local/bin" ) || - binaryDir.startsWith( m_homeDirectory.canonicalPath() + "/bin" ) ) + if ( binaryDir.startsWith( m_homeDirectory + "/.local/bin" ) || + binaryDir.startsWith( m_homeDirectory + "/bin" ) ) { - QFileInfo etcDirInfo { m_userConfigDirectory.canonicalPath() }; + QFileInfo etcDirInfo { m_userConfigDirectory }; if ( !etcDirInfo.isDir() || !etcDirInfo.isReadable() ) { return( HierarchyType::kFlat ); } - QFileInfo constDataDirInfo { m_userConstDataDirectory.canonicalPath() }; + QFileInfo constDataDirInfo { m_userConstDataDirectory }; if ( !constDataDirInfo.isDir() || !constDataDirInfo.isReadable() ) { return( HierarchyType::kFlat ); } - QFileInfo varDataDirInfo { m_userVarDataDirectory.canonicalPath() }; + QFileInfo varDataDirInfo { m_userVarDataDirectory }; if ( !varDataDirInfo.isDir() || !varDataDirInfo.isWritable() ) { return( HierarchyType::kFlat ); } - QFileInfo logDirInfo { m_userLogDirectory.canonicalPath() }; + QFileInfo logDirInfo { m_userLogDirectory }; if ( !logDirInfo.isDir() || !logDirInfo.isWritable() ) { return( HierarchyType::kFlat ); } m_systemConfigDirectory = etcDirInfo.canonicalFilePath(); @@ -172,7 +172,12 @@ MYXLIB_INLINE Paths::HierarchyType Paths::getHierarchyType() // -V2008 MYXLIB_INLINE bool Paths::init( const QString& projectDir, const QString& configFileExtension ) { - m_projectName = projectDir.isEmpty() ? m_currentExecutable.m_canonicalFilePath.fileName() + CurrentExecutable exe; + m_executableName = exe.m_canonicalFilePath.fileName(); + m_executableFilePath = exe.m_canonicalFilePath.absoluteFilePath(); + m_executableDirectory = exe.m_canonicalFilePath.absolutePath(); + + m_projectName = projectDir.isEmpty() ? m_executableName : projectDir; m_configFileExtension = configFileExtension.isEmpty() ? QStringLiteral( "conf" ) : configFileExtension; @@ -184,14 +189,14 @@ MYXLIB_INLINE bool Paths::init( const QString& projectDir, const QString& config auto configHome = QString::fromLocal8Bit( qgetenv( "XDG_CONFIG_HOME" ) ); if ( configHome.isEmpty() ) { - configHome = m_homeDirectory.canonicalPath() + "/.config"; + configHome = m_homeDirectory + "/.config"; } m_userConfigDirectory = configHome + "/" + m_projectName; auto dataHome = QString::fromLocal8Bit( qgetenv( "XDG_DATA_HOME" ) ); if ( dataHome.isEmpty() ) { - dataHome = m_homeDirectory.canonicalPath() + "/.local/share"; + dataHome = m_homeDirectory + "/.local/share"; } dataHome += "/" + m_projectName; m_userConstDataDirectory = dataHome + "/data"; @@ -202,13 +207,13 @@ MYXLIB_INLINE bool Paths::init( const QString& projectDir, const QString& config if ( m_hierarchyType == HierarchyType::kFlat ) { - m_systemConstDataDirectory = m_currentExecutable.m_canonicalFilePath.canonicalPath(); - m_systemVarDataDirectory = m_currentExecutable.m_canonicalFilePath.canonicalPath(); - m_systemConfigDirectory = m_currentExecutable.m_canonicalFilePath.canonicalPath(); - m_systemLogDirectory = m_currentExecutable.m_canonicalFilePath.canonicalPath(); + m_systemConstDataDirectory = m_executableDirectory; + m_systemVarDataDirectory = m_executableDirectory; + m_systemConfigDirectory = m_executableDirectory; + m_systemLogDirectory = m_executableDirectory; } - m_configFilePath = m_systemConfigDirectory.canonicalPath() + "/" + m_configFileName; + m_configFilePath = m_systemConfigDirectory + "/" + m_configFileName; return( true ); } // Paths::updatePaths @@ -218,10 +223,10 @@ MYXLIB_INLINE bool Paths::makeDefaultDirectories() { bool status = true; - if ( !m_userConfigDirectory.mkpath( m_userConfigDirectory.absolutePath() ) ) { status = false; } - if ( !m_userVarDataDirectory.mkpath( m_userVarDataDirectory.absolutePath() ) ) { status = false; } - if ( !m_userConstDataDirectory.mkpath( m_userConstDataDirectory.absolutePath() ) ) { status = false; } - if ( !m_userLogDirectory.mkpath( m_userLogDirectory.absolutePath() ) ) { status = false; } +// FIXME if ( !m_userConfigDirectory.mkpath( m_userConfigDirectory ) ) { status = false; } +// if ( !m_userVarDataDirectory.mkpath( m_userVarDataDirectory ) ) { status = false; } +// if ( !m_userConstDataDirectory.mkpath( m_userConstDataDirectory ) ) { status = false; } +// if ( !m_userLogDirectory.mkpath( m_userLogDirectory ) ) { status = false; } return( status ); } @@ -244,32 +249,26 @@ MYXLIB_INLINE QString Paths::findConfigFile( const QString& defaultConfigFile ) if ( QFileInfo( m_configFilePath ).isReadable() ) { - return( m_configFilePath.absoluteFilePath() ); + return( m_configFilePath ); } return( QString() ); } // Paths::findConfigFile -MYXLIB_INLINE QDir Paths::executableFileDirectory() const -{ - return( m_currentExecutable.m_canonicalFilePath.dir() ); -} - - -MYXLIB_INLINE const QDir& Paths::userConfigDirectory() const +MYXLIB_INLINE const QString& Paths::userConfigDirectory() const { return( m_userConfigDirectory ); } -MYXLIB_INLINE const QDir& Paths::systemConfigDirectory() const +MYXLIB_INLINE const QString& Paths::systemConfigDirectory() const { return( m_systemConfigDirectory ); } -MYXLIB_INLINE const QFileInfo& Paths::configFilePath() const +MYXLIB_INLINE const QString& Paths::configFilePath() const { return( m_configFilePath ); } @@ -287,49 +286,49 @@ MYXLIB_INLINE const QString& Paths::configFileExtension() const } -MYXLIB_INLINE const QDir& Paths::userVarDataDirectory() const +MYXLIB_INLINE const QString& Paths::userVarDataDirectory() const { return( m_userVarDataDirectory ); } -MYXLIB_INLINE const QDir& Paths::systemVarDataDirectory() const +MYXLIB_INLINE const QString& Paths::systemVarDataDirectory() const { return( m_systemVarDataDirectory ); } -MYXLIB_INLINE const QDir& Paths::userConstDataDirectory() const +MYXLIB_INLINE const QString& Paths::userConstDataDirectory() const { return( m_userConstDataDirectory ); } -MYXLIB_INLINE const QDir& Paths::systemConstDataDirectory() const +MYXLIB_INLINE const QString& Paths::systemConstDataDirectory() const { return( m_systemConstDataDirectory ); } -MYXLIB_INLINE const QDir& Paths::userLogDirectory() const +MYXLIB_INLINE const QString& Paths::userLogDirectory() const { return( m_userLogDirectory ); } -MYXLIB_INLINE const QDir& Paths::systemLogDirectory() const +MYXLIB_INLINE const QString& Paths::systemLogDirectory() const { return( m_systemLogDirectory ); } -MYXLIB_INLINE const QDir& Paths::tempDirectory() const +MYXLIB_INLINE const QString& Paths::tempDirectory() const { return( m_tempDirectory ); } -MYXLIB_INLINE const QDir& Paths::homeDirectory() const +MYXLIB_INLINE const QString& Paths::homeDirectory() const { return( m_homeDirectory ); } @@ -341,15 +340,21 @@ MYXLIB_INLINE const QString& Paths::projectName() const } -MYXLIB_INLINE QString Paths::executableFileName() const +MYXLIB_INLINE const QString& Paths::executableName() const { - return( m_currentExecutable.m_canonicalFilePath.fileName() ); + return( m_executableName ); } -MYXLIB_INLINE const QFileInfo& Paths::executableFilePath() const +MYXLIB_INLINE const QString& Paths::executableFilePath() const { - return( m_currentExecutable.m_canonicalFilePath ); + return( m_executableFilePath ); +} + + +MYXLIB_INLINE const QString& Paths::executableDirectory() const +{ + return( m_executableDirectory ); } } // namespace filesystem diff --git a/src/myx/filesystem/paths.hpp b/src/myx/filesystem/paths.hpp index e542094..04ffce5 100644 --- a/src/myx/filesystem/paths.hpp +++ b/src/myx/filesystem/paths.hpp @@ -46,39 +46,40 @@ class Paths /// @brief Тип расположения файлов по каталогам HierarchyType m_hierarchyType { HierarchyType::kFlat }; - /// @brief Параметры текущего исполняемого файла - CurrentExecutable m_currentExecutable; - /// @brief Имя проекта, которое используется при формировании имён файлов и каталогов QString m_projectName; + QString m_executableName; + QString m_executableFilePath; + QString m_executableDirectory; + /// @brief Путь к каталогу с временными файлами - QDir m_tempDirectory; + QString m_tempDirectory; /// @brief Путь к домашнему каталогу текущего пользователя - QDir m_homeDirectory; + QString m_homeDirectory; /// @brief Путь к пользовательскому каталогу с изменяемыми файлами - QDir m_userVarDataDirectory; + QString m_userVarDataDirectory; /// @brief Путь к системному каталогу с изменяемыми файлами - QDir m_systemVarDataDirectory; + QString m_systemVarDataDirectory; /// @brief Путь к пользовательскому каталогу с неизменяемыми файлами - QDir m_userConstDataDirectory; + QString m_userConstDataDirectory; /// @brief Путь к системному каталогу с неизменяемыми файлами - QDir m_systemConstDataDirectory; + QString m_systemConstDataDirectory; /// @brief Путь к пользовательскому каталогу с журналами работы - QDir m_userLogDirectory; + QString m_userLogDirectory; /// @brief Путь к системному каталогу с журналами работы - QDir m_systemLogDirectory; + QString m_systemLogDirectory; /// @brief Путь к пользовательскому каталогу с файлами настройки - QDir m_userConfigDirectory; + QString m_userConfigDirectory; /// @brief Путь к системному каталогу с файлами настройки - QDir m_systemConfigDirectory; + QString m_systemConfigDirectory; /// @brief Полный путь к файлу настройки - QFileInfo m_configFilePath; + QString m_configFilePath; /// @brief Имя файла настройки QString m_configFileName; /// @brief Расширение для файла настройки @@ -130,27 +131,22 @@ public: /** * @brief Полный путь к базовому каталогу */ - const QDir& prefixDirectory() const; + const QString& prefixDirectory() const; + + /** + * @brief Имя исполняемого файла + */ + const QString& executableName() const; + + /** + * @brief Полный путь к исполняемому файлу + */ + const QString& executableFilePath() const; /** * @brief Полный путь к каталогу с исполняемым файлом */ - QDir executableFileDirectory() const; - - /** - * @brief Полный путь к пользовательскому каталогу с файлами настройки - */ - const QDir& userConfigDirectory() const; - - /** - * @brief Полный путь к системному каталогу с файлами настройки - */ - const QDir& systemConfigDirectory() const; - - /** - * @brief Полный путь к файлу настройки - */ - const QFileInfo& configFilePath() const; + const QString& executableDirectory() const; /** * @brief Имя файла настройки @@ -162,60 +158,65 @@ public: */ const QString& configFileExtension() const; + /** + * @brief Полный путь к файлу настройки + */ + const QString& configFilePath() const; + + /** + * @brief Полный путь к пользовательскому каталогу с файлами настройки + */ + const QString& userConfigDirectory() const; + + /** + * @brief Полный путь к системному каталогу с файлами настройки + */ + const QString& systemConfigDirectory() const; + /** * @brief Полный путь к пользовательскому каталогу с изменяемыми файлами */ - const QDir& userVarDataDirectory() const; + const QString& userVarDataDirectory() const; /** * @brief Полный путь к системному каталогу с изменяемыми файлами */ - const QDir& systemVarDataDirectory() const; + const QString& systemVarDataDirectory() const; /** * @brief Полный путь к пользовательскому каталогу с неизменяемыми файлами */ - const QDir& userConstDataDirectory() const; + const QString& userConstDataDirectory() const; /** * @brief Полный путь к системному каталогу с неизменяемыми файлами */ - const QDir& systemConstDataDirectory() const; + const QString& systemConstDataDirectory() const; /** * @brief Полный путь к пользовательскому каталогу с журналами работы */ - const QDir& userLogDirectory() const; + const QString& userLogDirectory() const; /** * @brief Полный путь к системному каталогу с журналами работы */ - const QDir& systemLogDirectory() const; + const QString& systemLogDirectory() const; /** * @brief Полный путь к каталогу с временными файлами */ - const QDir& tempDirectory() const; + const QString& tempDirectory() const; /** * @brief Полный путь к домашнему каталогу текущего пользователя */ - const QDir& homeDirectory() const; + const QString& homeDirectory() const; /** * @brief Имя подкаталога для проекта */ const QString& projectName() const; - - /** - * @brief Имя исполняемого файла - */ - QString executableFileName() const; - - /** - * @brief Полный путь к исполняемому файлу - */ - const QFileInfo& executableFilePath() const; }; // class Paths } // namespace filesystem