49 return left.IsHidden_ == right.IsHidden_ &&
50 left.Type_ == right.Type_ &&
51 left.Name_ == right.Name_ &&
52 left.GenericName_ == right.GenericName_ &&
53 left.Comments_ == right.Comments_ &&
54 left.Categories_ == right.Categories_ &&
55 left.Command_ == right.Command_ &&
56 left.WD_ == right.WD_ &&
57 left.IconName_ == right.IconName_;
62 return !(left == right);
67 return !Name_.isEmpty ();
81 command.remove (
"%c");
82 command.remove (
"%f");
83 command.remove (
"%F");
84 command.remove (
"%u");
85 command.remove (
"%U");
86 command.remove (
"%i");
87 auto items = command.split (
' ', QString::SkipEmptyParts);
88 auto removePred = [] (
const QString& str)
89 {
return str.size () == 2 && str.at (0) ==
'%'; };
90 items.erase (std::remove_if (items.begin (), items.end (), removePred),
102 proxy->GetEntityManager ()->HandleEntity (e);
106 qWarning () << Q_FUNC_INFO
107 <<
"don't know how to execute this type of app";
113 QString ByLang (
const QHash<QString, QString>& cont,
const QString& lang)
115 return cont.value (cont.contains (lang) ? lang : QString ());
121 return ByLang (Name_, lang);
126 return ByLang (GenericName_, lang);
131 return ByLang (Comments_, lang);
171 if (name.endsWith (
".png") || name.endsWith (
".svg"))
174 auto result = proxy->GetIconThemeManager ()->GetIcon (name);
175 if (!result.isNull ())
179 if (!result.isNull ())
182 qDebug () << Q_FUNC_INFO << name <<
"not found";
198 dbg.nospace () <<
"DesktopItem\n{\n\tNames: " << Name_
199 <<
"\n\tGenericNames: " << GenericName_
200 <<
"\n\tComments: " << Comments_
201 <<
"\n\tCategories: " << Categories_
202 <<
"\n\tCommand: " << Command_
203 <<
"\n\tWorkingDir: " << WD_
204 <<
"\n\tIconName: " << IconName_
205 <<
"\n\tHidden: " << IsHidden_
212 QHash<QString, QString> FirstValues (
const QHash<QString, QStringList>& hash)
214 QHash<QString, QString> result;
215 for (
auto i = hash.begin (), end = hash.end (); i != end; ++i)
216 result [i.key ()] = i->value (0);
223 QFile file (filename);
224 if (!file.open (QIODevice::ReadOnly))
225 throw std::runtime_error (
"Unable to open file");
228 const auto& group = result [
"Desktop Entry"];
230 const auto& item = std::make_shared<Item> ();
231 item->Name_ = FirstValues (group [
"Name"]);
232 item->GenericName_ = FirstValues (group [
"GenericName"]);
233 item->Comments_ = FirstValues (group [
"Comment"]);
235 item->Categories_ = group [
"Categories"] [{}];
237 auto getSingle = [&group] (
const QString& name) {
return group [name] [{}].value (0); };
239 item->IconName_ = getSingle (
"Icon");
241 const auto& typeStr = getSingle (
"Type");
242 if (typeStr ==
"Application")
245 item->Command_ = getSingle (
"Exec");
246 item->WD_ = getSingle (
"Path");
248 else if (typeStr ==
"URL")
251 item->Command_ = getSingle (
"URL");
253 else if (typeStr ==
"Directory")
258 item->IsHidden_ = getSingle (
"NoDisplay").toLower () ==
"true";
265 return item.DebugPrint (dbg);