Branch 'dev/invitations' - korganizer/calendarview.cpp korganizer/calendarview.h

Sandro Knauß knauss at kolabsys.com
Fri Aug 29 12:21:20 CEST 2014


 korganizer/calendarview.cpp |   87 +++++++++++++++++++++++++++++++++++---------
 korganizer/calendarview.h   |    8 ++++
 2 files changed, 78 insertions(+), 17 deletions(-)

New commits:
commit 0de16231481c75d4693b5dd41ad98c976b4e8de1
Author: Sandro Knauß <knauss at kolabsys.com>
Date:   Fri Aug 29 12:21:00 2014 +0200

    modify searchCollections, when identities changed.

diff --git a/korganizer/calendarview.cpp b/korganizer/calendarview.cpp
index 5cd9849..6149fb1 100644
--- a/korganizer/calendarview.cpp
+++ b/korganizer/calendarview.cpp
@@ -81,7 +81,10 @@
 #include <Akonadi/AttributeFactory>
 #include <Akonadi/Calendar/TodoPurger>
 #include <Akonadi/SearchCreateJob>
+#include <Akonadi/CollectionModifyJob>
 #include <Akonadi/SearchQuery>
+#include <akonadi/persistentsearchattribute.h>
+#include <akonadi/entitydisplayattribute.h>
 
 #include <KCalCore/Event>
 #include <KCalCore/Todo>
@@ -95,7 +98,9 @@
 #include <KCalUtils/Stringify>
 #include <KCalUtils/DndFactory>
 
+#include <KPIMIdentities/IdentityManager>
 
+#include <klocalizedstring.h>
 #include <KFileDialog>
 #include <KNotification>
 #include <KRun>
@@ -109,7 +114,8 @@
 
 CalendarView::CalendarView( QWidget *parent ) : CalendarViewBase( parent ),
                                                 mCheckableProxyModel( 0 ),
