1/*
2 SPDX-FileCopyrightText: 2020 Dan Leinir Turthra Jensen <admin@leinir.dk>
3
4 SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
5*/
6
7#include "knsrcmodel.h"
8
9#include "enginebase.h"
10
11#include <KConfig>
12#include <KConfigGroup>
13#include <QDir>
14
15KNSRCModel::KNSRCModel(QObject *parent)
16 : QAbstractListModel(parent)
17{
18 const QStringList files = KNSCore::EngineBase::availableConfigFiles();
19 for (const auto &file : files) {
20 KConfig conf(file);
21 KConfigGroup group;
22 if (conf.hasGroup(QStringLiteral("KNewStuff3"))) {
23 group = conf.group(QStringLiteral("KNewStuff3"));
24 } else if (conf.hasGroup(QStringLiteral("KNewStuff"))) {
25 group = conf.group(QStringLiteral("KNewStuff"));
26 } else {
27 qWarning() << file << "doesn't contain a KNewStuff (or KNewStuff3) section.";
28 continue;
29 }
30
31 QString constructedName{QFileInfo(file).fileName()};
32 constructedName = constructedName.left(n: constructedName.length() - 6);
33 constructedName.replace(before: QLatin1Char{'_'}, after: QLatin1Char{' '});
34 constructedName[0] = constructedName[0].toUpper();
35
36 Entry *entry = new Entry;
37 entry->name = group.readEntry(key: "Name", aDefault: constructedName);
38 entry->filePath = file;
39
40 m_entries << entry;
41 }
42 std::sort(first: m_entries.begin(), last: m_entries.end(), comp: [](const Entry *a, const Entry *b) -> bool {
43 return QString::localeAwareCompare(s1: b->name, s2: a->name) > 0;
44 });
45}
46
47KNSRCModel::~KNSRCModel() = default;
48
49QHash<int, QByteArray> KNSRCModel::roleNames() const
50{
51 static const QHash<int, QByteArray> roleNames{{NameRole, "name"}, {FilePathRole, "filePath"}};
52 return roleNames;
53}
54
55int KNSRCModel::rowCount(const QModelIndex &parent) const
56{
57 if (parent.isValid()) {
58 return 0;
59 }
60 return m_entries.count();
61}
62
63QVariant KNSRCModel::data(const QModelIndex &index, int role) const
64{
65 if (checkIndex(index)) {
66 Entry *entry = m_entries[index.row()];
67 switch (role) {
68 case NameRole:
69 return entry->name;
70 case FilePathRole:
71 return entry->filePath;
72 }
73 }
74 return QVariant();
75}
76
77#include "moc_knsrcmodel.cpp"
78

source code of knewstuff/src/tools/knewstuff-dialog/knsrcmodel.cpp