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