• Skip to content
  • Skip to link menu
KDE API Reference
  • KDE API Reference
  • kdepim API Reference
  • KDE Home
  • Contact Us
 

libkdepim

  • sources
  • kde-4.14
  • kdepim
  • libkdepim
  • misc
maillistdrag.cpp
Go to the documentation of this file.
1 /*
2  This file is part of libkdepim.
3 
4  Copyright (c) 2003 Don Sanders <sanders@kde.org>
5  Copyright (c) 2005 George Staikos <staikos@kde.org>
6  Copyright (c) 2005 Rafal Rzepecki <divide@users.sourceforge.net>
7  Copyright (c) 2008 Thomas McGuire <mcguire@kde.org>
8 
9  This library is free software; you can redistribute it and/or
10  modify it under the terms of the GNU Library General Public
11  License as published by the Free Software Foundation; either
12  version 2 of the License, or (at your option) any later version.
13 
14  This library is distributed in the hope that it will be useful,
15  but WITHOUT ANY WARRANTY; without even the implied warranty of
16  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17  Library General Public License for more details.
18 
19  You should have received a copy of the GNU Library General Public License
20  along with this library; see the file COPYING.LIB. If not, write to
21  the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
22  Boston, MA 02110-1301, USA.
23 */
24 
25 #include "maillistdrag.h"
26 
27 #include <KDateTime>
28 #include <KLocale>
29 #include <KProgressDialog>
30 #include <KUrl>
31 
32 #include <QBuffer>
33 #include <QDataStream>
34 #include <QEventLoop>
35 
36 using namespace KPIM;
37 
38 
39 // Have to define before use
40 QDataStream& operator<< ( QDataStream &s, const MailSummary &d )
41 {
42  s << d.serialNumber();
43  s << d.messageId();
44  s << d.subject();
45  s << d.from();
46  s << d.to();
47  KDateTime tempTime;
48  tempTime.setTime_t( d.date() );
49  s << tempTime.dateTime();
50  return s;
51 }
52 
53 QDataStream& operator>> ( QDataStream &s, MailSummary &d )
54 {
55  quint32 serialNumber;
56  QString messageId, subject, from, to;
57  time_t date;
58  s >> serialNumber;
59  s >> messageId;
60  s >> subject;
61  s >> from;
62  s >> to;
63  QDateTime tempTime;
64  s >> tempTime;
65  date = KDateTime( tempTime ).toTime_t();
66  d.set( serialNumber, messageId, subject, from, to, date );
67  return s;
68 }
69 
70 QDataStream& operator<< ( QDataStream &s, const MailList &mailList )
71 {
72  MailList::const_iterator it;
73  MailList::const_iterator end( mailList.constEnd() );
74  for (it = mailList.constBegin(); it!=end; ++it) {
75  MailSummary mailDrag = *it;
76  s << mailDrag;
77  }
78  return s;
79 }
80 
81 QDataStream& operator>> ( QDataStream &s, MailList &mailList )
82 {
83  mailList.clear();
84  MailSummary mailDrag;
85  while (!s.atEnd()) {
86  s >> mailDrag;
87  mailList.append( mailDrag );
88  }
89  return s;
90 }
91 
92 MailSummary::MailSummary( quint32 serialNumber, const QString &messageId,
93  const QString &subject, const QString &from, const QString &to,
94  time_t date )
95  : mSerialNumber( serialNumber ), mMessageId( messageId ),
96  mSubject( subject ), mFrom( from ), mTo( to ), mDate( date )
97 {}
98 
99 quint32 MailSummary::serialNumber() const
100 {
101  return mSerialNumber;
102 }
103 
104 QString MailSummary::messageId() const
105 {
106  return mMessageId;
107 }
108 
109 QString MailSummary::subject() const
110 {
111  return mSubject;
112 }
113 
114 QString MailSummary::from() const
115 {
116  return mFrom;
117 }
118 
119 QString MailSummary::to() const
120 {
121  return mTo;
122 }
123 
124 time_t MailSummary::date() const
125 {
126  return mDate;
127 }
128 
129 void MailSummary::set( quint32 serialNumber, const QString &messageId,
130  const QString &subject, const QString &from, const QString &to, time_t date )
131 {
132  mSerialNumber = serialNumber;
133  mMessageId = messageId;
134  mSubject = subject;
135  mFrom = from;
136  mTo = to;
137  mDate = date;
138 }
139 
140 #ifdef Q_CC_MSVC
141 MailSummary::operator KUrl() const { return KUrl(); }
142 #endif
143 
144 QString MailList::mimeDataType()
145 {
146  return QLatin1String( "x-kmail-drag/message-list" );
147 }
148 
149 bool MailList::canDecode( const QMimeData *md )
150 {
151  return md->hasFormat( mimeDataType() );
152 }
153 
154 void MailList::populateMimeData( QMimeData *md )
155 {
156  /* We have three different possible mime types: x-kmail-drag/message-list, message/rfc822, and URL
157  Add them in this order */
158 
159  /* Popuplate the MimeData with the custom streaming x-kmail-drag/message-list mime type */
160  if ( count() ) {
161  QByteArray array;
162  QBuffer buffer( &array, 0 );
163  buffer.open( QIODevice::WriteOnly);
164  QDataStream stream( &buffer );
165  stream << (*this);
166  buffer.close();
167  md->setData( MailList::mimeDataType(), array );
168  }
169 }
170 
171 MailList MailList::fromMimeData( const QMimeData *md )
172 {
173  if ( canDecode(md) ) {
174  return decode( md->data( mimeDataType() ) );
175  } else {
176  return MailList();
177  }
178 }
179 
180 MailList MailList::decode( const QByteArray& payload )
181 {
182  MailList mailList;
183  // A read-only data stream
184  QDataStream stream( payload );
185  if ( payload.size() ) {
186  stream >> mailList;
187  }
188  return mailList;
189 }
190 
191 QByteArray MailList::serialsFromMimeData( const QMimeData *md )
192 {
193  MailList mailList = fromMimeData( md );
194  if ( mailList.count() ) {
195  MailList::const_iterator it;
196  QByteArray a;
197  QBuffer buffer( &a );
198  buffer.open( QIODevice::WriteOnly );
199  QDataStream stream( &buffer );
200  MailList::const_iterator end( mailList.constEnd() );
201  for (it = mailList.constBegin(); it != end; ++it) {
202  MailSummary mailDrag = *it;
203  stream << mailDrag.serialNumber();
204  }
205  buffer.close();
206  return a;
207  } else {
208  return QByteArray();
209  }
210 }
211 
212 MailListMimeData::MailListMimeData( MailTextSource *src )
213  : mMailTextSource( src )
214 {
215 }
216 
217 MailListMimeData::~MailListMimeData()
218 {
219  delete mMailTextSource;
220  mMailTextSource = 0;
221 }
222 
223 bool MailListMimeData::hasFormat ( const QString & mimeType ) const
224 {
225  if ( mimeType == QLatin1String( "message/rfc822" ) && mMailTextSource )
226  return true;
227  else
228  return QMimeData::hasFormat( mimeType );
229 }
230 
231 QStringList MailListMimeData::formats () const
232 {
233  QStringList theFormats = QMimeData::formats();
234  if ( mMailTextSource )
235  theFormats.prepend( QLatin1String( "message/rfc822" ) );
236  return theFormats;
237 }
238 
239 QVariant MailListMimeData::retrieveData( const QString & mimeType,
240  QVariant::Type type ) const
241 {
242  if ( ( mimeType == QLatin1String( "message/rfc822" ) ) && mMailTextSource ) {
243 
244  if ( mMails.isEmpty() ) {
245  MailList list = MailList::fromMimeData( this );
246  KProgressDialog *dlg = new KProgressDialog( 0, QString(),
247  i18n("Retrieving and storing messages...") );
248  dlg->setWindowModality( Qt::WindowModal );
249  dlg->setAllowCancel( true );
250  dlg->progressBar()->setMaximum( list.size() );
251  int i = 0;
252  dlg->progressBar()->setValue( i );
253  dlg->show();
254  MailList::ConstIterator end( list.constEnd() );
255  for ( MailList::ConstIterator it = list.constBegin(); it != end; ++it ) {
256 
257  // Get the serial number from the mail summary and use the mail text source
258  // to get the actual text of the mail.
259  MailSummary mailSummary = *it;
260  mMails.append( mMailTextSource->text( mailSummary.serialNumber() ) );
261  if ( dlg->wasCancelled() ) {
262  break;
263  }
264  dlg->progressBar()->setValue(++i);
265 #ifdef __GNUC__
266 #warning Port me!
267 #endif
268  //kapp->eventLoop()->processEvents(QEventLoop::ExcludeSocketNotifiers);
269  }
270  delete dlg;
271  }
272  return mMails;
273  }
274  else
275  return QMimeData::retrieveData( mimeType, type );
276 }
QList::clear
void clear()
QMimeData::data
QByteArray data(const QString &mimeType) const
QMimeData::retrieveData
virtual QVariant retrieveData(const QString &mimeType, QVariant::Type type) const
QByteArray
KPIM::MailTextSource::text
virtual QByteArray text(quint32 serialNumber) const =0
QMimeData::hasFormat
virtual bool hasFormat(const QString &mimeType) const
QDataStream
KPIM::MailSummary::date
time_t date() const
Date the message was sent.
Definition: maillistdrag.cpp:124
QList< MailSummary >::count
int count() const
KPIM::MailListMimeData::retrieveData
virtual QVariant retrieveData(const QString &mimeType, QVariant::Type type) const
Reimplemented so that the message/rfc822 mimetype data can be retrieved from mMailTextSource.
Definition: maillistdrag.cpp:239
QByteArray::isEmpty
bool isEmpty() const
QBuffer
KPIM::MailTextSource
Object for the drag object to call-back for message fulltext.
Definition: maillistdrag.h:106
KPIM::MailList::populateMimeData
void populateMimeData(QMimeData *md)
Definition: maillistdrag.cpp:154
KPIM::MailListMimeData::hasFormat
virtual bool hasFormat(const QString &mimeType) const
Definition: maillistdrag.cpp:223
KPIM::MailSummary::from
QString from() const
Simplified from address.
Definition: maillistdrag.cpp:114
QMimeData
QList::size
int size() const
QList::count
int count(const T &value) const
KPIM::MailList::fromMimeData
static MailList fromMimeData(const QMimeData *md)
Definition: maillistdrag.cpp:171
QList::append
void append(const T &value)
KPIM::MailSummary::messageId
QString messageId() const
MD5 checksum of message identification string.
Definition: maillistdrag.cpp:104
maillistdrag.h
KPIM::MailSummary::to
QString to() const
Simplified to address.
Definition: maillistdrag.cpp:119
KPIM::MailSummary::subject
QString subject() const
Subject of the message including prefixes.
Definition: maillistdrag.cpp:109
QBuffer::open
virtual bool open(QFlags< QIODevice::OpenModeFlag > flags)
KPIM::MailListMimeData::~MailListMimeData
~MailListMimeData()
Definition: maillistdrag.cpp:217
QString
KPIM::MailListMimeData::formats
virtual QStringList formats() const
Definition: maillistdrag.cpp:231
KPIM::MailList::decode
static MailList decode(const QByteArray &payload)
Definition: maillistdrag.cpp:180
QDataStream::atEnd
bool atEnd() const
KPIM::MailList::canDecode
static bool canDecode(const QMimeData *md)
Definition: maillistdrag.cpp:149
operator>>
QDataStream & operator>>(QDataStream &s, MailSummary &d)
Definition: maillistdrag.cpp:53
QStringList
QByteArray::append
QByteArray & append(char ch)
QList< MailSummary >::end
iterator end()
QDateTime::toTime_t
uint toTime_t() const
KPIM::MailSummary::set
void set(quint32, const QString &, const QString &, const QString &, const QString &, time_t)
Set fields for this mail summary.
Definition: maillistdrag.cpp:129
QBuffer::close
virtual void close()
KPIM::MailSummary
Represents a single dragged mail.
Definition: maillistdrag.h:59
KPIM::MailList::serialsFromMimeData
static QByteArray serialsFromMimeData(const QMimeData *md)
Definition: maillistdrag.cpp:191
QLatin1String
KPIM::MailList
List of mail summaries.
Definition: maillistdrag.h:117
QList< MailSummary >::ConstIterator
typedef ConstIterator
operator<<
QDataStream & operator<<(QDataStream &s, const MailSummary &d)
Definition: maillistdrag.cpp:40
QMimeData::formats
virtual QStringList formats() const
QList::prepend
void prepend(const T &value)
QMimeData::setData
void setData(const QString &mimeType, const QByteArray &data)
KPIM::MailSummary::serialNumber
quint32 serialNumber() const
KMail unique identification number.
Definition: maillistdrag.cpp:99
QList::constEnd
const_iterator constEnd() const
QList::constBegin
const_iterator constBegin() const
QByteArray::size
int size() const
KPIM::MailList::mimeDataType
static QString mimeDataType()
Definition: maillistdrag.cpp:144
QDateTime
KPIM::MailSummary::MailSummary
MailSummary()
Definition: maillistdrag.h:64
KPIM::MailListMimeData::MailListMimeData
MailListMimeData(MailTextSource *src=0)
Definition: maillistdrag.cpp:212
QVariant
This file is part of the KDE documentation.
Documentation copyright © 1996-2020 The KDE developers.
Generated on Mon Jun 22 2020 13:33:50 by doxygen 1.8.7 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

libkdepim

Skip menu "libkdepim"
  • Main Page
  • Namespace List
  • Namespace Members
  • Alphabetical List
  • Class List
  • Class Hierarchy
  • Class Members
  • File List
  • File Members
  • Modules

kdepim API Reference

Skip menu "kdepim API Reference"
  • akonadi_next
  • akregator
  • blogilo
  • calendarsupport
  • console
  •   kabcclient
  •   konsolekalendar
  • kaddressbook
  • kalarm
  •   lib
  • kdgantt2
  • kjots
  • kleopatra
  • kmail
  • knode
  • knotes
  • kontact
  • korgac
  • korganizer
  • ktimetracker
  • libkdepim
  • libkleo
  • libkpgp
  • mailcommon
  • messagelist
  • messageviewer
  • pimprint

Search



Report problems with this website to our bug tracking system.
Contact the specific authors with questions and comments about the page contents.

KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal