summaryrefslogtreecommitdiff
path: root/src/lib/xdgbasedir.cpp
blob: d875cec12013ed5fccf23a5b3068432d0e8ffd2b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
#include "xdgbasedir.h"
#include <QStringList>

static inline QString user()
{
    QString user = QString::fromUtf8(qgetenv("USER"));
    if(user.isEmpty()) return "root";
    return user;
}

static inline QString home()
{
    QString home = QString::fromUtf8(qgetenv("HOME"));
    if(home.isEmpty())
    {
        QString u = user();
        if(u == "root")
            return "/root";
        else
            return "/home/" + u;
    }
    return home;
}

static inline QString envOrDefault(const char *name, const QString &def)
{
    QString env = QString::fromUtf8(qgetenv(name));
    if(env.isEmpty())
    {
        return def;
    }
    return env;
}

QString KaZoe::dataHome()
{
    return envOrDefault("XDG_DATA_HOME", home() + "/.local/share");
}

QString KaZoe::configHome()
{
    return envOrDefault("XDG_CONFIG_HOME", home() + "/.config");
}

QString KaZoe::cacheHome()
{
    return envOrDefault("XDG_CACHE_HOME", home() + "/.cache");
}

QString KaZoe::stateHome()
{
    return envOrDefault("XDG_STATE_HOME", home() + "/.local/state");
}


QStringList KaZoe::dataDirs()
{
    QString dataDirs = QString::fromUtf8(qgetenv("XDG_DATA_DIRS"));
    if(dataDirs.isEmpty())
    {
        return QStringList() << "/usr/local/share" << "/usr/share";
    }
    return dataDirs.split(":");
}

QStringList KaZoe::configDirs()
{
    QString configDirs = QString::fromUtf8(qgetenv("XDG_CONFIG_DIRS"));
    if(configDirs.isEmpty())
    {
        return QStringList() << "/etc/xdg";
    }
    return configDirs.split(":");
}

QString KaZoe::runtimeDir()
{
    return envOrDefault("XDG_RUNTIME_DIR", QString("/run/user/%i").arg(user()));
}