Дополнительные вызовы для инициализации путей

This commit is contained in:
Andrei Astafev 2020-07-10 15:28:26 +03:00
parent 4519190768
commit 3c628659bc
2 changed files with 106 additions and 77 deletions

View File

@ -13,7 +13,14 @@ namespace myx {
namespace filesystem { 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, MYXLIB_INLINE void Paths::setupSystemDirectories( const QString& defaultPrefixDirectory,
@ -172,20 +179,8 @@ MYXLIB_INLINE Paths::HierarchyType Paths::getHierarchyType()
} // 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_homeDirectory = QDir::homePath();
m_tempDirectory = QDir::tempPath(); m_tempDirectory = QDir::tempPath();
@ -214,6 +209,33 @@ MYXLIB_INLINE bool Paths::init( const QString& projectDir, const QString& config
} // Paths::updatePaths } // 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() MYXLIB_INLINE bool Paths::makeDefaultDirectories()
{ {
bool status = true; 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 MYXLIB_INLINE const QString& Paths::userVarDataDirectory() const
{ {
return( m_userVarDataDirectory ); return( m_userVarDataDirectory );

View File

@ -44,62 +44,6 @@ class Paths
kDevelopment = 0x07 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: public:
Paths( const Paths& ) = delete; Paths( const Paths& ) = delete;
Paths& operator=( const Paths& ) = delete; Paths& operator=( const Paths& ) = delete;
@ -120,7 +64,20 @@ public:
/** /**
* @brief Обновление путей с учётом расположения исполняемого файла * @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 Создание стандартных каталогов * @brief Создание стандартных каталогов
@ -226,6 +183,62 @@ public:
* @brief Имя подкаталога для проекта * @brief Имя подкаталога для проекта
*/ */
const QString& projectName() const; 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 }; // class Paths
} // namespace filesystem } // namespace filesystem