You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tdepim/libkcal/scheduler.h

194 lines
5.6 KiB

/*
This file is part of libkcal.
Copyright (c) 2001-2003 Cornelius Schumacher <schumacher@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., 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA.
*/
#ifndef KCAL_SCHEDULER_H
#define KCAL_SCHEDULER_H
#include <qstring.h>
#include <qptrlist.h>
#include "libkcal_export.h"
namespace KCal {
class IncidenceBase;
class Event;
class Calendar;
class ICalFormat;
class FreeBusyCache;
/**
This class provides an encapsulation of a scheduling message. It associates an
incidence with a method and status information. This class is used by the
Scheduler class.
@short A Scheduling message
*/
class ScheduleMessage
{
public:
/**
Message status.
*/
enum Status { PublishNew, PublishUpdate, Obsolete, RequestNew,
RequestUpdate, Unknown };
/**
Create a scheduling message with method as defined in Scheduler::Method
and a status.
*/
ScheduleMessage( IncidenceBase *, int method, Status status );
~ScheduleMessage() {};
/**
Return event associated with this message.
*/
IncidenceBase *event() { return mIncidence; }
/**
Return iTIP method associated with this message.
*/
int method() { return mMethod; }
/**
Return status of this message.
*/
Status status() { return mStatus; }
/**
Return error message if there is any.
*/
QString error() { return mError; }
/**
Return a human-readable name for an iTIP message status.
*/
static QString statusName( Status status );
private:
IncidenceBase *mIncidence;
int mMethod;
Status mStatus;
QString mError;
class Private;
Private *d;
};
/**
This class provides an encapsulation of iTIP transactions. It is an abstract
base class for inheritance by implementations of the iTIP scheme like iMIP or
iRIP.
*/
class LIBKCAL_EXPORT Scheduler
{
public:
/**
iTIP methods.
*/
enum Method { Publish,Request,Refresh,Cancel,Add,Reply,Counter,
Declinecounter,NoMethod };
/**
Create scheduler for calendar specified as argument.
*/
Scheduler( Calendar *calendar );
virtual ~Scheduler();
/**
iTIP publish action
*/
virtual bool publish( IncidenceBase *incidence,
const QString &recipients ) = 0;
/**
Perform iTIP transaction on incidence. The method is specified as the
method argument and can be any valid iTIP method.
*/
virtual bool performTransaction( IncidenceBase *incidence,
Method method ) = 0;
/**
Perform iTIP transaction on incidence to specified recipient(s). The
method is specified as the method argumanet and can be any valid iTIP
method.
*/
virtual bool performTransaction( IncidenceBase *incidence, Method method,
const QString &recipients ) = 0;
/**
Retrieve incoming iTIP transactions.
*/
virtual QPtrList<ScheduleMessage> retrieveTransactions() = 0;
/**
Accept transaction. The incidence argument specifies the iCal compoennt
on which the transaction acts. The status is the result of processing a
iTIP message with the current calendar and specifies the action to be
taken for this incidence.
*/
bool acceptTransaction( IncidenceBase *, Method method,
ScheduleMessage::Status status );
/**
Return a machine-readable name for a iTIP method.
*/
static QString methodName( Method );
/**
Return a translated human-readable name for a iTIP method.
*/
static QString translatedMethodName( Method );
virtual bool deleteTransaction( IncidenceBase *incidence );
/**
Returns the directory where the free-busy information is stored.
*/
virtual QString freeBusyDir() = 0;
/**
Set free/busy cache used to store free/busy information.
*/
void setFreeBusyCache( FreeBusyCache * );
/**
Return free/busy cache.
*/
FreeBusyCache *freeBusyCache() const;
protected:
bool acceptPublish( IncidenceBase *, ScheduleMessage::Status status,
Method method );
bool acceptRequest( IncidenceBase *, ScheduleMessage::Status status );
bool acceptAdd( IncidenceBase *, ScheduleMessage::Status status );
bool acceptCancel( IncidenceBase *, ScheduleMessage::Status status );
bool acceptDeclineCounter( IncidenceBase *,
ScheduleMessage::Status status );
bool acceptReply( IncidenceBase *, ScheduleMessage::Status status,
Method method );
bool acceptRefresh( IncidenceBase *, ScheduleMessage::Status status );
bool acceptCounter( IncidenceBase *, ScheduleMessage::Status status );
bool acceptFreeBusy( IncidenceBase *, Method method );
Calendar *mCalendar;
ICalFormat *mFormat;
private:
class Private;
Private *d;
};
}
#endif