diff --git a/qt/component.cpp b/qt/component.cpp index 2de1259ff..2c593aab5 100644 --- a/qt/component.cpp +++ b/qt/component.cpp @@ -22,10 +22,16 @@ #include #include #include +#include #include using namespace Appstream; +static bool operator<(QSize a, QSize b) +{ + return a.width() < b.width() || (a.width() == b.width() && a.height() < b.height()); +} + class Appstream::ComponentData : public QSharedData { public: QStringList m_categories; @@ -42,7 +48,7 @@ class Appstream::ComponentData : public QSharedData { QString m_projectGroup; QString m_projectLicense; QString m_summary; - QHash m_iconUrls; + QMap m_iconUrls; QMultiHash m_urls; QList m_screenshots; QMultiHash m_provides; @@ -135,13 +141,7 @@ QString Component::icon() const { } QUrl Component::iconUrl(const QSize& size) const { - QString sizeStr; - // if no size was specified, we assume 64x64 - if (size.isValid()) - sizeStr = QStringLiteral("%1x%2").arg(size.width()).arg(size.height()); - else - sizeStr = QStringLiteral("64x64"); - return d->m_iconUrls.value(sizeStr); + return d->m_iconUrls.value(size.isValid() ? size : QSize(64, 64)); } QString Component::id() const { @@ -193,13 +193,12 @@ void Component::setIcon(const QString& icon) { } void Component::addIconUrl(const QUrl& iconUrl, const QSize& size) { - QString sizeStr; - // if no size was specified, we assume 64x64 - if (size.isValid()) - sizeStr = QStringLiteral("%1x%2").arg(size.width()).arg(size.height()); - else - sizeStr = QStringLiteral("64x64"); - d->m_iconUrls.insert(sizeStr, iconUrl); + d->m_iconUrls.insert(size, iconUrl); +} + +QMap Component::iconUrls() const +{ + return d->m_iconUrls; } void Component::setId(const QString& id) { diff --git a/qt/component.h b/qt/component.h index 67579ea9d..c98e7398d 100644 --- a/qt/component.h +++ b/qt/component.h @@ -129,6 +129,11 @@ class APPSTREAMQT_EXPORT Component { */ QUrl iconUrl(const QSize& size) const; + /** + * \return urls to each icon + */ + QMap iconUrls() const; + /** * Sets the url for an icon *