diff options
Diffstat (limited to 'tderesources/carddav/writer.cpp')
-rw-r--r-- | tderesources/carddav/writer.cpp | 106 |
1 files changed, 106 insertions, 0 deletions
diff --git a/tderesources/carddav/writer.cpp b/tderesources/carddav/writer.cpp new file mode 100644 index 000000000..68bf126d5 --- /dev/null +++ b/tderesources/carddav/writer.cpp @@ -0,0 +1,106 @@ +/*========================================================================= +| KABCDAV +|-------------------------------------------------------------------------- +| (c) 2010 Timothy Pearson +| +| This project is released under the GNU General Public License. +| Please see the file COPYING for more details. +|-------------------------------------------------------------------------- +| Remote address book writing class. + ========================================================================*/ + +/*========================================================================= +| INCLUDES + ========================================================================*/ + +#include "writer.h" +#include <kdebug.h> +#include <string> + +/*========================================================================= +| DEFINES + ========================================================================*/ + +// Use carddav_modify_object() function. +// If it's not set, a pair of carddav_delete_object/carddav_add_object +// is used for modifying objects. +// It's done, because, for some reason, Zimbra returns an error +// on carddav_modify_object. +//#define USE_CARDDAV_MODIFY + +/*========================================================================= +| NAMESPACE + ========================================================================*/ + +using namespace KABC; + +/*========================================================================= +| METHODS + ========================================================================*/ + +void CardDavWriter::cleanJob() { + CardDavJob::cleanJob(); +} + +int CardDavWriter::runJob(runtime_info* RT) { + kdDebug() << "writer::run, url: " << url() << "\n"; + + int res = OK; + + kdDebug() << "pushing added objects" << '\n'; + res = pushObjects(mAdded, carddav_add_object, OK, RT); + if (OK == res) { +#ifdef USE_CARDDAV_MODIFY + kdDebug() << "pushing changed objects" << '\n'; + if (getUseURI() == false) + res = pushObjects(mChanged, carddav_modify_object, OK, RT); + else + res = pushObjects(mChanged, carddav_modify_object_by_uri, OK, RT); + if (OK == res) { + kdDebug() << "pushing deleted objects" << '\n'; + while (mDeleted.contains("BEGIN:VCARD", TRUE) > 0) { + int endLocation = mDeleted.find("END:VCARD", 0, TRUE); + TQString deletedCurSeq = mDeleted.mid(0, endLocation+9); + mDeleted = mDeleted.remove(0, endLocation+9); + if (getUseURI() == false) + res = pushObjects(deletedCurSeq, carddav_delete_object, OK, RT); + else + res = pushObjects(deletedCurSeq, carddav_delete_object_by_uri, OK, RT); + } + } +#else // if USE_CARDDAV_MODIFY + kdDebug() << "pushing changed objects (delete)" << '\n'; + if (getUseURI() == false) + res = pushObjects(mChanged, carddav_delete_object, OK, RT); + else + res = pushObjects(mChanged, carddav_delete_object_by_uri, OK, RT); + if (OK == res) { + kdDebug() << "pushing changed objects (add)" << '\n'; + if (getUseURI() == false) + res = pushObjects(mChanged, carddav_add_object, OK, RT); + else + res = pushObjects(mChanged, carddav_add_object, OK, RT); + if (OK == res) { + kdDebug() << "pushing deleted objects" << '\n'; + while (mDeleted.contains("BEGIN:VCARD", TRUE) > 0) { + int endLocation = mDeleted.find("END:VCARD", 0, TRUE); + TQString deletedCurSeq = mDeleted.mid(0, endLocation+9); + mDeleted = mDeleted.remove(0, endLocation+9); + if (getUseURI() == false) + res = pushObjects(deletedCurSeq, carddav_delete_object, OK, RT); + else + res = pushObjects(deletedCurSeq, carddav_delete_object_by_uri, OK, RT); + } + } + } +#endif // if USE_CARDDAV_MODIFY + } + + if (OK != res) { + clearObjects(); + } + + return res; +} + +// EOF ======================================================================== |