on xenial help sign in
Use the thumbnailer image provider for scope results that don't specify icon as well as for previews.
e5d5e71Michal Hruby
plugins/Unity/categoryresults.cpp+7
@@ -79,6 +79,13 @@ CategoryResults::data(const QModelIndex& index, int role) const
79 return DeeListModel::data(index, ResultsColumn::URI);
79 return DeeListModel::data(index, ResultsColumn::URI);
80 case RoleIconHint: {
80 case RoleIconHint: {
81 QString giconString(DeeListModel::data(index, ResultsColumn::ICON_HINT).toString());
81 QString giconString(DeeListModel::data(index, ResultsColumn::ICON_HINT).toString());
82+ if (giconString.isEmpty()) {
83+ QString uri(DeeListModel::data(index, ResultsColumn::URI).toString());
84+ QString thumbnailerUri(uriToThumbnailerProviderString(uri));
85+ if (!thumbnailerUri.isNull()) {
86+ return QVariant::fromValue(thumbnailerUri);
87+ }
88+ }
82 return QVariant::fromValue(gIconToDeclarativeImageProviderString(giconString));
89 return QVariant::fromValue(gIconToDeclarativeImageProviderString(giconString));
83 }
90 }
84 case RoleCategory:
91 case RoleCategory:
plugins/Unity/iconutils.cpp+12
@@ -24,6 +24,7 @@
24#include "iconutils.h"
24#include "iconutils.h"
25
25
26#define BASE_THEME_ICON_URI "image://theme/"
26#define BASE_THEME_ICON_URI "image://theme/"
27+#define BASE_THUMBNAILER_URI "image://thumbnailer/"
27
28
28QString gIconToDeclarativeImageProviderString(QString const &giconString)
29QString gIconToDeclarativeImageProviderString(QString const &giconString)
29{
30{
@@ -89,3 +90,14 @@ QString gIconToDeclarativeImageProviderString(QString const &giconString)
89
90
90 return result;
91 return result;
91}
92}
93+
94+QString uriToThumbnailerProviderString(QString const &uri)
95+{
96+ if (uri.startsWith(QLatin1String("file:///"))) {
97+ QString thumbnailerUri(BASE_THUMBNAILER_URI);
98+ thumbnailerUri.append(uri.midRef(7));
99+ return thumbnailerUri;
100+ }
101+
102+ return QString::null;
103+}
plugins/Unity/iconutils.h+1
@@ -23,5 +23,6 @@
23#include <QString>
23#include <QString>
24
24
25QString gIconToDeclarativeImageProviderString(QString const &giconString);
25QString gIconToDeclarativeImageProviderString(QString const &giconString);
26+QString uriToThumbnailerProviderString(QString const &uri);
26
27
27#endif
28#endif
plugins/Unity/preview.cpp+10−14
@@ -106,20 +106,16 @@ QVariantMap Preview::infoHintsHash() const
106QString Preview::image() const
106QString Preview::image() const
107{
107{
108 if (m_unityPreview) {
108 if (m_unityPreview) {
109+ if (m_unityPreview->image() != nullptr) {
109− auto giconString = g_icon_to_string(m_unityPreview->image());
110+ auto giconString = g_icon_to_string(m_unityPreview->image());
110− QString result(gIconToDeclarativeImageProviderString(QString::fromUtf8(giconString)));
111+ QString result(gIconToDeclarativeImageProviderString(QString::fromUtf8(giconString)));
111− g_free(giconString);
112+ g_free(giconString);
112− return result;
113+ return result;
113− } else {
114+ } else {
114− qWarning() << "Preview not set";
115− }
116− return QString::null;
117−}
118−
119−QString Preview::imageSourceUri() const
120−{
121− if (m_unityPreview) {
122− return QString::fromStdString(m_unityPreview->image_source_uri());
115+ QString sourceMedia(QString::fromStdString(m_unityPreview->image_source_uri()));
116+ QString thumbnailUri(uriToThumbnailerProviderString(sourceMedia));
117+ if (!thumbnailUri.isNull()) return thumbnailUri;
118+ }
123 } else {
119 } else {
124 qWarning() << "Preview not set";
120 qWarning() << "Preview not set";
125 }
121 }
plugins/Unity/preview.h−2
@@ -47,7 +47,6 @@ class Q_DECL_EXPORT Preview : public QObject
47 Q_PROPERTY(QVariant infoHints READ infoHints NOTIFY previewChanged)
47 Q_PROPERTY(QVariant infoHints READ infoHints NOTIFY previewChanged)
48 Q_PROPERTY(QVariantMap infoMap READ infoHintsHash NOTIFY previewChanged)
48 Q_PROPERTY(QVariantMap infoMap READ infoHintsHash NOTIFY previewChanged)
49 Q_PROPERTY(QString image READ image NOTIFY previewChanged)
49 Q_PROPERTY(QString image READ image NOTIFY previewChanged)
50− Q_PROPERTY(QString imageSourceUri READ imageSourceUri NOTIFY previewChanged)
51 Q_PROPERTY(QVariant result READ result NOTIFY previewChanged)
50 Q_PROPERTY(QVariant result READ result NOTIFY previewChanged)
52
51
53public:
52public:
@@ -62,7 +61,6 @@ public:
62 QVariant infoHints();
61 QVariant infoHints();
63 QVariantMap infoHintsHash() const;
62 QVariantMap infoHintsHash() const;
64 QString image() const;
63 QString image() const;
65− QString imageSourceUri() const;
66 QVariant result() const;
64 QVariant result() const;
67
65
68 Q_INVOKABLE void execute(const QString& actionId, const QHash<QString, QVariant>& hints);
66 Q_INVOKABLE void execute(const QString& actionId, const QHash<QString, QVariant>& hints);
tests/mocks/Unity/fake_preview.cpp−5
@@ -56,11 +56,6 @@ QString Preview::image() const
56 return "";
56 return "";
57}
57}
58
58
59−QString Preview::imageSourceUri() const
60−{
61− return "";
62−}
63−
64void Preview::execute(const QString& actionId, const QHash<QString, QVariant>& hints)
59void Preview::execute(const QString& actionId, const QHash<QString, QVariant>& hints)
65{
60{
66 Q_UNUSED(actionId);
61 Q_UNUSED(actionId);
tests/mocks/Unity/fake_preview.h−2
@@ -36,7 +36,6 @@ class Q_DECL_EXPORT Preview : public QObject
36 Q_PROPERTY(QVariant infoHints READ infoHints NOTIFY previewChanged)
36 Q_PROPERTY(QVariant infoHints READ infoHints NOTIFY previewChanged)
37 Q_PROPERTY(QVariantMap infoMap READ infoHintsHash NOTIFY previewChanged)
37 Q_PROPERTY(QVariantMap infoMap READ infoHintsHash NOTIFY previewChanged)
38 Q_PROPERTY(QString image READ image NOTIFY previewChanged)
38 Q_PROPERTY(QString image READ image NOTIFY previewChanged)
39− Q_PROPERTY(QString imageSourceUri READ imageSourceUri NOTIFY previewChanged)
40
39
41public:
40public:
42 explicit Preview(QObject *parent = 0);
41 explicit Preview(QObject *parent = 0);
@@ -49,7 +48,6 @@ public:
49 QVariant infoHints();
48 QVariant infoHints();
50 QVariantMap infoHintsHash() const;
49 QVariantMap infoHintsHash() const;
51 QString image() const;
50 QString image() const;
52− QString imageSourceUri() const;
53
51
54 Q_INVOKABLE void execute(const QString& actionId, const QHash<QString, QVariant>& hints);
52 Q_INVOKABLE void execute(const QString& actionId, const QHash<QString, QVariant>& hints);
55
53
tests/plugins/Unity/resultstest.cpp+13−9
@@ -65,26 +65,30 @@ void ResultsTest::testAllColumns()
65
65
66void ResultsTest::testIconColumn_data()
66void ResultsTest::testIconColumn_data()
67{
67{
68+ QTest::addColumn<QString>("uri");
68 QTest::addColumn<QString>("giconString");
69 QTest::addColumn<QString>("giconString");
69 QTest::addColumn<QString>("result");
70 QTest::addColumn<QString>("result");
70
71
72+ QTest::newRow("unspecified") << "test:uri" << "" << "";
71− QTest::newRow("absolute path") << "/usr/share/icons/example.png" << "/usr/share/icons/example.png";
73+ QTest::newRow("absolute path") << "test:uri" << "/usr/share/icons/example.png" << "/usr/share/icons/example.png";
72− QTest::newRow("file uri") << "file:///usr/share/icons/example.png" << "file:///usr/share/icons/example.png";
74+ QTest::newRow("file uri") << "test:uri" << "file:///usr/share/icons/example.png" << "file:///usr/share/icons/example.png";
73− QTest::newRow("http uri") << "http://images.ubuntu.com/example.jpg" << "http://images.ubuntu.com/example.jpg";
75+ QTest::newRow("http uri") << "test:uri" << "http://images.ubuntu.com/example.jpg" << "http://images.ubuntu.com/example.jpg";
74− QTest::newRow("image uri") << "image://thumbnail/with/arguments?passed_to=ImageProvider" << "image://thumbnail/with/arguments?passed_to=ImageProvider";
76+ QTest::newRow("image uri") << "test:uri" << "image://thumbnail/with/arguments?passed_to=ImageProvider" << "image://thumbnail/with/arguments?passed_to=ImageProvider";
75− QTest::newRow("themed icon") << "accessories-other" << "image://theme/accessories-other";
77+ QTest::newRow("themed icon") << "test:uri" << "accessories-other" << "image://theme/accessories-other";
76− QTest::newRow("fileicon") << ". GFileIcon http://example.org/resource.gif" << "http://example.org/resource.gif";
78+ QTest::newRow("fileicon") << "test:uri" << ". GFileIcon http://example.org/resource.gif" << "http://example.org/resource.gif";
77− QTest::newRow("themedicon") << ". GThemedIcon accessories-other accessories generic" << "image://theme/accessories-other,accessories,generic";
79+ QTest::newRow("themedicon") << "test:uri" << ". GThemedIcon accessories-other accessories generic" << "image://theme/accessories-other,accessories,generic";
78− QTest::newRow("annotatedicon") << ". UnityProtocolAnnotatedIcon %7B'base-icon':%20%3C'.%20GThemedIcon%20accessories-other%20accessories%20generic'%3E%7D" << "image://theme/accessories-other,accessories,generic";
80+ QTest::newRow("annotatedicon") << "test:uri" << ". UnityProtocolAnnotatedIcon %7B'base-icon':%20%3C'.%20GThemedIcon%20accessories-other%20accessories%20generic'%3E%7D" << "image://theme/accessories-other,accessories,generic";
81+ QTest::newRow("thumbnailer icon") << "file:///usr/share/samples/video/foo.avi" << "" << "image://thumbnailer//usr/share/samples/video/foo.avi";
79}
82}
80
83
81void ResultsTest::testIconColumn()
84void ResultsTest::testIconColumn()
82{
85{
86+ QFETCH(QString, uri);
83 QFETCH(QString, giconString);
87 QFETCH(QString, giconString);
84 QFETCH(QString, result);
88 QFETCH(QString, result);
85 auto deeModel = createBackendModel();
89 auto deeModel = createBackendModel();
86 dee_model_append (deeModel,
90 dee_model_append (deeModel,
87− "test:uri",
91+ uri.toLocal8Bit().constData(),
88 giconString.toLocal8Bit().constData(),
92 giconString.toLocal8Bit().constData(),
89 0,
93 0,
90 0,
94 0,