Bug 258700 - cannot fully accept/decline a condionally accepted invitation.
Summary: cannot fully accept/decline a condionally accepted invitation.
Status: VERIFIED FIXED
Alias: None
Product: KOrganizer Mobile
Classification: Applications
Component: general (show other bugs)
Version: unspecified
Platform: Maemo 5 Linux
: NOR normal
Target Milestone: ---
Assignee: Ludwig Reiter
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2010-12-03 16:10 UTC by Ludwig Reiter
Modified: 2011-02-21 15:33 UTC (History)
1 user (show)

See Also:
Latest Commit:
Version Fixed In:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Ludwig Reiter 2010-12-03 16:10:58 UTC
Version:           unspecified (using Devel) 
OS:                Linux

version: 20101203.1203110-1maemo1

Reproducible: Always

Steps to Reproduce:
1. A sends a invitation to the mobile account B
2. B conditional accepts.
3. B switchs to the calendar.
4. B tries to full accept or decline the event.

Actual Results:  
I cannot find the accept/decline option in the edit event dialog.

Expected Results:  
Should be possible to full accept or decline the event in the edit dialog.
Comment 1 Tobias Koenig 2010-12-28 13:08:44 UTC
commit e3edc761de969fe511c5761d4ecd0d4e800bc62d
branch master
Author: Tobias Koenig <tokoe@kde.org>
Date:   Tue Dec 28 13:10:41 2010 +0100

    Make Invitation Bar available in mobile UI
    
    The accept/decline functionality seems to be broken in master
    right now though, have to cross-check with other developers...
    
    BUG: 258700

diff --git a/incidenceeditor-ng/eventortodomobile.ui b/incidenceeditor-ng/eventortodomobile.ui
index b30d49e..c5e5fb8 100644
--- a/incidenceeditor-ng/eventortodomobile.ui
+++ b/incidenceeditor-ng/eventortodomobile.ui
@@ -11,7 +11,56 @@
    </rect>
   </property>
   <layout class="QGridLayout" name="gridLayout">
-   <item row="0" column="0">
+   <item row="0" column="1" colspan="3">
+    <widget class="QWidget" name="mInvitationBar" native="true">
+     <layout class="QHBoxLayout" name="horizontalLayout_10">
+      <property name="margin">
+       <number>0</number>
+      </property>
+      <item>
+       <widget class="QLabel" name="label_7">
+        <property name="text">
+         <string comment="@info">You are Invited, what do you want to do?</string>
+        </property>
+       </widget>
+      </item>
+      <item>
+       <widget class="QPushButton" name="mAcceptInvitationButton">
+        <property name="toolTip">
+         <string comment="@info:tooltip">Accept the invitation</string>
+        </property>
+        <property name="whatsThis">
+         <string comment="@info:whatsthis">Click this button to accept the invitation.</string>
+        </property>
+        <property name="text">
+         <string comment="@action:button Accept an invitation">Accept</string>
+        </property>
+       </widget>
+      </item>
+      <item>
+       <widget class="QPushButton" name="mDeclineInvitationButton">
+        <property name="text">
+         <string comment="@action:button decline an invitation">Decline</string>
+        </property>
+       </widget>
+      </item>
+      <item>
+       <spacer name="horizontalSpacer_13">
+        <property name="orientation">
+         <enum>Qt::Horizontal</enum>
+        </property>
+        <property name="sizeHint" stdset="0">
+         <size>
+          <width>40</width>
+          <height>20</height>
+         </size>
+        </property>
+       </spacer>
+      </item>
+     </layout>
+    </widget>
+   </item>
+   <item row="1" column="0">
     <widget class="QLabel" name="label_3">
      <property name="sizePolicy">
       <sizepolicy hsizetype="Minimum" vsizetype="Preferred">
@@ -42,7 +91,7 @@
      </property>
     </widget>
    </item>
-   <item row="0" column="1" colspan="3">
+   <item row="1" column="1" colspan="3">
     <widget class="KLineEdit" name="mSummaryEdit">
      <property name="sizePolicy">
       <sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
@@ -64,7 +113,7 @@
      </property>
     </widget>
    </item>
