[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