diff options
author | tpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2010-08-28 21:36:58 +0000 |
---|---|---|
committer | tpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2010-08-28 21:36:58 +0000 |
commit | 5abbdb459be7870848ef16691174e91c68958304 (patch) | |
tree | 1fb80e5febb13f0a82e97f2200f51ebeaff22d61 | |
parent | ba9ae64c036bad58a9d9f6ca49986913d44502d9 (diff) | |
download | tdepim-5abbdb459be7870848ef16691174e91c68958304.tar.gz tdepim-5abbdb459be7870848ef16691174e91c68958304.zip |
* 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
-rw-r--r-- | kresources/caldav/reader.cpp | 17 | ||||
-rw-r--r-- | kresources/caldav/writer.cpp | 80 | ||||
-rw-r--r-- | 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<Incidence *,bool>::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<Incidence *,bool>::ConstIterator it; + it = mDeletedIncidences.find( i ); + if ( it == mDeletedIncidences.end() ) { + mDeletedIncidences.insert( i, true ); + } } - checkForAutomaticSave(); } |