diff --git a/src/kcmodule/adapters/adapters.cpp b/src/kcmodule/adapters/adapters.cpp index 31e02f0c..7a1d0d57 100644 --- a/src/kcmodule/adapters/adapters.cpp +++ b/src/kcmodule/adapters/adapters.cpp @@ -1,400 +1,400 @@ /* * Copyright (C) 2010 Rafael Fernández López * Copyright (C) 2010 UFO Coders * Copyright (C) 2014-2015 David Rosca * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU Library General Public License * along with this library; see the file COPYING.LIB. If not, write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301, USA. */ #include "adapters.h" #include "../common/systemcheck.h" #include "version.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include K_PLUGIN_FACTORY_WITH_JSON(BlueDevilFactory, "bluedeviladapters.json", registerPlugin();) //////////////////////////////////////////////////////////////////////////////////////////////////// // Returns "hciX" part from UBI "/org/bluez/hciX/dev_xx_xx_xx_xx_xx_xx" static QString adapterHciString(const QString &ubi) { int startIndex = ubi.indexOf(QLatin1String("/hci")) + 1; if (startIndex < 1) { return QString(); } int endIndex = ubi.indexOf(QLatin1Char('/'), startIndex); if (endIndex == -1) { return ubi.mid(startIndex); } return ubi.mid(startIndex, endIndex - startIndex); } AdapterSettings::AdapterSettings(BluezQt::AdapterPtr adapter, KCModule *parent) : QGroupBox(parent) , m_adapter(adapter) , m_name(new QLineEdit(this)) , m_hidden(new QRadioButton(i18nc("Radio widget to set if we want the adapter to be hidden", "Hidden"), this)) , m_alwaysVisible(new QRadioButton(i18nc("Radio widget to set if we want the adapter to be always visible", "Always visible"), this)) , m_temporaryVisible(new QRadioButton(i18nc("Radio widget to set if we want the adapter to be temporarily visible", "Temporarily visible"), this)) , m_discoverTime(new QSlider(Qt::Horizontal, this)) , m_discoverTimeLabel(new QLabel(this)) , m_discoverTimeWidget(new QWidget(this)) , m_powered(new QCheckBox(this)) { QButtonGroup *const buttonGroup = new QButtonGroup(this); buttonGroup->addButton(m_hidden); buttonGroup->addButton(m_alwaysVisible); buttonGroup->addButton(m_temporaryVisible); m_name->setText(adapter->name()); m_nameOrig = adapter->name(); m_hiddenOrig = false; m_alwaysVisibleOrig = false; m_temporaryVisibleOrig = false; if (!adapter->isDiscoverable()) { m_hidden->setChecked(true); m_hiddenOrig = true; } else { if (!adapter->discoverableTimeout()) { m_alwaysVisible->setChecked(true); m_alwaysVisibleOrig = true; } else { m_temporaryVisible->setChecked(true); m_temporaryVisibleOrig = true; } } m_discoverTime->setRange(1, 30); m_discoverTime->setValue(adapter->discoverableTimeout() / 60); m_discoverTime->setTickPosition(QSlider::TicksBelow); m_discoverTime->setTickInterval(1); m_discoverTimeOrig = qMax((quint32) 1, adapter->discoverableTimeout() / 60); QHBoxLayout *layout = new QHBoxLayout; layout->addWidget(m_discoverTime); layout->addWidget(m_discoverTimeLabel); m_discoverTimeWidget->setLayout(layout); m_discoverTimeWidget->setEnabled(m_temporaryVisibleOrig); m_discoverTimeLabel->setText(i18ncp("Discover time for the adapter", "1 minute", "%1 minutes", m_discoverTime->value())); m_powered->setChecked(adapter->isPowered()); m_poweredOrig = adapter->isPowered(); m_layout = new QFormLayout; m_layout->addRow(i18nc("Name of the adapter", "Name"), m_name); m_layout->addRow(i18nc("Whether the adapter is powered or not", "Powered"), m_powered); m_layout->addRow(i18nc("Whether the adapter is visible or not", "Visibility"), m_hidden); m_layout->addWidget(m_alwaysVisible); m_layout->addWidget(m_temporaryVisible); m_layout->addRow(i18nc("How long the adapter will be discoverable", "Discover Time"), m_discoverTimeWidget); setLayout(m_layout); m_layout->labelForField(m_discoverTimeWidget)->setEnabled(m_temporaryVisibleOrig); connect(m_adapter.data(), &BluezQt::Adapter::adapterChanged, this, &AdapterSettings::readChanges); - connect(m_name, SIGNAL(textEdited(QString)), this, SLOT(slotSettingsChanged())); - connect(m_hidden, SIGNAL(toggled(bool)), this, SLOT(visibilityChanged())); - connect(m_hidden, SIGNAL(toggled(bool)), this, SLOT(slotSettingsChanged())); - connect(m_alwaysVisible, SIGNAL(toggled(bool)), this, SLOT(visibilityChanged())); - connect(m_alwaysVisible, SIGNAL(toggled(bool)), this, SLOT(slotSettingsChanged())); - connect(m_temporaryVisible, SIGNAL(toggled(bool)), this, SLOT(visibilityChanged())); - connect(m_temporaryVisible, SIGNAL(toggled(bool)), this, SLOT(slotSettingsChanged())); - connect(m_discoverTime, SIGNAL(valueChanged(int)), this, SLOT(slotSettingsChanged())); - connect(m_powered, SIGNAL(stateChanged(int)), this, SLOT(slotSettingsChanged())); + connect(m_name, &QLineEdit::textEdited, this, &AdapterSettings::slotSettingsChanged); + connect(m_hidden, &QAbstractButton::toggled, this, &AdapterSettings::visibilityChanged); + connect(m_hidden, &QAbstractButton::toggled, this, &AdapterSettings::slotSettingsChanged); + connect(m_alwaysVisible, &QAbstractButton::toggled, this, &AdapterSettings::visibilityChanged); + connect(m_alwaysVisible, &QAbstractButton::toggled, this, &AdapterSettings::slotSettingsChanged); + connect(m_temporaryVisible, &QAbstractButton::toggled, this, &AdapterSettings::visibilityChanged); + connect(m_temporaryVisible, &QAbstractButton::toggled, this, &AdapterSettings::slotSettingsChanged); + connect(m_discoverTime, &QAbstractSlider::valueChanged, this, &AdapterSettings::slotSettingsChanged); + connect(m_powered, &QCheckBox::stateChanged, this, &AdapterSettings::slotSettingsChanged); const QString &hci = adapterHciString(adapter->ubi()); if (!hci.isEmpty()) { setTitle(QStringLiteral("%1 (%2) - %3").arg(adapter->systemName(), adapter->address(), hci)); } else { setTitle(QStringLiteral("%1 (%2)").arg(adapter->systemName(), adapter->address())); } } bool AdapterSettings::isModified() const { return m_name->text() != m_nameOrig || m_hidden->isChecked() != m_hiddenOrig || m_alwaysVisible->isChecked() != m_alwaysVisibleOrig || m_temporaryVisible->isChecked() != m_temporaryVisibleOrig || m_discoverTime->value() != m_discoverTimeOrig || m_powered->isChecked() != m_poweredOrig; } void AdapterSettings::applyChanges() { if (m_name->text() != m_nameOrig) { m_adapter->setName(m_name->text()); } if (m_hidden->isChecked()) { m_adapter->setDiscoverable(false); } else if (m_alwaysVisible->isChecked()) { m_adapter->setDiscoverable(true); m_adapter->setDiscoverableTimeout(0); } else { m_adapter->setDiscoverable(true); m_adapter->setDiscoverableTimeout(m_discoverTime->value() * 60); } if (m_powered->isChecked() != m_poweredOrig) { m_adapter->setPowered(m_powered->isChecked()); } } void AdapterSettings::setDefaults() { m_name->setText(m_adapter->systemName()); m_powered->setChecked(true); m_alwaysVisible->setChecked(true); Q_EMIT settingsChanged(isModified()); } QString AdapterSettings::name() const { return m_name->text(); } AdapterSettings::DiscoverOptions AdapterSettings::discoverOptions() const { if (m_hidden->isChecked()) { return Hidden; } if (m_alwaysVisible->isChecked()) { return AlwaysVisible; } return TemporaryVisible; } quint32 AdapterSettings::discoverTime() const { return m_discoverTime->value() * 60; } bool AdapterSettings::powered() const { return m_powered->isChecked(); } void AdapterSettings::readChanges() { blockSignals(true); m_nameOrig = m_adapter->name(); m_hiddenOrig = !m_adapter->isDiscoverable(); m_alwaysVisibleOrig = m_adapter->isDiscoverable() && !m_adapter->discoverableTimeout(); m_temporaryVisibleOrig = m_adapter->isDiscoverable() && m_adapter->discoverableTimeout(); m_discoverTimeOrig = qMax((quint32) 1, m_adapter->discoverableTimeout() / 60); m_poweredOrig = m_adapter->isPowered(); m_name->setText(m_nameOrig); m_hidden->setChecked(m_hiddenOrig); m_alwaysVisible->setChecked(m_alwaysVisibleOrig); m_temporaryVisible->setChecked(m_temporaryVisibleOrig); m_discoverTime->setValue(m_discoverTimeOrig); m_powered->setChecked(m_poweredOrig); m_discoverTimeLabel->setText(i18np("1 minute", "%1 minutes", m_discoverTime->value())); const QString &hci = adapterHciString(m_adapter->ubi()); if (!hci.isEmpty()) { setTitle(QStringLiteral("%1 (%2) - %3").arg(m_adapter->systemName(), m_adapter->address(), hci)); } else { setTitle(QStringLiteral("%1 (%2)").arg(m_adapter->systemName(), m_adapter->address())); } blockSignals(false); Q_EMIT settingsChanged(false); } void AdapterSettings::visibilityChanged() { QRadioButton *const sdr = static_cast(sender()); if (!sdr->isChecked()) { return; } const bool enabled = sender() == m_temporaryVisible; m_discoverTimeWidget->setEnabled(enabled); m_layout->labelForField(m_discoverTimeWidget)->setEnabled(enabled); } void AdapterSettings::slotSettingsChanged() { m_discoverTimeLabel->setText(i18np("1 minute", "%1 minutes", m_discoverTime->value())); Q_EMIT settingsChanged(isModified()); } //////////////////////////////////////////////////////////////////////////////////////////////////// KCMBlueDevilAdapters::KCMBlueDevilAdapters(QWidget *parent, const QVariantList&) : KCModule(parent) , m_noAdaptersMessage(nullptr) , m_systemCheck(nullptr) { KAboutData *ab = new KAboutData(QStringLiteral("kcmbluedeviladapters"), i18n("Bluetooth Adapters"), BLUEDEVIL_VERSION, i18n("Bluetooth Adapters Control Panel Module"), KAboutLicense::GPL, i18n("(c) 2010 Rafael Fernández López")); ab->addAuthor(QStringLiteral("David Rosca"), i18n("Maintainer"), QStringLiteral("nowrep@gmail.com"), QStringLiteral("http://david.rosca.cz")); ab->addAuthor(QStringLiteral("Rafael Fernández López"), i18n("Previous Developer and Maintainer"), QStringLiteral("ereslibre@kde.org")); setAboutData(ab); setButtons(Apply | Default); QVBoxLayout *layout = new QVBoxLayout; QScrollArea *mainArea = new QScrollArea(this); QWidget *widget = new QWidget(mainArea); m_layout = new QVBoxLayout; widget->setLayout(m_layout); mainArea->setWidget(widget); mainArea->setWidgetResizable(true); layout->addWidget(mainArea); setLayout(layout); // Initialize BluezQt m_manager = new BluezQt::Manager(this); BluezQt::InitManagerJob *job = m_manager->init(); job->start(); connect(job, &BluezQt::InitManagerJob::result, this, &KCMBlueDevilAdapters::initJobResult); } void KCMBlueDevilAdapters::load() { Q_FOREACH (AdapterSettings *const adapterSettings, m_adapterSettingsMap) { adapterSettings->readChanges(); } } void KCMBlueDevilAdapters::save() { Q_FOREACH (AdapterSettings *const adapterSettings, m_adapterSettingsMap) { adapterSettings->applyChanges(); } } void KCMBlueDevilAdapters::defaults() { Q_FOREACH (AdapterSettings *const adapterSettings, m_adapterSettingsMap) { adapterSettings->setDefaults(); } } void KCMBlueDevilAdapters::initJobResult(BluezQt::InitManagerJob *job) { if (job->error()) { return; } QVBoxLayout *l = static_cast(layout()); m_systemCheck = new SystemCheck(m_manager, this); m_systemCheck->createWarnings(l); connect(m_manager, &BluezQt::Manager::adapterAdded, this, &KCMBlueDevilAdapters::updateAdapters); connect(m_manager, &BluezQt::Manager::adapterRemoved, this, &KCMBlueDevilAdapters::updateAdapters); fillAdaptersInformation(); } void KCMBlueDevilAdapters::updateAdapters() { fillAdaptersInformation(); } void KCMBlueDevilAdapters::generateNoAdaptersMessage() { QVBoxLayout *layout = new QVBoxLayout; m_noAdaptersMessage = new QWidget(this); QLabel *label = new QLabel(i18n("No adapters found")); label->setAlignment(Qt::AlignCenter); layout->addWidget(label); m_noAdaptersMessage->setLayout(layout); m_noAdaptersMessage->setVisible(false); } void KCMBlueDevilAdapters::adapterConfigurationChanged(bool modified) { if (modified) { Q_EMIT changed(true); return; } Q_FOREACH (AdapterSettings *const adapterSettings, m_adapterSettingsMap) { if (adapterSettings->isModified()) { return; } } Q_EMIT changed(false); } void KCMBlueDevilAdapters::fillAdaptersInformation() { qDeleteAll(m_adapterSettingsMap); m_adapterSettingsMap.clear(); for (int i = 0; i < m_layout->count(); ++i) { m_layout->takeAt(0); } if (m_manager->adapters().isEmpty()) { generateNoAdaptersMessage(); m_layout->addWidget(m_noAdaptersMessage); m_noAdaptersMessage->setVisible(true); return; } if (m_noAdaptersMessage) { m_noAdaptersMessage->setVisible(false); } Q_FOREACH (BluezQt::AdapterPtr adapter, m_manager->adapters()) { AdapterSettings *const adapterSettings = new AdapterSettings(adapter, this); - connect(adapterSettings, SIGNAL(settingsChanged(bool)), - this, SLOT(adapterConfigurationChanged(bool))); + connect(adapterSettings, &AdapterSettings::settingsChanged, + this, &KCMBlueDevilAdapters::adapterConfigurationChanged); m_adapterSettingsMap.insert(adapter, adapterSettings); m_layout->addWidget(adapterSettings); } m_layout->addStretch(); } #include "adapters.moc" diff --git a/src/kcmodule/common/systemcheck.cpp b/src/kcmodule/common/systemcheck.cpp index d5a5a05a..5ed8a693 100644 --- a/src/kcmodule/common/systemcheck.cpp +++ b/src/kcmodule/common/systemcheck.cpp @@ -1,265 +1,265 @@ /* * Copyright (C) 2010 Rafael Fernández López * Copyright (C) 2010 UFO Coders * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU Library General Public License * along with this library; see the file COPYING.LIB. If not, write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301, USA. */ #include "systemcheck.h" #include "globalsettings.h" #include #include #include #include #include #include #include #include #include #include #include SystemCheck::SystemCheck(BluezQt::Manager *manager, QWidget *parent) : QObject(parent) , m_parent(parent) , m_manager(manager) , m_blockedError(nullptr) , m_noAdaptersError(nullptr) , m_noKdedRunningError(nullptr) , m_noUsableAdapterError(nullptr) , m_disabledNotificationsError(nullptr) , m_notDiscoverableAdapterError(nullptr) { m_kded = new org::kde::kded5(QStringLiteral("org.kde.kded5"), QStringLiteral("/kded"), QDBusConnection::sessionBus(), this); connect(manager, &BluezQt::Manager::usableAdapterChanged, this, &SystemCheck::usableAdapterChanged); connect(manager, &BluezQt::Manager::bluetoothBlockedChanged, this, &SystemCheck::updateInformationState); } org::kde::kded5 *SystemCheck::kded() { return m_kded; } void SystemCheck::createWarnings(QVBoxLayout *layout) { if (m_noAdaptersError) { return; } m_noAdaptersError = new KMessageWidget(m_parent); m_noAdaptersError->setMessageType(KMessageWidget::Error); m_noAdaptersError->setCloseButtonVisible(false); m_noAdaptersError->setText(i18n("No Bluetooth adapters have been found.")); layout->insertWidget(0, m_noAdaptersError); m_blockedError = new KMessageWidget(m_parent); m_blockedError->setMessageType(KMessageWidget::Error); m_blockedError->setCloseButtonVisible(false); m_blockedError->setText(i18n("Bluetooth is disabled.")); QAction *fixBlocked = new QAction(QIcon::fromTheme(QStringLiteral("dialog-ok-apply")), i18nc("Action to enable Bluetooth adapter", "Enable"), m_blockedError); - connect(fixBlocked, SIGNAL(triggered(bool)), this, SLOT(fixBlockedError())); + connect(fixBlocked, &QAction::triggered, this, &SystemCheck::fixBlockedError); m_blockedError->addAction(fixBlocked); layout->insertWidget(0, m_blockedError); m_noUsableAdapterError = new KMessageWidget(m_parent); m_noUsableAdapterError->setMessageType(KMessageWidget::Warning); m_noUsableAdapterError->setCloseButtonVisible(false); m_noUsableAdapterError->setText(i18n("Your Bluetooth adapter is powered off.")); QAction *fixNoUsableAdapter = new QAction(QIcon::fromTheme(QStringLiteral("dialog-ok-apply")), i18nc("Action to turn on Bluetooth adapter", "Turn On"), m_noUsableAdapterError); - connect(fixNoUsableAdapter, SIGNAL(triggered(bool)), this, SLOT(fixNoUsableAdapterError())); + connect(fixNoUsableAdapter, &QAction::triggered, this, &SystemCheck::fixNoUsableAdapterError); m_noUsableAdapterError->addAction(fixNoUsableAdapter); layout->insertWidget(0, m_noUsableAdapterError); m_notDiscoverableAdapterError = new KMessageWidget(m_parent); m_notDiscoverableAdapterError->setMessageType(KMessageWidget::Warning); m_notDiscoverableAdapterError->setCloseButtonVisible(false); QAction *fixNotDiscoverableAdapter = new QAction(QIcon::fromTheme(QStringLiteral("dialog-ok-apply")), i18nc("Action to fix a problem", "Fix it"), m_notDiscoverableAdapterError); - connect(fixNotDiscoverableAdapter, SIGNAL(triggered(bool)), this, SLOT(fixNotDiscoverableAdapterError())); + connect(fixNotDiscoverableAdapter, &QAction::triggered, this, &SystemCheck::fixNotDiscoverableAdapterError); m_notDiscoverableAdapterError->addAction(fixNotDiscoverableAdapter); m_notDiscoverableAdapterError->setText(i18n("Your default Bluetooth adapter is not visible for remote devices.")); layout->insertWidget(0, m_notDiscoverableAdapterError); m_disabledNotificationsError = new KMessageWidget(m_parent); m_disabledNotificationsError->setMessageType(KMessageWidget::Warning); m_disabledNotificationsError->setCloseButtonVisible(false); QAction *fixDisabledNotifications = new QAction(QIcon::fromTheme(QStringLiteral("dialog-ok-apply")), i18nc("Action to fix a problem", "Fix it"), m_disabledNotificationsError); - connect(fixDisabledNotifications, SIGNAL(triggered(bool)), this, SLOT(fixDisabledNotificationsError())); + connect(fixDisabledNotifications, &QAction::triggered, this, &SystemCheck::fixDisabledNotificationsError); m_disabledNotificationsError->addAction(fixDisabledNotifications); m_disabledNotificationsError->setText(i18n("Interaction with Bluetooth system is not optimal.")); layout->insertWidget(0, m_disabledNotificationsError); m_noKdedRunningError = new KMessageWidget(m_parent); m_noKdedRunningError ->setMessageType(KMessageWidget::Warning); m_noKdedRunningError->setCloseButtonVisible(false); QAction *fixNoKDEDRunning = new QAction(QIcon::fromTheme(QStringLiteral("dialog-ok-apply")), i18nc("Action to fix a problem", "Fix it"), m_noKdedRunningError); - connect(fixNoKDEDRunning, SIGNAL(triggered(bool)), this, SLOT(fixNoKDEDRunning())); + connect(fixNoKDEDRunning, &QAction::triggered, this, &SystemCheck::fixNoKDEDRunning); m_noKdedRunningError->addAction(fixNoKDEDRunning); m_noKdedRunningError->setText(i18n("Bluetooth is not completely enabled.")); layout->insertWidget(0, m_noKdedRunningError); usableAdapterChanged(m_manager->usableAdapter()); } void SystemCheck::updateInformationState() { m_blockedError->setVisible(false); m_noAdaptersError->setVisible(false); m_noUsableAdapterError->setVisible(false); m_notDiscoverableAdapterError->setVisible(false); m_disabledNotificationsError->setVisible(false); m_noKdedRunningError->setVisible(false); if (!GlobalSettings::self()->enableGlobalBluetooth()) { return; } if (m_manager->isBluetoothBlocked()) { m_blockedError->setVisible(true); return; } if (m_manager->adapters().isEmpty()) { m_noAdaptersError->setVisible(true); return; } BluezQt::AdapterPtr usableAdapter = m_manager->usableAdapter(); if (!usableAdapter) { m_noUsableAdapterError->setVisible(true); return; } if (!usableAdapter->isDiscoverable()) { m_notDiscoverableAdapterError->setVisible(true); return; } if (!checkNotificationsOK()) { m_disabledNotificationsError->setVisible(true); return; } if (!m_kded->loadedModules().value().contains(QStringLiteral("bluedevil"))) { m_noKdedRunningError->setVisible(true); return; } } void SystemCheck::usableAdapterChanged(BluezQt::AdapterPtr adapter) { if (adapter) { connect(adapter.data(), &BluezQt::Adapter::discoverableChanged, this, &SystemCheck::adapterDiscoverableChanged); } updateInformationState(); } void SystemCheck::adapterDiscoverableChanged(bool discoverable) { Q_UNUSED(discoverable) updateInformationState(); } void SystemCheck::fixBlockedError() { m_manager->setBluetoothBlocked(false); } void SystemCheck::fixNoKDEDRunning() { m_noKdedRunningError->setVisible(false); m_kded->loadModule(QStringLiteral("bluedevil")); updateInformationState(); } void SystemCheck::fixNoUsableAdapterError() { if (m_manager->adapters().isEmpty()) { return; } m_noUsableAdapterError->setVisible(false); m_manager->adapters().first()->setPowered(true); } void SystemCheck::fixNotDiscoverableAdapterError() { if (!m_manager->usableAdapter()) { return; } m_notDiscoverableAdapterError->setVisible(false); m_manager->usableAdapter()->setDiscoverable(true); m_manager->usableAdapter()->setDiscoverableTimeout(0); } void SystemCheck::fixDisabledNotificationsError() { m_disabledNotificationsError->setVisible(false); KConfig config(QStringLiteral("bluedevil.notifyrc"), KConfig::NoGlobals); config.addConfigSources(QStandardPaths::locateAll(QStandardPaths::GenericDataLocation, QStringLiteral("bluedevil/bluedevil.notifyrc"))); QStringList confList = config.groupList(); QRegularExpression rx(QStringLiteral("^Event/([^/]*)$")); confList = confList.filter(rx); Q_FOREACH (const QString &group , confList) { KConfigGroup cg(&config, group); cg.writeEntry("Action", "Popup"); } config.sync(); updateInformationState(); } bool SystemCheck::checkNotificationsOK() { KConfig config(QStringLiteral("bluedevil.notifyrc"), KConfig::NoGlobals); config.addConfigSources(QStandardPaths::locateAll(QStandardPaths::GenericDataLocation, QStringLiteral("bluedevil/bluedevil.notifyrc"))); QStringList confList = config.groupList(); QRegularExpression rx(QStringLiteral("^Event/([^/]*)$")); confList = confList.filter(rx); Q_FOREACH (const QString &group , confList) { KConfigGroup cg(&config, group); const QString action = cg.readEntry("Action"); if (!action.contains(QLatin1String("Popup"))) { return false; } } return true; } diff --git a/src/kded/bluezagent.cpp b/src/kded/bluezagent.cpp index 5f7c9783..51ab0f34 100644 --- a/src/kded/bluezagent.cpp +++ b/src/kded/bluezagent.cpp @@ -1,151 +1,151 @@ /*************************************************************************** * Copyright (C) 2010 Alejandro Fiestas Olivares * * Copyright (C) 2010 Eduardo Robles Elvira * * Copyright (C) 2010 UFO Coders * * Copyright (C) 2014-2015 David Rosca * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * ***************************************************************************/ #include "bluezagent.h" #include "debug_p.h" #include "helpers/requestauthorization.h" #include "helpers/requestconfirmation.h" #include "helpers/requestpin.h" #include #include #include BluezAgent::BluezAgent(QObject *parent) : BluezQt::Agent(parent) { } QDBusObjectPath BluezAgent::objectPath() const { return QDBusObjectPath(QStringLiteral("/modules/bluedevil/Agent")); } static void processAuthorizationRequest(BluezQt::DevicePtr device, const BluezQt::Request<> &request, RequestAuthorization::Result result) { switch (result) { case RequestAuthorization::Accept: qCDebug(BLUEDAEMON) << "Accepting request"; request.accept(); break; case RequestAuthorization::AcceptAndTrust: qCDebug(BLUEDAEMON) << "Accepting request and trusting device"; request.accept(); device->setTrusted(true); break; default: qCDebug(BLUEDAEMON) << "Rejecting request"; request.reject(); break; } } void BluezAgent::authorizeService(BluezQt::DevicePtr device, const QString &uuid, const BluezQt::Request<> &request) { // TODO: Show user the Service UUID qCDebug(BLUEDAEMON) << "AGENT-AuthorizeService" << device->name() << "Service:" << uuid; RequestAuthorization *helper = new RequestAuthorization(device, this); - connect(helper, &RequestAuthorization::done, this, [this, device, request](RequestAuthorization::Result result) { + connect(helper, &RequestAuthorization::done, this, [ device, request](RequestAuthorization::Result result) { processAuthorizationRequest(device, request, result); }); } void BluezAgent::requestPinCode(BluezQt::DevicePtr device, const BluezQt::Request &request) { qCDebug(BLUEDAEMON) << "AGENT-RequestPinCode " << device->name(); RequestPin *helper = new RequestPin(device, false, this); - connect(helper, &RequestPin::done, this, [this, request](const QString &result) { + connect(helper, &RequestPin::done, this, [ request](const QString &result) { if (!result.isEmpty()) { qCDebug(BLUEDAEMON) << "Introducing PIN..."; request.accept(result); return; } qCDebug(BLUEDAEMON) << "No PIN introduced"; request.reject(); }); } void BluezAgent::requestPasskey(BluezQt::DevicePtr device, const BluezQt::Request &request) { qCDebug(BLUEDAEMON) << "AGENT-RequestPasskey " << device->name(); RequestPin *helper = new RequestPin(device, true, this); - connect(helper, &RequestPin::done, this, [this, request](const QString &result) { + connect(helper, &RequestPin::done, this, [ request](const QString &result) { bool ok; quint32 passkey = result.toInt(&ok); if (ok) { qCDebug(BLUEDAEMON) << "Introducing PassKey..."; request.accept(passkey); return; } qCDebug(BLUEDAEMON) << "No PassKey introduced"; request.reject(); }); } void BluezAgent::requestConfirmation(BluezQt::DevicePtr device, const QString &passkey, const BluezQt::Request<> &request) { qCDebug(BLUEDAEMON) << "AGENT-RequestConfirmation " << device->name() << passkey; RequestConfirmation *helper = new RequestConfirmation(device, passkey, this); - connect(helper, &RequestConfirmation::done, this, [this, request](RequestConfirmation::Result result) { + connect(helper, &RequestConfirmation::done, this, [ request](RequestConfirmation::Result result) { if (result == RequestConfirmation::Accept) { qCDebug(BLUEDAEMON) << "Accepting request"; request.accept(); return; } qCDebug(BLUEDAEMON) << "Rejecting request"; request.reject(); }); } void BluezAgent::requestAuthorization(BluezQt::DevicePtr device, const BluezQt::Request<> &request) { qCDebug(BLUEDAEMON) << "AGENT-RequestAuthorization"; RequestAuthorization *helper = new RequestAuthorization(device, this); - connect(helper, &RequestAuthorization::done, this, [this, device, request](RequestAuthorization::Result result) { + connect(helper, &RequestAuthorization::done, this, [ device, request](RequestAuthorization::Result result) { processAuthorizationRequest(device, request, result); }); } void BluezAgent::release() { qCDebug(BLUEDAEMON) << "AGENT-Release"; Q_EMIT agentReleased(); } void BluezAgent::cancel() { qCDebug(BLUEDAEMON) << "AGENT-Cancel"; Q_EMIT agentCanceled(); }