@@ -89,13 +89,10 @@ MainWindow::MainWindow(QWidget *parent)
8989 });
9090 connect (ui->listServices , &QListWidget::itemEntered, this , [this ](QListWidgetItem *item) {
9191 if (auto service = item->data (Qt::UserRole).value <Service *>()) {
92- ui->listServices ->blockSignals (true );
9392 if (item->toolTip ().isEmpty ()) {
94- ui->lineSearch ->blockSignals (true );
95- item->setToolTip (service->getDescription ());
96- ui->lineSearch ->blockSignals (false );
93+ const QString description = service->getDescription ();
94+ item->setToolTip (description);
9795 }
98- ui->listServices ->blockSignals (false );
9996 }
10097 });
10198}
@@ -199,16 +196,25 @@ void MainWindow::processNonSystemdServices()
199196 const auto list = cmd.getOut (" /sbin/service --status-all" , true ).trimmed ().split (" \n " );
200197 QRegularExpression re (" dpkg-.*$" );
201198 services.reserve (list.size ());
199+
200+ const QLatin1String sectionDelimiter (" ] " );
201+ const QLatin1String debian (" debian" );
202+ const QLatin1String runningPrefix (" [ + ]" );
203+
202204 for (const auto &item : list) {
203- if (item.trimmed ().contains (re) || item.section (" ] " , 1 ) == " debian" ) {
205+ const QString trimmedItem = item.trimmed ();
206+ if (trimmedItem.contains (re) || item.section (sectionDelimiter, 1 ) == debian) {
204207 continue ;
205208 }
206- QString name = item.section (" ] " , 1 );
209+
210+ const QString name = item.section (sectionDelimiter, 1 );
207211 if (name.isEmpty ()) {
208212 continue ;
209213 }
210- services.append (QSharedPointer<Service>::create (name, item.trimmed ().startsWith (" [ + ]" )));
211- services.last ()->setEnabled (Service::isEnabled (name) || dependTargets.contains (name));
214+
215+ auto service = QSharedPointer<Service>::create (name, trimmedItem.startsWith (runningPrefix));
216+ service->setEnabled (dependTargets.contains (name) || Service::isEnabled (name));
217+ services.append (std::move (service));
212218 }
213219}
214220
@@ -230,29 +236,39 @@ void MainWindow::processSystemdActiveInactiveServices(QStringList &names)
230236 }
231237
232238 auto jsonArray = doc.array ();
233- names.reserve (jsonArray.size () * 2 );
234239
235240 QSet<QString> nameSet (names.begin (), names.end ());
236241 services.reserve (services.size () + jsonArray.size ());
242+ nameSet.reserve (nameSet.size () + jsonArray.size ());
243+
244+ const QLatin1String unitKey (" unit" );
245+ const QLatin1String loadKey (" load" );
246+ const QLatin1String subKey (" sub" );
247+ const QLatin1String dotSeparator (" ." );
248+ const QLatin1String notFoundValue (" not-found" );
249+ const QLatin1String runningValue (" running" );
237250
238251 for (const auto &value : jsonArray) {
239252 if (!value.isObject ()) {
240253 continue ;
241254 }
242- auto obj = value.toObject ();
243- QString name = obj.value (" unit" ).toString ().section (' .' , 0 , 0 );
244255
245- if (name.isEmpty () || nameSet.contains (name) || obj.value (" load" ).toString () == " not-found" ) {
256+ const auto obj = value.toObject ();
257+ const QString name = obj.value (unitKey).toString ().section (dotSeparator, 0 , 0 );
258+
259+ if (name.isEmpty () || nameSet.contains (name)
260+ || obj.value (loadKey).toString () == notFoundValue) {
246261 continue ;
247262 }
248263
249264 nameSet.insert (name);
250265
251- bool isRunning = (obj.value (" sub " ).toString () == " running " );
252- bool isEnabled = Service::isEnabled (name) || dependTargets. contains (name);
266+ const bool isRunning = (obj.value (subKey ).toString () == runningValue );
267+ const bool isEnabled = dependTargets. contains (name) || Service::isEnabled (name);
253268
254- services.append (QSharedPointer<Service>::create (name, isRunning));
255- services.last ()->setEnabled (isEnabled);
269+ auto service = QSharedPointer<Service>::create (name, isRunning);
270+ service->setEnabled (isEnabled);
271+ services.append (std::move (service));
256272 }
257273 names = QStringList (nameSet.begin (), nameSet.end ());
258274}
@@ -270,19 +286,23 @@ void MainWindow::processSystemdMaskedServices(QStringList &names)
270286 auto jsonArray = doc.array ();
271287 QSet<QString> nameSet (names.begin (), names.end ());
272288 services.reserve (services.size () + jsonArray.size ());
289+ nameSet.reserve (nameSet.size () + jsonArray.size ());
290+
291+ const QLatin1String unitFileKey (" unit_file" );
292+ const QLatin1String dotSeparator (" ." );
273293
274294 for (const auto &value : jsonArray) {
275295 if (!value.isObject ()) {
276296 continue ;
277297 }
278- auto obj = value.toObject ();
279- QString name = obj.value (" unit_file " ).toString ().section (' . ' , 0 , 0 );
298+ const auto obj = value.toObject ();
299+ const QString name = obj.value (unitFileKey ).toString ().section (dotSeparator , 0 , 0 );
280300
281301 if (name.isEmpty () || nameSet.contains (name)) {
282302 continue ;
283303 }
284-
285304 nameSet.insert (name);
305+
286306 auto service = QSharedPointer<Service>::create (name, false );
287307 service->setEnabled (false );
288308 services.append (std::move (service));
0 commit comments