File indexing completed on 2024-04-28 16:51:32
0001 /* 0002 SPDX-FileCopyrightText: 2020 Kai Uwe Broulik <kde@broulik.de> 0003 0004 SPDX-License-Identifier: GPL-3.0-or-later 0005 */ 0006 0007 #include "abstractkrunnerplugin.h" 0008 0009 #include <QDBusConnection> 0010 #include <QImage> 0011 0012 #include "krunner1adaptor.h" 0013 0014 AbstractKRunnerPlugin::AbstractKRunnerPlugin(const QString &objectPath, const QString &subsystemId, int protocolVersion, QObject *parent) 0015 : AbstractBrowserPlugin(subsystemId, protocolVersion, parent) 0016 , m_objectPath(objectPath) 0017 { 0018 new Krunner1Adaptor(this); 0019 qDBusRegisterMetaType<RemoteMatch>(); 0020 qDBusRegisterMetaType<RemoteMatches>(); 0021 qDBusRegisterMetaType<RemoteAction>(); 0022 qDBusRegisterMetaType<RemoteActions>(); 0023 qDBusRegisterMetaType<RemoteImage>(); 0024 } 0025 0026 bool AbstractKRunnerPlugin::onLoad() 0027 { 0028 return QDBusConnection::sessionBus().registerObject(m_objectPath, this); 0029 } 0030 0031 bool AbstractKRunnerPlugin::onUnload() 0032 { 0033 QDBusConnection::sessionBus().unregisterObject(m_objectPath); 0034 return true; 0035 } 0036 0037 QImage AbstractKRunnerPlugin::imageFromDataUrl(const QString &dataUrl) 0038 { 0039 QImage image; 0040 0041 if (!dataUrl.startsWith(QLatin1String("data:"))) { 0042 return image; 0043 } 0044 0045 const int b64start = dataUrl.indexOf(QLatin1Char(',')); 0046 if (b64start == -1) { 0047 qWarning() << "Invalid data URL format for" << dataUrl.left(30); 0048 return image; 0049 } 0050 0051 const QByteArray b64 = QStringView(dataUrl).right(dataUrl.count() - b64start - 1).toLatin1(); 0052 const QByteArray data = QByteArray::fromBase64(b64); 0053 0054 if (!image.loadFromData(data)) { 0055 qWarning() << "Failed to load favicon image from" << dataUrl.left(30); 0056 } 0057 return image; 0058 } 0059 0060 RemoteImage AbstractKRunnerPlugin::serializeImage(const QImage &image) 0061 { 0062 QImage convertedImage = image.convertToFormat(QImage::Format_RGBA8888); 0063 RemoteImage remoteImage{ 0064 convertedImage.width(), 0065 convertedImage.height(), 0066 convertedImage.bytesPerLine(), 0067 true, // hasAlpha 0068 8, // bitsPerSample 0069 4, // channels 0070 QByteArray(reinterpret_cast<const char *>(convertedImage.constBits()), convertedImage.sizeInBytes()), 0071 }; 0072 return remoteImage; 0073 }