From 90fb05e4f85dccfda4a6fb0b970f6f5c9f4b67d1 Mon Sep 17 00:00:00 2001 From: tpearson Date: Mon, 23 Aug 2010 08:21:56 +0000 Subject: Fixed recurring meeting invitations to be far more clear git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/kdepim@1166993 283d02a7-25f6-0310-bc7c-ecb5cbfe19da --- libkcal/incidenceformatter.cpp | 118 ++++++++++++++++++++++++++++++++++++++++- 1 file changed, 116 insertions(+), 2 deletions(-) (limited to 'libkcal/incidenceformatter.cpp') diff --git a/libkcal/incidenceformatter.cpp b/libkcal/incidenceformatter.cpp index 877d8860d..618611712 100644 --- a/libkcal/incidenceformatter.cpp +++ b/libkcal/incidenceformatter.cpp @@ -679,10 +679,20 @@ static TQString invitationDetailsEvent( Event* event ) html += invitationRow( i18n( "Where:" ), sLocation ); // Meeting Start Time Row - html += invitationRow( i18n( "Start Time:" ), eventStartTimeStr( event ) ); + if (event->doesRecur() == true) { + html += invitationRow( i18n( "First Start Time:" ), eventStartTimeStr( event ) ); + } + else { + html += invitationRow( i18n( "Start Time:" ), eventStartTimeStr( event ) ); + } // Meeting End Time Row - html += invitationRow( i18n( "End Time:" ), eventEndTimeStr( event ) ); + if (event->doesRecur() == true) { + html += invitationRow( i18n( "First End Time:" ), eventEndTimeStr( event ) ); + } + else { + html += invitationRow( i18n( "End Time:" ), eventEndTimeStr( event ) ); + } // Meeting Duration Row if ( !event->doesFloat() && event->hasEndDate() ) { @@ -698,6 +708,55 @@ static TQString invitationDetailsEvent( Event* event ) } html += invitationRow( i18n( "Duration:" ), tmp ); + + if ( event->doesRecur() ) { + TQString recurrence[]= {i18n("no recurrence", "None"), + i18n("Minutely"), i18n("Hourly"), i18n("Daily"), + i18n("Weekly"), i18n("Monthly Same Day"), i18n("Monthly Same Position"), + i18n("Yearly"), i18n("Yearly"), i18n("Yearly")}; + + Recurrence *recur = event->recurrence(); + if (event->doesRecur() == true) { + html += invitationRow( " ", " " ); + html += invitationRow( i18n( "Recurs:" ), recurrence[ recur->recurrenceType() ] ); + html += invitationRow( i18n("Frequency:"), i18n("%1").arg(event->recurrence()->frequency()) ); + + if ( recur->duration() > 0 ) { + if ( recur->duration() == 1 ) + html += invitationRow( i18n("Repeats:"), i18n("Once") ); + else + html += invitationRow( i18n("Repeats:"), i18n("%1 times").arg(recur->duration())); + } else { + if ( recur->duration() != -1 ) { + TQString endstr; + if ( event->doesFloat() ) { + endstr = KGlobal::locale()->formatDate( recur->endDate() ); + } else { + endstr = KGlobal::locale()->formatDateTime( recur->endDateTime() ); + } + html += invitationRow( i18n("Repeats until:"), endstr ); + } else { + html += invitationRow( i18n("Repeats:"), i18n("Forever") ); + } + } + + DateList exceptions = recur->exDates(); + if (exceptions.isEmpty() == false) { + bool isFirstExRow; + isFirstExRow = true; + DateList::ConstIterator ex_iter; + for ( ex_iter = exceptions.begin(); ex_iter != exceptions.end(); ++ex_iter ) { + if (isFirstExRow == true) { + isFirstExRow = false; + html += invitationRow( i18n("Cancelled on:"), KGlobal::locale()->formatDate(* ex_iter ) ); + } + else { + html += invitationRow(" ", KGlobal::locale()->formatDate(* ex_iter ) ); + } + } + } + } + } } html += "\n"; @@ -1157,6 +1216,52 @@ class IncidenceFormatter::IncidenceCompareVisitor : if ( oldEvent->dtEnd() != newEvent->dtEnd() || oldEvent->doesFloat() != newEvent->doesFloat() ) mChanges += i18n( "The end of the meeting has been changed from %1 to %2" ) .arg( eventEndTimeStr( oldEvent ) ).arg( eventEndTimeStr( newEvent ) ); + if ( newEvent->doesRecur() ) { + TQString recurrence[]= {i18n("no recurrence", "None"), + i18n("Minutely"), i18n("Hourly"), i18n("Daily"), + i18n("Weekly"), i18n("Monthly Same Day"), i18n("Monthly Same Position"), + i18n("Yearly"), i18n("Yearly"), i18n("Yearly")}; + + Recurrence *recur = newEvent->recurrence(); + if (oldEvent->doesRecur() == false) { + mChanges += i18n( "The meeting now recurs %1" ).arg( recurrence[ recur->recurrenceType() ] ); + DateList exceptions = recur->exDates(); + if (exceptions.isEmpty() == false) { + mChanges += i18n("This recurring meeting has been cancelled on the following days:
"); + DateList::ConstIterator ex_iter; + for ( ex_iter = exceptions.begin(); ex_iter != exceptions.end(); ++ex_iter ) { + mChanges += i18n("  %1
").arg( KGlobal::locale()->formatDate(* ex_iter ) ); + } + } + } + else { + Recurrence *oldRecur = oldEvent->recurrence(); + DateList exceptions = recur->exDates(); + DateList oldExceptions = oldRecur->exDates(); + bool existsInOldEvent; + bool atLeastOneModified; + if (exceptions.isEmpty() == false) { + atLeastOneModified = false; + DateList::ConstIterator ex_iter; + DateList::ConstIterator ex_iter_old; + for ( ex_iter = exceptions.begin(); ex_iter != exceptions.end(); ++ex_iter ) { + existsInOldEvent = false; + for ( ex_iter_old = oldExceptions.begin(); ex_iter_old != oldExceptions.end(); ++ex_iter_old ) { + if ( KGlobal::locale()->formatDate(* ex_iter ) == KGlobal::locale()->formatDate(* ex_iter_old ) ) { + existsInOldEvent = true; + if (atLeastOneModified == false) { + mChanges += i18n("This recurring meeting has been cancelled on the following days:
"); + } + atLeastOneModified = true; + } + } + if (existsInOldEvent == false ) { + mChanges += i18n("  %1
").arg( KGlobal::locale()->formatDate(* ex_iter ) ); + } + } + } + } + } } void compareIncidences( Incidence *newInc, Incidence *oldInc ) @@ -2101,6 +2206,15 @@ bool IncidenceFormatter::MailBodyVisitor::visit( Event *event ) mResult += i18n("Repeats forever\n"); } } + + DateList exceptions = recur->exDates(); + if (exceptions.isEmpty() == false) { + mResult += i18n("This recurring meeting has been cancelled on the following days:\n"); + DateList::ConstIterator ex_iter; + for ( ex_iter = exceptions.begin(); ex_iter != exceptions.end(); ++ex_iter ) { + mResult += i18n(" %1\n").arg( KGlobal::locale()->formatDate(* ex_iter ) ); + } + } } TQString details = event->description(); if ( !details.isEmpty() ) { -- cgit v1.2.1