summaryrefslogtreecommitdiffstats
path: root/kresources/newexchange/exchangecalendaradaptor.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'kresources/newexchange/exchangecalendaradaptor.cpp')
-rw-r--r--kresources/newexchange/exchangecalendaradaptor.cpp183
1 files changed, 183 insertions, 0 deletions
diff --git a/kresources/newexchange/exchangecalendaradaptor.cpp b/kresources/newexchange/exchangecalendaradaptor.cpp
new file mode 100644
index 000000000..254eb4da1
--- /dev/null
+++ b/kresources/newexchange/exchangecalendaradaptor.cpp
@@ -0,0 +1,183 @@
+/*
+ This file is part of kdepim.
+
+ Copyright (C) 2004 Reinhold Kainhofer <reinhold@kainhofer.com>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+
+#include "exchangecalendaradaptor.h"
+#include "exchangeglobals.h"
+#include "exchangeconvertercalendar.h"
+#include <davgroupwareglobals.h>
+#include <webdavhandler.h>
+#include <kdebug.h>
+#include <klocale.h>
+#include <kio/davjob.h>
+#include <libkcal/resourcecached.h>
+#include "davcalendaradaptor.h"
+
+using namespace KCal;
+
+ExchangeCalendarUploadItem::ExchangeCalendarUploadItem( CalendarAdaptor *adaptor, KCal::Incidence *incidence, KPIM::GroupwareUploadItem::UploadType type )
+ : GroupwareUploadItem( type )
+{
+ if ( incidence && adaptor ) {
+ if ( incidence->type() == "Event" ) mItemType = KPIM::FolderLister::Event;
+ else if ( incidence->type() == "Todo" ) mItemType = KPIM::FolderLister::Todo;
+ else if ( incidence->type() == "Journal" ) mItemType = KPIM::FolderLister::Journal;
+kdDebug()<<"mItemType=="<<mItemType<<endl;
+
+ setUrl( incidence->customProperty( adaptor->identifier(), "storagelocation" ) );
+ setUid( incidence->uid() );
+
+ ExchangeConverterCalendar format;
+ format.setTimeZone( adaptor->resource()->timeZoneId() );
+ mDavData = format.createWebDAV( incidence );
+ }
+}
+
+KIO::TransferJob *ExchangeCalendarUploadItem::createUploadJob( KPIM::GroupwareDataAdaptor *adaptor, const KURL &baseUrl )
+{
+kdDebug()<<"ExchangeCalendarUploadItem::createUploadJob, adaptor="<<adaptor<<", URL="<<baseUrl.url()<<endl;
+ Q_ASSERT( adaptor );
+ if ( !adaptor ) return 0;
+ KURL upUrl( url() );
+ adaptor->adaptUploadUrl( upUrl );
+ kdDebug() << "Uploading to: " << upUrl.prettyURL() << endl;
+
+ KIO::DavJob *job = KIO::davPropPatch( upUrl, mDavData, false );
+ return job;
+}
+
+KIO::TransferJob *ExchangeCalendarUploadItem::createUploadNewJob( KPIM::GroupwareDataAdaptor *adaptor, const KURL &baseurl )
+{
+kdDebug()<<"ExchangeCalendarUploadItem::createUploadNewJob"<<endl;
+ KURL url( baseurl );
+ // TODO: Check if this URL doesn't exist yet!
+ url.addPath( uid() + ".EML" );
+ setUrl( url );
+//url.addPath("newItem.EML");
+kdDebug()<<"Upload path: "<<url.url()<<endl;
+ return createUploadJob( adaptor, url );
+}
+
+
+
+ExchangeCalendarAdaptor::ExchangeCalendarAdaptor() : DavCalendarAdaptor()
+{
+ /* FIXME Set the progress item messages from the concrete job?*/
+ setDownloadProgressMessage( i18n( "Downloading items" ) );
+ setUploadProgressMessage( i18n( "Uploading items" ) );
+}
+
+void ExchangeCalendarAdaptor::customAdaptDownloadUrl( KURL &url )
+{
+ url = WebdavHandler::toDAV( url );
+}
+
+void ExchangeCalendarAdaptor::customAdaptUploadUrl( KURL &url )
+{
+ url = WebdavHandler::toDAV( url );
+// url.setPath( url.path() + "/NewItem.EML" );
+}
+
+
+/* Removing items: old version of the exchange resource: If the event is part
+ of a sequence of recurring event, we need to delete the master!
+void ExchangeDelete::findUidSingleMaster( QString const& uid )
+{
+ QString query =
+ "SELECT \"DAV:href\", \"urn:schemas:calendar:uid\"\r\n"
+ "FROM Scope('shallow traversal of \"\"')\r\n"
+ "WHERE \"urn:schemas:calendar:uid\" = '" + uid + "'\r\n"
+ " AND (\"urn:schemas:calendar:instancetype\" = 0\r\n"
+ " OR \"urn:schemas:calendar:instancetype\" = 1)\r\n";
+
+ KIO::DavJob* job = KIO::davSearch( mAccount->calendarURL(), "DAV:", "sql", query, false );
+ job->setWindow( mWindow );
+ connect(job, SIGNAL(result( KIO::Job * )), this, SLOT(slotFindUidResult(KIO::Job *)));
+}
+
+*/
+
+
+QString ExchangeCalendarAdaptor::defaultNewItemName( KPIM::GroupwareUploadItem *item ) {
+ if ( item ) return item->uid()+".EML";
+ else return QString::null;
+}
+
+KPIM::GroupwareUploadItem *ExchangeCalendarAdaptor::newUploadItem( KCal::Incidence*it,
+ KPIM::GroupwareUploadItem::UploadType type )
+{
+ return new ExchangeCalendarUploadItem( this, it, type );
+}
+
+bool ExchangeCalendarAdaptor::interpretUploadJob( KIO::Job *job, const QString &/*jobData*/ )
+{
+ kdDebug(7000) << "ExchangeCalendarAdaptor::interpretUploadJob " << endl;
+ KIO::DavJob *davjob = dynamic_cast<KIO::DavJob*>(job);
+ bool error = job->error();
+ const QString err = job->errorString();
+
+ if ( davjob ) {
+ if ( error ) {
+ emit itemUploadError( davjob->url(), err );
+ return false;
+ } else {
+ QDomDocument doc( davjob->response() );
+ // TODO: extract the href and the items that got a 404. If there's
+ // something important among them, issue the "usual" not-all-settings-uploaded
+ // warning to the user.
+
+ // We don't know the local id here (and we don't want to extract it from
+ // the idMapper, that's the task of the receiver
+ emit itemUploaded( uidFromJob( job ), davjob->url() );
+ }
+ return true;
+ } else {
+ return false;
+ }
+}
+
+bool ExchangeCalendarAdaptor::interpretUploadNewJob( KIO::Job *job, const QString &/*jobData*/ )
+{
+// TODO: How does the incidence mapper know the old/new ids???
+ kdDebug(7000) << "ExchangeCalendarAdaptor::interpretUploadNewJob " << endl;
+ KIO::DavJob *davjob = dynamic_cast<KIO::DavJob*>(job);
+ bool error = job->error();
+ const QString err = job->errorString();
+
+ if ( davjob ) {
+ if ( error ) {
+ emit itemUploadNewError( idMapper()->localId( davjob->url().path() ), err );
+ return false;
+ } else {
+ QDomDocument doc( davjob->response() );
+ // TODO: extract the href and the items that got a 404. If there's
+ // something important among them, issue the "usual" not-all-settings-uploaded
+ // warning to the user.
+
+ // We don't know the local id here (and we don't want to extract it from
+ // the idMapper, that's the task of the receiver
+ emit itemUploadedNew( uidFromJob( job ), davjob->url() );
+ }
+ return true;
+ } else {
+ return false;
+ }
+}
+