summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWulf Krueger <philantrop@gentoo.org>2007-10-04 20:36:46 +0000
committerWulf Krueger <philantrop@gentoo.org>2007-10-04 20:36:46 +0000
commit58fe469509fb0717ce26ea60c8071a5570a2c79f (patch)
tree1e20afb8b6243901555d624c4dd53e85fc6d640b /kde-base/kdepim
parentfix inherit wrt to bug #194616 (diff)
downloadgentoo-2-58fe469509fb0717ce26ea60c8071a5570a2c79f.tar.gz
gentoo-2-58fe469509fb0717ce26ea60c8071a5570a2c79f.tar.bz2
gentoo-2-58fe469509fb0717ce26ea60c8071a5570a2c79f.zip
Added an upstream patch for libkcal to fix problems with recurring events. Fixes bug 194371.
(Portage version: 2.1.3.11)
Diffstat (limited to 'kde-base/kdepim')
-rw-r--r--kde-base/kdepim/ChangeLog9
-rw-r--r--kde-base/kdepim/files/digest-kdepim-3.5.7-r56
-rw-r--r--kde-base/kdepim/files/libkcal-3.5.7-recurring_194371.patch256
-rw-r--r--kde-base/kdepim/kdepim-3.5.7-r5.ebuild73
4 files changed, 343 insertions, 1 deletions
diff --git a/kde-base/kdepim/ChangeLog b/kde-base/kdepim/ChangeLog
index 2d2cb58c05c3..81e62e52014d 100644
--- a/kde-base/kdepim/ChangeLog
+++ b/kde-base/kdepim/ChangeLog
@@ -1,6 +1,13 @@
# ChangeLog for kde-base/kdepim
# Copyright 2002-2007 Gentoo Foundation; Distributed under the GPL v2
-# $Header: /var/cvsroot/gentoo-x86/kde-base/kdepim/ChangeLog,v 1.290 2007/09/25 05:21:59 philantrop Exp $
+# $Header: /var/cvsroot/gentoo-x86/kde-base/kdepim/ChangeLog,v 1.291 2007/10/04 20:36:46 philantrop Exp $
+
+*kdepim-3.5.7-r5 (04 Oct 2007)
+
+ 04 Oct 2007; Wulf C. Krueger <philantrop@gentoo.org>
+ +files/libkcal-3.5.7-recurring_194371.patch, +kdepim-3.5.7-r5.ebuild:
+ Added an upstream patch for libkcal to fix problems with recurring events.
+ Fixes bug 194371.
25 Sep 2007; Wulf C. Krueger <philantrop@gentoo.org>
kdepim-3.5.7-r4.ebuild:
diff --git a/kde-base/kdepim/files/digest-kdepim-3.5.7-r5 b/kde-base/kdepim/files/digest-kdepim-3.5.7-r5
new file mode 100644
index 000000000000..c779ca922394
--- /dev/null
+++ b/kde-base/kdepim/files/digest-kdepim-3.5.7-r5
@@ -0,0 +1,6 @@
+MD5 bf6b46337388fa6a93c9084d3d2c4509 kdepim-3.5-patchset-04.tar.bz2 133990
+RMD160 9d9fd1e7b04512f1f28bba78d5eeadfc3e3280ba kdepim-3.5-patchset-04.tar.bz2 133990
+SHA256 8b1968a7bef8ab2efdb2d87e96943ce636775b76365bc1bc99e1e377f9abfc61 kdepim-3.5-patchset-04.tar.bz2 133990
+MD5 8571db6dcf4168614c96bb72c493f931 kdepim-3.5.7.tar.bz2 14166061
+RMD160 14c05d4620abf1eb5421ad434dc63f037069e930 kdepim-3.5.7.tar.bz2 14166061
+SHA256 9d981d372f1822662e102b6f84f046e4df771641fc4d041aae81b8fafd47b32e kdepim-3.5.7.tar.bz2 14166061
diff --git a/kde-base/kdepim/files/libkcal-3.5.7-recurring_194371.patch b/kde-base/kdepim/files/libkcal-3.5.7-recurring_194371.patch
new file mode 100644
index 000000000000..990b09408d89
--- /dev/null
+++ b/kde-base/kdepim/files/libkcal-3.5.7-recurring_194371.patch
@@ -0,0 +1,256 @@
+--- branches/KDE/3.5/kdepim/libkcal/calendarlocal.cpp 2007/10/01 17:04:23 719674
++++ branches/KDE/3.5/kdepim/libkcal/calendarlocal.cpp 2007/10/01 17:04:57 719675
+@@ -401,62 +401,75 @@
+ bool inclusive )
+ {
+ Event::List eventList;
++ QDate yesterStart = start.addDays(-1);
+
+ // Get non-recurring events
+ EventDictIterator it( mEvents );
+ for( ; it.current(); ++it ) {
+ Event *event = *it;
+- if ( event->doesRecur() ) {
+- QDate rStart = event->dtStart().date();
+- bool found = false;
+- if ( inclusive ) {
+- if ( rStart >= start && rStart <= end ) {
+- // Start date of event is in range. Now check for end date.
+- // if duration is negative, event recurs forever, so do not include it.
+- if ( event->recurrence()->duration() == 0 ) { // End date set
+- QDate rEnd = event->recurrence()->endDate();
+- if ( rEnd >= start && rEnd <= end ) { // End date within range
+- found = true;
+- }
+- } else if ( event->recurrence()->duration() > 0 ) { // Duration set
+- // TODO: Calculate end date from duration. Should be done in Event
+- // For now exclude all events with a duration.
++
++ QDate rStart = event->dtStart().date();
++ if (end < rStart) {
++ kdDebug(5800) << "Skipping event starting after TOI" << endl;
++ continue;
++ }
++ if ( inclusive && rStart < start) {
++ kdDebug(5800) << "Skipping event starting before TOI while inclusive" << endl;
++ continue;
++ }
++
++ if ( ! event->doesRecur() ) { // non-recurring events
++ QDate rEnd = event->dtEnd().date();
++ if (rEnd < start) {
++ kdDebug(5800) << "Skipping event ending before TOI" << endl;
++ continue;
++ }
++ if ( inclusive && end < rEnd ) {
++ kdDebug(5800) << "Skipping event ending after TOI while inclusive" << endl;
++ continue;
++ }
++ } else { // recurring events
++ switch ( event->recurrence()->duration() ) {
++ case -1: // infinite
++ if ( inclusive ) {
++ kdDebug(5800) << "Skipping infinite event because inclusive" << endl;
++ continue;
+ }
+- }
+- } else {
+- if ( rStart <= end ) { // Start date not after range
+- if ( rStart >= start ) { // Start date within range
+- found = true;
+- } else if ( event->recurrence()->duration() == -1 ) { // Recurs forever
+- found = true;
+- } else if ( event->recurrence()->duration() == 0 ) { // End date set
+- QDate rEnd = event->recurrence()->endDate();
+- if ( rEnd >= start && rEnd <= end ) { // End date within range
+- found = true;
+- }
+- } else { // Duration set
+- // TODO: Calculate end date from duration. Should be done in Event
+- // For now include all events with a duration.
+- found = true;
++ break;
++ case 0: // end date given
++ default: // count given
++ QDate rEnd = event->recurrence()->endDate();
++ if ( ! rEnd.isValid() ) {
++ kdDebug(5800) << "Skipping recurring event without occurences" << endl;
++ continue;
+ }
+- }
+- }
++ if ( rEnd < start ) {
++ kdDebug(5800) << "Skipping recurring event ending before TOI" << endl;
++ continue;
++ }
++ if ( inclusive && end < rEnd ) {
++ kdDebug(5800) << "Skipping recurring event ending after TOI while inclusive" << endl;
++ continue;
++ }
++ /* FIXME: too much conversion between QDate and QDateTime makes this useless:
++ * freebusy(end=QDateTime(day, "00:00:00")) ->
++ * rawEvents(end=QDate(day)) ->
++ * durationTo(QDateTime(day, "23:59:59"))
++ * so events repeating at the end day match and are included.
++ */
++#if 0
++ int durationBeforeStart = event->recurrence()->durationTo(yesterStart);
++ int durationUntilEnd = event->recurrence()->durationTo(end);
++ if (durationBeforeStart == durationUntilEnd) {
++ kdDebug(5800) << "Skipping recurring event without occurences in TOI" << endl;
++ continue;
++ }
++#endif
++ break;
++ } // switch(duration)
++ } // if(doesRecur)
+
+- if ( found ) eventList.append( event );
+- } else {
+- QDate s = event->dtStart().date();
+- QDate e = event->dtEnd().date();
+-
+- if ( inclusive ) {
+- if ( s >= start && e <= end ) {
+- eventList.append( event );
+- }
+- } else {
+- if ( s <= end && e >= start ) {
+- eventList.append( event );
+- }
+- }
+- }
++ eventList.append( event );
+ }
+
+ return eventList;
+--- branches/KDE/3.5/kdepim/libkcal/recurrencerule.cpp 2007/10/01 17:04:23 719674
++++ branches/KDE/3.5/kdepim/libkcal/recurrencerule.cpp 2007/10/01 17:04:57 719675
+@@ -558,28 +558,22 @@
+ setDirty();
+ }
+
+-
+ QDateTime RecurrenceRule::endDt( bool *result ) const
+ {
+ if ( result ) *result = false;
+ if ( mPeriod == rNone ) return QDateTime();
+- if ( mDuration < 0 ) {
+- if ( result ) result = false;
+- return QDateTime();
+- } else if ( mDuration == 0 ) {
++ if ( mDuration < 0 ) return QDateTime();
++ if ( mDuration == 0 ) {
++ if ( result ) *result = true;
+ return mDateEnd;
+- } else {
+- // N occurrences. Check if we have a full cache. If so, return the cached end date.
+- if ( ! mCached ) {
+- // If not enough occurrences can be found (i.e. inconsistent constraints)
+- if ( !buildCache() ) {
+- if ( result ) result = false;
+- return QDateTime();
+- }
+- }
+- return mCachedDateEnd;
+ }
+- return QDateTime();
++ // N occurrences. Check if we have a full cache. If so, return the cached end date.
++ if ( ! mCached ) {
++ // If not enough occurrences can be found (i.e. inconsistent constraints)
++ if ( !buildCache() ) return QDateTime();
++ }
++ if ( result ) *result = true;
++ return mCachedDateEnd;
+ }
+
+ void RecurrenceRule::setEndDt( const QDateTime &dateTime )
+--- branches/KDE/3.5/kdepim/libkcal/tests/Makefile.am 2007/10/01 17:04:23 719674
++++ branches/KDE/3.5/kdepim/libkcal/tests/Makefile.am 2007/10/01 17:04:57 719675
+@@ -4,6 +4,7 @@
+ check_PROGRAMS = testtostring \
+ testincidence \
+ testcalendar \
++ fbrecurring \
+ readandwrite \
+ testresource \
+ testfields \
+@@ -28,6 +29,10 @@
+ testtostring_LDFLAGS = $(all_libraries) $(KDE_RPATH)
+ testtostring_LDADD = ../libkcal.la
+
++fbrecurring_SOURCES = fbrecurring.cpp
++fbrecurring_LDFLAGS = $(all_libraries) $(KDE_RPATH)
++fbrecurring_LDADD = ../libkcal.la
++
+ readandwrite_SOURCES = readandwrite.cpp
+ readandwrite_LDFLAGS = $(all_libraries) $(KDE_RPATH)
+ readandwrite_LDADD = ../libkcal.la
+@@ -78,10 +83,10 @@
+ perl $(srcdir)/runtestcase.pl readandwrite "ical" $$i; \
+ done; \
+ for i in `find $(srcdir)/data/vCalendar/ -name "*.ics"`; do \
+- perl $(srcdir)/runtestcase.pl testvcalexport "vcal" $$i; \
++ perl $(srcdir)/runtestcase.pl testvcalexport "vcal" $$i; \
+ done;
+ for i in `find $(srcdir)/data/vCalendar/ -name "*.vcs"`; do \
+- perl $(srcdir)/runtestcase.pl readandwrite "ical" $$i; \
++ perl $(srcdir)/runtestcase.pl readandwrite "ical" $$i; \
+ done;
+ [ ! -e FAILED ]
+
+--- branches/KDE/3.5/kdepim/libkcal/tests.orig/fbrecurring.cpp 2007-08-31 20:52:15.220373203 +0200
++++ branches/KDE/3.5/kdepim/libkcal/tests/fbrecurring.cpp 2007-10-04 19:53:52.000000000 +0200
+@@ -0,0 +1,52 @@
++
++#include "icalformat.h"
++#include "event.h"
++#include "calendarlocal.h"
++
++#include <libkcal/freebusy.h>
++#include <iostream>
++
++using namespace KCal;
++using namespace std;
++
++int main()
++{
++ ICalFormat f;
++
++ CalendarLocal cal( QString::fromLatin1("UTC") );
++
++ Event *event1 = new Event;
++ event1->setSummary("A");
++ event1->setDtStart( QDateTime(QDate(2006,1,1), QTime(12,0,0)) );
++ //event1->setDuration(60*60);
++ event1->setDtEnd( QDateTime(QDate(2006,1,1), QTime(13,0,0)) );
++ event1->setFloats(FALSE);
++ event1->recurrence()->setDaily( 1 );
++ //event1->recurrence()->setDuration( 2 );
++ event1->recurrence()->setEndDateTime( QDateTime(QDate(2006,1,3), QTime(13,0,0)) );
++ cout << f.toICalString(event1).latin1() << endl;
++ cal.addEvent(event1);
++
++ Event *event2 = new Event;
++ event2->setSummary("B");
++ event2->setDtStart( QDateTime(QDate(2006,1,1), QTime(13,0,0)) );
++ //event2->setDuration(60*60);
++ event2->setDtEnd( QDateTime(QDate(2006,1,1), QTime(14,0,0)) );
++ event2->setFloats(FALSE);
++ event2->recurrence()->setDaily( 1 );
++ //event2->recurrence()->setDuration( 3 );
++ event2->recurrence()->setEndDateTime( QDateTime(QDate(2006,1,4), QTime(13,0,0)) );
++ cout << f.toICalString(event2).latin1() << endl;
++ cal.addEvent(event2);
++
++ Calendar *c = &cal;
++
++ QDateTime start = QDateTime(QDate(2006,1,2), QTime(0,0,0));
++ QDateTime end = QDateTime(QDate(2006,1,3), QTime(0,0,0));
++
++ FreeBusy *freebusy = new FreeBusy( c, start, end );
++ QString result = f.createScheduleMessage( freebusy, Scheduler::Publish );
++ cout << result.latin1() << endl;
++
++ return 0;
++}
diff --git a/kde-base/kdepim/kdepim-3.5.7-r5.ebuild b/kde-base/kdepim/kdepim-3.5.7-r5.ebuild
new file mode 100644
index 000000000000..d91fa7c5cae9
--- /dev/null
+++ b/kde-base/kdepim/kdepim-3.5.7-r5.ebuild
@@ -0,0 +1,73 @@
+# Copyright 1999-2007 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Header: /var/cvsroot/gentoo-x86/kde-base/kdepim/kdepim-3.5.7-r5.ebuild,v 1.1 2007/10/04 20:36:46 philantrop Exp $
+
+inherit kde-dist
+
+SRC_URI="${SRC_URI}
+ mirror://gentoo/kdepim-3.5-patchset-04.tar.bz2"
+
+DESCRIPTION="KDE PIM (Personal Information Management) applications: KOrganizer, KMail, KNode,..."
+
+KEYWORDS="~alpha ~amd64 ~hppa ~ia64 ~ppc ~ppc64 ~sparc ~x86"
+IUSE="pda gnokii"
+
+RESTRICT="test"
+
+# We use GnuPG 1.4.x for OpenPGP and 1.9 (via gpgme) for s/mime as upstream advises.
+DEPEND="~kde-base/kdebase-${PV}
+ >=dev-libs/cyrus-sasl-2
+ gnokii? ( app-mobilephone/gnokii )
+ >=app-crypt/gpgme-1.1.2-r1
+ || ( >=app-crypt/gnupg-2.0.1-r1 <app-crypt/gnupg-1.9 )
+ x11-libs/libXScrnSaver
+ app-pda/libopensync
+ pda? ( >=app-pda/pilot-link-0.12.0 >=dev-libs/libmal-0.44 )"
+
+RDEPEND="${DEPEND}
+ app-crypt/pinentry"
+
+DEPEND="${DEPEND}
+ x11-proto/scrnsaverproto
+ x11-apps/xhost"
+
+PATCHES="${FILESDIR}/libkcal-3.5.7-recurring_194371.patch"
+
+src_unpack() {
+ kde_src_unpack
+ # Call Qt 3 designer
+ sed -i -e "s:\"designer\":\"${QTDIR}/bin/designer\":g" "${S}"/libkdepim/kcmdesignerfields.cpp || die "sed failed"
+
+ # disabling tests, see bug #164038 and bug #164097
+ sed -e "s:SUBDIRS = libical versit tests:SUBDIRS = libical versit:" \
+ -i libkcal/Makefile.am || die "sed failed" || die "sed failed"
+# sed -e "s:SUBDIRS = . plugins test:SUBDIRS = . plugins:" \
+# -i kitchensync/libkonnector2/Makefile.am || die "sed failed"
+# sed -e "s:SUBDIRS = . tests test:SUBDIRS = .:" \
+# -i kitchensync/libksync/Makefile.am || die "sed failed"
+
+ sed -e "s:check_PROGRAMS = testalarmdlg:check_PROGRAMS =:" \
+ -i korganizer/korgac/Makefile.am || die "sed failed"
+
+ if ! [[ $(xhost >> /dev/null 2>/dev/null) ]] ; then
+ einfo "User ${USER} has no X access, disabling some tests."
+ sed -e "s:tests::" -i libkdepim/Makefile.am || die "sed failed"
+ fi
+}
+
+src_compile() {
+ local myconf="--with-sasl $(use_with gnokii)"
+ myconf="${myconf} --with-gpg=/usr/bin/gpg"
+
+ use pda || DO_NOT_COMPILE="${DO_NOT_COMPILE} kpilot"
+ # DO_NOT_COMPILE="${DO_NOT_COMPILE} kpilot"
+
+ kde_src_compile
+}
+
+pkg_postinst() {
+ kde_pkg_postinst
+
+ ewarn "If you're using x11-misc/basket, please re-emerge it now to avoid crashes with Kontact."
+ ewarn "cf. https://bugs.gentoo.org/show_bug.cgi?id=174872 for details."
+}