From 240dcf2e5c3c4e12bcb28284b256d95baa220bb2 Mon Sep 17 00:00:00 2001 From: Jonas Kvinge Date: Tue, 4 May 2021 21:55:05 +0200 Subject: [PATCH] Improve device icon loading --- src/device/deviceinfo.cpp | 44 +++++++++++++++++++++++-------------- src/device/devicelister.cpp | 15 ++++++------- src/device/devicelister.h | 6 +++-- 3 files changed, 39 insertions(+), 26 deletions(-) diff --git a/src/device/deviceinfo.cpp b/src/device/deviceinfo.cpp index 1de954a04..51f731692 100644 --- a/src/device/deviceinfo.cpp +++ b/src/device/deviceinfo.cpp @@ -98,29 +98,41 @@ void DeviceInfo::LoadIcon(const QVariantList &icons, const QString &name_hint) { // Try to load the icon with that exact name first for (const QVariant &icon : icons) { - if (!icon.value().isNull()) { + if (icon.isNull()) continue; + if (icon.userType() == QMetaType::QString) { + QString icon_name = icon.toString(); + if (!icon_name.isEmpty()) { + icon_ = IconLoader::Load(icon_name); + if (!icon_.isNull()) { + icon_name_ = icon_name; + return; + } + } + } + else if (!icon.value().isNull()) { icon_ = QIcon(icon.value()); return; } - else { - if (!icon.toString().isEmpty()) icon_ = IconLoader::Load(icon.toString()); - if (!icon_.isNull()) { - icon_name_ = icon.toString(); - return; + } + + for (const QVariant &icon : icons) { + if (!icon.isNull() && icon.userType() == QMetaType::QString) { + QString icon_name = icon.toString(); + if (!icon_name.isEmpty()) { + QString hint = QString(icons.first().toString() + name_hint).toLower(); + if (hint.contains("phone")) icon_name_ = "device-phone"; + else if (hint.contains("ipod") || hint.contains("apple")) icon_name_ = "device-ipod"; + else if ((hint.contains("usb")) && (hint.contains("reader"))) icon_name_ = "device-usb-flash"; + else if (hint.contains("usb")) icon_name_ = "device-usb-drive"; + icon_ = IconLoader::Load(icon_name_); + if (!icon_.isNull()) { + return; + } } } } - QString hint = QString(icons.first().toString() + name_hint).toLower(); - - if (hint.contains("phone")) icon_name_ = "device-phone"; - else if (hint.contains("ipod") || hint.contains("apple")) icon_name_ = "device-ipod"; - else if ((hint.contains("usb")) && (hint.contains("reader"))) icon_name_ = "device-usb-flash"; - else if (hint.contains("usb")) icon_name_ = "device-usb-drive"; - else icon_name_ = "device"; - + icon_name_ = "device"; icon_ = IconLoader::Load(icon_name_); } - - diff --git a/src/device/devicelister.cpp b/src/device/devicelister.cpp index bb07a167a..c873e3f74 100644 --- a/src/device/devicelister.cpp +++ b/src/device/devicelister.cpp @@ -30,8 +30,7 @@ #include #include #include -#include -#include +#include #include #include "devicelister.h" @@ -228,15 +227,15 @@ bool DeviceLister::IsIpod(const QString &path) const { QFile::exists(path + "/iTunes/iTunes_Control"); } -QStringList DeviceLister::GuessIconForPath(const QString &path) { +QVariantList DeviceLister::GuessIconForPath(const QString &path) { - QStringList ret; + QVariantList ret; #ifdef HAVE_LIBGPOD if (IsIpod(path)) { - Itdb_Device* device = itdb_device_new(); + Itdb_Device *device = itdb_device_new(); itdb_device_set_mountpoint(device, path.toLocal8Bit().constData()); - const Itdb_IpodInfo* info = itdb_device_get_ipod_info(device); + const Itdb_IpodInfo *info = itdb_device_get_ipod_info(device); if (info->ipod_model == ITDB_IPOD_MODEL_INVALID) { ret << "device-ipod"; @@ -271,9 +270,9 @@ QStringList DeviceLister::GuessIconForPath(const QString &path) { } -QStringList DeviceLister::GuessIconForModel(const QString &vendor, const QString &model) { +QVariantList DeviceLister::GuessIconForModel(const QString &vendor, const QString &model) { - QStringList ret; + QVariantList ret; if (vendor.startsWith("Google") && model.contains("Nexus")) { ret << "phone-google-nexus-one"; } diff --git a/src/device/devicelister.h b/src/device/devicelister.h index bd7f3c204..6339dee7b 100644 --- a/src/device/devicelister.h +++ b/src/device/devicelister.h @@ -28,6 +28,8 @@ #include #include #include +#include +#include #include #include #include @@ -91,8 +93,8 @@ class DeviceLister : public QObject { QUrl MakeUrlFromLocalPath(const QString &path) const; bool IsIpod(const QString &path) const; - QStringList GuessIconForPath(const QString &path); - QStringList GuessIconForModel(const QString &vendor, const QString &model); + QVariantList GuessIconForPath(const QString &path); + QVariantList GuessIconForModel(const QString &vendor, const QString &model); protected: QThread *thread_;