--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/messaging/win32wce/qmailmessage_p.h Wed Aug 25 15:49:42 2010 +0300
@@ -0,0 +1,429 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the Qt Mobility Components.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the Qt API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+#ifndef QMAILMESSAGE_P_H
+#define QMAILMESSAGE_P_H
+
+#include "qmailmessage.h"
+#include "longstring_p.h"
+
+
+// These classes are implemented via qmailmessage.cpp and qmailinstantiations.cpp
+
+class QMailMessageHeaderFieldPrivate : public QPrivateImplementationBase
+{
+public:
+ QMailMessageHeaderFieldPrivate();
+ QMailMessageHeaderFieldPrivate(const QByteArray& text, bool structured);
+ QMailMessageHeaderFieldPrivate(const QByteArray& name, const QByteArray& text, bool structured);
+
+ bool operator== (const QMailMessageHeaderFieldPrivate& other) const;
+
+ void addParameter(const QByteArray& name, const QByteArray& value);
+ void parse(const QByteArray& text, bool structured);
+
+ bool isNull() const;
+
+ QByteArray id() const;
+ void setId(const QByteArray& text);
+
+ QByteArray content() const;
+ void setContent(const QByteArray& text);
+
+ QByteArray parameter(const QByteArray& name) const;
+ void setParameter(const QByteArray& name, const QByteArray& value);
+
+ bool isParameterEncoded(const QByteArray& name) const;
+ void setParameterEncoded(const QByteArray& name);
+
+ QList<QMailMessageHeaderField::ParameterType> parameters() const;
+
+ QByteArray toString(bool includeName = true, bool presentable = true) const;
+
+ void output(QDataStream& out) const;
+
+ QString decodedContent() const;
+
+ template <typename Stream> void serialize(Stream &stream) const;
+ template <typename Stream> void deserialize(Stream &stream);
+
+ QByteArray _id;
+ QByteArray _content;
+ bool _structured;
+ QList<QMailMessageHeaderField::ParameterType> _parameters;
+};
+
+
+class QMailMessageHeaderPrivate : public QPrivateImplementationBase
+{
+public:
+ QMailMessageHeaderPrivate();
+ QMailMessageHeaderPrivate(const QByteArray& input);
+
+ void update(const QByteArray &id, const QByteArray &content);
+ void append(const QByteArray &id, const QByteArray &content);
+ void remove(const QByteArray &id);
+
+ QList<QMailMessageHeaderField> fields(const QByteArray& id, int maximum = -1) const;
+
+ void output(QDataStream& out, const QList<QByteArray>& exclusions, bool excludeInternalFields) const;
+
+ template <typename Stream> void serialize(Stream &stream) const;
+ template <typename Stream> void deserialize(Stream &stream);
+
+private:
+ friend class QMailMessageHeader;
+
+ QList<QByteArray> _headerFields;
+};
+
+
+class QMailMessageBodyPrivate : public QPrivateImplementationBase
+{
+public:
+ QMailMessageBodyPrivate();
+
+ void fromLongString(LongString& ls, const QMailMessageContentType& type, QMailMessageBody::TransferEncoding encoding, QMailMessageBody::EncodingStatus status);
+ void fromFile(const QString& filename, const QMailMessageContentType& type, QMailMessageBody::TransferEncoding encoding, QMailMessageBody::EncodingStatus status);
+ void fromStream(QDataStream& in, const QMailMessageContentType& type, QMailMessageBody::TransferEncoding encoding, QMailMessageBody::EncodingStatus status);
+ void fromStream(QTextStream& in, const QMailMessageContentType& type, QMailMessageBody::TransferEncoding encoding);
+
+ bool toFile(const QString& filename, QMailMessageBody::EncodingFormat format) const;
+ bool toStream(QDataStream& out, QMailMessageBody::EncodingFormat format) const;
+ bool toStream(QTextStream& out) const;
+
+ QMailMessageBody::TransferEncoding transferEncoding() const;
+ QMailMessageContentType contentType() const;
+
+ bool isEmpty() const;
+ int length() const;
+
+ uint indicativeSize() const;
+
+ void output(QDataStream& out, bool includeAttachments) const;
+
+ // We will express the indicative size of the body in units of this:
+ static const uint IndicativeSizeUnit = 1024;
+
+ template <typename Stream> void serialize(Stream &stream) const;
+ template <typename Stream> void deserialize(Stream &stream);
+
+private:
+ friend class QMailMessageBody;
+
+ QMailMessageBody::TransferEncoding _encoding;
+ LongString _bodyData;
+ QString _filename;
+ bool _encoded;
+ QMailMessageContentType _type;
+};
+
+
+class QMailMessagePartContainerPrivate : public QPrivateImplementationBase
+{
+public:
+ template<typename Derived>
+ QMailMessagePartContainerPrivate(Derived* p);
+
+ void setLocation(const QMailMessageId& id, const QList<uint>& indices);
+ int partNumber() const;
+
+ const QMailMessagePartContainerPrivate* parentContainerPrivate() const;
+
+ bool contains(const QMailMessagePart::Location& location) const;
+ const QMailMessagePart& partAt(const QMailMessagePart::Location& location) const;
+ QMailMessagePart& partAt(const QMailMessagePart::Location& location);
+
+ void setHeader(const QMailMessageHeader& header, const QMailMessagePartContainerPrivate* parent = 0);
+
+ QByteArray headerField( const QByteArray &headerName ) const;
+ QList<QByteArray> headerFields( const QByteArray &headerName, int maximum = 0 ) const;
+
+ QList<QByteArray> headerFields() const;
+
+ void updateHeaderField(const QByteArray &id, const QByteArray &content);
+ void updateHeaderField(const QByteArray &id, const QString &content);
+
+ void appendHeaderField(const QByteArray &id, const QByteArray &content);
+ void appendHeaderField(const QByteArray &id, const QString &content);
+
+ void removeHeaderField(const QByteArray &id);
+
+ void setMultipartType(QMailMessagePartContainer::MultipartType type);
+ void appendPart(const QMailMessagePart &part);
+ void prependPart(const QMailMessagePart &part);
+ void removePartAt(uint pos);
+ void clear();
+
+ QMailMessageContentType contentType() const;
+ QMailMessageBody::TransferEncoding transferEncoding() const;
+
+ uint indicativeSize() const;
+
+protected:
+ friend class QMailMessagePartContainer;
+ friend class QMailMessagePart;
+ friend class QMailMessagePart::Location;
+ friend class QMailMessagePrivate;
+
+ void defaultContentType(const QMailMessagePartContainerPrivate* parent);
+
+ template <typename F>
+ void outputParts(QDataStream **out, bool addMimePreamble, bool includeAttachments, bool excludeInternalFields, F *func) const;
+
+ void outputBody(QDataStream& out, bool includeAttachments) const;
+
+ QString headerFieldText( const QString &id ) const;
+
+ QByteArray boundary() const;
+ void setBoundary(const QByteArray& text);
+
+ // Note: this returns a reference:
+ QMailMessageBody& body();
+ const QMailMessageBody& body() const;
+ void setBody(const QMailMessageBody& body);
+ void setBodyProperties(const QMailMessageContentType &type, QMailMessageBody::TransferEncoding encoding);
+
+ bool hasBody() const;
+
+ void parseMimeSinglePart(const QMailMessageHeader& partHeader, LongString body);
+ void parseMimeMultipart(const QMailMessageHeader& partHeader, LongString body, bool insertIntoSelf);
+ bool parseMimePart(LongString body);
+
+ static QMailMessagePartContainerPrivate* privatePointer(QMailMessagePart& part);
+
+ bool dirty(bool recursive = false) const;
+ void setDirty(bool value = true, bool recursive = false);
+
+ template <typename Stream> void serialize(Stream &stream) const;
+ template <typename Stream> void deserialize(Stream &stream);
+
+ QMailMessagePartContainer::MultipartType _multipartType;
+ QList<QMailMessagePart> _messageParts;
+ mutable QByteArray _boundary;
+ QMailMessageHeader _header;
+ QMailMessageBody _body;
+ QMailMessageId _messageId;
+ QList<uint> _indices;
+ bool _hasBody;
+ bool _dirty;
+};
+
+
+class QMailMessagePartPrivate : public QMailMessagePartContainerPrivate
+{
+public:
+ QMailMessagePartPrivate();
+
+ QMailMessagePart::ReferenceType referenceType() const;
+
+ QMailMessageId messageReference() const;
+ QMailMessagePart::Location partReference() const;
+
+ QString referenceResolution() const;
+ void setReferenceResolution(const QString &uri);
+
+ bool contentAvailable() const;
+ bool partialContentAvailable() const;
+
+ template <typename F>
+ void output(QDataStream **out, bool addMimePreamble, bool includeAttachments, bool excludeInternalFields, F *func) const;
+
+ bool contentModified() const;
+ void setUnmodified();
+
+ template <typename Stream> void serialize(Stream &stream) const;
+ template <typename Stream> void deserialize(Stream &stream);
+
+private:
+ friend class QMailMessagePart;
+
+ void setReference(const QMailMessageId &id, const QMailMessageContentType& type, QMailMessageBody::TransferEncoding encoding);
+ void setReference(const QMailMessagePart::Location &location, const QMailMessageContentType& type, QMailMessageBody::TransferEncoding encoding);
+
+ QMailMessageId _referenceId;
+ QMailMessagePart::Location _referenceLocation;
+ QString _resolution;
+};
+
+
+class QMailMessageMetaDataPrivate : public QPrivateImplementationBase
+{
+public:
+ QMailMessageMetaDataPrivate();
+
+ static void initializeFlags();
+
+ void setMessageType(QMailMessage::MessageType type);
+#ifndef QTOPIAMAIL_PARSING_ONLY
+ void setParentFolderId(const QMailFolderId& id);
+ void setPreviousParentFolderId(const QMailFolderId& id);
+#endif
+ void setId(const QMailMessageId& id);
+ void setStatus(quint64 status);
+#ifndef QTOPIAMAIL_PARSING_ONLY
+ void setParentAccountId(const QMailAccountId& id);
+#endif
+ void setServerUid(const QString &server);
+ void setSize(uint size);
+ void setContent(QMailMessage::ContentType type);
+
+ void setSubject(const QString& s);
+ void setDate(const QMailTimeStamp& timeStamp);
+ void setReceivedDate(const QMailTimeStamp& timeStamp);
+ void setFrom(const QString& s);
+ void setTo(const QString& s);
+
+ void setContentScheme(const QString& scheme);
+ void setContentIdentifier(const QString& identifier);
+
+ void setInResponseTo(const QMailMessageId &id);
+ void setResponseType(QMailMessage::ResponseType type);
+
+ uint indicativeSize() const;
+
+ bool dataModified() const;
+ void setUnmodified();
+
+ QString customField(const QString &name) const;
+ void setCustomField(const QString &name, const QString &value);
+ void removeCustomField(const QString &name);
+ void setCustomFields(const QMap<QString, QString> &fields);
+
+ template <typename Stream> void serialize(Stream &stream) const;
+ template <typename Stream> void deserialize(Stream &stream);
+
+ QMailMessage::MessageType _messageType;
+ quint64 _status;
+ QMailMessage::ContentType _contentType;
+
+#ifndef QTOPIAMAIL_PARSING_ONLY
+ QMailAccountId _parentAccountId;
+#endif
+ QString _serverUid;
+ uint _size;
+ QMailMessageId _id;
+#ifndef QTOPIAMAIL_PARSING_ONLY
+ QMailFolderId _parentFolderId;
+ QMailFolderId _previousParentFolderId;
+#endif
+
+ QString _subject;
+ QMailTimeStamp _date;
+ QMailTimeStamp _receivedDate;
+ QString _from;
+ QString _to;
+
+ QString _contentScheme;
+ QString _contentIdentifier;
+
+ QMailMessageId _responseId;
+ QMailMessage::ResponseType _responseType;
+
+ QMap<QString, QString> _customFields;
+ bool _customFieldsModified;
+
+ template <typename T>
+ void updateMember(T& value, const T& newValue)
+ {
+ if (value != newValue) {
+ value = newValue;
+ _dirty = true;
+ }
+ }
+
+ bool _dirty;
+
+private:
+ static quint64 registerFlag(const QString &name);
+};
+
+
+class QMailMessagePrivate : public QMailMessagePartContainerPrivate
+{
+public:
+ QMailMessagePrivate();
+
+ void fromRfc2822(const LongString &ls);
+
+ template <typename F>
+ void toRfc2822(QDataStream **out, QMailMessage::EncodingFormat format, quint64 messageStatus, F *func) const;
+
+ void setMessageType(QMailMessage::MessageType type);
+
+ void setId(const QMailMessageId& id);
+ void setSubject(const QString& s);
+ void setDate(const QMailTimeStamp& timeStamp);
+ void setFrom(const QString& from);
+ void setReplyTo(const QString& s);
+ void setInReplyTo(const QString& s);
+
+ void setTo(const QString& s);
+ void setCc(const QString& s);
+ void setBcc(const QString& s);
+
+ bool hasRecipients() const;
+
+ uint indicativeSize() const;
+
+ bool contentModified() const;
+ void setUnmodified();
+
+ template <typename Stream> void serialize(Stream &stream) const;
+ template <typename Stream> void deserialize(Stream &stream);
+
+private:
+ void outputHeaders(QDataStream& out, bool addTimeStamp, bool addContentHeaders, bool includeBcc, bool excludeInternalFields) const;
+};
+
+#endif
+