[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-core-devel
Subject: Re: Two KIO::AccessManager patches...
From: "Dawit A." <adawit () kde ! org>
Date: 2009-09-24 20:14:46
Message-ID: 200909241614.46320.adawit () kde ! org
[Download RAW message or body]
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...
>
["accessmanager.patch" (text/x-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 <kdebug.h>
#include <job.h>
@@ -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<QNetworkRequest::Attribute>(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 <QtNetwork/QNetworkAccessManager>
+#include <QtNetwork/QNetworkRequest>
#include <kio/global.h>
@@ -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<QNetworkRequest::Attribute>(MetaData)); if (userMetaData.isValid() && \
userMetaData.type() == QVariant::Map) { metaData += userMetaData.toMap();
}
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic