File indexing completed on 2024-04-21 03:56:48

0001 /*
0002     SPDX-FileCopyrightText: 2017, 2018 David Edmundson <davidedmundson@kde.org>
0003     SPDX-FileCopyrightText: 2020 Alexander Lohnau <alexander.lohnau@gmx.de>
0004     SPDX-FileCopyrightText: 2020 Kai Uwe Broulik <kde@broulik.de>
0005 
0006     SPDX-License-Identifier: LGPL-2.0-or-later
0007 */
0008 
0009 #pragma once
0010 
0011 #include "action.h"
0012 #include <KRunner/QueryMatch>
0013 #include <QDBusArgument>
0014 #include <QList>
0015 #include <QString>
0016 #include <QVariantMap>
0017 
0018 struct RemoteMatch {
0019     // sssida{sv}
0020     QString id;
0021     QString text;
0022     QString iconName;
0023     int categoryRelevance = qToUnderlying(KRunner::QueryMatch::CategoryRelevance::Lowest);
0024     qreal relevance = 0;
0025     QVariantMap properties;
0026 };
0027 
0028 typedef QList<RemoteMatch> RemoteMatches;
0029 
0030 struct RemoteImage {
0031     // iiibiiay (matching notification spec image-data attribute)
0032     int width = 0;
0033     int height = 0;
0034     int rowStride = 0;
0035     bool hasAlpha = false;
0036     int bitsPerSample = 0;
0037     int channels = 0;
0038     QByteArray data;
0039 };
0040 
0041 inline QDBusArgument &operator<<(QDBusArgument &argument, const RemoteMatch &match)
0042 {
0043     argument.beginStructure();
0044     argument << match.id;
0045     argument << match.text;
0046     argument << match.iconName;
0047     argument << match.categoryRelevance;
0048     argument << match.relevance;
0049     argument << match.properties;
0050     argument.endStructure();
0051     return argument;
0052 }
0053 
0054 inline const QDBusArgument &operator>>(const QDBusArgument &argument, RemoteMatch &match)
0055 {
0056     argument.beginStructure();
0057     argument >> match.id;
0058     argument >> match.text;
0059     argument >> match.iconName;
0060     argument >> match.categoryRelevance;
0061     argument >> match.relevance;
0062     argument >> match.properties;
0063     argument.endStructure();
0064 
0065     return argument;
0066 }
0067 
0068 inline QDBusArgument &operator<<(QDBusArgument &argument, const KRunner::Action &action)
0069 {
0070     argument.beginStructure();
0071     argument << action.id();
0072     argument << action.text();
0073     argument << action.iconSource();
0074     argument.endStructure();
0075     return argument;
0076 }
0077 
0078 inline const QDBusArgument &operator>>(const QDBusArgument &argument, KRunner::Action &action)
0079 {
0080     QString id;
0081     QString text;
0082     QString iconName;
0083     argument.beginStructure();
0084     argument >> id;
0085     argument >> text;
0086     argument >> iconName;
0087     argument.endStructure();
0088     action = KRunner::Action(id, iconName, text);
0089     return argument;
0090 }
0091 
0092 inline QDBusArgument &operator<<(QDBusArgument &argument, const RemoteImage &image)
0093 {
0094     argument.beginStructure();
0095     argument << image.width;
0096     argument << image.height;
0097     argument << image.rowStride;
0098     argument << image.hasAlpha;
0099     argument << image.bitsPerSample;
0100     argument << image.channels;
0101     argument << image.data;
0102     argument.endStructure();
0103     return argument;
0104 }
0105 
0106 inline const QDBusArgument &operator>>(const QDBusArgument &argument, RemoteImage &image)
0107 {
0108     argument.beginStructure();
0109     argument >> image.width;
0110     argument >> image.height;
0111     argument >> image.rowStride;
0112     argument >> image.hasAlpha;
0113     argument >> image.bitsPerSample;
0114     argument >> image.channels;
0115     argument >> image.data;
0116     argument.endStructure();
0117     return argument;
0118 }
0119 
0120 Q_DECLARE_METATYPE(QList<KRunner::Action>)
0121 Q_DECLARE_METATYPE(RemoteMatch)
0122 Q_DECLARE_METATYPE(RemoteMatches)
0123 Q_DECLARE_METATYPE(RemoteImage)