--Boundary-00=_2M9uKQpyNlAW3fn Content-Type: Text/Plain; charset="iso-8859-15" Content-Transfer-Encoding: 7bit Attached is the adjusted patch... On Thursday 24 September 2009 16:01:59 Dawit A. wrote: > On Thursday 24 September 2009 13:33:21 David Faure wrote: > > On Thursday 24 September 2009, Dawit A. wrote: > > > On Thursday 24 September 2009 04:42:03 David Faure wrote: > > > > On Thursday 24 September 2009, Dawit A. wrote: > > > > > Improved #2 Patch: > > > > > > > > > > Instead of chaning the QNetworkReply error code value which might > > > > > > > > have > > > > > > > > > other ramifications, send the KIO error code as an attribute, > > > > > > > > specifically > > > > > > > > > using the QNetworkRequest::UserMax attribute... > > > > > > > > Should there be a typedef for that enum value in AccessManager.h, > > > > so that it's documented that this is the enum value used for it? > > > > > > I guess it should, but we currently use QNetworkRequest::User in > > > KIO::AccessManager already as well. > > > > Exactly. See how confusing it gets? :-) > > No argument from me there... > > > > Perhaps we need our own enum > > > and simply cast that away to QNetworkRequest::Attribute when used ? > > > > Yes. > > > > (And then I recommend that your enum uses > > { > > Value1 = QNetworkRequest::User, > > Value2 > > } > > > > (i.e. Value2=User+1, rather than UserMax). Then you can get a Value3 > > easily ;) > > That was exactly what I was going to do, i.e. add the following enum to > KIO::AccessManager > > enum Attribute { > MetaData = QNetworkRequest::User, > KioError > }; > > Then one can do KIO::AccessManager::MetaData etc etc... > --Boundary-00=_2M9uKQpyNlAW3fn Content-Type: text/x-patch; charset="UTF-8"; name="accessmanager.patch" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="accessmanager.patch" Index: kio/accessmanagerreply_p.cpp =================================================================== --- kio/accessmanagerreply_p.cpp (revision 1026906) +++ kio/accessmanagerreply_p.cpp (working copy) @@ -22,6 +22,7 @@ */ #include "accessmanagerreply_p.h" +#include "accessmanager.h" #include #include @@ -158,11 +159,13 @@ void AccessManagerReply::jobDone(KJob *kJob) { - switch (kJob->error()) + const int errcode = kJob->error(); + switch (errcode) { case 0: setError(QNetworkReply::NoError, kJob->errorText()); kDebug() << "0 -> QNetworkReply::NoError"; + kDebug() << "Job '" << kJob << "' completed..."; break; case KIO::ERR_COULD_NOT_CONNECT: setError(QNetworkReply::ConnectionRefusedError, kJob->errorText()); @@ -200,12 +203,12 @@ break; case KIO::ERR_COULD_NOT_AUTHENTICATE: setError(QNetworkReply::AuthenticationRequiredError, kJob->errorText()); - kDebug() << kJob->error(); + kDebug() << errcode; break; case KIO::ERR_UNSUPPORTED_PROTOCOL: case KIO::ERR_NO_SOURCE_PROTOCOL: setError(QNetworkReply::ProtocolUnknownError, kJob->errorText()); - kDebug() << kJob->error(); + kDebug() << errcode; break; case KIO::ERR_UNSUPPORTED_ACTION: setError(QNetworkReply::ProtocolInvalidOperationError, kJob->errorText()); @@ -213,7 +216,8 @@ break; default: setError(QNetworkReply::UnknownNetworkError, errorString()); - kDebug() << kJob->error(); + setAttribute(static_cast(KIO::AccessManager::KioError), errcode); + kDebug() << errcode; } emit finished(); @@ -228,6 +232,7 @@ // temporary one assume code 302 which is most often used if (q->attribute(QNetworkRequest::HttpStatusCodeAttribute).isNull()) q->setAttribute(QNetworkRequest::HttpStatusCodeAttribute, 302); + q->setAttribute(QNetworkRequest::RedirectionTargetAttribute, QUrl(url)); emit q->finished(); } Index: kio/accessmanager.h =================================================================== --- kio/accessmanager.h (revision 1026906) +++ kio/accessmanager.h (working copy) @@ -24,6 +24,7 @@ #define KIO_ACCESSMANAGER_H #include +#include #include @@ -42,6 +43,15 @@ { Q_OBJECT public: + /*! + Extensions to QNetworkRequest::Attribute enums. + @since 4.3.2 + */ + enum Attribute { + MetaData = QNetworkRequest::User, + KioError + }; + AccessManager(QObject *parent); virtual ~AccessManager(); /** Index: kio/accessmanager.cpp =================================================================== --- kio/accessmanager.cpp (revision 1027715) +++ kio/accessmanager.cpp (working copy) @@ -126,7 +126,7 @@ KIO::MetaData metaData; // Add the user-specified meta data first... - QVariant userMetaData = request.attribute (QNetworkRequest::User); + QVariant userMetaData = request.attribute (static_cast(MetaData)); if (userMetaData.isValid() && userMetaData.type() == QVariant::Map) { metaData += userMetaData.toMap(); } --Boundary-00=_2M9uKQpyNlAW3fn--