-                                                mETMCollectionView( 0 )
+                                                mETMCollectionView( 0 ),
+                                                mIdentityManager(/*ro=*/ true)
 {
   Akonadi::Control::widgetNeedsAkonadi( this );
   mChanger = new Akonadi::IncidenceChanger( new IncidenceEditorNG::IndividualMailComponentFactory( this ), this );
@@ -268,6 +274,10 @@ CalendarView::CalendarView( QWidget *parent ) : CalendarViewBase( parent ),
   connect( this, SIGNAL(incidenceSelected(Akonadi::Item,QDate)),
            mEventViewer, SLOT(setIncidence(Akonadi::Item,QDate)) );
 
+   // IdentityManager
+   connect(&mIdentityManager, SIGNAL(changed()),
+            SLOT(onIdentitiesChanged()));
+
   //TODO: do a pretty Summary,
   QString s;
   s = i18n( "<p><em>No Item Selected</em></p>"
@@ -330,43 +340,80 @@ Akonadi::ETMCalendar::Ptr CalendarView::calendar() const
 
 void CalendarView::onCheckVirtualCollections(const Akonadi::Collection::List &collections)
 {
-    bool bCreateOpenIncidence = true;
-    bool bCreateDeclinedIncidence = true;
     foreach(Akonadi::Collection col,  collections) {
         kDebug() << "found collection:" << col.name();
         if (col.name() == QLatin1String("OpenInvitations")) {
-            bCreateOpenIncidence = false;
+            mOpenInvitationCollection = col;
         } else if (col.name() == QLatin1String("DeclinedInvitations")) {
-            bCreateDeclinedIncidence = false;
+            mDeclineCollection = col;
         }
     }
-    if (bCreateOpenIncidence) {
+    onIdentitiesChanged();
+}
+
+void CalendarView::onIdentitiesChanged()
+{
+    Akonadi::SearchQuery query;
+    foreach (const QString email, mIdentityManager.allEmails()) {
+        query.addTerm(Akonadi::IncidenceSearchTerm(Akonadi::IncidenceSearchTerm::PartStatus, QString(email+ QString::number(KCalCore::Attendee::NeedsAction))));
+    }
+    if (!mOpenInvitationCollection.isValid()) {
         const QString name = QLatin1String("OpenInvitations");
-        Akonadi::SearchQuery query;
-        query.addTerm(Akonadi::IncidenceSearchTerm(Akonadi::IncidenceSearchTerm::PartStatus, KCalCore::Attendee::NeedsAction, Akonadi::SearchTerm::CondEqual));
         Akonadi::SearchCreateJob *job = new Akonadi::SearchCreateJob(name, query);
         job->setSearchMimeTypes(QStringList() << KCalCore::Event::eventMimeType()
-                                              << KCalCore::Todo::todoMimeType()
-                                              << KCalCore::Journal::journalMimeType());
+            << KCalCore::Todo::todoMimeType()
+            << KCalCore::Journal::journalMimeType());
         connect(job, SIGNAL(result(KJob*)), SLOT(createSearchJobFinished(KJob*)));
 
         kDebug() <<  "We have to create a OpenIncidence virtual Collection";
+    } else {
+        Akonadi::PersistentSearchAttribute *attribute = mOpenInvitationCollection.attribute<Akonadi::PersistentSearchAttribute>( Akonadi::Entity::AddIfMissing );
+        Akonadi::EntityDisplayAttribute *displayname  = mDeclineCollection.attribute<Akonadi::EntityDisplayAttribute >( Akonadi::Entity::AddIfMissing );
+        attribute->setQueryString( QString::fromLatin1(query.toJSON()) );
+        displayname->setDisplayName(i18nc("A collection of all open invidation", "open invitations"));
+        Akonadi::CollectionModifyJob *job = new Akonadi::CollectionModifyJob( mOpenInvitationCollection, this );
+        connect( job, SIGNAL(result(KJob*)), this, SLOT(modifyResult(KJob*)) );
+        kDebug() <<  "updating OpenIncidence (" << mOpenInvitationCollection.id() << ") virtual Collection";
+        kDebug() <<  query.toJSON();
     }
-    if (bCreateDeclinedIncidence) {
-        const QString name = QLatin1String("DeclinedInvitations");
-        Akonadi::SearchQuery query;
 
-        query.addTerm(Akonadi::IncidenceSearchTerm (Akonadi::IncidenceSearchTerm::PartStatus, KCalCore::Attendee::Declined, Akonadi::SearchTerm::CondEqual));
+    query = Akonadi::SearchQuery();
+    foreach (const QString email, mIdentityManager.allEmails()) {
+        query.addTerm(Akonadi::IncidenceSearchTerm(Akonadi::IncidenceSearchTerm::PartStatus, QString(email+ QString::number(KCalCore::Attendee::Declined))));
+    }
+    if (!mDeclineCollection.isValid()) {
+        const QString name = QLatin1String("DeclinedInvitations");
         Akonadi::SearchCreateJob *job = new Akonadi::SearchCreateJob(name, query);
         job->setSearchMimeTypes(QStringList() << KCalCore::Event::eventMimeType()
-                                              << KCalCore::Todo::todoMimeType()
-                                              << KCalCore::Journal::journalMimeType());
+            << KCalCore::Todo::todoMimeType()
+            << KCalCore::Journal::journalMimeType());
         connect(job, SIGNAL(result(KJob*)), SLOT(createSearchJobFinished(KJob*)));
 
         kDebug() <<  "We have to create a DeclinedIncidence virtual Collection";
+    } else {
+        Akonadi::PersistentSearchAttribute *persistentsearch = mDeclineCollection.attribute<Akonadi::PersistentSearchAttribute >( Akonadi::Entity::AddIfMissing );
+        Akonadi::EntityDisplayAttribute *displayname  = mDeclineCollection.attribute<Akonadi::EntityDisplayAttribute >( Akonadi::Entity::AddIfMissing );
+
+        persistentsearch->setQueryString( QString::fromLatin1(query.toJSON()) );
+        displayname->setDisplayName(i18nc("A collection of all declined invidation", "decliend invitations"));
+        Akonadi::CollectionModifyJob *job = new Akonadi::CollectionModifyJob( mDeclineCollection, this );
+        connect( job, SIGNAL(result(KJob*)), this, SLOT(modifyResult(KJob*)) );
+        kDebug() <<  "updating DeclinedIncidence(" << mDeclineCollection.id() << ") virtual Collection";
+        kDebug() <<  query.toJSON();
+    }
+}
+
+
+void CalendarView::modifyResult(KJob* job)
+{
+    if (job->error()) {
+        kDebug() << "Error occurred " <<  job->errorString();
+        return;
     }
+    kDebug() << "modify was successfull";
 }
 
+
 void CalendarView::createSearchJobFinished( KJob *job )
 {
     Akonadi::SearchCreateJob *createJob = qobject_cast<Akonadi::SearchCreateJob *>(job);
@@ -374,8 +421,14 @@ void CalendarView::createSearchJobFinished( KJob *job )
     if (job->error()) {
         qDebug() << "Error occurred " <<  searchCollection.name();
         return;
-      }
+    }
     qDebug() << "Created search folder successfully " <<  searchCollection.name();
+
+    if (searchCollection.name() ==  QLatin1String("OpenInvitations")) {
+        mOpenInvitationCollection = searchCollection;
+    } else if (searchCollection.name() ==  QLatin1String("DeclinedInvitations")) {
+        mDeclineCollection = searchCollection;
+    }
 }
 
 QDate CalendarView::activeDate( bool fallbackToToday )
diff --git a/korganizer/calendarview.h b/korganizer/calendarview.h
index 4e99c7b..b77beb5 100644
--- a/korganizer/calendarview.h
+++ b/korganizer/calendarview.h
@@ -34,6 +34,8 @@
 #include <KCalCore/Visitor>
 #include <KCalCore/ScheduleMessage>
 
+#include <KPIMIdentities/IdentityManager>
+
 #include <akonadi/calendar/itiphandler.h>
 
 #include <calendarsupport/messagewidget.h>
@@ -658,6 +660,8 @@ class KORGANIZERPRIVATE_EXPORT CalendarView : public KOrg::CalendarViewBase,
 
     void onCheckVirtualCollections(const Akonadi::Collection::List &collections);
     void createSearchJobFinished(KJob *job);
+    void modifyResult(KJob* job);
+    void onIdentitiesChanged();
   private:
     void init();
     Akonadi::Collection selectedCollection() const;
@@ -730,6 +734,10 @@ class KORGANIZERPRIVATE_EXPORT CalendarView : public KOrg::CalendarViewBase,
     Akonadi::CalendarClipboard *mCalendarClipboard;
     KOCheckableProxyModel *mCheckableProxyModel;
     AkonadiCollectionView *mETMCollectionView;
+
+    KPIMIdentities::IdentityManager mIdentityManager;
+    Akonadi::Collection mOpenInvitationCollection;
+    Akonadi::Collection mDeclineCollection;
 };
 
 #endif




More information about the commits mailing list