commit plasma-browser-integration for openSUSE:Factory
Hello community, here is the log from the commit of package plasma-browser-integration for openSUSE:Factory checked in at 2018-11-29 22:59:47 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/plasma-browser-integration (Old) and /work/SRC/openSUSE:Factory/.plasma-browser-integration.new.19453 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Package is "plasma-browser-integration" Thu Nov 29 22:59:47 2018 rev:12 rq:652334 version:5.14.4 Changes: -------- --- /work/SRC/openSUSE:Factory/plasma-browser-integration/plasma-browser-integration.changes 2018-11-08 09:50:21.728967308 +0100 +++ /work/SRC/openSUSE:Factory/.plasma-browser-integration.new.19453/plasma-browser-integration.changes 2018-11-29 22:59:50.355547917 +0100 @@ -1,0 +2,11 @@ +Wed Nov 28 07:52:49 UTC 2018 - fabian@ritter-vogt.de + +- Update to 5.14.4 + * New bugfix release + * For more details please see: + * https://www.kde.org/announcements/plasma-5.14.4.php +- Changes since 5.14.3: + * Include actual player source in metadata + * Listen to KDE Connect device signals + +------------------------------------------------------------------- Old: ---- plasma-browser-integration-5.14.3.tar.xz plasma-browser-integration-5.14.3.tar.xz.sig New: ---- plasma-browser-integration-5.14.4.tar.xz plasma-browser-integration-5.14.4.tar.xz.sig ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ plasma-browser-integration.spec ++++++ --- /var/tmp/diff_new_pack.Nv2Ys2/_old 2018-11-29 22:59:51.003547118 +0100 +++ /var/tmp/diff_new_pack.Nv2Ys2/_new 2018-11-29 22:59:51.007547112 +0100 @@ -20,7 +20,7 @@ %bcond_with browser_extension %bcond_without lang Name: plasma-browser-integration -Version: 5.14.3 +Version: 5.14.4 Release: 0 Summary: Helper for the KDE Plasma Browser Integration License: GPL-3.0-or-later ++++++ plasma-browser-integration-5.14.3.tar.xz -> plasma-browser-integration-5.14.4.tar.xz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/plasma-browser-integration-5.14.3/CMakeLists.txt new/plasma-browser-integration-5.14.4/CMakeLists.txt --- old/plasma-browser-integration-5.14.3/CMakeLists.txt 2018-11-06 14:57:50.000000000 +0100 +++ new/plasma-browser-integration-5.14.4/CMakeLists.txt 2018-11-27 17:12:05.000000000 +0100 @@ -1,7 +1,7 @@ cmake_minimum_required(VERSION 3.0) project(plasma-browser-integration) -set(PROJECT_VERSION "5.14.3") +set(PROJECT_VERSION "5.14.4") set(PROJECT_VERSION_MAJOR 5) set(QT_MIN_VERSION "5.9.0") diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/plasma-browser-integration-5.14.3/extension/_locales/de/messages.json new/plasma-browser-integration-5.14.4/extension/_locales/de/messages.json --- old/plasma-browser-integration-5.14.3/extension/_locales/de/messages.json 2018-11-06 14:56:56.000000000 +0100 +++ new/plasma-browser-integration-5.14.4/extension/_locales/de/messages.json 2018-11-27 17:11:51.000000000 +0100 @@ -6,19 +6,19 @@ "message": "Failed to connect to the native host. Make sure the 'plasma-browser-integration' package is installed." }, "general_error_title": { - "message": "Plasma Browser Integration Error" + "message": "Fehler in der Plasma-Integration für Browser" }, "general_error_unknown": { "message": "Unbekannter Fehler" }, "kdeconnect_open_device": { - "message": "Open on '$1'" + "message": "In „$1“ öffnen" }, "kdeconnect_open_via": { "message": "Mit KDE-Connect öffnen" }, "options_about_bugs": { - "message": "If you find an issue, please check the <a href=\"$1\">list of open bugs</a> and then <a href=\"$2\">file a bug report</a>." + "message": "Bei Problemen überprüfen Sie bitte die <a href=\"$1\">Liste der offenen Fehler</a> und schreiben Sie dann einen <a href=\"$2\">Fehlerbericht</a>." }, "options_about_copyright": { "message": "© 2017, 2018 Kai Uwe Broulik und David Edmundson" @@ -51,10 +51,10 @@ "message": "Bildlaufleisten im Breeze-Stil verwenden" }, "options_plugin_downloads_title": { - "message": "Show downloads in notification area" + "message": "Herunterladen im Benachrichtigungsbereich anzeigen" }, "options_plugin_kdeconnect_description": { - "message": "Adds a context menu entry to links enabling you to send them to your phone and other paired devices using <a href=\"$1\">KDE Connect</a>." + "message": "Fügt einen Eintrag zu Verknüpfungen zum Kontextmenü hinzu, mit dem Sie die Verknüpfung zu Ihrem Smartphone oder zu anderen angeschlossenen Geräten mit <a href=\"$1\">KDE-Connect</a> senden können." }, "options_plugin_kdeconnect_title": { "message": "Mit KDE-Connect versenden" @@ -63,16 +63,16 @@ "message": "Lets you control video and audio players in websites using the Media Controller plasmoid." }, "options_plugin_mpris_media_sessions_description": { - "message": "Extract metadata and thumbnails of currently playing content. (Experimental)" + "message": "Extrahiert Metadaten und Inhalt des gerade wieder gegebenen Inhalts. " }, "options_plugin_mpris_media_sessions_title": { - "message": "Enhanced Media Controls" + "message": "Erweiterte Mediensteuerung" }, "options_plugin_mpris_title": { "message": "Mediensteuerung" }, "options_plugin_tabsrunner_description": { - "message": "Make sure the “Browser Tabs” module is enabled in <a id=\"$1\" href=\"$2\">Plasma Search settings</a>." + "message": "Überprüfen Sie ob das Modul „Browser-Unterfenster“ in den <a id=\"$1\" href=\"$2\">Plasma-Sucheinstellungen</a> aktiviert ist." }, "options_plugin_tabsrunner_title": { "message": "Find browser tabs in “Run Command” window" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/plasma-browser-integration-5.14.3/extension/_locales/nn/messages.json new/plasma-browser-integration-5.14.4/extension/_locales/nn/messages.json --- old/plasma-browser-integration-5.14.3/extension/_locales/nn/messages.json 2018-11-06 14:56:56.000000000 +0100 +++ new/plasma-browser-integration-5.14.4/extension/_locales/nn/messages.json 2018-11-27 17:11:51.000000000 +0100 @@ -30,7 +30,7 @@ "message": "Viss du likar programmet, vurder å <a href=\"$1\">gje ei pengegåve til KDE</a>, slik at me kan halda fram med å laga den beste frie programvaren." }, "options_about_kde": { - "message": "KDE er eit verdsfemnande nettverk av folk som programmerar, teiknar, komponerer, dokumenterer, set om eller hjelper til på andre måtar med utvikling av <a href=\"$1\">fri programvare</a>. Me har i fellesskap laga fleire hundre frie program, som no inngår som ein del av KDE-utviklingsplattforma og KDE-programdistribusjonen. KDE er eit fellesskap der inga enkel gruppe, firma eller organisasjon kontrollerer kjeldekoden til produkta, og alle er velkomne til å bidra – du òg." + "message": "KDE er eit verdsfemnande fellesskap av eldsjeler som programmerar, teiknar, komponerer, dokumenterer, set om eller hjelper til på andre måtar med utvikling av <a href=\"$1\">fri programvare</a>. Me har laga brukarflata Plasma, hundrevis av program og dei mange programbiblioteka desse byggjer på. KDE er eit fellesskap der inga einskild gruppe, firma eller organisasjon har eigarskap til produkta eller styrer retninga den vidare utviklinga skal gå i. Derimot arbeider me saman å oppnå vårt felles mål om å laga fri programvare i verdsklasse. Alle er velkomne til å bidra – du òg." }, "options_about_license": { "message": "Lisens: <a href=\"$1\">GNU General Public License versjon 3</a>" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/plasma-browser-integration-5.14.3/extension/content-script.js new/plasma-browser-integration-5.14.4/extension/content-script.js --- old/plasma-browser-integration-5.14.3/extension/content-script.js 2018-11-06 14:56:56.000000000 +0100 +++ new/plasma-browser-integration-5.14.4/extension/content-script.js 2018-11-27 17:11:51.000000000 +0100 @@ -231,6 +231,7 @@ // a website might have set Media Sessions metadata prior to playing // and then we would have ignored the metadata signal because there was no player sendMessage("mpris", "playing", { + mediaSrc: player.src, duration: player.duration, currentTime: player.currentTime, playbackRate: player.playbackRate, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/plasma-browser-integration-5.14.3/host/kdeconnectplugin.cpp new/plasma-browser-integration-5.14.4/host/kdeconnectplugin.cpp --- old/plasma-browser-integration-5.14.3/host/kdeconnectplugin.cpp 2018-11-06 14:56:56.000000000 +0100 +++ new/plasma-browser-integration-5.14.4/host/kdeconnectplugin.cpp 2018-11-27 17:11:51.000000000 +0100 @@ -28,6 +28,11 @@ #include <QDBusPendingReply> #include <QDBusConnection> +static const QString s_kdeConnectServiceName = QStringLiteral("org.kde.kdeconnect"); +static const QString s_kdeConnectObjectPath = QStringLiteral("/modules/kdeconnect"); + +static const QString s_kdeConnectDaemon = QStringLiteral("org.kde.kdeconnect.daemon"); + KDEConnectPlugin::KDEConnectPlugin(QObject* parent) : AbstractBrowserPlugin(QStringLiteral("kdeconnect"), 1, parent) { @@ -36,71 +41,151 @@ bool KDEConnectPlugin::onLoad() { - QDBusMessage msg = QDBusMessage::createMethodCall(QStringLiteral("org.kde.kdeconnect"), - QStringLiteral("/modules/kdeconnect"), - QStringLiteral("org.kde.kdeconnect.daemon"), + QDBusConnection bus = QDBusConnection::sessionBus(); + + bus.connect(s_kdeConnectServiceName, + s_kdeConnectObjectPath, + s_kdeConnectDaemon, + QStringLiteral("deviceAdded"), + this, + SLOT(onDeviceAdded(QString))); + bus.connect(s_kdeConnectServiceName, + s_kdeConnectObjectPath, + s_kdeConnectDaemon, + QStringLiteral("deviceRemoved"), + this, + SLOT(onDeviceRemoved(QString))); + bus.connect(s_kdeConnectServiceName, + s_kdeConnectObjectPath, + s_kdeConnectDaemon, + QStringLiteral("deviceVisibilityChanged"), + this, + SLOT(onDeviceVisibilityChanged(QString,bool))); + + QDBusMessage msg = QDBusMessage::createMethodCall(s_kdeConnectServiceName, + s_kdeConnectObjectPath, + s_kdeConnectDaemon, QStringLiteral("devices")); msg.setArguments({true /* only reachable */, true /* only paired */}); - QDBusPendingReply<QStringList> reply = QDBusConnection::sessionBus().asyncCall(msg); + QDBusPendingReply<QStringList> reply = bus.asyncCall(msg); QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(reply, this); QObject::connect(watcher, &QDBusPendingCallWatcher::finished, this, [this](QDBusPendingCallWatcher *watcher) { QDBusPendingReply<QStringList> reply = *watcher; + watcher->deleteLater(); if (reply.isError()) { - debug() << "kdeconnect discovery" << reply.error().name(); - } else { - const QStringList &devices = reply.value(); - - foreach (const QString &deviceId, devices) { - QDBusMessage msg = QDBusMessage::createMethodCall(QStringLiteral("org.kde.kdeconnect"), - QStringLiteral("/modules/kdeconnect/devices/") + deviceId, - QStringLiteral("org.freedesktop.DBus.Properties"), - QStringLiteral("GetAll")); - msg.setArguments({QStringLiteral("org.kde.kdeconnect.device")}); - QDBusPendingReply<QVariantMap> reply = QDBusConnection::sessionBus().asyncCall(msg); - QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(reply, this); - - QObject::connect(watcher, &QDBusPendingCallWatcher::finished, this, [this, deviceId](QDBusPendingCallWatcher *watcher) { - watcher->deleteLater(); - QDBusPendingReply<QVariantMap> reply = *watcher; - if (reply.isError()) { - debug() << "getting device properties" << reply.error().message(); - } else { - auto props = reply.value(); - props[QStringLiteral("id")] = deviceId; - m_devices.append(deviceId); - sendData(QStringLiteral("deviceAdded"), QJsonObject::fromVariantMap(props)); - } - }); - } + debug() << "kdeconnect discovery failed:" << reply.error().name(); + return; + } + + const QStringList devices = reply.value(); + for (const QString &deviceId : devices) { + onDeviceAdded(deviceId); } - watcher->deleteLater(); }); return true; } bool KDEConnectPlugin::onUnload() { - foreach(const QString &deviceId, m_devices) { - sendData(QStringLiteral("deviceRemoved"), {{QStringLiteral("id"), deviceId}}); + QDBusConnection bus = QDBusConnection::sessionBus(); + + bus.disconnect(s_kdeConnectServiceName, + s_kdeConnectObjectPath, + s_kdeConnectDaemon, + QStringLiteral("deviceAdded"), + this, + SLOT(onDeviceAdded(QString))); + bus.disconnect(s_kdeConnectServiceName, + s_kdeConnectObjectPath, + s_kdeConnectDaemon, + QStringLiteral("deviceRemoved"), + this, + SLOT(onDeviceRemoved(QString))); + bus.disconnect(s_kdeConnectServiceName, + s_kdeConnectObjectPath, + s_kdeConnectDaemon, + QStringLiteral("deviceVisibilityChanged"), + this, + SLOT(onDeviceVisibilityChanged(QString,bool))); + + for (const QString &deviceId : qAsConst(m_devices)) { + onDeviceRemoved(deviceId); } return true; } -void KDEConnectPlugin::handleData(const QString& event, const QJsonObject& json) +void KDEConnectPlugin::onDeviceAdded(const QString &deviceId) { - if (event == QLatin1String("shareUrl")) { - const QString deviceId = json.value(QStringLiteral("deviceId")).toString(); - const QString url = json.value(QStringLiteral("url")).toString(); + if (m_devices.contains(deviceId)) { + return; + } + + QDBusMessage msg = QDBusMessage::createMethodCall(s_kdeConnectServiceName, + QStringLiteral("/modules/kdeconnect/devices/") + deviceId, + QStringLiteral("org.freedesktop.DBus.Properties"), + QStringLiteral("GetAll")); + msg.setArguments({QStringLiteral("org.kde.kdeconnect.device")}); + QDBusPendingReply<QVariantMap> reply = QDBusConnection::sessionBus().asyncCall(msg); + QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(reply, this); + + QObject::connect(watcher, &QDBusPendingCallWatcher::finished, this, [this, deviceId](QDBusPendingCallWatcher *watcher) { + QDBusPendingReply<QVariantMap> reply = *watcher; + watcher->deleteLater(); - debug() << "sending kde connect url" << url << "to device" << deviceId; + if (reply.isError()) { + debug() << "getting device for properties for" << deviceId << "failed:" << reply.error().message(); + return; + } + + // We might have gotten a second deviceAdded signal, check again. + if (m_devices.contains(deviceId)) { + return; + } - QDBusMessage msg = QDBusMessage::createMethodCall(QStringLiteral("org.kde.kdeconnect"), - QStringLiteral("/modules/kdeconnect/devices/") + deviceId + QStringLiteral("/share"), - QStringLiteral("org.kde.kdeconnect.device.share"), - QStringLiteral("shareUrl")); - msg.setArguments({url}); - QDBusPendingReply<QStringList> reply = QDBusConnection::sessionBus().asyncCall(msg); + QVariantMap props = reply.value(); + if (!props.value(QStringLiteral("isReachable")).toBool() + || !props.value(QStringLiteral("isTrusted")).toBool()) { + return; } + + props.insert(QStringLiteral("id"), deviceId); + + m_devices.append(deviceId); + sendData(QStringLiteral("deviceAdded"), QJsonObject::fromVariantMap(props)); + }); +} + +void KDEConnectPlugin::onDeviceRemoved(const QString &deviceId) +{ + if (m_devices.removeOne(deviceId)) { + sendData(QStringLiteral("deviceRemoved"), {{QStringLiteral("id"), deviceId}}); + } +} + +void KDEConnectPlugin::onDeviceVisibilityChanged(const QString &deviceId, bool visible) +{ + if (visible) { + onDeviceAdded(deviceId); + } else { + onDeviceRemoved(deviceId); + } +} + +void KDEConnectPlugin::handleData(const QString& event, const QJsonObject& json) +{ + if (event == QLatin1String("shareUrl")) { + const QString deviceId = json.value(QStringLiteral("deviceId")).toString(); + const QString url = json.value(QStringLiteral("url")).toString(); + + debug() << "sending kde connect url" << url << "to device" << deviceId; + + QDBusMessage msg = QDBusMessage::createMethodCall(QStringLiteral("org.kde.kdeconnect"), + QStringLiteral("/modules/kdeconnect/devices/") + deviceId + QStringLiteral("/share"), + QStringLiteral("org.kde.kdeconnect.device.share"), + QStringLiteral("shareUrl")); + msg.setArguments({url}); + QDBusConnection::sessionBus().call(msg, QDBus::NoBlock); + } } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/plasma-browser-integration-5.14.3/host/kdeconnectplugin.h new/plasma-browser-integration-5.14.4/host/kdeconnectplugin.h --- old/plasma-browser-integration-5.14.3/host/kdeconnectplugin.h 2018-11-06 14:56:56.000000000 +0100 +++ new/plasma-browser-integration-5.14.4/host/kdeconnectplugin.h 2018-11-27 17:11:51.000000000 +0100 @@ -32,6 +32,12 @@ bool onLoad() override; bool onUnload() override; void handleData(const QString &event, const QJsonObject &data) override; + +private Q_SLOTS: + void onDeviceAdded(const QString &deviceId); + void onDeviceRemoved(const QString &deviceId); + void onDeviceVisibilityChanged(const QString &deviceId, bool visible); + private: QStringList m_devices; }; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/plasma-browser-integration-5.14.3/host/mprisplugin.cpp new/plasma-browser-integration-5.14.4/host/mprisplugin.cpp --- old/plasma-browser-integration-5.14.3/host/mprisplugin.cpp 2018-11-06 14:56:56.000000000 +0100 +++ new/plasma-browser-integration-5.14.4/host/mprisplugin.cpp 2018-11-27 17:11:51.000000000 +0100 @@ -130,6 +130,7 @@ m_canGoPrevious = false; m_pageTitle.clear(); m_url.clear(); + m_mediaSrc.clear(); m_title.clear(); m_artist.clear(); m_artworkUrl.clear(); @@ -140,6 +141,7 @@ setPlaybackStatus(QStringLiteral("Playing")); m_pageTitle = data.value(QStringLiteral("tabTitle")).toString(); m_url = QUrl(data.value(QStringLiteral("url")).toString()); + m_mediaSrc = QUrl(data.value(QStringLiteral("mediaSrc")).toString()); const qreal volume = data.value(QStringLiteral("volume")).toDouble(1); if (m_volume != volume) { @@ -384,6 +386,9 @@ if (m_url.isValid()) { metadata.insert(QStringLiteral("xesam:url"), m_url.toDisplayString()); } + if (m_mediaSrc.isValid()) { + metadata.insert(QStringLiteral("kde:mediaSrc"), m_mediaSrc.toDisplayString()); + } if (m_length > 0) { metadata.insert(QStringLiteral("mpris:length"), m_length); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/plasma-browser-integration-5.14.3/host/mprisplugin.h new/plasma-browser-integration-5.14.4/host/mprisplugin.h --- old/plasma-browser-integration-5.14.3/host/mprisplugin.h 2018-11-06 14:56:56.000000000 +0100 +++ new/plasma-browser-integration-5.14.4/host/mprisplugin.h 2018-11-27 17:11:51.000000000 +0100 @@ -150,6 +150,7 @@ QString m_pageTitle; QUrl m_url; + QUrl m_mediaSrc; QString m_title; QString m_artist; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/plasma-browser-integration-5.14.3/po/zh_CN/plasma-browser-integration-reminder.po new/plasma-browser-integration-5.14.4/po/zh_CN/plasma-browser-integration-reminder.po --- old/plasma-browser-integration-5.14.3/po/zh_CN/plasma-browser-integration-reminder.po 2018-11-06 14:57:49.000000000 +0100 +++ new/plasma-browser-integration-5.14.4/po/zh_CN/plasma-browser-integration-reminder.po 2018-11-27 17:12:05.000000000 +0100 @@ -8,7 +8,7 @@ "Project-Id-Version: kdeorg\n" "Report-Msgid-Bugs-To: http://bugs.kde.org\n" "POT-Creation-Date: 2018-09-15 06:50+0200\n" -"PO-Revision-Date: 2018-11-01 23:15\n" +"PO-Revision-Date: 2018-11-12 09:21\n" "Last-Translator: guoyunhe <i@guoyunhe.me>\n" "Language-Team: Chinese Simplified\n" "Language: zh_CN\n" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/plasma-browser-integration-5.14.3/po/zh_CN/plasma_runner_browsertabs.po new/plasma-browser-integration-5.14.4/po/zh_CN/plasma_runner_browsertabs.po --- old/plasma-browser-integration-5.14.3/po/zh_CN/plasma_runner_browsertabs.po 2018-11-06 14:57:49.000000000 +0100 +++ new/plasma-browser-integration-5.14.4/po/zh_CN/plasma_runner_browsertabs.po 2018-11-27 17:12:05.000000000 +0100 @@ -3,7 +3,7 @@ "Project-Id-Version: kdeorg\n" "Report-Msgid-Bugs-To: http://bugs.kde.org\n" "POT-Creation-Date: 2018-09-14 06:48+0200\n" -"PO-Revision-Date: 2018-11-01 23:15\n" +"PO-Revision-Date: 2018-11-12 09:21\n" "Last-Translator: guoyunhe <i@guoyunhe.me>\n" "Language-Team: Chinese Simplified\n" "Language: zh_CN\n" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/plasma-browser-integration-5.14.3/reminder/browserintegrationreminder.desktop new/plasma-browser-integration-5.14.4/reminder/browserintegrationreminder.desktop --- old/plasma-browser-integration-5.14.3/reminder/browserintegrationreminder.desktop 2018-11-06 14:56:56.000000000 +0100 +++ new/plasma-browser-integration-5.14.4/reminder/browserintegrationreminder.desktop 2018-11-27 17:11:51.000000000 +0100 @@ -5,6 +5,7 @@ Name[ca@valencia]=Recordatori d'instal·lació de la Integració del navegador al Plasma Name[cs]=Připomínka instalace integrace prohlížeče Plasma Name[da]=Påmindelse om installation af Plasma browser-integration +Name[de]=Erinnerung an die Installation der Plasma-Integration für Browser Name[el]=Υπενθύμιση εγκατάστασης για ενσωμάτωση του προγράμματος περιήγησης Plasma Name[en_GB]=Plasma Browser Integration Installation Reminder Name[es]=Recordatorio de la instalación de la integración del navegador con Plasma
participants (1)
-
root