on 5dbd13d help sign in
unity8/plugins/Unity/Launcher/desktopfilehandler.cpp
81 lines 2.4 kB history raw
1#include "desktopfilehandler.h"
3#include <QStringList>
4#include <QStandardPaths>
5#include <QDir>
6#include <QSettings>
7#include <QDebug>
9DesktopFileHandler::DesktopFileHandler(QObject *parent):
10 QObject(parent)
15QString DesktopFileHandler::findDesktopFile(const QString &appId) const
17 int dashPos = -1;
18 QString helper = appId;
20 QStringList searchDirs = QStandardPaths::standardLocations(QStandardPaths::ApplicationsLocation);
21#ifdef LAUNCHER_TESTING
22 searchDirs << "";
23#endif
25 QString path;
26 do {
27 if (dashPos != -1) {
28 helper.replace(dashPos, 1, '/');
29 }
31 if (helper.contains("/")) {
32 path += helper.split('/').first() + '/';
33 helper.remove(QRegExp("^" + path));
34 }
36 Q_FOREACH(const QString &searchDirName, searchDirs) {
37 QDir searchDir(searchDirName + "/" + path);
38 Q_FOREACH(const QString &desktopFile, searchDir.entryList(QStringList() << "*.desktop")) {
39 if (desktopFile.startsWith(helper)) {
40 QFileInfo fileInfo(searchDir, desktopFile);
41 return fileInfo.absoluteFilePath();
42 }
43 }
44 }
46 dashPos = helper.indexOf("-");
47 } while (dashPos != -1);
49 return QString();
52QString DesktopFileHandler::displayName(const QString &appId) const
54 QString desktopFile = findDesktopFile(appId);
55 if (desktopFile.isEmpty()) {
56 return QString();
57 }
59 QSettings settings(desktopFile, QSettings::IniFormat);
60 return settings.value("Desktop Entry/Name").toString();
63QString DesktopFileHandler::icon(const QString &appId) const
65 QString desktopFile = findDesktopFile(appId);
66 if (desktopFile.isEmpty()) {
67 return QString();
68 }
70 QSettings settings(desktopFile, QSettings::IniFormat);
71 QString iconString = settings.value("Desktop Entry/Icon").toString();
72 QString pathString = settings.value("Desktop Entry/Path").toString();
73 qDebug() << "checking icon" << iconString << pathString << desktopFile;
74 qDebug() << settings.allKeys();
75 if (QFileInfo(iconString).exists()) {
76 return QFileInfo(iconString).absoluteFilePath();
77 } else if (QFileInfo(pathString + '/' + iconString).exists()) {
78 return pathString + '/' + iconString;
79 }
80 return "image://theme/" + iconString;