File indexing completed on 2024-04-28 16:51:32

0001 #pragma once
0002 
0003 #include <KRunner/QueryMatch>
0004 #include <QDBusArgument>
0005 #include <QList>
0006 #include <QString>
0007 #include <QVariantMap>
0008 
0009 struct RemoteMatch {
0010     // sssuda{sv}
0011     QString id;
0012     QString text;
0013     QString iconName;
0014     Plasma::QueryMatch::Type type = Plasma::QueryMatch::NoMatch;
0015     qreal relevance = 0;
0016     QVariantMap properties;
0017 };
0018 
0019 typedef QList<RemoteMatch> RemoteMatches;
0020 
0021 struct RemoteAction {
0022     QString id;
0023     QString text;
0024     QString iconName;
0025 };
0026 
0027 typedef QList<RemoteAction> RemoteActions;
0028 
0029 struct RemoteImage {
0030     // iiibiiay (matching notification spec image-data attribute)
0031     int width;
0032     int height;
0033     int rowStride;
0034     bool hasAlpha;
0035     int bitsPerSample;
0036     int channels;
0037     QByteArray data;
0038 };
0039 
0040 inline QDBusArgument &operator<<(QDBusArgument &argument, const RemoteMatch &match)
0041 {
0042     argument.beginStructure();
0043     argument << match.id;
0044     argument << match.text;
0045     argument << match.iconName;
0046     argument << match.type;
0047     argument << match.relevance;
0048     argument << match.properties;
0049     argument.endStructure();
0050     return argument;
0051 }
0052 
0053 inline const QDBusArgument &operator>>(const QDBusArgument &argument, RemoteMatch &match)
0054 {
0055     argument.beginStructure();
0056     argument >> match.id;
0057     argument >> match.text;
0058     argument >> match.iconName;
0059     uint type;
0060     argument >> type;
0061     match.type = static_cast<Plasma::QueryMatch::Type>(type);
0062     argument >> match.relevance;
0063     argument >> match.properties;
0064     argument.endStructure();
0065 
0066     return argument;
0067 }
0068 
0069 inline QDBusArgument &operator<<(QDBusArgument &argument, const RemoteAction &action)
0070 {
0071     argument.beginStructure();
0072     argument << action.id;
0073     argument << action.text;
0074     argument << action.iconName;
0075     argument.endStructure();
0076     return argument;
0077 }
0078 
0079 inline const QDBusArgument &operator>>(const QDBusArgument &argument, RemoteAction &action)
0080 {
0081     argument.beginStructure();
0082     argument >> action.id;
0083     argument >> action.text;
0084     argument >> action.iconName;
0085     argument.endStructure();
0086     return argument;
0087 }
0088 
0089 inline QDBusArgument &operator<<(QDBusArgument &argument, const RemoteImage &image)
0090 {
0091     argument.beginStructure();
0092     argument << image.width;
0093     argument << image.height;
0094     argument << image.rowStride;
0095     argument << image.hasAlpha;
0096     argument << image.bitsPerSample;
0097     argument << image.channels;
0098     argument << image.data;
0099     argument.endStructure();
0100     return argument;
0101 }
0102 
0103 inline const QDBusArgument &operator>>(const QDBusArgument &argument, RemoteImage &image)
0104 {
0105     argument.beginStructure();
0106     argument >> image.width;
0107     argument >> image.height;
0108     argument >> image.rowStride;
0109     argument >> image.hasAlpha;
0110     argument >> image.bitsPerSample;
0111     argument >> image.channels;
0112     argument >> image.data;
0113     argument.endStructure();
0114     return argument;
0115 }
0116 
0117 Q_DECLARE_METATYPE(RemoteMatch)
0118 Q_DECLARE_METATYPE(RemoteMatches)
0119 Q_DECLARE_METATYPE(RemoteAction)
0120 Q_DECLARE_METATYPE(RemoteActions)
0121 Q_DECLARE_METATYPE(RemoteImage)