diff --git a/plugins/findthisdevice/findthisdevice_config.cpp b/plugins/findthisdevice/findthisdevice_config.cpp index b20237f0..601ca23b 100644 --- a/plugins/findthisdevice/findthisdevice_config.cpp +++ b/plugins/findthisdevice/findthisdevice_config.cpp @@ -1,123 +1,118 @@ /** * Copyright 2018 Friedrich W. H. Kossebau * * 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) version 3 or any later version * accepted by the membership of KDE e.V. (or its successor approved * by the membership of KDE e.V.), which shall act as a proxy * defined in Section 14 of version 3 of the license. * * 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, see . */ #include "findthisdevice_config.h" +#include "findthisdeviceplugin.h" #include "ui_findthisdevice_config.h" // Phonon #include // KF #include #include // Qt #include K_PLUGIN_FACTORY(FindThisDeviceConfigFactory, registerPlugin();) -namespace { -namespace Strings { -inline QString defaultSound() { return QStringLiteral("Oxygen-Im-Phone-Ring.ogg"); } -} -} - FindThisDeviceConfig::FindThisDeviceConfig(QWidget* parent, const QVariantList& args) : KdeConnectPluginKcm(parent, args, QStringLiteral("kdeconnect_findthisdevice_config")) , m_ui(new Ui::FindThisDeviceConfigUi()) { m_ui->setupUi(this); const QStringList soundDirs = QStandardPaths::locateAll(QStandardPaths::GenericDataLocation, QStringLiteral("sounds"), QStandardPaths::LocateDirectory); if (!soundDirs.isEmpty()) { m_ui->soundFileRequester->setStartDir(QUrl::fromLocalFile(soundDirs.last())); } connect(m_ui->playSoundButton, &QToolButton::clicked, this, &FindThisDeviceConfig::playSound); connect(m_ui->soundFileRequester, &KUrlRequester::textChanged, this, QOverload<>::of(&FindThisDeviceConfig::changed)); } FindThisDeviceConfig::~FindThisDeviceConfig() { delete m_ui; } void FindThisDeviceConfig::defaults() { KCModule::defaults(); - m_ui->soundFileRequester->setText(Strings::defaultSound()); + m_ui->soundFileRequester->setText(defaultSound()); Q_EMIT changed(true); } void FindThisDeviceConfig::load() { KCModule::load(); - const QString ringTone = config()->get(QStringLiteral("ringtone"), Strings::defaultSound()); + const QString ringTone = config()->get(QStringLiteral("ringtone"), defaultSound()); m_ui->soundFileRequester->setText(ringTone); Q_EMIT changed(false); } void FindThisDeviceConfig::save() { config()->set(QStringLiteral("ringtone"), m_ui->soundFileRequester->text()); KCModule::save(); Q_EMIT changed(false); } void FindThisDeviceConfig::playSound() { const QString soundFilename = m_ui->soundFileRequester->text(); QUrl soundURL; const auto dataLocations = QStandardPaths::standardLocations(QStandardPaths::GenericDataLocation); for (const QString &dataLocation : dataLocations) { soundURL = QUrl::fromUserInput(soundFilename, dataLocation + QStringLiteral("/sounds"), QUrl::AssumeLocalFile); if (soundURL.isLocalFile()) { if (QFile::exists(soundURL.toLocalFile())) { break; } } else { if (soundURL.isValid()) { break; } } soundURL.clear(); } Phonon::MediaObject *media = Phonon::createPlayer(Phonon::NotificationCategory, soundURL); media->play(); connect(media, SIGNAL(finished()), media, SLOT(deleteLater())); } #include "findthisdevice_config.moc" diff --git a/plugins/findthisdevice/findthisdeviceplugin.cpp b/plugins/findthisdevice/findthisdeviceplugin.cpp index 48bcf448..f6aeaa3a 100644 --- a/plugins/findthisdevice/findthisdeviceplugin.cpp +++ b/plugins/findthisdevice/findthisdeviceplugin.cpp @@ -1,100 +1,107 @@ /** * Copyright 2018 Friedrich W. H. Kossebau * * 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) version 3 or any later version * accepted by the membership of KDE e.V. (or its successor approved * by the membership of KDE e.V.), which shall act as a proxy * defined in Section 14 of version 3 of the license. * * 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, see . */ #include "findthisdeviceplugin.h" // Phonon #include // KF #include // Qt #include #include #include #include K_PLUGIN_FACTORY_WITH_JSON(KdeConnectPluginFactory, "kdeconnect_findthisdevice.json", registerPlugin();) Q_LOGGING_CATEGORY(KDECONNECT_PLUGIN_FINDTHISDEVICE, "kdeconnect.plugin.findthisdevice") -namespace { -namespace Strings { -inline QString defaultSound() { return QStringLiteral("Oxygen-Im-Phone-Ring.ogg"); } -} -} - FindThisDevicePlugin::FindThisDevicePlugin(QObject* parent, const QVariantList& args) : KdeConnectPlugin(parent, args) { } FindThisDevicePlugin::~FindThisDevicePlugin() = default; void FindThisDevicePlugin::connected() { } bool FindThisDevicePlugin::receivePacket(const NetworkPacket& np) { Q_UNUSED(np); - const QString soundFilename = config()->get(QStringLiteral("ringtone"), Strings::defaultSound()); + const QString soundFilename = config()->get(QStringLiteral("ringtone"), defaultSound()); QUrl soundURL; + #ifdef Q_OS_WIN + QString winDirPath = qEnvironmentVariable("WINDIR") + QStringLiteral("/media"); + + if (!winDirPath.isEmpty()) { + soundURL = QUrl::fromUserInput(soundFilename, + winDirPath, + QUrl::AssumeLocalFile); + } + else { + qCWarning(KDECONNECT_PLUGIN_FINDTHISDEVICE) << "Not playing sounds, system doesn't know WINDIR : " << soundFilename; + } + #else const auto dataLocations = QStandardPaths::standardLocations(QStandardPaths::GenericDataLocation); for (const QString &dataLocation : dataLocations) { soundURL = QUrl::fromUserInput(soundFilename, dataLocation + QStringLiteral("/sounds"), QUrl::AssumeLocalFile); if (soundURL.isLocalFile()) { if (QFile::exists(soundURL.toLocalFile())) { break; } } else { if (soundURL.isValid()) { break; } } soundURL.clear(); } + #endif if (soundURL.isEmpty()) { qCWarning(KDECONNECT_PLUGIN_FINDTHISDEVICE) << "Not playing sounds, could not find ring tone" << soundFilename; return true; } Phonon::MediaObject *media = Phonon::createPlayer(Phonon::NotificationCategory, soundURL); // or CommunicationCategory? media->play(); connect(media, &Phonon::MediaObject::finished, media, &QObject::deleteLater); // TODO: by-pass volume settings in case it is muted // TODO: ensure to use built-in loudspeakers return true; } QString FindThisDevicePlugin::dbusPath() const { return "/modules/kdeconnect/devices/" + device()->id() + "/findthisdevice"; } #include "findthisdeviceplugin.moc" diff --git a/plugins/findthisdevice/findthisdeviceplugin.h b/plugins/findthisdevice/findthisdeviceplugin.h index 3df26590..bf69c50b 100644 --- a/plugins/findthisdevice/findthisdeviceplugin.h +++ b/plugins/findthisdevice/findthisdeviceplugin.h @@ -1,47 +1,55 @@ /** * Copyright 2018 Friedrich W. H. Kossebau * * 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) version 3 or any later version * accepted by the membership of KDE e.V. (or its successor approved * by the membership of KDE e.V.), which shall act as a proxy * defined in Section 14 of version 3 of the license. * * 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, see . */ #ifndef FINDTHISDEVICEPLUGIN_H #define FINDTHISDEVICEPLUGIN_H #include // Qt #include #define PACKET_TYPE_FINDMYPHONE_REQUEST QStringLiteral("kdeconnect.findmyphone.request") Q_DECLARE_LOGGING_CATEGORY(KDECONNECT_PLUGIN_FINDTHISDEVICE) +inline QString defaultSound(){ + #ifdef Q_OS_WIN + return QStringLiteral("Ring01.wav"); + #else + return QStringLiteral("Oxygen-Im-Phone-Ring.ogg"); + #endif + } + class FindThisDevicePlugin : public KdeConnectPlugin { Q_OBJECT Q_CLASSINFO("D-Bus Interface", "org.kde.kdeconnect.device.findthisdevice") public: explicit FindThisDevicePlugin(QObject* parent, const QVariantList& args); ~FindThisDevicePlugin() override; QString dbusPath() const override; void connected() override; bool receivePacket(const NetworkPacket& np) override; }; #endif