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

List:       kde-commits
Subject:    [kdepim-runtime/KDE/4.11] resources/imap: Don't update annotations when server does not support it
From:       Dan_Vrátil <dvratil () redhat ! com>
Date:       2013-10-24 16:17:47
Message-ID: E1VZNbX-0008Ak-Tt () scm ! kde ! org
[Download RAW message or body]

Git commit c215c5a3a55e59d48637de48804aaed416d04a69 by Dan Vrátil.
Committed on 24/10/2013 at 16:14.
Pushed by dvratil into branch 'KDE/4.11'.

Don't update annotations when server does not support it

Don't try to update annotations when server does not have METADATA or
ANNOTATEMORE capability.

Fixes a warning shown when user changed something in Folder properties
in KMail

BUG: 284527
FIXED-IN: 4.11.3

M  +3    -2    resources/imap/addcollectiontask.cpp
M  +1    -1    resources/imap/changecollectiontask.cpp
M  +7    -0    resources/imap/resourcetask.cpp
M  +2    -0    resources/imap/resourcetask.h
M  +24   -3    resources/imap/tests/testchangecollectiontask.cpp

http://commits.kde.org/kdepim-runtime/c215c5a3a55e59d48637de48804aaed416d04a69

diff --git a/resources/imap/addcollectiontask.cpp \
b/resources/imap/addcollectiontask.cpp index 7c1fb04..07f7bfb 100644
--- a/resources/imap/addcollectiontask.cpp
+++ b/resources/imap/addcollectiontask.cpp
@@ -22,6 +22,7 @@
 #include "addcollectiontask.h"
 
 #include "collectionannotationsattribute.h"
+#include <accountwizard/ispdb/ispdb.h>
 
 #include <KDE/KDebug>
 #include <KDE/KLocale>
@@ -107,7 +108,7 @@ void AddCollectionTask::onSubscribeDone( KJob *job )
   }
 
   const Akonadi::CollectionAnnotationsAttribute *attribute = \
                m_collection.attribute<Akonadi::CollectionAnnotationsAttribute>();
-  if ( !attribute ) {
+  if ( !attribute || !serverSupportsAnnotations() ) {
     // we are finished
     changeCommitted( m_collection );
     synchronizeCollectionTree();
@@ -125,7 +126,7 @@ void AddCollectionTask::onSubscribeDone( KJob *job )
     }
 
     QByteArray attribute = entry;
-    if ( job->serverCapability()==KIMAP::MetaDataJobBase::Annotatemore ) {
+    if ( job->serverCapability() == KIMAP::MetaDataJobBase::Annotatemore ) {
       attribute = "value.shared";
     }
 
diff --git a/resources/imap/changecollectiontask.cpp \
b/resources/imap/changecollectiontask.cpp index 8f44651..a0acd84 100644
--- a/resources/imap/changecollectiontask.cpp
+++ b/resources/imap/changecollectiontask.cpp
@@ -120,7 +120,7 @@ void ChangeCollectionTask::doStart( KIMAP::Session *session )
     }
   }
 
