Changeset View
Changeset View
Standalone View
Standalone View
src/sessionmodel.cpp
Show All 20 Lines | |||||
21 | 21 | | |||
22 | #include <QDir> | 22 | #include <QDir> | ||
23 | #include <QFile> | 23 | #include <QFile> | ||
24 | #include <QList> | 24 | #include <QList> | ||
25 | #include <QTextStream> | 25 | #include <QTextStream> | ||
26 | 26 | | |||
27 | #include <memory> | 27 | #include <memory> | ||
28 | 28 | | |||
29 | #include <KLocalizedString> | ||||
30 | | ||||
31 | | ||||
29 | class Session { | 32 | class Session { | ||
30 | public: | 33 | public: | ||
31 | QString file; | 34 | QString file; | ||
32 | QString name; | 35 | QString name; | ||
33 | QString exec; | 36 | QString exec; | ||
34 | QString comment; | 37 | QString comment; | ||
35 | }; | 38 | }; | ||
36 | 39 | | |||
37 | typedef std::shared_ptr<Session> SessionPtr; | 40 | typedef std::shared_ptr<Session> SessionPtr; | ||
38 | 41 | | |||
39 | class SessionModelPrivate { | 42 | class SessionModelPrivate { | ||
40 | public: | 43 | public: | ||
41 | int lastIndex { 0 }; | 44 | int lastIndex { 0 }; | ||
42 | QList<SessionPtr> sessions; | 45 | QList<SessionPtr> sessions; | ||
43 | }; | 46 | }; | ||
44 | 47 | | |||
45 | SessionModel::SessionModel(QObject *parent) : QAbstractListModel(parent), d(new SessionModelPrivate()) { | 48 | SessionModel::SessionModel(QObject *parent) : QAbstractListModel(parent), d(new SessionModelPrivate()) { | ||
46 | // read session files | 49 | loadDir("/usr/share/xsessions", SessionTypeX); | ||
47 | QDir dir("/usr/share/xsessions"); | 50 | loadDir("/usr/share/wayland-sessions", SessionTypeWayland); | ||
51 | } | ||||
52 | | ||||
53 | SessionModel::~SessionModel() { | ||||
54 | delete d; | ||||
55 | } | ||||
56 | | ||||
57 | void SessionModel::loadDir(const QString &path, SessionType type) | ||||
58 | { | ||||
59 | QDir dir(path); | ||||
48 | dir.setNameFilters(QStringList() << "*.desktop"); | 60 | dir.setNameFilters(QStringList() << "*.desktop"); | ||
49 | dir.setFilter(QDir::Files); | 61 | dir.setFilter(QDir::Files); | ||
50 | // read session | 62 | // read session | ||
51 | foreach(const QString &session, dir.entryList()) { | 63 | foreach(const QString &session, dir.entryList()) { | ||
52 | QFile inputFile(dir.absoluteFilePath(session)); | 64 | QFile inputFile(dir.absoluteFilePath(session)); | ||
53 | if (!inputFile.open(QIODevice::ReadOnly)) | 65 | if (!inputFile.open(QIODevice::ReadOnly)) | ||
54 | continue; | 66 | continue; | ||
55 | SessionPtr si { new Session { session, "", "", "" } }; | 67 | SessionPtr si { new Session { session, "", "", "" } }; | ||
56 | QTextStream in(&inputFile); | 68 | QTextStream in(&inputFile); | ||
57 | while (!in.atEnd()) { | 69 | while (!in.atEnd()) { | ||
58 | QString line = in.readLine(); | 70 | QString line = in.readLine(); | ||
59 | if (line.startsWith("Name=")) | 71 | if (line.startsWith("Name=")) { | ||
60 | si->name = line.mid(5); | 72 | si->name = line.mid(5); | ||
73 | if (type == SessionTypeWayland) { | ||||
74 | //we want to exactly match the SDDM prompt which is formatted in this way | ||||
75 | si->name += ' ' + i18nc("suffix listed in autologin combo box", "(wayland)"); | ||||
76 | } | ||||
77 | } | ||||
61 | if (line.startsWith("Exec=")) | 78 | if (line.startsWith("Exec=")) | ||
62 | si->exec = line.mid(5); | 79 | si->exec = line.mid(5); | ||
63 | if (line.startsWith("Comment=")) | 80 | if (line.startsWith("Comment=")) | ||
64 | si->comment = line.mid(8); | 81 | si->comment = line.mid(8); | ||
65 | } | 82 | } | ||
66 | // add to sessions list | 83 | // add to sessions list | ||
67 | d->sessions.push_back(si); | 84 | d->sessions.push_back(si); | ||
68 | // close file | 85 | // close file | ||
69 | inputFile.close(); | 86 | inputFile.close(); | ||
70 | } | 87 | } | ||
71 | } | 88 | } | ||
72 | 89 | | |||
73 | SessionModel::~SessionModel() { | | |||
74 | delete d; | | |||
75 | } | | |||
76 | | ||||
77 | QHash<int, QByteArray> SessionModel::roleNames() const { | 90 | QHash<int, QByteArray> SessionModel::roleNames() const { | ||
78 | // set role names | 91 | // set role names | ||
79 | QHash<int, QByteArray> roleNames; | 92 | QHash<int, QByteArray> roleNames; | ||
80 | roleNames[FileRole] = "file"; | 93 | roleNames[FileRole] = "file"; | ||
81 | roleNames[NameRole] = "name"; | 94 | roleNames[NameRole] = "name"; | ||
82 | roleNames[ExecRole] = "exec"; | 95 | roleNames[ExecRole] = "exec"; | ||
83 | roleNames[CommentRole] = "comment"; | 96 | roleNames[CommentRole] = "comment"; | ||
84 | 97 | | |||
Show All 39 Lines |