-   <item row="1" column="0">
+   <item row="2" column="0">
     <widget class="QLabel" name="label_4">
      <property name="sizePolicy">
       <sizepolicy hsizetype="Minimum" vsizetype="Preferred">
@@ -83,7 +132,7 @@
      </property>
     </widget>
    </item>
-   <item row="1" column="1" colspan="3">
+   <item row="2" column="1" colspan="3">
     <widget class="KLineEdit" name="mLocationEdit">
      <property name="sizePolicy">
       <sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
@@ -105,7 +154,7 @@
      </property>
     </widget>
    </item>
-   <item row="3" column="0">
+   <item row="4" column="0">
     <widget class="QLabel" name="mStartLabel">
      <property name="sizePolicy">
       <sizepolicy hsizetype="Minimum" vsizetype="Preferred">
@@ -121,7 +170,7 @@
      </property>
     </widget>
    </item>
-   <item row="3" column="1">
+   <item row="4" column="1">
     <widget class="QCheckBox" name="mStartCheck">
      <property name="whatsThis">
       <string comment="@info:whatsthis">Sets the start date for this to-do</string>
@@ -131,7 +180,7 @@
      </property>
     </widget>
    </item>
-   <item row="4" column="1" colspan="2">
+   <item row="5" column="1" colspan="2">
     <widget class="IncidenceEditorNG::KTimeZoneComboBox" name="mTimeZoneComboStart">
      <property name="enabled">
       <bool>false</bool>
@@ -147,7 +196,7 @@
      </property>
     </widget>
    </item>
-   <item row="5" column="0">
+   <item row="6" column="0">
     <widget class="QLabel" name="mEndLabel">
      <property name="sizePolicy">
       <sizepolicy hsizetype="Minimum" vsizetype="Preferred">
@@ -163,7 +212,7 @@
      </property>
     </widget>
    </item>
-   <item row="5" column="1">
+   <item row="6" column="1">
     <widget class="QCheckBox" name="mEndCheck">
      <property name="whatsThis">
       <string comment="@info:whatsthis">Sets the due date for this to-do.</string>
@@ -173,7 +222,7 @@
      </property>
     </widget>
    </item>
-   <item row="6" column="1" colspan="2">
+   <item row="7" column="1" colspan="2">
     <widget class="IncidenceEditorNG::KTimeZoneComboBox" name="mTimeZoneComboEnd">
      <property name="enabled">
       <bool>false</bool>
@@ -189,7 +238,7 @@
      </property>
     </widget>
    </item>
-   <item row="7" column="1" colspan="3">
+   <item row="8" column="1" colspan="3">
     <widget class="QCheckBox" name="mWholeDayCheck">
      <property name="whatsThis">
       <string comment="@info:whatsthis">Set if this to-do's start and due dates have times associated with them.</string>
@@ -202,7 +251,7 @@
      </property>
     </widget>
    </item>
-   <item row="2" column="1" colspan="3">
+   <item row="3" column="1" colspan="3">
     <widget class="QWidget" name="mCompletionPriorityWidget" native="true">
      <property name="sizePolicy">
       <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
@@ -320,7 +369,7 @@
      </layout>
     </widget>
    </item>
-   <item row="9" column="0" colspan="4">
+   <item row="10" column="0" colspan="4">
     <spacer name="verticalSpacer">
      <property name="orientation">
       <enum>Qt::Vertical</enum>
@@ -333,7 +382,7 @@
      </property>
     </spacer>
    </item>
-   <item row="2" column="0">
+   <item row="3" column="0">
     <widget class="QLabel" name="mTaskLabel">
      <property name="text">
       <string comment="@label Task specific line in the dialog containing progress and priority">Progress:</string>
@@ -343,14 +392,14 @@
      </property>
     </widget>
    </item>
-   <item row="8" column="1" colspan="3">
+   <item row="9" column="1" colspan="3">
     <widget class="QCheckBox" name="mFreeBusyCheck">
      <property name="text">
       <string comment="@option:check">Blocks me for other events</string>
      </property>
     </widget>
    </item>
-   <item row="3" column="2">
+   <item row="4" column="2">
     <widget class="KPIM::KDateEdit" name="mStartDateEdit">
      <property name="sizePolicy">
       <sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
@@ -381,7 +430,7 @@
      </property>
     </widget>
    </item>
