18#include "SessionsModel.h"
19#include <QtCore/QFile>
20#include <QtCore/QSortFilterProxyModel>
23QHash<int, QByteArray> SessionsModel::roleNames()
const
28int SessionsModel::rowCount(
const QModelIndex& parent)
const
30 return m_model->rowCount(parent);
33QList<QUrl> SessionsModel::iconSearchDirectories()
const
35 return m_iconSearchDirectories;
38void SessionsModel::setIconSearchDirectories(
const QList<QUrl> searchDirectories)
42 QList<QUrl> localList = {};
43 Q_FOREACH(
const QUrl& searchDirectory, searchDirectories)
45 localList.append(searchDirectory.toLocalFile());
47 m_iconSearchDirectories = localList;
48 Q_EMIT iconSearchDirectoriesChanged();
51QUrl SessionsModel::iconUrl(
const QString sessionKey)
const
53 for (
const QUrl& searchDirectory : qAsConst(m_iconSearchDirectories))
55 for (
const QString& imgExt : {
"svg",
"png" })
58 QString customIconUrl = searchDirectory.toString(QUrl::StripTrailingSlash) +
59 "/custom_" + sessionKey +
"_badge." + imgExt;
60 QFile customIconFile(customIconUrl);
61 if (customIconFile.exists()) {
62 qDebug() <<
"Found custom session badge icon: " << customIconUrl;
63 return QUrl(customIconUrl);
66 for (
const QString& imgExt : {
"svg",
"png" })
68 QString iconUrl = searchDirectory.toString(QUrl::StripTrailingSlash) +
69 "/" + sessionKey +
"_badge." + imgExt;
70 QFile iconFile(iconUrl);
71 if (iconFile.exists()) {
72 qDebug() <<
"Found session badge icon: " << iconUrl;
79 qDebug() <<
"Trying legacy mechanism for finding an appropriate icon file.";
81 QString path = searchDirectory.toString(QUrl::StripTrailingSlash) +
"/";
82 bool iconFound =
false;
83 if (sessionKey ==
"ubuntu" || sessionKey ==
"ubuntu-2d") {
84 path +=
"ubuntu_badge.png";
86 }
else if(sessionKey ==
"gnome-classic" ||
87 sessionKey ==
"gnome-flashback-compiz" ||
88 sessionKey ==
"gnome-flashback-metacity" ||
89 sessionKey ==
"gnome-shell" ||
90 sessionKey ==
"gnome-wayland" ||
93 path +=
"gnome_badge.png";
95 }
else if (sessionKey ==
"plasma") {
96 path +=
"kde_badge.png";
98 }
else if (sessionKey ==
"xterm") {
99 path +=
"recovery_console_badge.png";
101 }
else if (sessionKey ==
"remote-login") {
102 path +=
"remote_login_help.png";
106 if (QFile(path).exists() && iconFound) {
107 qDebug() <<
"Using session badge icon: " << path <<
" for session type: " << sessionKey;
113 qDebug() <<
"No suitable icon found! Falling back to unknown_badge.png icon.";
114 return QUrl(
"./graphics/session_icons/unknown_badge.png");
117QVariant SessionsModel::data(
const QModelIndex& index,
int role)
const
120 case SessionsModel::IconRole:
121 return iconUrl(m_model->data(index, QLightDM::SessionsModel::KeyRole).toString());
123 return m_model->data(index, role);
127SessionsModel::SessionsModel(QObject* parent)
128 : LomiriSortFilterProxyModelQML(parent)
131 m_model =
new QLightDM::SessionsModel(
this);
132 m_roleNames = m_model->roleNames();
133 m_roleNames[IconRole] =
"icon_url";
136 auto snapRoot = QFile::decodeName(qgetenv(
"SNAP"));
137 if (!snapRoot.isEmpty()) {
138 for (
int i = 0; i < m_iconSearchDirectories.size(); i++) {
139 m_iconSearchDirectories[i] = snapRoot + m_iconSearchDirectories[i].path();
144 setSortCaseSensitivity(Qt::CaseInsensitive);
145 setSortLocaleAware(
true);
146 setSortRole(Qt::DisplayRole);