aboutsummaryrefslogtreecommitdiff
path: root/src/util.cpp
blob: fe7417578dffd270a9fa6639886c16d4e2e60d79 (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
/*
 * This file is part of smolbote. It's copyrighted by the contributors recorded
 * in the version control history of the file, available from its original
 * location: https://neueland.iserlohn-fortress.net/gitea/aqua/smolbote
 *
 * SPDX-License-Identifier: GPL-3.0
 */

#include "util.h"
#include <QDir>
#include <QFileInfo>
#include <QApplication>
#include <spdlog/spdlog.h>

#define ListSeparator QLatin1String(";")

const QStringList Util::files(const QString &location, const QStringList &nameFilters)
{
    if(location.isEmpty())
        return QStringList();

    QStringList filelist;

    // check if location is a list of locations (contains a ';')
    if(location.contains(ListSeparator)) {
        const QStringList locations = location.split(ListSeparator);

        for(const QString &l : locations) {
            filelist.append(Util::files(l, nameFilters));
        }

        return filelist;
    }

    const QFileInfo info(location);

    // check if location is a folder
    if(info.isDir()) {
        const auto entryList = QDir(info.absoluteFilePath()).entryInfoList(nameFilters, QDir::Files | QDir::Readable, QDir::Time);
        for(const QFileInfo &entryInfo : entryList) {
            filelist.append(entryInfo.absoluteFilePath());
        }
    } else if(info.isFile()) {
        filelist.append(info.absoluteFilePath());
    }

    return filelist;
}

// icon names: https://specifications.freedesktop.org/icon-naming-spec/icon-naming-spec-latest.html
QIcon Util::icon(QStyle::StandardPixmap id) {
    switch(id) {
    case QStyle::SP_ArrowBack:
        return QIcon::fromTheme("go-previous", qApp->style()->standardIcon(id));
    case QStyle::SP_ArrowForward:
        return QIcon::fromTheme("go-next", qApp->style()->standardIcon(id));
    case QStyle::SP_BrowserStop:
        return QIcon::fromTheme("process-stop", qApp->style()->standardIcon(id));
    case QStyle::SP_BrowserReload:
        return QIcon::fromTheme("view-refresh", qApp->style()->standardIcon(id));
    case QStyle::SP_DirHomeIcon:
        return QIcon::fromTheme("go-home", qApp->style()->standardIcon(id));

    default:
        spdlog::warn("FIXME: unhandled StandardPixmap {}", id);
        return qApp->style()->standardIcon(id);
    }
}