From 5abbdb459be7870848ef16691174e91c68958304 Mon Sep 17 00:00:00 2001 From: tpearson Date: Sat, 28 Aug 2010 21:36:58 +0000 Subject: * Fixed CalDAV resource error messages and potential crash * Added write support to events with RECURRENCE-ID property Only remaining potential issue is modification of parent series and association/update/delete of child event RECURRENCE-ID fields git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/kdepim@1169262 283d02a7-25f6-0310-bc7c-ecb5cbfe19da --- kresources/caldav/reader.cpp | 17 +++++----- kresources/caldav/writer.cpp | 80 +++++++++++++++++++++++--------------------- libkcal/resourcecached.cpp | 22 +++++++++--- 3 files changed, 67 insertions(+), 52 deletions(-) diff --git a/kresources/caldav/reader.cpp b/kresources/caldav/reader.cpp index a33c4d936..9e167e7d0 100644 --- a/kresources/caldav/reader.cpp +++ b/kresources/caldav/reader.cpp @@ -40,12 +40,14 @@ int CalDavReader::runJob(runtime_info* RT) { response* result = caldav_get_response(); CALDAV_RESPONSE res = OK; - if (mGetAll) { - kdDebug() << "getting all objects"; - res = caldav_getall_object(result, std::string(url().ascii()).c_str(), RT); - } else { - kdDebug() << "getting object from the specified time range"; - res = caldav_get_object(result, mTimeStart.toTime_t(), mTimeEnd.toTime_t(), std::string(url().ascii()).c_str(), RT); + if ((OK == res) && (url() != "")) { + if (mGetAll) { + kdDebug() << "getting all objects"; + res = caldav_getall_object(result, std::string(url().ascii()).c_str(), RT); + } else { + kdDebug() << "getting object from the specified time range"; + res = caldav_get_object(result, mTimeStart.toTime_t(), mTimeEnd.toTime_t(), std::string(url().ascii()).c_str(), RT); + } } if (OK == res) { @@ -64,8 +66,7 @@ int CalDavReader::runJob(runtime_info* RT) { if ((OK == res) && (tasksUrl() != "")) { kdDebug() << "reader::run, url: " << tasksUrl(); - response* result = caldav_get_response(); - CALDAV_RESPONSE res = OK; + result = caldav_get_response(); if (mGetAll) { kdDebug() << "getting all objects"; diff --git a/kresources/caldav/writer.cpp b/kresources/caldav/writer.cpp index 4580df514..c4101a0b3 100644 --- a/kresources/caldav/writer.cpp +++ b/kresources/caldav/writer.cpp @@ -49,54 +49,56 @@ int CalDavWriter::runJob(runtime_info* RT) { int res = OK; - kdDebug() << "pushing added objects"; - res = pushObjects(mAdded, caldav_add_object, OK, RT); - if (OK == res) { + if ((OK == res) && (url() != "")) { + kdDebug() << "pushing added objects"; + res = pushObjects(mAdded, caldav_add_object, OK, RT); + if (OK == res) { #ifdef USE_CALDAV_MODIFY - kdDebug() << "pushing changed objects"; - res = pushObjects(mChanged, caldav_modify_object, OK, RT); - if (OK == res) { - kdDebug() << "pushing deleted objects"; - res = pushObjects(mDeleted, caldav_delete_object, OK, RT); - } + kdDebug() << "pushing changed objects"; + res = pushObjects(mChanged, caldav_modify_object, OK, RT); + if (OK == res) { + kdDebug() << "pushing deleted objects"; + res = pushObjects(mDeleted, caldav_delete_object, OK, RT); + } #else // if USE_CALDAV_MODIFY - kdDebug() << "pushing changed objects (delete)"; - res = pushObjects(mChanged, caldav_delete_object, OK, RT); - if (OK == res) { - kdDebug() << "pushing changed objects (add)"; - res = pushObjects(mChanged, caldav_add_object, OK, RT); - if (OK == res) { - kdDebug() << "pushing deleted objects"; - res = pushObjects(mDeleted, caldav_delete_object, OK, RT); - } - } + kdDebug() << "pushing changed objects (delete)"; + res = pushObjects(mChanged, caldav_delete_object, OK, RT); + if (OK == res) { + kdDebug() << "pushing changed objects (add)"; + res = pushObjects(mChanged, caldav_add_object, OK, RT); + if (OK == res) { + kdDebug() << "pushing deleted objects"; + res = pushObjects(mDeleted, caldav_delete_object, OK, RT); + } + } #endif // if USE_CALDAV_MODIFY + } } - res = OK; - - kdDebug() << "pushing added tasks objects"; - res = pushTasksObjects(mTasksAdded, caldav_add_object, OK, RT); if ((OK == res) && (tasksUrl() != "")) { + kdDebug() << "pushing added tasks objects"; + res = pushTasksObjects(mTasksAdded, caldav_add_object, OK, RT); + if (OK == res) { #ifdef USE_CALDAV_TASKS_MODIFY - kdDebug() << "pushing changed objects"; - res = pushTasksObjects(mTasksChanged, caldav_tasks_modify_object, OK, RT); - if (OK == res) { - kdDebug() << "pushing deleted objects"; - res = pushTasksObjects(mTasksDeleted, caldav_tasks_delete_object, OK, RT); - } + kdDebug() << "pushing changed objects"; + res = pushTasksObjects(mTasksChanged, caldav_tasks_modify_object, OK, RT); + if (OK == res) { + kdDebug() << "pushing deleted objects"; + res = pushTasksObjects(mTasksDeleted, caldav_tasks_delete_object, OK, RT); + } #else // if USE_CALDAV_TASKS_MODIFY - kdDebug() << "pushing changed objects (delete)"; - res = pushTasksObjects(mTasksChanged, caldav_tasks_delete_object, OK, RT); - if (OK == res) { - kdDebug() << "pushing changed objects (add)"; - res = pushTasksObjects(mTasksChanged, caldav_add_object, OK, RT); - if (OK == res) { - kdDebug() << "pushing deleted objects"; - res = pushTasksObjects(mTasksDeleted, caldav_tasks_delete_object, OK, RT); - } - } + kdDebug() << "pushing changed objects (delete)"; + res = pushTasksObjects(mTasksChanged, caldav_tasks_delete_object, OK, RT); + if (OK == res) { + kdDebug() << "pushing changed objects (add)"; + res = pushTasksObjects(mTasksChanged, caldav_add_object, OK, RT); + if (OK == res) { + kdDebug() << "pushing deleted objects"; + res = pushTasksObjects(mTasksDeleted, caldav_tasks_delete_object, OK, RT); + } + } #endif // if USE_CALDAV_TASKS_MODIFY + } } if (OK != res) { diff --git a/libkcal/resourcecached.cpp b/libkcal/resourcecached.cpp index 3b654aef3..155d24a0d 100644 --- a/libkcal/resourcecached.cpp +++ b/libkcal/resourcecached.cpp @@ -487,12 +487,24 @@ void ResourceCached::calendarIncidenceDeleted( Incidence *i ) << i->uid() << endl; #endif - TQMap::ConstIterator it; - it = mDeletedIncidences.find( i ); - if ( it == mDeletedIncidences.end() ) { - mDeletedIncidences.insert( i, true ); + if (i->hasRecurrenceID()) { + // This incidence has a parent; notify the parent of the child's death and do not destroy the parent! + // Get the parent + IncidenceList il = i->childIncidences(); + IncidenceListIterator it; + it = il.begin(); + Incidence *parentIncidence; + parentIncidence = this->incidence(*it); + // Remove the child + calendarIncidenceChanged(parentIncidence); + } + else { + TQMap::ConstIterator it; + it = mDeletedIncidences.find( i ); + if ( it == mDeletedIncidences.end() ) { + mDeletedIncidences.insert( i, true ); + } } - checkForAutomaticSave(); } -- cgit v1.2.1