-   <item row="3" column="3">
+   <item row="4" column="3">
     <widget class="KPIM::KTimeEdit" name="mStartTimeEdit">
      <property name="enabled">
       <bool>false</bool>
@@ -412,7 +461,7 @@
      </property>
     </widget>
    </item>
-   <item row="5" column="2">
+   <item row="6" column="2">
     <widget class="KPIM::KDateEdit" name="mEndDateEdit">
      <property name="sizePolicy">
       <sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
@@ -440,7 +489,7 @@
      </property>
     </widget>
    </item>
-   <item row="5" column="3">
+   <item row="6" column="3">
     <widget class="KPIM::KTimeEdit" name="mEndTimeEdit">
      <property name="enabled">
       <bool>false</bool>
diff --git a/mobile/lib/calendar/incidenceview.cpp b/mobile/lib/calendar/incidenceview.cpp
index 7af9bb5..b5aa92d 100644
--- a/mobile/lib/calendar/incidenceview.cpp
+++ b/mobile/lib/calendar/incidenceview.cpp
@@ -21,6 +21,8 @@
 #include "calendarhelper.h"
 #include "clockhelper.h"
 
+#include "ui_eventortodomobile.h"
+
 #include <calendarsupport/utils.h>
 #include <calendarsupport/kcalprefs.h>
 
@@ -41,6 +43,7 @@
 #include <qdeclarativeengine.h>
 #include <qdeclarativecontext.h>
 
+#include <incidenceeditor-ng/editorconfig.h>
 #include <incidenceeditor-ng/incidencealarm.h>
 #include <incidenceeditor-ng/incidenceattachment.h>
 #include <incidenceeditor-ng/incidenceattendee.h>
@@ -67,9 +70,11 @@ IncidenceView::IncidenceView( QWidget* parent )
   , mEditor( new CombinedIncidenceEditor( parent ) )
   , mEditorDateTime( 0 )
   , mIncidenceMore( 0 )
+  , mIncidenceGeneral( 0 )
   , mDateWidget( 0 )
   , mTimeWidget( 0 )
   , mInvitationDispatcher( 0 )
