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

List:       kde-commits
Subject:    KDE/kdepimlibs/akonadi
From:       Stephen Kelly <steveire () gmail ! com>
Date:       2011-01-13 15:36:33
Message-ID: 20110113153633.6E291AC8B3 () svn ! kde ! org
[Download RAW message or body]

SVN commit 1214217 by skelly:

React to notifications of agent removal before handling removal of individual \
collections.

 M  +1 -0      entitytreemodel.h  
 M  +27 -0     entitytreemodel_p.cpp  
 M  +2 -0      entitytreemodel_p.h  


--- trunk/KDE/kdepimlibs/akonadi/entitytreemodel.h #1214216:1214217
@@ -662,6 +662,7 @@
     Q_PRIVATE_SLOT( d_func(), void changeFetchState( const Akonadi::Collection & ) )
 
     Q_PRIVATE_SLOT( d_func(), void agentInstanceAdvancedStatusChanged( const \
QString&, const QVariantMap& ) ) +    Q_PRIVATE_SLOT( d_func(), void \
agentInstanceRemoved( Akonadi::AgentInstance ) )  //@endcond
 };
 
--- trunk/KDE/kdepimlibs/akonadi/entitytreemodel_p.cpp #1214216:1214217
@@ -81,6 +81,11 @@
 
   QObject::connect( manager, SIGNAL( agentInstanceAdvancedStatusChanged( const \
                QString&, const QVariantMap& ) ),
                     q_ptr, SLOT( agentInstanceAdvancedStatusChanged( const QString&, \
const QVariantMap& ) ) ); +
+  Akonadi::AgentManager *agentManager = Akonadi::AgentManager::self();
+  QObject::connect( agentManager, SIGNAL( instanceRemoved( Akonadi::AgentInstance ) \
), +                    q_ptr, SLOT( agentInstanceRemoved( Akonadi::AgentInstance ) ) \
); +
 }
 
 EntityTreeModelPrivate::~EntityTreeModelPrivate()
@@ -226,6 +231,28 @@
   q->dataChanged(collectionIndex, collectionIndex);
 }
 
+void EntityTreeModelPrivate::agentInstanceRemoved( const Akonadi::AgentInstance \
&instance ) +{
+  Q_Q( EntityTreeModel );
+
+  QList<Node*> childEntities = m_childEntities[m_rootNode->id];
+
+  int row = 0;
+  for ( int row = 0; row < childEntities.size(); ++row ) {
+    Node *node = childEntities.at( row );
+    if ( node->type == Node::Collection ) {
+      const Collection::Id collectionId = node->id;
+      if ( m_collections[collectionId].resource() == instance.identifier() ) {
+        q->beginRemoveRows(QModelIndex(), row, row);
+        removeChildEntities( collectionId );
+        q->endRemoveRows();
+        --row;
+      }
+    }
+    ++row;
+  }
+}
+
 void EntityTreeModelPrivate::agentInstanceAdvancedStatusChanged( const QString&, \
const QVariantMap &status )  {
   const QString key = status.value( QLatin1String( "key" ) ).toString();
--- trunk/KDE/kdepimlibs/akonadi/entitytreemodel_p.h #1214216:1214217
@@ -36,6 +36,7 @@
 {
 class ItemFetchJob;
 class ChangeRecorder;
+class AgentInstance;
 }
 
 struct Node
@@ -126,6 +127,7 @@
   void runItemFetchJob( ItemFetchJob* itemFetchJob, const Collection &parent ) \
const;  void changeFetchState( const Collection &parent );
   void agentInstanceAdvancedStatusChanged( const QString&, const QVariantMap& );
+  void agentInstanceRemoved( const Akonadi::AgentInstance &instace );
 
   QHash<Collection::Id, Collection> m_collections;
   QHash<Entity::Id, Item> m_items;


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

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