summaryrefslogtreecommitdiffabout
Side-by-side diff
Diffstat (more/less context) (show whitespace changes)
-rw-r--r--libkcal/attachment.cpp38
-rw-r--r--libkcal/attachment.h51
-rw-r--r--libkcal/icalformatimpl.cpp4
-rw-r--r--libkcal/incidence.cpp10
4 files changed, 85 insertions, 18 deletions
diff --git a/libkcal/attachment.cpp b/libkcal/attachment.cpp
index 1ead923..520ac95 100644
--- a/libkcal/attachment.cpp
+++ b/libkcal/attachment.cpp
@@ -1,86 +1,120 @@
/*
This file is part of libkcal.
+
Copyright (c) 2002 Michael Brade <brade@kde.org>
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., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA.
*/
#include "attachment.h"
using namespace KCal;
+Attachment::Attachment( const Attachment &attachment)
+{
+ mMimeType = attachment.mMimeType;
+ mData = attachment.mData;
+ mBinary = attachment.mBinary;
+ mShowInline = attachment.mShowInline;
+ mLabel = attachment.mLabel;
+}
+
Attachment::Attachment(const QString& uri, const QString& mime)
{
mMimeType = mime;
mData = uri;
mBinary = false;
+ mShowInline = false;
+ mLabel = QString::null;
}
Attachment::Attachment(const char *base64, const QString& mime)
{
mMimeType = mime;
mData = QString::fromUtf8(base64);
mBinary = true;
+ mShowInline = false;
+ mLabel = QString::null;
}
-bool Attachment::isURI() const
+bool Attachment::isUri() const
{
return !mBinary;
}
QString Attachment::uri() const
{
if (!mBinary)
return mData;
else
return QString::null;
}
-void Attachment::setURI(const QString& uri)
+void Attachment::setUri(const QString& uri)
{
mData = uri;
mBinary = false;
}
bool Attachment::isBinary() const
{
return mBinary;
}
char *Attachment::data() const
{
if (mBinary)
return mData.utf8().data();
else
return 0;
}
void Attachment::setData(const char *base64)
{
mData = QString::fromUtf8(base64);
mBinary = true;
}
QString Attachment::mimeType() const
{
return mMimeType;
}
void Attachment::setMimeType(const QString& mime)
{
mMimeType = mime;
}
+bool Attachment::showInline() const
+{
+ return mShowInline;
+}
+
+void Attachment::setShowInline( bool showinline )
+{
+ mShowInline = showinline;
+}
+
+QString Attachment::label() const
+{
+ return mLabel;
+}
+
+void Attachment::setLabel( const QString& label )
+{
+ mLabel = label;
+}
+
diff --git a/libkcal/attachment.h b/libkcal/attachment.h
index cdf2458..5301420 100644
--- a/libkcal/attachment.h
+++ b/libkcal/attachment.h
@@ -1,69 +1,94 @@
/*
This file is part of libkcal.
+
Copyright (c) 2002 Michael Brade <brade@kde.org>
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., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA.
*/
+#ifndef KCAL_ATTACHMENT_H
+#define KCAL_ATTACHMENT_H
-#ifndef _ATTACHMENT_H
-#define _ATTACHMENT_H
-#include <qstring.h>
+#include <qstring.h>
namespace KCal {
/**
- * This class represents information related to an attachment.
+ This class represents information related to an attachment.
*/
class Attachment
{
public:
+
+ /**
+ Create a Reference to some URI by copying an existing Attachment.
+
+ @param attachment the attachment to be duplicated
+ */
+ Attachment( const Attachment &attachment );
+
/**
- * Create a Reference to some URI.
- * @param uri the uri this attachment refers to
- * @param mime the mime type of the resource being linked to
+ Create a Reference to some URI.
+
+ @param uri the uri this attachment refers to
+ @param mime the mime type of the resource being linked to
*/
Attachment(const QString& uri, const QString& mime = QString::null);
/**
- * Create a binary attachment.
- * @param base64 the attachment in base64 format
- * @param mime the mime type of the attachment
+ Create a binary attachment.
+
+ @param base64 the attachment in base64 format
+ @param mime the mime type of the attachment
*/
Attachment(const char *base64, const QString& mime = QString::null);
- /* The VALUE parameter in Cal */
- bool isURI() const;
+ /* The VALUE parameter in iCal */
+ bool isUri() const;
QString uri() const;
- void setURI(const QString& uri);
+ void setUri( const QString &uri );
bool isBinary() const;
char *data() const;
void setData(const char *base64);
/* The optional FMTTYPE parameter in iCal */
QString mimeType() const;
void setMimeType(const QString& mime);
+
+ /* The custom X-CONTENT-DISPOSITION parameter, used by OGo etc. */
+ bool showInline() const;
+ void setShowInline( bool showinline );
+
+ /* The custom X-LABEL parameter to show a human-readable title */
+ QString label() const;
+ void setLabel( const QString &label );
+
private:
QString mMimeType;
QString mData;
bool mBinary;
+ bool mShowInline;
+ QString mLabel;
+
+ class Private;
+ Private *d;
};
}
#endif
diff --git a/libkcal/icalformatimpl.cpp b/libkcal/icalformatimpl.cpp
index 53aa039..65eabc8 100644
--- a/libkcal/icalformatimpl.cpp
+++ b/libkcal/icalformatimpl.cpp
@@ -469,103 +469,103 @@ icalproperty *ICalFormatImpl::writeAttendee(Attendee *attendee)
status = ICAL_PARTSTAT_DECLINED;
break;
case Attendee::Tentative:
status = ICAL_PARTSTAT_TENTATIVE;
break;
case Attendee::Delegated:
status = ICAL_PARTSTAT_DELEGATED;
break;
case Attendee::Completed:
status = ICAL_PARTSTAT_COMPLETED;
break;
case Attendee::InProcess:
status = ICAL_PARTSTAT_INPROCESS;
break;
}
icalproperty_add_parameter(p,icalparameter_new_partstat(status));
icalparameter_role role = ICAL_ROLE_REQPARTICIPANT;
switch (attendee->role()) {
case Attendee::Chair:
role = ICAL_ROLE_CHAIR;
break;
default:
case Attendee::ReqParticipant:
role = ICAL_ROLE_REQPARTICIPANT;
break;
case Attendee::OptParticipant:
role = ICAL_ROLE_OPTPARTICIPANT;
break;
case Attendee::NonParticipant:
role = ICAL_ROLE_NONPARTICIPANT;
break;
}
icalproperty_add_parameter(p,icalparameter_new_role(role));
if (!attendee->uid().isEmpty()) {
icalparameter* icalparameter_uid = icalparameter_new_x(attendee->uid().utf8());
icalparameter_set_xname(icalparameter_uid,"X-UID");
icalproperty_add_parameter(p,icalparameter_uid);
}
return p;
}
icalproperty *ICalFormatImpl::writeAttachment(Attachment *att)
{
#if 0
icalattachtype* attach = icalattachtype_new();
- if (att->isURI())
+ if (att->isUri())
icalattachtype_set_url(attach, att->uri().utf8().data());
else
icalattachtype_set_base64(attach, att->data(), 0);
#endif
icalattach *attach;
- if (att->isURI())
+ if (att->isUri())
attach = icalattach_new_from_url( att->uri().utf8().data());
else
attach = icalattach_new_from_data ( (unsigned char *)att->data(), 0, 0);
icalproperty *p = icalproperty_new_attach(attach);
if (!att->mimeType().isEmpty())
icalproperty_add_parameter(p,icalparameter_new_fmttype(att->mimeType().utf8().data()));
if (att->isBinary()) {
icalproperty_add_parameter(p,icalparameter_new_value(ICAL_VALUE_BINARY));
icalproperty_add_parameter(p,icalparameter_new_encoding(ICAL_ENCODING_BASE64));
}
return p;
}
icalproperty *ICalFormatImpl::writeRecurrenceRule(Recurrence *recur)
{
// kdDebug(5800) << "ICalFormatImpl::writeRecurrenceRule()" << endl;
icalrecurrencetype r;
icalrecurrencetype_clear(&r);
int index = 0;
int index2 = 0;
QPtrList<Recurrence::rMonthPos> tmpPositions;
QPtrList<int> tmpDays;
int *tmpDay;
Recurrence::rMonthPos *tmpPos;
bool datetime = false;
int day;
int i;
switch(recur->doesRecur()) {
case Recurrence::rMinutely:
r.freq = ICAL_MINUTELY_RECURRENCE;
datetime = true;
break;
case Recurrence::rHourly:
r.freq = ICAL_HOURLY_RECURRENCE;
datetime = true;
break;
case Recurrence::rDaily:
r.freq = ICAL_DAILY_RECURRENCE;
break;
case Recurrence::rWeekly:
r.freq = ICAL_WEEKLY_RECURRENCE;
r.week_start = static_cast<icalrecurrencetype_weekday>(recur->weekStart()%7 + 1);
diff --git a/libkcal/incidence.cpp b/libkcal/incidence.cpp
index 549014e..39c14f5 100644
--- a/libkcal/incidence.cpp
+++ b/libkcal/incidence.cpp
@@ -14,97 +14,104 @@
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., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA.
*/
#include <kglobal.h>
#include <klocale.h>
#include <kdebug.h>
#include "calformat.h"
#include "incidence.h"
#include "todo.h"
using namespace KCal;
Incidence::Incidence() :
IncidenceBase(),
mRelatedTo(0), mSecrecy(SecrecyPublic), mPriority(3)
{
mRecurrence = 0;//new Recurrence(this);
mCancelled = false;
recreate();
mHasStartDate = true;
mAlarms.setAutoDelete(true);
mAttachments.setAutoDelete(true);
mHasRecurrenceID = false;
mHoliday = false;
mBirthday = false;
mAnniversary = false;
}
Incidence::Incidence( const Incidence &i ) : IncidenceBase( i )
{
// TODO: reenable attributes currently commented out.
mRevision = i.mRevision;
mCreated = i.mCreated;
mDescription = i.mDescription;
mSummary = i.mSummary;
mCategories = i.mCategories;
// Incidence *mRelatedTo; Incidence *mRelatedTo;
mRelatedTo = 0;
mRelatedToUid = i.mRelatedToUid;
// QPtrList<Incidence> mRelations; QPtrList<Incidence> mRelations;
mExDates = i.mExDates;
- mAttachments = i.mAttachments;
+ QPtrListIterator<Attachment> itat( i.mAttachments );
+ Attachment *at;
+ while( (at = itat.current()) ) {
+ Attachment *a = new Attachment( *at );
+ mAttachments.append( a );
+ ++itat;
+ }
+ mAttachments.setAutoDelete( true );
mResources = i.mResources;
mSecrecy = i.mSecrecy;
mPriority = i.mPriority;
mLocation = i.mLocation;
mCancelled = i.mCancelled;
mHasStartDate = i.mHasStartDate;
QPtrListIterator<Alarm> it( i.mAlarms );
const Alarm *a;
while( (a = it.current()) ) {
Alarm *b = new Alarm( *a );
b->setParent( this );
mAlarms.append( b );
++it;
}
mAlarms.setAutoDelete(true);
mHasRecurrenceID = i.mHasRecurrenceID;
mRecurrenceID = i.mRecurrenceID;
if ( i.mRecurrence )
mRecurrence = new Recurrence( *(i.mRecurrence), this );
else
mRecurrence = 0;
mHoliday = i.mHoliday ;
mBirthday = i.mBirthday;
mAnniversary = i.mAnniversary;
}
Incidence::~Incidence()
{
Incidence *ev;
QPtrList<Incidence> Relations = relations();
for (ev=Relations.first();ev;ev=Relations.next()) {
if (ev->relatedTo() == this) ev->setRelatedTo(0);
}
if (relatedTo()) relatedTo()->removeRelation(this);
if ( mRecurrence )
delete mRecurrence;
}
QString Incidence::durationText()
{
return "---";
}
QString Incidence::durationText4Time( int offset )
{
int min = offset/60;
int hours = min /60;
@@ -712,96 +719,97 @@ QStringList Incidence::secrecyList()
QPtrList<Alarm> Incidence::alarms() const
{
return mAlarms;
}
Alarm* Incidence::newAlarm()
{
Alarm* alarm = new Alarm(this);
mAlarms.append(alarm);
// updated();
return alarm;
}
void Incidence::addAlarm(Alarm *alarm)
{
mAlarms.append(alarm);
updated();
}
void Incidence::removeAlarm(Alarm *alarm)
{
mAlarms.removeRef(alarm);
updated();
}
void Incidence::clearAlarms()
{
mAlarms.clear();
updated();
}
bool Incidence::isAlarmEnabled() const
{
Alarm* alarm;
for (QPtrListIterator<Alarm> it(mAlarms); (alarm = it.current()) != 0; ++it) {
if (alarm->enabled())
return true;
}
return false;
}
#include <stdlib.h>
Recurrence *Incidence::recurrence()
{
if ( ! mRecurrence ) {
mRecurrence = new Recurrence(this);
mRecurrence->setRecurStart( dtStart() );
+ mRecurrence->setRecurReadOnly( isReadOnly());
//qDebug("creating new recurence ");
//abort();
}
return mRecurrence;
}
void Incidence::setRecurrence( Recurrence * r)
{
if ( mRecurrence )
delete mRecurrence;
mRecurrence = r;
}
void Incidence::setLocation(const QString &location)
{
if (mReadOnly) return;
mLocation = location;
updated();
}
QString Incidence::location() const
{
return mLocation;
}
QString Incidence::recurrenceText() const
{
if ( mRecurrence ) return mRecurrence->recurrenceText();
return i18n("No");
}
ushort Incidence::doesRecur() const
{
if ( mRecurrence ) return mRecurrence->doesRecur();
else return Recurrence::rNone;
}
QDateTime Incidence::getNextOccurence( const QDateTime& dt, bool* ok ) const
{
QDateTime incidenceStart = dt;
*ok = false;
if ( doesRecur() ) {
bool last;
mRecurrence->getPreviousDateTime( incidenceStart , &last );
int count = 0;
if ( !last ) {
while ( !last ) {
++count;
incidenceStart = mRecurrence->getNextDateTime( incidenceStart, &last );
if ( recursOn( incidenceStart.date() ) ) {