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/kmail/annotationjobs.h

204 lines
6.3 KiB

/*
* annotationjobs.h
*
* Copyright (c) 2004 David Faure <faure@kde.org>
*
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; version 2 of the License
*
* This program 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 General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; 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.
*/
#ifndef ANNOTATIONJOBS_H
#define ANNOTATIONJOBS_H
#include <tdeio/job.h>
#include <tqvaluevector.h>
namespace KMail {
/// One entry in the annotation list: attribute name and attribute value
struct AnnotationAttribute {
AnnotationAttribute() {} // for TQValueVector
AnnotationAttribute( const TQString& e, const TQString& n, const TQString& v )
: entry( e ), name( n ), value( v ) {}
TQString entry; // e.g. /comment
TQString name; // e.g. value.shared
TQString value;
};
typedef TQValueVector<AnnotationAttribute> AnnotationList;
/**
* This namespace contains functions that return jobs for annotation operations.
*
* The current implementation is tied to IMAP.
* If someone wants to extend this to other protocols, turn the namespace into a class
* and use virtual methods.
*/
namespace AnnotationJobs {
/**
* Set an annotation entry (note that it can have multiple attributes)
* @param slave Slave object the job should be assigned to
* @param url URL for the annotation
* @param entry the name of the annotation entry
* @param attributes attribute name+value pairs
*/
TDEIO::SimpleJob* setAnnotation( TDEIO::Slave* slave, const KURL& url, const TQString& entry,
const TQMap<TQString,TQString>& attributes );
class MultiSetAnnotationJob;
/**
* Set multiple annotation entries
*/
MultiSetAnnotationJob* multiSetAnnotation( TDEIO::Slave* slave, const KURL& url, const AnnotationList& annotations );
class GetAnnotationJob;
/**
* Get an annotation entry
* @param slave Slave object the job should be assigned to
* @param url URL for the annotation
* @param entry the name of the annotation entry
* @param attributes attribute names
*/
GetAnnotationJob* getAnnotation( TDEIO::Slave* slave, const KURL& url, const TQString& entry,
const TQStringList& attributes );
class MultiGetAnnotationJob;
/**
* Get multiple annotation entries
* Currently we assume we want to get the "value" for each, to simplify the data structure.
*/
MultiGetAnnotationJob* multiGetAnnotation( TDEIO::Slave* slave, const KURL& url, const TQStringList& entries );
class MultiUrlGetAnnotationJob;
/**
* Get annotation entries for multiple folders.
* @param paths The paths to get the annotation for
* @param annotation The annotation to get
*/
MultiUrlGetAnnotationJob* multiUrlGetAnnotation( TDEIO::Slave* slave,
const KURL& baseUrl,
const TQStringList& paths,
const TQString& annotation );
/// for getAnnotation()
class GetAnnotationJob : public TDEIO::SimpleJob
{
TQ_OBJECT
public:
GetAnnotationJob( const KURL& url, const TQString& entry, const TQByteArray &packedArgs,
bool showProgressInfo );
const AnnotationList& annotations() const { return mAnnotations; }
protected slots:
void slotInfoMessage( TDEIO::Job*, const TQString& );
private:
AnnotationList mAnnotations;
TQString mEntry;
};
/// for multiGetAnnotation
class MultiGetAnnotationJob : public TDEIO::Job
{
TQ_OBJECT
public:
MultiGetAnnotationJob( TDEIO::Slave* slave, const KURL& url, const TQStringList& entries, bool showProgressInfo );
signals:
// Emitted when a given annotation was found - or not found
void annotationResult( const TQString& entry, const TQString& value, bool found );
protected slots:
virtual void slotStart();
virtual void slotResult( TDEIO::Job *job );
private:
TDEIO::Slave* mSlave;
const KURL mUrl;
const TQStringList mEntryList;
TQStringList::const_iterator mEntryListIterator;
};
/// for multiUrlGetAnnotation
class MultiUrlGetAnnotationJob : public TDEIO::Job
{
TQ_OBJECT
public:
MultiUrlGetAnnotationJob( TDEIO::Slave* slave, const KURL& baseUrl,
const TQStringList& paths, const TQString& annotation );
TQMap<TQString, TQString> annotations() const;
protected slots:
virtual void slotStart();
virtual void slotResult( TDEIO::Job *job );
private:
TDEIO::Slave* mSlave;
const KURL mUrl;
const TQStringList mPathList;
TQStringList::const_iterator mPathListIterator;
TQString mAnnotation;
TQMap<TQString, TQString> mAnnotations;
};
/// for multiSetAnnotation
class MultiSetAnnotationJob : public TDEIO::Job
{
TQ_OBJECT
public:
MultiSetAnnotationJob( TDEIO::Slave* slave, const KURL& url, const AnnotationList& annotations, bool showProgressInfo );
signals:
// Emitted when a given annotation was successfully changed
void annotationChanged( const TQString& entry, const TQString& attribute, const TQString& value );
protected slots:
virtual void slotStart();
virtual void slotResult( TDEIO::Job *job );
private:
TDEIO::Slave* mSlave;
const KURL mUrl;
const AnnotationList mAnnotationList;
AnnotationList::const_iterator mAnnotationListIterator;
};
} // AnnotationJobs namespace
} // KMail namespace
#endif /* ANNOTATIONJOBS_H */