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

List:       kde-commits
Subject:    =?utf-8?q?=5Bkdelibs/KDE/4=2E6=5D_kio/kio=3A_Correctly_recover_m?=
From:       Dawit Alemayehu <adawit () kde ! org>
Date:       2011-04-05 20:23:30
Message-ID: 20110405202330.3CD70A609B () git ! kde ! org
[Download RAW message or body]

Git commit a4f5b32e1efa097e7816819f50400498cb7e6903 by Dawit Alemayehu.
Committed on 05/04/2011 at 22:20.
Pushed by adawit into branch 'KDE/4.6'.

Correctly recover mimetype information from a KIO::Stat job

M  +52   -21   kio/kio/accessmanagerreply_p.cpp     
M  +4    -2    kio/kio/accessmanagerreply_p.h     

http://commits.kde.org/kdelibs/a4f5b32e1efa097e7816819f50400498cb7e6903

diff --git a/kio/kio/accessmanagerreply_p.cpp b/kio/kio/accessmanagerreply_p.cpp
index 9889674..841d194 100644
--- a/kio/kio/accessmanagerreply_p.cpp
+++ b/kio/kio/accessmanagerreply_p.cpp
@@ -66,9 +66,11 @@ AccessManagerReply::AccessManagerReply(const \
QNetworkAccessManager::Operation &o  if (kioJob) {
         connect(kioJob, SIGNAL(redirection(KIO::Job*, const KUrl&)), \
                SLOT(slotRedirection(KIO::Job*, const KUrl&)));
         connect(kioJob, SIGNAL(percent(KJob*, unsigned long)), \
                SLOT(slotPercent(KJob*, unsigned long)));
-        connect(kioJob, SIGNAL(result(KJob *)), SLOT(slotResult(KJob *)));
 
-        if (!qobject_cast<KIO::StatJob*>(kioJob)) {
+        if (qobject_cast<KIO::StatJob*>(kioJob)) {
+            connect(kioJob, SIGNAL(result(KJob *)), SLOT(slotStatResult(KJob *)));
+        } else {
+            connect(kioJob, SIGNAL(result(KJob *)), SLOT(slotResult(KJob *)));
             connect(kioJob, SIGNAL(data(KIO::Job *, const QByteArray &)),
                 SLOT(slotData(KIO::Job *, const QByteArray &)));
             connect(kioJob, SIGNAL(mimetype(KIO::Job *, const QString&)),
@@ -147,7 +149,7 @@ void AccessManagerReply::readHttpResponseHeaders(KIO::Job *job)
             setHeader(QNetworkRequest::ContentLengthHeader, \
                job->totalAmount(KJob::Bytes));
             setAttribute(QNetworkRequest::HttpStatusCodeAttribute, "200");
             emit metaDataChanged();
-        }        
+        }
         return;
     }
 
@@ -215,24 +217,10 @@ void AccessManagerReply::readHttpResponseHeaders(KIO::Job *job)
     emit metaDataChanged();
 }
 
-void AccessManagerReply::slotData(KIO::Job *kioJob, const QByteArray &data)
-{
-    Q_UNUSED (kioJob);
-    m_data += data;
-    emit readyRead();
-}
-
-void AccessManagerReply::slotMimeType(KIO::Job *kioJob, const QString &mimeType)
-{
-    kDebug(7044) << kioJob << mimeType;
-    setHeader(QNetworkRequest::ContentTypeHeader, mimeType.toUtf8());
-    readHttpResponseHeaders(kioJob);
-}
-
-void AccessManagerReply::slotResult(KJob *kJob)
+int AccessManagerReply::jobError(KJob* kJob)
 {
-    const int errcode = kJob->error();
-    switch (errcode)
+    const int errCode = kJob->error();
+    switch (errCode)
     {
         case 0:
             setError(QNetworkReply::NoError, kJob->errorText());
@@ -287,9 +275,31 @@ void AccessManagerReply::slotResult(KJob *kJob)
             break;
         default:
             setError(QNetworkReply::UnknownNetworkError, kJob->errorText());
-            kDebug(7044) << errcode;
+            kDebug(7044) << KIO::rawErrorDetail(errCode, QString()) << "-> \
QNetworkReply::UnknownNetworkError";  }
 
+    return errCode;
+}
+
+
+void AccessManagerReply::slotData(KIO::Job *kioJob, const QByteArray &data)
+{
+    Q_UNUSED (kioJob);
+    m_data += data;
+    emit readyRead();
+}
+
+void AccessManagerReply::slotMimeType(KIO::Job *kioJob, const QString &mimeType)
+{
+    //kDebug(7044) << kioJob << mimeType;
+    setHeader(QNetworkRequest::ContentTypeHeader, mimeType.toUtf8());
+    readHttpResponseHeaders(kioJob);
+}
+
+void AccessManagerReply::slotResult(KJob *kJob)
+{
+    const int errcode = jobError(kJob);
+
     const QUrl redirectUrl = \
attribute(QNetworkRequest::RedirectionTargetAttribute).toUrl();  if \
(redirectUrl.isValid())  readHttpResponseHeaders(m_kioJob);
@@ -302,6 +312,27 @@ void AccessManagerReply::slotResult(KJob *kJob)
     emit finished();
 }
 
+void AccessManagerReply::slotStatResult(KJob* kJob)
+{
+    if (jobError(kJob)) {
+        emit error (error());
+        emit finished();
+    }
+
+    KIO::StatJob* statJob = qobject_cast<KIO::StatJob*>(kJob);
+    Q_ASSERT(statJob);
+
+    KIO::UDSEntry entry =  statJob->statResult();
+    QString mimeType = entry.stringValue(KIO::UDSEntry::UDS_MIME_TYPE);
+    if (mimeType.isEmpty() && entry.isDir())
+        mimeType = QL1S("inode/directory");
+
+    if (!mimeType.isEmpty())
+        setHeader(QNetworkRequest::ContentTypeHeader, mimeType.toUtf8());
+
+    emit finished();
+}
+
 void AccessManagerReply::slotRedirection(KIO::Job* job, const KUrl& u)
 {
     Q_UNUSED(job);
diff --git a/kio/kio/accessmanagerreply_p.h b/kio/kio/accessmanagerreply_p.h
index e4a50e3..408b533 100644
--- a/kio/kio/accessmanagerreply_p.h
+++ b/kio/kio/accessmanagerreply_p.h
@@ -52,7 +52,7 @@ public:
                        const QNetworkRequest &request,
                        KIO::SimpleJob *kioJob,
                        QObject *parent);
-    
+
     virtual ~AccessManagerReply();
     virtual qint64 bytesAvailable() const;
     virtual void abort();
@@ -64,14 +64,16 @@ public:
 protected:
     virtual qint64 readData(char *data, qint64 maxSize);
     void readHttpResponseHeaders(KIO::Job *);
+    int jobError(KJob *kJob);
 
 private Q_SLOTS:
     void slotData(KIO::Job *kioJob, const QByteArray &data);
     void slotMimeType(KIO::Job *kioJob, const QString &mimeType);
     void slotResult(KJob *kJob);
+    void slotStatResult(KJob *kJob);
     void slotRedirection(KIO::Job *job, const KUrl &url);
     void slotPercent(KJob *job, unsigned long percent);
-    
+
 private:
     QByteArray m_data;
     bool m_metaDataRead;


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

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