File indexing completed on 2024-05-05 05:35:44

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     int categoryRelevance = qToUnderlying(KRunner::QueryMatch::CategoryRelevance::Lowest);
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.categoryRelevance;
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     argument >> match.categoryRelevance;
0060     argument >> match.relevance;
0061     argument >> match.properties;
0062     argument.endStructure();
0063 
0064     return argument;
0065 }
0066 
0067 inline QDBusArgument &operator<<(QDBusArgument &argument, const RemoteAction &action)
0068 {
0069     argument.beginStructure();
0070     argument << action.id;
0071     argument << action.text;
0072     argument << action.iconName;
0073     argument.endStructure();
0074     return argument;
0075 }
0076 
0077 inline const QDBusArgument &operator>>(const QDBusArgument &argument, RemoteAction &action)
0078 {
0079     argument.beginStructure();
0080     argument >> action.id;
0081     argument >> action.text;
0082     argument >> action.iconName;
0083     argument.endStructure();
0084     return argument;
0085 }
0086 
0087 inline QDBusArgument &operator<<(QDBusArgument &argument, const RemoteImage &image)
0088 {
0089     argument.beginStructure();
0090     argument << image.width;
0091     argument << image.height;
0092     argument << image.rowStride;
0093     argument << image.hasAlpha;
0094     argument << image.bitsPerSample;
0095     argument << image.channels;
0096     argument << image.data;
0097     argument.endStructure();
0098     return argument;
0099 }
0100 
0101 inline const QDBusArgument &operator>>(const QDBusArgument &argument, RemoteImage &image)
0102 {
0103     argument.beginStructure();
0104     argument >> image.width;
0105     argument >> image.height;
0106     argument >> image.rowStride;
0107     argument >> image.hasAlpha;
0108     argument >> image.bitsPerSample;
0109     argument >> image.channels;
0110     argument >> image.data;
0111     argument.endStructure();
0112     return argument;
0113 }
0114 
0115 Q_DECLARE_METATYPE(RemoteMatch)
0116 Q_DECLARE_METATYPE(RemoteMatches)
0117 Q_DECLARE_METATYPE(RemoteAction)
0118 Q_DECLARE_METATYPE(RemoteActions)
0119 Q_DECLARE_METATYPE(RemoteImage)