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

List:       kde-commits
Subject:    KDE/kdelibs/kio/kio
From:       Dawit Alemayehu <adawit () kde ! org>
Date:       2010-05-25 21:18:14
Message-ID: 20100525211814.8AFC1AC8C0 () svn ! kde ! org
[Download RAW message or body]

SVN commit 1130639 by adawit:

- When updating already running ioslave with new internal meta-data, make sure their
  the previously set config data is not accidentally lost. This causes bug# 238832.

BUG:238832


 M  +37 -32    scheduler.cpp  
 M  +0 -1      scheduler_p.h  


--- trunk/KDE/kdelibs/kio/kio/scheduler.cpp #1130638:1130639
@@ -68,7 +68,7 @@
                        const QString &proxy , bool newSlave, const KIO::MetaData *config = 0);
 // same reason as above
 static Scheduler *scheduler();
-Slave *heldSlaveForJob(SimpleJob *job);
+static Slave *heldSlaveForJob(SimpleJob *job);
 
 
 int SerialPicker::changedPrioritySerial(int oldSerial, int newPriority) const
@@ -569,18 +569,6 @@
     return ret;
 }
 
-void ProtoQueue::updateSlaveConfigFor(const QString& host)
-{
-    Q_FOREACH(Slave *slave, allSlaves()) {
-        if (slave->host() == host) {
-            slave->setConfig(SlaveConfig::self()->configData(slave->protocol(), host));
-            kDebug(7006) << "Updating configuration of" << slave->protocol()
-                         << "ioslave, pid=" << slave->slave_pid();
-        }
-    }
-}
-
-
 //private slot
 void ProtoQueue::startAJob()
 {
@@ -709,6 +697,7 @@
     Slave *heldSlaveForJob(KIO::SimpleJob *job);
     void registerWindow(QWidget *wid);
 
+    MetaData metaDataFor(const QString &protocol, const QString &proxy, const KUrl &url);
     void setupSlave(KIO::Slave *slave, const KUrl &url, const QString &protocol,
                     const QString &proxy, bool newSlave, const KIO::MetaData *config = 0);
 
@@ -983,9 +972,18 @@
         if (jobPriv->m_internalMetaData.count()) {
             kDebug(7006) << "Updating ioslaves with new internal metadata information";
             ProtoQueue * queue = m_protocols.value(slave->protocol());
-            if (queue)
-                queue->updateSlaveConfigFor(slave->host());
+            if (queue) {
+                QListIterator<Slave*> it (queue->allSlaves());
+                while (it.hasNext()) {
+                    Slave* runningSlave = it.next();
+                    if (slave->host() == runningSlave->host()) {                        
+                        slave->setConfig(metaDataFor(slave->protocol(), jobPriv->m_proxy, jobUrl));
+                        kDebug(7006) << "Updated configuration of" << slave->protocol()
+                                     << "ioslave, pid=" << slave->slave_pid();
         }
+                }
+            }
+        }
         slave->setJob(0);
         slave->disconnect(job);
     }
@@ -1003,30 +1001,18 @@
     schedulerPrivate->setupSlave(slave, url, protocol, proxy, newSlave, config);
 }
 
-
-void SchedulerPrivate::setupSlave(KIO::Slave *slave, const KUrl &url, const QString &protocol,
-                                  const QString &proxy , bool newSlave, const KIO::MetaData *config)
+MetaData SchedulerPrivate::metaDataFor(const QString &protocol, const QString &proxy, const KUrl &url)
 {
-    QString host = url.host();
-    int port = url.port();
-    if ( port == -1 ) // no port is -1 in QUrl, but in kde3 we used 0 and the kioslaves assume that.
-        port = 0;
-    QString user = url.user();
-    QString passwd = url.pass();
-
-    if (newSlave || slave->host() != host || slave->port() != port ||
-        slave->user() != user || slave->passwd() != passwd) {
-
+    const QString host = url.host();
         MetaData configData = SlaveConfig::self()->configData(protocol, host);
         sessionData.configDataFor( configData, protocol, host );
-
         configData["UseProxy"] = proxy;
 
-        QString autoLogin = configData["EnableAutoLogin"].toLower();
-        if ( autoLogin == "true" )
+    if ( configData.contains("EnableAutoLogin") &&
+         configData.value("EnableAutoLogin").compare("true", Qt::CaseInsensitive) == 0 )
         {
             NetRC::AutoLogin l;
-            l.login = user;
+        l.login = url.user();
             bool usern = (protocol == "ftp");
             if ( NetRC::self()->lookup( url, l, usern) )
             {
@@ -1042,8 +1028,27 @@
                 }
             }
         }
+
+    return configData;
+}
+
+void SchedulerPrivate::setupSlave(KIO::Slave *slave, const KUrl &url, const QString &protocol,
+                                  const QString &proxy , bool newSlave, const KIO::MetaData *config)
+{
+    int port = url.port();
+    if ( port == -1 ) // no port is -1 in QUrl, but in kde3 we used 0 and the kioslaves assume that.
+        port = 0;
+    const QString host = url.host();
+    const QString user = url.user();
+    const QString passwd = url.pass();
+
+    if (newSlave || slave->host() != host || slave->port() != port ||
+        slave->user() != user || slave->passwd() != passwd) {
+
+        MetaData configData = metaDataFor(protocol, proxy, url);
         if (config)
            configData += *config;
+
         slave->setConfig(configData);
         slave->setProtocol(url.protocol());
         slave->setHost(host, port, user, passwd);
--- trunk/KDE/kdelibs/kio/kio/scheduler_p.h #1130638:1130639
@@ -146,7 +146,6 @@
     KIO::Slave *createSlave(const QString &protocol, KIO::SimpleJob *job, const KUrl &url);
     bool removeSlave (KIO::Slave *slave);
     QList<KIO::Slave *> allSlaves() const;
-    void updateSlaveConfigFor(const QString&);
     ConnectedSlaveQueue m_connectedSlaveQueue;    
 
 private slots:
[prev in list] [next in list] [prev in thread] [next in thread] 

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