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

List:       kde-commits
Subject:    KDE/kdelibs/solid/solid/backends/hal
From:       Kevin Ottens <ervin () kde ! org>
Date:       2009-11-24 20:51:24
Message-ID: 1259095884.987622.18975.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 1053814 by ervin:

If calling the command line tool eject failed, trigger an Eject request
through HAL.


 M  +9 -2      halfstabhandling.cpp  
 M  +3 -0      halfstabhandling.h  
 M  +35 -2     halstorageaccess.cpp  
 M  +3 -1      halstorageaccess.h  


--- trunk/KDE/kdelibs/solid/solid/backends/hal/halfstabhandling.cpp #1053813:1053814
@@ -162,7 +162,7 @@
 }
 
 QProcess *Solid::Backends::Hal::FstabHandling::callSystemCommand(const QString \
                &commandName,
-                                                                 const QString \
&device, +                                                                 const \
                QStringList &args,
                                                                  QObject *obj, const \
char *slot)  {
     QStringList env = QProcess::systemEnvironment();
@@ -174,7 +174,7 @@
                      obj, slot);
 
     process->setEnvironment(env);
-    process->start(commandName, QStringList() << device);
+    process->start(commandName, args);
 
     if (process->waitForStarted()) {
         return process;
@@ -184,3 +184,10 @@
     }
 }
 
+QProcess *Solid::Backends::Hal::FstabHandling::callSystemCommand(const QString \
&commandName, +                                                                 const \
QString &device, +                                                                 \
QObject *obj, const char *slot) +{
+    return callSystemCommand(commandName, QStringList() << device, obj, slot);
+}
+
--- trunk/KDE/kdelibs/solid/solid/backends/hal/halfstabhandling.h #1053813:1053814
@@ -37,6 +37,9 @@
     static bool isInFstab(const QString &device);
     static QStringList possibleMountPoints(const QString &device);
     static QProcess *callSystemCommand(const QString &commandName,
+                                       const QStringList &args,
+                                       QObject *obj, const char *slot);
+    static QProcess *callSystemCommand(const QString &commandName,
                                        const QString &device,
                                        QObject *obj, const char *slot);
 };
--- trunk/KDE/kdelibs/solid/solid/backends/hal/halstorageaccess.cpp #1053813:1053814
@@ -40,7 +40,7 @@
 using namespace Solid::Backends::Hal;
 
 StorageAccess::StorageAccess(HalDevice *device)
-    : DeviceInterface(device), m_setupInProgress(false), \
m_teardownInProgress(false), +    : DeviceInterface(device), \
m_setupInProgress(false), m_teardownInProgress(false), m_ejectInProgress(false),  \
m_passphraseRequested(false)  {
     connect(device, SIGNAL(propertyChanged(const QMap<QString,int> &)),
@@ -163,8 +163,13 @@
             args << devnode;
 #endif
 
-            QProcess::startDetached(program, args);
+            m_ejectInProgress = true;
+            m_process = FstabHandling::callSystemCommand("eject", args,
+                                                         this, \
SLOT(slotProcessFinished(int, QProcess::ExitStatus)));  }
+    } else if (m_ejectInProgress) {
+        m_ejectInProgress = false;
+        emit ejectDone(Solid::NoError, QVariant(), m_device->udi());
     }
 }
 
@@ -181,6 +186,11 @@
         emit teardownDone(Solid::UnauthorizedOperation,
                           QString(error.name()+": "+error.message()),
                           m_device->udi());
+    } else if (m_ejectInProgress) {
+        m_ejectInProgress = false;
+        emit ejectDone(Solid::UnauthorizedOperation,
+                       QString(error.name()+": "+error.message()),
+                       m_device->udi());
     }
 }
 
@@ -206,6 +216,13 @@
                               m_process->readAllStandardError(),
                               m_device->udi());
         }
+    } else if (m_ejectInProgress) {
+        if (exitCode==0)  {
+            m_ejectInProgress = false;
+            emit ejectDone(Solid::NoError, QVariant(), m_device->udi());
+        } else {
+            callHalVolumeEject();
+        }
     }
 
     delete m_process;
@@ -352,6 +369,22 @@
                               SLOT(slotDBusError(const QDBusError &)));
 }
 
+bool StorageAccess::callHalVolumeEject()
+{
+    QString udi = m_device->udi();
+    QString interface = "org.freedesktop.Hal.Device.Volume";
+
+    QDBusConnection c = QDBusConnection::systemBus();
+    QDBusMessage msg = QDBusMessage::createMethodCall("org.freedesktop.Hal", udi,
+                                                      interface, "Eject");
+
+    msg << QStringList();
+
+    return c.callWithCallback(msg, this,
+                              SLOT(slotDBusReply(const QDBusMessage &)),
+                              SLOT(slotDBusError(const QDBusError &)));
+}
+
 bool Solid::Backends::Hal::StorageAccess::callSystemMount()
 {
     const QString device = m_device->property("block.device").toString();
--- trunk/KDE/kdelibs/solid/solid/backends/hal/halstorageaccess.h #1053813:1053814
@@ -51,6 +51,7 @@
     void accessibilityChanged(bool accessible, const QString &udi);
     void setupDone(Solid::ErrorType error, QVariant errorData, const QString &udi);
     void teardownDone(Solid::ErrorType error, QVariant errorData, const QString \
&udi); +    void ejectDone(Solid::ErrorType error, QVariant errorData, const QString \
&udi);  
 private Q_SLOTS:
     void slotPropertyChanged(const QMap<QString,int> &changes);
@@ -58,13 +59,13 @@
     void slotDBusError(const QDBusError &error);
     void slotProcessFinished(int exitCode, QProcess::ExitStatus exitStatus);
 
-
 public Q_SLOTS:
     Q_SCRIPTABLE Q_NOREPLY void passphraseReply(const QString &passphrase);
 
 private:
     bool callHalVolumeMount();
     bool callHalVolumeUnmount();
+    bool callHalVolumeEject();
 
     bool callSystemMount();
     bool callSystemUnmount();
@@ -76,6 +77,7 @@
 private:
     bool m_setupInProgress;
     bool m_teardownInProgress;
+    bool m_ejectInProgress;
     bool m_passphraseRequested;
     QString m_lastReturnObject;
     QProcess *m_process;


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

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