/usr/include/kimap/getmetadatajob.h is in kdepimlibs5-dev 4:4.14.10-7+b2.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 | /*
Copyright (c) 2009 Andras Mantia <amantia@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 KIMAP_GETMETADATAJOB_H
#define KIMAP_GETMETADATAJOB_H
#include "kimap_export.h"
#include "metadatajobbase.h"
namespace KIMAP {
class Session;
struct Message;
class GetMetaDataJobPrivate;
/**
* Fetches mailbox metadata.
*
* Provides support for the IMAP METADATA extension; both the
* final RFC version
* (<a href="http://tools.ietf.org/html/rfc5464">RFC 5464</a>)
* and the older, incompatible draft version (known as ANNOTATEMORE)
* (<a
* href="http://tools.ietf.org/html/draft-daboo-imap-annotatemore-07"
* >draft-daboo-imap-annotatemore-07</a>). See setServerCompatibility().
*
* This job can only be run when the session is in the
* authenticated (or selected) state.
*
* If the server supports ACLs, the user will need the
* Acl::Lookup right on the mailbox, as well as one of
* - Acl::Read
* - Acl::KeepSeen
* - Acl::Write
* - Acl::Insert
* - Acl::Post
* Otherwise, the user must be able to list the mailbox
* and either read or write the message content.
*
* Note also that on servers that implement the Annotatemore
* version of the extension, only Acl::Lookup rights are
* required (ie: the user must be able to list the mailbox).
*/
class KIMAP_EXPORT GetMetaDataJob : public MetaDataJobBase
{
Q_OBJECT
Q_DECLARE_PRIVATE( GetMetaDataJob )
friend class SessionPrivate;
public:
explicit GetMetaDataJob( Session *session );
virtual ~GetMetaDataJob();
/**
* Used to specify the depth of the metadata heirachy to walk.
*/
enum Depth {
NoDepth = 0, /**< Only the requested entries */
OneLevel, /**< The requested entries and all their direct children */
AllLevels /**< The requested entries and all their descendants */
};
Q_DECLARE_FLAGS( Depths, Depth )
/**
* Add an entry to the query list.
*
* See SetMetaDataJob for a description of metadata entry names.
*
* When operating in Annotatemore mode, you should provide an attribute
* name. Typically this will be "value", "value.priv" or "value.shared",
* although you might want to fetch the "content-type" or
* "content-language" attributes as well.
*
* @param entry the metadata entry name
* @param attribute the attribute name, in Annotatemore mode
*
* @deprecated use addRequestedEntry(QByteArray) instead
*/
KIMAP_DEPRECATED void addEntry( const QByteArray &entry, const QByteArray &attribute = QByteArray() );
/**
* Add an entry to the query list.
*
* See SetMetaDataJob for a description of metadata entry names.
*
* Note that this expects METADATA style entries (with a /shared or /private prefix typically).
* In ANNOTATEMORE mode, this prefix is automatically replaced with an appropriate attribute.
*
* @param entry the metadata entry name
*/
void addRequestedEntry( const QByteArray &entry );
/**
* Limits the size of returned metadata entries.
*
* In order to save time or bandwidth, it is possible to prevent the
* server from returning metadata entries that are larger than a
* certain size. These entries will simply not appear in the
* list returned by allMetaData(), and will not be accessible using
* metaData().
*
* Note that this is only used when the server capability mode is
* Metadata.
*
* The default is no limit (-1). A value of less than -1 will cause
* the job to fail.
*
* @param size the entry size limit, in octets, or -1 for no limit
*/
void setMaximumSize( qint64 size );
/**
* Sets whether to retrieve children or descendants of the requested entries.
*
* Metadata entry names are heirachical, much like UNIX path names.
* It therefore makes sense to ask for an entry and all its children
* (OneLevel) or an entry and all its descendants (AllLevels).
*
* For example, /shared/foo/bar/baz is a child of /shared/foo/bar and a
* descendent of /shared/foo. So if you request the entry "/shared/foo"
* with depth NoDepth, you will only get the "/shared/foo" entry. If
* you set the depth to OneLevel, you will also get "/shared/foo/bar".
* If you set the depth to AllLevels, you will also get
* "/shared/foo/bar/baz", and every other metadata entry that starts
* with "/shared/foo/".
*
* Note that this is only used when the server capability mode is
* Metadata.
*
* @param depth the depth of the metadata tree to return
*/
void setDepth( Depth depth );
/**
* Get a single metadata entry.
*
* The metadata must have been requested using addEntry(), and
* the job must have completed successfully, or this method
* will not return anything.
*
* Note that if setMaximumSize() was used to limit the size of
* returned metadata, this method may return an empty QByteArray
* even if the metadata entry was requested and exists on the
* server. This will happen when the metadata entry is larger
* than the size limit given to setMaximumSize().
*
* @param mailBox the mailbox the metadata is attached to, or
* an empty string for server metadata
* @param entry the entry to get
* @param attribute (only in Annotatemore mode) the attribute to get
* @return the metadata entry value
*
* @deprecated use metaData(QByteArray entry) instead
*/
// XXX: what's with the mailBox argument in a class that has setMailBox()?
// KJobs are not intended to be run more than once
KIMAP_DEPRECATED QByteArray metaData( const QString &mailBox, const QByteArray &entry,
const QByteArray &attribute = QByteArray() ) const;
/**
* Get a single metadata entry.
*
* The metadata must have been requested using addEntry(), and
* the job must have completed successfully, or this method
* will not return anything.
*
* Note that if setMaximumSize() was used to limit the size of
* returned metadata, this method may return an empty QByteArray
* even if the metadata entry was requested and exists on the
* server. This will happen when the metadata entry is larger
* than the size limit given to setMaximumSize().
*
* Note that this expects METADATA style entries (with a /shared or /private prefix typically).
* In ANNOTATEMORE mode, this prefix is automatically replaced with an appropriate attribute.
*
* @param entry the entry to get
* @return the metadata entry value
*/
QByteArray metaData( const QByteArray &entry ) const;
/**
* Get all the metadata for a given mailbox.
*
* The returned map is from metadata entry names to attributes or values.
*
* If operating in Metadata mode, the metadata value is stored against the
* empty QByteArray:
* @code
* map = job.allMetaData( "INBOX" );
* QByteArray value = map[ "/shared/comment" ].value( QByteArray() );
* @endcode
*
* The equivalent in Annotatemore mode would be:
* @code
* map = job.allMetaData( "INBOX" );
* QByteArray value = map[ "/comment" ].value( "value.shared" );
* @endcode
*
* @param mailBox a mailbox name or an empty string for server metadata
* @return a map from metadata entry names to attributes or values
*/
// XXX: what's with the mailBox argument in a class that has setMailBox()?
// KJobs are not intended to be run more than once
QMap<QByteArray, QMap<QByteArray, QByteArray> > allMetaData( const QString &mailBox ) const;
/**
* Get all the metadata.
*
* Note that the returned map uses METADATA style entries (with a /shared or /private prefix typically),
* also in ANNOTATEMORE mode.
*
* @return a map from metadata entry names to values
*/
QMap<QByteArray, QByteArray> allMetaData() const;
protected:
virtual void doStart();
virtual void handleResponse( const Message &response );
};
}
#endif
|