+  , mIncidenceAttendee( 0 )
 {
   setAttribute(Qt::WA_DeleteOnClose);
   QDeclarativeContext *context = engine()->rootContext();
@@ -128,6 +133,8 @@ void IncidenceView::setCollectionCombo( Akonadi::CollectionComboBox *combo )
 
 void IncidenceView::setGeneralEditor( MobileIncidenceGeneral *editorWidget )
 {
+  mIncidenceGeneral = editorWidget;
+
   Q_ASSERT( mItem.hasPayload<Incidence::Ptr>() );
   Incidence::Ptr incidencePtr = CalendarSupport::incidence( mItem );
 
@@ -147,8 +154,31 @@ void IncidenceView::setGeneralEditor( MobileIncidenceGeneral *editorWidget )
   mEditor->combine( editor );
   mEditor->load( incidencePtr );
 
-  if ( mIncidenceMore != 0 ) // IncidenceMore was set *before* general.
+  const QStringList allEmails = IncidenceEditorNG::EditorConfig::instance()->allEmails();
+  const KCalCore::Attendee::Ptr me = incidencePtr->attendeeByMails( allEmails );
+
+  if ( incidencePtr->attendeeCount() > 1 &&
+       me && ( me->status() == KCalCore::Attendee::NeedsAction ||
+               me->status() == KCalCore::Attendee::Tentative ||
+               me->status() == KCalCore::Attendee::InProcess ) ) {
+    editorWidget->mUi->mInvitationBar->show();
+  } else {
+    editorWidget->mUi->mInvitationBar->hide();
+  }
+
+  if ( mIncidenceMore != 0 ) { // IncidenceMore was set *before* general.
     initIncidenceMore();
+
+    connect( editorWidget->mUi->mAcceptInvitationButton, SIGNAL( clicked() ),
+             mIncidenceAttendee, SLOT( acceptForMe() ), Qt::UniqueConnection );
+    connect( editorWidget->mUi->mDeclineInvitationButton, SIGNAL( clicked() ),
+             mIncidenceAttendee, SLOT( declineForMe() ), Qt::UniqueConnection  );
+  }
+
+  connect( editorWidget->mUi->mAcceptInvitationButton, SIGNAL( clicked() ),
+           editorWidget->mUi->mInvitationBar, SLOT( hide() ) );
+  connect( editorWidget->mUi->mDeclineInvitationButton, SIGNAL( clicked() ),
+           editorWidget->mUi->mInvitationBar, SLOT( hide() ) );
 }
 
 void IncidenceView::showCalendar( QObject *obj )
@@ -205,8 +235,8 @@ void IncidenceView::initIncidenceMore()
   editor = new IncidenceEditorNG::IncidenceDescription( mIncidenceMore->mUi );
   mEditor->combine( editor );
 
-  editor = new IncidenceEditorNG::IncidenceAttendee( 0, mEditorDateTime, mIncidenceMore->mUi );
-  mEditor->combine( editor );
+  mIncidenceAttendee = new IncidenceEditorNG::IncidenceAttendee( 0, mEditorDateTime, mIncidenceMore->mUi );
+  mEditor->combine( mIncidenceAttendee );
 
   editor = new IncidenceEditorNG::IncidenceAlarm( mEditorDateTime, mIncidenceMore->mUi );
   mEditor->combine( editor );
@@ -226,8 +256,16 @@ void IncidenceView::initIncidenceMore()
 void IncidenceView::setMoreEditor( MobileIncidenceMore *editorWidget )
 {
   mIncidenceMore = editorWidget;
+
   if ( mEditorDateTime != 0 ) // IncidenceGeneral was not set yet.
     initIncidenceMore();
+
+  if ( mIncidenceGeneral ) {
+    connect( mIncidenceGeneral->mUi->mAcceptInvitationButton, SIGNAL( clicked() ),
+             mIncidenceAttendee, SLOT( acceptForMe() ), Qt::UniqueConnection );
+    connect( mIncidenceGeneral->mUi->mDeclineInvitationButton, SIGNAL( clicked() ),
+             mIncidenceAttendee, SLOT( declineForMe() ), Qt::UniqueConnection  );
+  }
 }
 
 void IncidenceView::setDefaultCollection( const Akonadi::Collection &collection )
diff --git a/mobile/lib/calendar/incidenceview.h b/mobile/lib/calendar/incidenceview.h
index 85836fb..eb325e1 100644
--- a/mobile/lib/calendar/incidenceview.h
+++ b/mobile/lib/calendar/incidenceview.h
@@ -38,6 +38,7 @@ class CollectionComboBox;
 }
 
 namespace IncidenceEditorNG {
+class IncidenceAttendee;
 class IncidenceDateTime;
 class InvitationDispatcher;
 }
@@ -107,11 +108,13 @@ class IncidenceView : public KDeclarativeFullScreenView, public IncidenceEditorN
 
     /// We need this because we can't rely on the order in which those two are added.
     MobileIncidenceMore *mIncidenceMore;
+    MobileIncidenceGeneral *mIncidenceGeneral;
 
     KPIM::KDateEdit *mDateWidget;
     KPIM::KTimeEdit *mTimeWidget;
 
     IncidenceEditorNG::InvitationDispatcher *mInvitationDispatcher;
+    IncidenceEditorNG::IncidenceAttendee *mIncidenceAttendee;
 };
 
 #endif // INCIDENCEVIEW_H
Comment 2 Ludwig Reiter 2011-01-20 14:19:45 UTC
Calendar Touch (Windows CE) 2011-01-16
Test of the description:
If I try to click on "Accept cond." in the invitation, nothing happens.

Reopened.
Comment 3 Andre Heinecke 2011-01-21 12:07:51 UTC
This works, you have to click exactly though otherwise the click is taken as a scroll action and nothing happens (except scrolling).
Comment 4 Bernhard E. Reiter 2011-01-21 14:48:33 UTC
There are buttons in the event editor of a conditionally accepted event, 
but they do not work as expected. They really change you to the organizer
and do not send the right update email to the organizer.
Comment 5 Ludwig Reiter 2011-02-21 15:33:32 UTC
Kontat Touch Windows CE 20110218 22:55

Test of the description passed.
Entering the update mail, changes the status and not the organizer.
 Verified