28#include <QtCore/QFileInfo>
32 return pathList.split( QLatin1Char(
':' ) );
35class XdgBaseDirsSingleton
38 QString
homePath(
const char *variable,
const char *defaultSubDir );
40 QStringList
systemPathList(
const char *variable,
const char *defaultDirList );
46 QStringList mConfigDirs;
47 QStringList mDataDirs;
50Q_GLOBAL_STATIC( XdgBaseDirsSingleton, instance )
52QString
Solid::XdgBaseDirs::homePath( const
char *resource )
54 if ( qstrncmp(
"data", resource, 4 ) == 0 ) {
55 if ( instance()->mDataHome.isEmpty() ) {
56 instance()->mDataHome = instance()->homePath(
"XDG_DATA_HOME",
".local/share" );
58 return instance()->mDataHome;
59 }
else if ( qstrncmp(
"config", resource, 6 ) == 0 ) {
60 if ( instance()->mConfigHome.isEmpty() ) {
61 instance()->mConfigHome = instance()->homePath(
"XDG_CONFIG_HOME",
".config" );
63 return instance()->mConfigHome;
71 if ( qstrncmp(
"data", resource, 4 ) == 0 ) {
72 if ( instance()->mDataDirs.isEmpty() ) {
73 instance()->mDataDirs = instance()->systemPathList(
"XDG_DATA_DIRS",
"/usr/local/share:/usr/share" );
75 return instance()->mDataDirs;
76 }
else if ( qstrncmp(
"config", resource, 6 ) == 0 ) {
77 if ( instance()->mConfigDirs.isEmpty() ) {
78 instance()->mConfigDirs = instance()->systemPathList(
"XDG_CONFIG_DIRS",
"/etc/xdg" );
80 return instance()->mConfigDirs;
88 const QString fullPath =
homePath( resource ) + QLatin1Char(
'/' ) + relPath;
90 QFileInfo fileInfo( fullPath );
91 if ( fileInfo.exists() && fileInfo.isFile() && fileInfo.isReadable() ) {
97 foreach (
const QString &path, pathList ) {
98 fileInfo = QFileInfo( path + QLatin1Char(
'/' ) + relPath );
99 if ( fileInfo.exists() && fileInfo.isFile() && fileInfo.isReadable() ) {
100 return fileInfo.absoluteFilePath();
107QString XdgBaseDirsSingleton::homePath(
const char *variable,
const char *defaultSubDir )
109 const QByteArray env = qgetenv( variable );
112 if ( env.isEmpty() ) {
113 xdgPath = QDir::homePath() + QLatin1Char(
'/' ) + QLatin1String( defaultSubDir );
114 }
else if ( env.startsWith(
'/' ) ) {
115 xdgPath = QString::fromLocal8Bit( env );
117 xdgPath = QDir::homePath() + QLatin1Char(
'/' ) + QString::fromLocal8Bit( env );
123QStringList XdgBaseDirsSingleton::systemPathList(
const char *variable,
const char *defaultDirList )
125 const QByteArray env = qgetenv( variable );
128 if ( env.isEmpty() ) {
129 xdgDirList = QLatin1String( defaultDirList );
131 xdgDirList = QString::fromLocal8Bit( env );
QString homePath(const char *resource)
Returns the user specific directory for the given resource type.
QString findResourceFile(const char *resource, const QString &relPath)
Searches the resource specific directories for a given file.
QStringList systemPathList(const char *resource)
Returns the list of system wide directories for a given resource type.
static QStringList splitPathList(const QString &pathList)