20 #include "desktopfilehandler.h"
22 #include <QStringList>
23 #include <QStandardPaths>
30 DesktopFileHandler::DesktopFileHandler(
const QString &appId, QObject *parent):
37 QString DesktopFileHandler::appId()
const
42 void DesktopFileHandler::setAppId(
const QString &appId)
44 if (m_appId != appId) {
50 QString DesktopFileHandler::filename()
const
55 bool DesktopFileHandler::isValid()
const
57 return !m_filename.isEmpty();
60 void DesktopFileHandler::load()
64 if (m_appId.isEmpty()) {
69 QString helper = m_appId;
71 QStringList searchDirs = QStandardPaths::standardLocations(QStandardPaths::ApplicationsLocation);
72 #ifdef LAUNCHER_TESTING
73 searchDirs << QStringLiteral(
".");
79 helper.replace(dashPos, 1,
'/');
82 if (helper.contains(
'/')) {
83 path += helper.split(
'/').at(0) +
'/';
84 helper.remove(QRegExp(
"^" + path));
87 Q_FOREACH(
const QString &searchDirName, searchDirs) {
88 QDir searchDir(searchDirName +
"/" + path);
89 const QString desktop = QStringLiteral(
"*.desktop");
90 Q_FOREACH(
const QString &desktopFile, searchDir.entryList(QStringList() << desktop)) {
91 if (desktopFile.startsWith(helper)) {
92 QFileInfo fileInfo(searchDir, desktopFile);
93 m_filename = fileInfo.absoluteFilePath();
99 dashPos = helper.indexOf(
'-');
100 }
while (dashPos != -1);
103 QString DesktopFileHandler::displayName()
const
109 QSettings settings(m_filename, QSettings::IniFormat);
110 settings.setIniCodec(
"UTF-8");
111 settings.beginGroup(QStringLiteral(
"Desktop Entry"));
114 const QString locale = QLocale().name();
115 const QStringList splitLocale = locale.split(QLatin1Char(
'_'));
116 const QString shortLocale = splitLocale.first();
118 if (locale != shortLocale && settings.contains(QStringLiteral(
"Name[%1]").arg(locale))) {
119 return settings.value(QStringLiteral(
"Name[%1]").arg(locale)).toString();
122 if (settings.contains(QStringLiteral(
"Name[%1]").arg(shortLocale))) {
123 return settings.value(QStringLiteral(
"Name[%1]").arg(shortLocale)).toString();
127 QString displayName = settings.value(QStringLiteral(
"Name")).toString();
129 if (settings.contains(QStringLiteral(
"X-Ubuntu-Gettext-Domain"))) {
130 const QString domain = settings.value(QStringLiteral(
"X-Ubuntu-Gettext-Domain")).toString();
131 return dgettext(domain.toUtf8().constData(), displayName.toUtf8().constData());
137 QString DesktopFileHandler::icon()
const
143 QSettings settings(m_filename, QSettings::IniFormat);
144 settings.setIniCodec(
"UTF-8");
145 settings.beginGroup(QStringLiteral(
"Desktop Entry"));
146 QString iconString = settings.value(QStringLiteral(
"Icon")).toString();
147 QString pathString = settings.value(QStringLiteral(
"Path")).toString();
149 if (QFileInfo(iconString).exists()) {
150 return QFileInfo(iconString).absoluteFilePath();
151 }
else if (QFileInfo(pathString +
'/' + iconString).exists()) {
152 return pathString +
'/' + iconString;
154 return "image://theme/" + iconString;