41 QHash<QString, QString> ParseMimeTypes ()
43 QFile file {
"/etc/mime.types" };
44 if (!file.open (QIODevice::ReadOnly))
46 qWarning () << Q_FUNC_INFO
47 <<
"cannot open /etc/mime.types:" 48 << file.errorString ();
52 QRegExp wsRx {
"\\s+" };
54 QHash<QString, QString> result;
55 while (!file.atEnd ())
57 const auto& line = file.readLine ().trimmed ();
58 const auto& elems = QString::fromLatin1 (line).split (wsRx);
60 const auto& mime = elems.at (0);
61 for (
int i = 1; i < elems.size (); ++i)
62 result [elems.at (i)] = mime;
67 QStringList GetMimeDirs ()
69 auto list = qgetenv (
"XDG_DATA_HOME").split (
':') +
70 qgetenv (
"XDG_DATA_DIRS").split (
':');
75 for (
const auto& item : list)
76 if (QFile::exists (item +
"/mime"))
77 result << item +
"/mime/";
81 void ParseIconsMappings (QHash<QString, QString>& result,
const QString& filename)
83 QFile file { filename };
84 if (!file.open (QIODevice::ReadOnly))
86 qWarning () << Q_FUNC_INFO
89 << file.errorString ();
93 while (!file.atEnd ())
95 const auto& line = QString::fromLatin1 (file.readLine ().trimmed ());
96 if (!line.indexOf (
':'))
99 result [line.section (
':', 0, 0)] = line.section (
':', 1, 1);
103 QHash<QString, QString> ParseIconsMappings ()
105 QHash<QString, QString> result;
106 for (
const auto& mimeDir : GetMimeDirs ())
108 ParseIconsMappings (result, mimeDir +
"generic-icons");
109 ParseIconsMappings (result, mimeDir +
"icons");
115 struct ExtensionsDataImpl::Details
124 : MimeDatabase_ { ParseMimeTypes () }
125 , IconsMappings_ { ParseIconsMappings () }
136 return Details_->MimeDatabase_;
146 auto iconName = Details_->IconsMappings_.value (mime);
147 if (iconName.isEmpty ())
148 iconName = mime.section (
'/', 0, 0) +
"-x-generic";
150 auto result = QIcon::fromTheme (iconName);
151 if (result.isNull ())
152 result = QIcon::fromTheme (mime.section (
'/', 0, 0) +
"-x-generic");
153 if (result.isNull ())
154 result = QIcon::fromTheme (
"unknown");
QHash< QString, QString > IconsMappings_
QHash< QString, QString > MimeDatabase_
const QHash< QString, QString > & GetMimeDatabase() const
QIcon GetExtIcon(const QString &extension) const
QIcon GetMimeIcon(const QString &mime) const