-  if ( parts().contains( "collectionannotations" ) ) {
+  if ( parts().contains( "collectionannotations" ) && serverSupportsAnnotations() ) \
{  Akonadi::CollectionAnnotationsAttribute *annotationsAttribute =
       collection().attribute<Akonadi::CollectionAnnotationsAttribute>();
 
diff --git a/resources/imap/resourcetask.cpp b/resources/imap/resourcetask.cpp
index 1de07f3..675093d 100644
--- a/resources/imap/resourcetask.cpp
+++ b/resources/imap/resourcetask.cpp
@@ -29,6 +29,7 @@
 #include "imapflags.h"
 #include "sessionpool.h"
 #include "resourcestateinterface.h"
+#include <accountwizard/ispdb/ispdb.h>
 
 ResourceTask::ResourceTask( ActionIfNoSession action, ResourceStateInterface::Ptr \
resource, QObject *parent )  : QObject( parent ),
@@ -449,5 +450,11 @@ void ResourceTask::setSeparatorCharacter( const QChar& separator \
)  m_resource->setSeparatorCharacter( separator );
 }
 
+bool ResourceTask::serverSupportsAnnotations() const
+{
+    return serverCapabilities().contains( QLatin1String( "METADATA" ) )
+            || serverCapabilities().contains( QLatin1String( "ANNOTATEMORE" ) );
+}
+
 
 #include "resourcetask.moc"
diff --git a/resources/imap/resourcetask.h b/resources/imap/resourcetask.h
index 69c1a64..f80daff 100644
--- a/resources/imap/resourcetask.h
+++ b/resources/imap/resourcetask.h
@@ -129,6 +129,8 @@ protected:
 
   static QList<QByteArray> toAkonadiFlags( const QList<QByteArray> &flags );
 
+  bool serverSupportsAnnotations() const;
+
 private:
 
   static QList<QByteArray> fromAkonadiFlags( const QList<QByteArray> &flags );
diff --git a/resources/imap/tests/testchangecollectiontask.cpp \
b/resources/imap/tests/testchangecollectiontask.cpp index 8dc4230..3b23c58 100644
--- a/resources/imap/tests/testchangecollectiontask.cpp
+++ b/resources/imap/tests/testchangecollectiontask.cpp
@@ -38,6 +38,7 @@ private slots:
     QTest::addColumn< QList<QByteArray> >( "scenario" );
     QTest::addColumn<QStringList>( "callNames" );
     QTest::addColumn<QString>( "collectionName" );
+    QTest::addColumn<bool>( "supportsAnnotations" );
 
     Akonadi::Collection collection;
     QSet<QByteArray> parts;
@@ -91,7 +92,21 @@ private slots:
     callNames.clear();
     callNames << "collectionChangeCommitted";
 
-    QTest::newRow( "complete case" ) << collection << parts << scenario << callNames \
<< collection.name(); +    QTest::newRow( "complete case" ) << collection << parts << \
scenario << callNames << collection.name() << true; +
+    scenario.clear();
+    scenario << defaultPoolConnectionScenario()
+             << "C: A000003 SETACL \"Foo\" \"test@kdab.com\" \"lrswipckxtda\""
+             << "S: A000003 OK acl changed"
+             << "C: A000004 SETACL \"Foo\" \"foo@kde.org\" \"lrswipcda\""
+             << "S: A000004 OK acl changed"
+             << "C: A000005 SETACL \"Foo\" \"test@kdab.com\" \"lrswipckxtda\""
+             << "S: A000005 OK acl changed"
+             << "C: A000006 RENAME \"Foo\" \"Bar\""
+             << "S: A000006 OK rename done"
+             << "C: A000007 SUBSCRIBE \"Bar\""
+             << "S: A000007 OK mailbox subscribed";
+    QTest::newRow( "no ANNOTATEMORE support" ) << collection << parts << scenario << \
callNames << collection.name() << false;  
     collection = Akonadi::Collection( 1 );
     collection.setName( "Bar/Baz" );
@@ -107,7 +122,7 @@ private slots:
     callNames.clear();
     callNames << "collectionChangeCommitted";
     QTest::newRow( "rename with invalid separator" ) << collection << parts << \
                scenario << callNames
-                                                     << "BarBaz";
+                                                     << "BarBaz" << true;
   }
 
   void shouldUpdateMetadataAclAndName()
@@ -117,6 +132,7 @@ private slots:
     QFETCH( QList<QByteArray>, scenario );
     QFETCH( QStringList, callNames );
     QFETCH( QString, collectionName );
+    QFETCH( bool, supportsAnnotations );
 
     FakeServer server;
     server.setScenario( scenario );
@@ -128,9 +144,14 @@ private slots:
     QVERIFY( pool.connect( createDefaultAccount() ) );
     QVERIFY( waitForSignal( &pool, SIGNAL(connectDone(int,QString)) ) );
 
+    QStringList caps;
+    caps << QLatin1String( "ACL" );
+    if ( supportsAnnotations ) {
+        caps << QLatin1String( "ANNOTATEMORE" );
+    }
     DummyResourceState::Ptr state = DummyResourceState::Ptr( new DummyResourceState \
);  state->setUserName( defaultUserName() );
-    state->setServerCapabilities( QStringList() << "ANNOTATEMORE" << "ACL" );
+    state->setServerCapabilities( caps );
     state->setCollection( collection );
     state->setParts( parts );
     ChangeCollectionTask *task = new ChangeCollectionTask( state );


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

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