diff --git a/src/myx/filesystem/paths.cpp b/src/myx/filesystem/paths.cpp index 9437a2c..c4d4677 100644 --- a/src/myx/filesystem/paths.cpp +++ b/src/myx/filesystem/paths.cpp @@ -13,7 +13,14 @@ namespace myx { namespace filesystem { -MYXLIB_INLINE Paths::Paths() = default; +MYXLIB_INLINE Paths::Paths() +{ + QFileInfo procSelfExe( QStringLiteral( "/proc/self/exe" ) ); + QFileInfo currentExecutable = procSelfExe.canonicalFilePath(); + m_executableName = currentExecutable.fileName(); + m_executableFilePath = currentExecutable.absoluteFilePath(); + m_executableDirectory = currentExecutable.absolutePath(); +} MYXLIB_INLINE void Paths::setupSystemDirectories( const QString& defaultPrefixDirectory, @@ -172,20 +179,8 @@ MYXLIB_INLINE Paths::HierarchyType Paths::getHierarchyType() } // Paths::getHierarchyType -MYXLIB_INLINE bool Paths::init( const QString& projectDir, const QString& configFileExtension ) +MYXLIB_INLINE bool Paths::initCommon() { - QFileInfo procSelfExe( QStringLiteral( "/proc/self/exe" ) ); - QFileInfo currentExecutable = procSelfExe.canonicalFilePath(); - m_executableName = currentExecutable.fileName(); - m_executableFilePath = currentExecutable.absoluteFilePath(); - m_executableDirectory = currentExecutable.absolutePath(); - - m_projectName = projectDir.isEmpty() ? m_executableName - : projectDir; - m_configFileExtension = configFileExtension.isEmpty() ? QStringLiteral( "conf" ) - : configFileExtension; - m_configFileName = m_projectName + "." + m_configFileExtension; - m_homeDirectory = QDir::homePath(); m_tempDirectory = QDir::tempPath(); @@ -214,6 +209,33 @@ MYXLIB_INLINE bool Paths::init( const QString& projectDir, const QString& config } // Paths::updatePaths +MYXLIB_INLINE bool Paths::init() +{ + m_projectName = m_executableName; + m_configFileName = m_executableName + ".conf"; + return( initCommon() ); +} + + +MYXLIB_INLINE bool Paths::init( const QString& configFileName ) +{ + m_projectName = m_executableName; + m_configFileName = configFileName; + return( initCommon() ); +} + + +MYXLIB_INLINE bool Paths::init( const QString& projectName, const QString& configFileExtension ) +{ + m_projectName = projectName.isEmpty() ? m_executableName + : projectName; + auto ext = configFileExtension.isEmpty() ? QStringLiteral( "conf" ) + : configFileExtension; + m_configFileName = m_projectName + "." + ext; + return( initCommon() ); +} + + MYXLIB_INLINE bool Paths::makeDefaultDirectories() { bool status = true; @@ -281,12 +303,6 @@ MYXLIB_INLINE const QString& Paths::configFileName() const } -MYXLIB_INLINE const QString& Paths::configFileExtension() const -{ - return( m_configFileExtension ); -} - - MYXLIB_INLINE const QString& Paths::userVarDataDirectory() const { return( m_userVarDataDirectory ); diff --git a/src/myx/filesystem/paths.hpp b/src/myx/filesystem/paths.hpp index de22f4c..9baf284 100644 --- a/src/myx/filesystem/paths.hpp +++ b/src/myx/filesystem/paths.hpp @@ -44,62 +44,6 @@ class Paths kDevelopment = 0x07 }; - /// @brief Тип расположения файлов по каталогам - HierarchyType m_hierarchyType { HierarchyType::kFlat }; - - /// @brief Имя проекта, которое используется при формировании имён файлов и каталогов - QString m_projectName; - - QString m_executableName; - QString m_executableFilePath; - QString m_executableDirectory; - - /// @brief Общий префикс для файлов проекта - QString m_prefixDirectory; - - /// @brief Путь к каталогу с временными файлами - QString m_tempDirectory; - /// @brief Путь к домашнему каталогу текущего пользователя - QString m_homeDirectory; - - /// @brief Путь к пользовательскому каталогу с изменяемыми файлами - QString m_userVarDataDirectory; - /// @brief Путь к системному каталогу с изменяемыми файлами - QString m_systemVarDataDirectory; - - /// @brief Путь к пользовательскому каталогу с неизменяемыми файлами - QString m_userConstDataDirectory; - /// @brief Путь к системному каталогу с неизменяемыми файлами - QString m_systemConstDataDirectory; - - /// @brief Путь к пользовательскому каталогу с журналами работы - QString m_userLogDirectory; - /// @brief Путь к системному каталогу с журналами работы - QString m_systemLogDirectory; - - /// @brief Путь к пользовательскому каталогу с файлами настройки - QString m_userConfigDirectory; - /// @brief Путь к системному каталогу с файлами настройки - QString m_systemConfigDirectory; - - /// @brief Полный путь к файлу настройки - QString m_configFilePath; - /// @brief Имя файла настройки - QString m_configFileName; - /// @brief Расширение для файла настройки - QString m_configFileExtension; - - void setupSystemDirectories( const QString& defaultPrefixDirectory, - const QString& defaultEtcDirectory, - const QString& defaultConstDataDirectory, - const QString& defaultVarDataDirectory, - const QString& defaultLogDirectory ); - HierarchyType getHierarchyType(); - -protected: - Paths(); - ~Paths() = default; - public: Paths( const Paths& ) = delete; Paths& operator=( const Paths& ) = delete; @@ -120,7 +64,20 @@ public: /** * @brief Обновление путей с учётом расположения исполняемого файла */ - bool init( const QString& projectDir, const QString& configFileExtension = QStringLiteral("conf") ); + bool init(); + + /** + * @brief Обновление путей с учётом расположения исполняемого файла + * @param configFileName Имя файла настроек + */ + bool init( const QString& configFileName ); + + /** + * @brief Обновление путей с учётом расположения исполняемого файла + * @param projectName Имя проекта + * @param configFileExtension Расширение для файла настроек + */ + bool init( const QString& projectName, const QString& configFileExtension ); /** * @brief Создание стандартных каталогов @@ -226,6 +183,62 @@ public: * @brief Имя подкаталога для проекта */ const QString& projectName() const; + +protected: + Paths(); + ~Paths() = default; + +private: + /// @brief Тип расположения файлов по каталогам + HierarchyType m_hierarchyType { HierarchyType::kFlat }; + + /// @brief Имя проекта, которое используется при формировании имён файлов и каталогов + QString m_projectName; + + QString m_executableName; + QString m_executableFilePath; + QString m_executableDirectory; + + /// @brief Общий префикс для файлов проекта + QString m_prefixDirectory; + + /// @brief Путь к каталогу с временными файлами + QString m_tempDirectory; + /// @brief Путь к домашнему каталогу текущего пользователя + QString m_homeDirectory; + + /// @brief Путь к пользовательскому каталогу с изменяемыми файлами + QString m_userVarDataDirectory; + /// @brief Путь к системному каталогу с изменяемыми файлами + QString m_systemVarDataDirectory; + + /// @brief Путь к пользовательскому каталогу с неизменяемыми файлами + QString m_userConstDataDirectory; + /// @brief Путь к системному каталогу с неизменяемыми файлами + QString m_systemConstDataDirectory; + + /// @brief Путь к пользовательскому каталогу с журналами работы + QString m_userLogDirectory; + /// @brief Путь к системному каталогу с журналами работы + QString m_systemLogDirectory; + + /// @brief Путь к пользовательскому каталогу с файлами настройки + QString m_userConfigDirectory; + /// @brief Путь к системному каталогу с файлами настройки + QString m_systemConfigDirectory; + + /// @brief Полный путь к файлу настройки + QString m_configFilePath; + /// @brief Имя файла настройки + QString m_configFileName; + + void setupSystemDirectories( const QString& defaultPrefixDirectory, + const QString& defaultEtcDirectory, + const QString& defaultConstDataDirectory, + const QString& defaultVarDataDirectory, + const QString& defaultLogDirectory ); + bool initCommon(); + HierarchyType getHierarchyType(); }; // class Paths } // namespace filesystem