summaryrefslogtreecommitdiffstats
path: root/tderesources/kolab/kcal/event.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tderesources/kolab/kcal/event.cpp')
-rw-r--r--tderesources/kolab/kcal/event.cpp223
1 files changed, 223 insertions, 0 deletions
diff --git a/tderesources/kolab/kcal/event.cpp b/tderesources/kolab/kcal/event.cpp
new file mode 100644
index 00000000..c15c567d
--- /dev/null
+++ b/tderesources/kolab/kcal/event.cpp
@@ -0,0 +1,223 @@
+/*
+ This file is part of the kolab resource - the implementation of the
+ Kolab storage format. See www.kolab.org for documentation on this.
+
+ Copyright (c) 2004 Bo Thorsen <bo@sonofthor.dk>
+
+ 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.
+
+ In addition, as a special exception, the copyright holders give
+ permission to link the code of this program with any edition of
+ the TQt library by Trolltech AS, Norway (or with modified versions
+ of TQt that use the same license as TQt), and distribute linked
+ combinations including the two. You must obey the GNU General
+ Public License in all respects for all of the code used other than
+ TQt. If you modify this file, you may extend this exception to
+ your version of the file, but you are not obligated to do so. If
+ you do not wish to do so, delete this exception statement from
+ your version.
+*/
+
+#include "event.h"
+
+#include <libkcal/event.h>
+#include <kdebug.h>
+
+using namespace Kolab;
+
+
+KCal::Event* Event::xmlToEvent( const TQString& xml, const TQString& tz, KCal::ResourceKolab* res,
+ const TQString& subResource, TQ_UINT32 sernum )
+{
+ Event event( res, subResource, sernum, tz );
+ event.load( xml );
+ KCal::Event* kcalEvent = new KCal::Event();
+ event.saveTo( kcalEvent );
+ return kcalEvent;
+}
+
+TQString Event::eventToXML( KCal::Event* kcalEvent, const TQString& tz )
+{
+ Event event( 0, TQString(), 0, tz, kcalEvent );
+ return event.saveXML();
+}
+
+Event::Event( KCal::ResourceKolab *res, const TQString &subResource, TQ_UINT32 sernum,
+ const TQString& tz, KCal::Event* event )
+ : Incidence( res, subResource, sernum, tz ),
+ mShowTimeAs( KCal::Event::Opaque ), mHasEndDate( false )
+{
+ if ( event )
+ setFields( event );
+}
+
+Event::~Event()
+{
+}
+
+void Event::setTransparency( KCal::Event::Transparency transparency )
+{
+ mShowTimeAs = transparency;
+}
+
+KCal::Event::Transparency Event::transparency() const
+{
+ return mShowTimeAs;
+}
+
+void Event::setEndDate( const TQDateTime& date )
+{
+ mEndDate = date;
+ mHasEndDate = true;
+ if ( mFloatingStatus == AllDay )
+ kdDebug() << "ERROR: Time on end date but no time on the event\n";
+ mFloatingStatus = HasTime;
+}
+
+void Event::setEndDate( const TQDate& date )
+{
+ mEndDate = date;
+ mHasEndDate = true;
+ if ( mFloatingStatus == HasTime )
+ kdDebug() << "ERROR: No time on end date but time on the event\n";
+ mFloatingStatus = AllDay;
+}
+
+void Event::setEndDate( const TQString& endDate )
+{
+ if ( endDate.length() > 10 )
+ // This is a date + time
+ setEndDate( stringToDateTime( endDate ) );
+ else
+ // This is only a date
+ setEndDate( stringToDate( endDate ) );
+}
+
+TQDateTime Event::endDate() const
+{
+ return mEndDate;
+}
+
+bool Event::loadAttribute( TQDomElement& element )
+{
+ // This method doesn't handle the color-label tag yet
+ TQString tagName = element.tagName();
+
+ if ( tagName == "show-time-as" ) {
+ // TODO: Support tentative and outofoffice
+ if ( element.text() == "free" )
+ setTransparency( KCal::Event::Transparent );
+ else
+ setTransparency( KCal::Event::Opaque );
+ } else if ( tagName == "end-date" )
+ setEndDate( element.text() );
+ else
+ return Incidence::loadAttribute( element );
+
+ // We handled this
+ return true;
+}
+
+bool Event::saveAttributes( TQDomElement& element ) const
+{
+ // Save the base class elements
+ Incidence::saveAttributes( element );
+
+ // TODO: Support tentative and outofoffice
+ if ( transparency() == KCal::Event::Transparent )
+ writeString( element, "show-time-as", "free" );
+ else
+ writeString( element, "show-time-as", "busy" );
+ if ( mHasEndDate ) {
+ if ( mFloatingStatus == HasTime )
+ writeString( element, "end-date", dateTimeToString( endDate() ) );
+ else
+ writeString( element, "end-date", dateToString( endDate().date() ) );
+ }
+
+ return true;
+}
+
+
+bool Event::loadXML( const TQDomDocument& document )
+{
+ TQDomElement top = document.documentElement();
+
+ if ( top.tagName() != "event" ) {
+ tqWarning( "XML error: Top tag was %s instead of the expected event",
+ top.tagName().ascii() );
+ return false;
+ }
+
+ for ( TQDomNode n = top.firstChild(); !n.isNull(); n = n.nextSibling() ) {
+ if ( n.isComment() )
+ continue;
+ if ( n.isElement() ) {
+ TQDomElement e = n.toElement();
+ loadAttribute( e );
+ } else
+ kdDebug() << "Node is not a comment or an element???" << endl;
+ }
+
+ loadAttachments();
+ return true;
+}
+
+TQString Event::saveXML() const
+{
+ TQDomDocument document = domTree();
+ TQDomElement element = document.createElement( "event" );
+ element.setAttribute( "version", "1.0" );
+ saveAttributes( element );
+ document.appendChild( element );
+ return document.toString();
+}
+
+void Event::setFields( const KCal::Event* event )
+{
+ Incidence::setFields( event );
+
+ // note: if hasEndDate() is false and hasDuration() is true
+ // dtEnd() returns start+duration
+ if ( event->hasEndDate() || event->hasDuration() ) {
+ if ( event->doesFloat() ) {
+ // This is a floating event. Don't timezone move this one
+ mFloatingStatus = AllDay;
+ setEndDate( event->dtEnd().date() );
+ } else {
+ mFloatingStatus = HasTime;
+ setEndDate( localToUTC( event->dtEnd() ) );
+ }
+ } else {
+ mHasEndDate = false;
+ }
+ setTransparency( event->transparency() );
+}
+
+void Event::saveTo( KCal::Event* event )
+{
+ Incidence::saveTo( event );
+
+ event->setHasEndDate( mHasEndDate );
+ if ( mHasEndDate ) {
+ if ( mFloatingStatus == AllDay )
+ // This is a floating event. Don't timezone move this one
+ event->setDtEnd( endDate() );
+ else
+ event->setDtEnd( utcToLocal( endDate() ) );
+ }
+ event->setTransparency( transparency() );
+}