[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    [kdelibs/KDE/4.10] solid/solid/backends/udisks2: improve speed in icon() and description()
From:       Lukáš Tinkl <lukas () kde ! org>
Date:       2012-10-26 0:16:02
Message-ID: 20121026001602.960D4A6078 () git ! kde ! org
[Download RAW message or body]

Git commit 7583c8758e1b43a74ba2bd976dcaa53df3212f55 by Lukáš Tinkl.
Committed on 26/10/2012 at 02:14.
Pushed by lukas into branch 'KDE/4.10'.

improve speed in icon() and description()

by shortcutting the non-interesting stuff like swap or loop devices

CCMAIL: dvratil@redhat.com

M  +1    -0    solid/solid/backends/udisks2/udisks2.h
M  +28   -10   solid/solid/backends/udisks2/udisksdevice.cpp
M  +1    -0    solid/solid/backends/udisks2/udisksdevice.h

http://commits.kde.org/kdelibs/7583c8758e1b43a74ba2bd976dcaa53df3212f55

diff --git a/solid/solid/backends/udisks2/udisks2.h \
b/solid/solid/backends/udisks2/udisks2.h index 25a1dc0..8dda86a 100644
--- a/solid/solid/backends/udisks2/udisks2.h
+++ b/solid/solid/backends/udisks2/udisks2.h
@@ -53,6 +53,7 @@ Q_DECLARE_METATYPE(DBUSManagerStruct)
 #define UD2_DBUS_INTERFACE_FILESYSTEM    "org.freedesktop.UDisks2.Filesystem"
 #define UD2_DBUS_INTERFACE_ENCRYPTED     "org.freedesktop.UDisks2.Encrypted"
 #define UD2_DBUS_INTERFACE_SWAP          "org.freedesktop.UDisks2.Swapspace"
+#define UD2_DBUS_INTERFACE_LOOP          "org.freedesktop.UDisks2.Loop"
 
 /* errors */
 #define UD2_ERROR_UNAUTHORIZED            \
                "org.freedesktop.PolicyKit.Error.NotAuthorized"
diff --git a/solid/solid/backends/udisks2/udisksdevice.cpp \
b/solid/solid/backends/udisks2/udisksdevice.cpp index 1f35df4..a3f780f 100644
--- a/solid/solid/backends/udisks2/udisksdevice.cpp
+++ b/solid/solid/backends/udisks2/udisksdevice.cpp
@@ -201,11 +201,15 @@ QStringList Device::emblems() const
 
 QString Device::description() const
 {
-    const QString hintName = prop("HintName").toString();
+    const QString hintName = property("HintName").toString(); // non-cached
     if (!hintName.isEmpty())
         return hintName;
 
-    if (queryDeviceInterface(Solid::DeviceInterface::StorageDrive))
+    if (isLoop())
+        return QObject::tr("Loop Device");
+    else if (isSwap())
+        return QObject::tr("Swap Space");
+    else if (queryDeviceInterface(Solid::DeviceInterface::StorageDrive))
         return storageDescription();
     else if (queryDeviceInterface(Solid::DeviceInterface::StorageVolume))
         return volumeDescription();
@@ -218,7 +222,7 @@ QString Device::storageDescription() const
     QString description;
     const UDisks2::StorageDrive storageDrive(const_cast<Device*>(this));
     Solid::StorageDrive::DriveType drive_type = storageDrive.driveType();
-    bool drive_is_hotpluggable = storageDrive.isHotpluggable();
+    const bool drive_is_hotpluggable = storageDrive.isHotpluggable();
 
     if (drive_type == Solid::StorageDrive::CdromDrive)
     {
@@ -290,7 +294,7 @@ QString Device::storageDescription() const
         return description;
     }
 
-    bool drive_is_removable = storageDrive.isRemovable();
+    const bool drive_is_removable = storageDrive.isRemovable();
 
     if (drive_type == Solid::StorageDrive::HardDisk && !drive_is_removable)
     {
@@ -523,19 +527,23 @@ QString Device::volumeDescription() const
 
 QString Device::icon() const
 {
-    QString iconName = prop( "HintIconName" ).toString();
+    QString iconName = property( "HintIconName" ).toString(); // non-cached
 
     if ( !iconName.isEmpty() )
     {
         return iconName;
     }
+    else if (isLoop() || isSwap())
+    {
+        return "drive-harddisk";
+    }
     else if (isDrive()) {
         const bool isRemovable = prop("Removable").toBool();
         const QString conn = prop("ConnectionBus").toString();
 
         if (isOpticalDrive())
             return "drive-optical";
-        else if (isRemovable && !isOpticalDisc()) {
+        else if (isRemovable && !prop("Optical").toBool()) {
             if (conn == "usb")
                 return "drive-removable-media-usb";
             else
@@ -543,14 +551,18 @@ QString Device::icon() const
         }
     }
     else if (isBlock()) {
-        Device drive(drivePath());
+        const QString drv = drivePath();
+        if (drv.isEmpty() || drv == "/")
+            return "drive-harddisk";    // stuff like loop devices or swap which \
don't have the Drive prop set +
+        Device drive(drv);
 
         // handle media
         const QString media = drive.prop("Media").toString();
 
         if ( !media.isEmpty() )
         {
-            if ( isOpticalDisc() )    // optical stuff
+            if ( drive.prop("Optical").toBool() )    // optical stuff
             {
                 bool isWritable = drive.prop("OpticalBlank").toBool();
 
@@ -689,11 +701,12 @@ bool Device::propertyExists(const QString &key) const
 
 QVariantMap Device::allProperties() const
 {
+    QDBusMessage call = QDBusMessage::createMethodCall(UD2_DBUS_SERVICE, m_udi, \
DBUS_INTERFACE_PROPS, "GetAll"); +
     Q_FOREACH (const QString & iface, m_interfaces) {
         if (iface.startsWith("org.freedesktop.DBus"))
             continue;
-        QDBusMessage call = QDBusMessage::createMethodCall(UD2_DBUS_SERVICE, m_udi, \
                DBUS_INTERFACE_PROPS, "GetAll");
-        call << iface;
+        call.setArguments(QVariantList() << iface);
         QDBusPendingReply<QVariantMap> reply = \
QDBusConnection::systemBus().asyncCall(call);  reply.waitForFinished();
 
@@ -903,6 +916,11 @@ bool Device::isSwap() const
     return hasInterface(UD2_DBUS_INTERFACE_SWAP);
 }
 
+bool Device::isLoop() const
+{
+    return hasInterface(UD2_DBUS_INTERFACE_LOOP);
+}
+
 QString Device::drivePath() const
 {
     return prop("Drive").value<QDBusObjectPath>().path();
diff --git a/solid/solid/backends/udisks2/udisksdevice.h \
b/solid/solid/backends/udisks2/udisksdevice.h index cf8e2f5..7e27634 100644
--- a/solid/solid/backends/udisks2/udisksdevice.h
+++ b/solid/solid/backends/udisks2/udisksdevice.h
@@ -79,6 +79,7 @@ public:
     bool isEncryptedContainer() const;
     bool isEncryptedCleartext() const;
     bool isSwap() const;
+    bool isLoop() const;
 
     QString drivePath() const;
 


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic