[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