diff options
author | Eric Springer <eric.springer@nokia.com> | 2010-12-06 17:59:27 +1000 |
---|---|---|
committer | Eric Springer <eric.springer@nokia.com> | 2010-12-06 18:00:17 +1000 |
commit | 8bf7d4e0c2d95ec80d4c99631ff89a8c687892ce (patch) | |
tree | 94677a895f6668e728ae646617d235a8863c730c | |
parent | 266d85e67c6ba9a24c2df1afa5c94080da6401d0 (diff) |
New API additions
-rw-r--r-- | src/messaging/messagingutil.cpp | 40 | ||||
-rw-r--r-- | src/messaging/messagingutil_p.h | 1 | ||||
-rw-r--r-- | src/messaging/qmessageaccountfilter.cpp | 29 | ||||
-rw-r--r-- | src/messaging/qmessageaccountfilter.h | 1 | ||||
-rw-r--r-- | src/messaging/qmessagedatacomparator.h | 6 | ||||
-rw-r--r-- | src/messaging/qmessagefilter.cpp | 262 | ||||
-rw-r--r-- | src/messaging/qmessagefilter.h | 16 | ||||
-rw-r--r-- | src/messaging/qmessagefolderfilter.cpp | 44 | ||||
-rw-r--r-- | src/messaging/qmessagefolderfilter.h | 2 | ||||
-rw-r--r-- | src/messaging/qmessagemanager.cpp | 12 | ||||
-rw-r--r-- | src/messaging/qmessagemanager.h | 2 | ||||
-rw-r--r-- | src/messaging/qmessageservice.cpp | 10 | ||||
-rw-r--r-- | src/messaging/qmessageservice.h | 3 | ||||
-rw-r--r-- | src/messaging/qmessageservice_qmf.cpp | 40 | ||||
-rw-r--r-- | src/messaging/qmessagestore.h | 2 | ||||
-rw-r--r-- | src/messaging/qmessagestore_maemo.cpp | 6 | ||||
-rw-r--r-- | src/messaging/qmessagestore_qmf.cpp | 6 | ||||
-rw-r--r-- | src/messaging/qmessagestore_stub.cpp | 5 | ||||
-rw-r--r-- | src/messaging/qmessagestore_symbian.cpp | 6 | ||||
-rw-r--r-- | src/messaging/qmessagestore_symbian_p.h | 2 | ||||
-rw-r--r-- | src/messaging/qmessagestore_win.cpp | 6 |
21 files changed, 495 insertions, 6 deletions
diff --git a/src/messaging/messagingutil.cpp b/src/messaging/messagingutil.cpp index 4485e288a6..2bb861cfd1 100644 --- a/src/messaging/messagingutil.cpp +++ b/src/messaging/messagingutil.cpp @@ -226,6 +226,46 @@ namespace MessagingUtil { return prefix; } + // Needs to support escaping, and to be unit tested :P + bool globMatch(const QString &pattern, const QString &haystack) { + QString::const_iterator patIt(pattern.begin()); + QString::const_iterator hayIt(haystack.begin()); + + for ( ; hayIt != haystack.end() && *patIt != '%' ; ++hayIt, ++patIt) { + if ((patIt->toLower() != hayIt->toLower()) + && (*patIt != '_')) { + return false; + } + } + + QString::const_iterator tPatIt(pattern.end()); + QString::const_iterator tHayIt(haystack.end()); + + while (patIt != pattern.end() && hayIt != haystack.end()) { + if (*patIt == '%') { + if (++patIt == pattern.end()) + return true; + + tPatIt = patIt; + tHayIt = hayIt + 1; + } else if (patIt->toLower() == hayIt->toLower() || (*patIt != '_')) { + patIt++; + hayIt++; + } else { + patIt = tPatIt; + hayIt = tHayIt++; + } + } + + // eat trailing % + while (patIt != pattern.end() && *patIt == '%') { + patIt++; + } + + return hayIt == haystack.end() && patIt == pattern.end(); + } + + } QTM_END_NAMESPACE diff --git a/src/messaging/messagingutil_p.h b/src/messaging/messagingutil_p.h index 337706bfcb..210f7c2892 100644 --- a/src/messaging/messagingutil_p.h +++ b/src/messaging/messagingutil_p.h @@ -83,6 +83,7 @@ namespace MessagingUtil QString addIdPrefix(const QString& id); QString stripIdPrefix(const QString& id); QString idPrefix(); + bool globMatch(const QString &pattern, const QString &value); } QTM_END_NAMESPACE diff --git a/src/messaging/qmessageaccountfilter.cpp b/src/messaging/qmessageaccountfilter.cpp index 7f0b9fb427..0afdb9e420 100644 --- a/src/messaging/qmessageaccountfilter.cpp +++ b/src/messaging/qmessageaccountfilter.cpp @@ -40,6 +40,10 @@ ****************************************************************************/ #include "qmessageaccountfilter.h" #include "qmessageaccountfilter_p.h" +#include "qmessageaccount.h" +#include "qmessagemanager.h" +#include "messagingutil_p.h" +#include <QRegExp> QTM_BEGIN_NAMESPACE @@ -116,7 +120,7 @@ QTM_BEGIN_NAMESPACE An empty filter matches all accounts. - The result of combining an empty filter with a non-empty filter using an AND operation is the + The result of combining an empty filtter with a non-empty filter using an AND operation is the original non-empty filter. The result of combining an empty filter with a non-empty filter using an OR operation is the @@ -207,6 +211,14 @@ bool QMessageAccountFilter::operator!=(const QMessageAccountFilter& other) const */ /*! + \fn QMessageAccountFilter::byName(const QString &pattern, QMessageDataComparator::LikeComparator cmp) + + Returns a filter matching accounts who name matches \a pattern, according to \a cmp. + + \sa QMessageAccount::name() +*/ + +/*! \fn QMessageAccountFilter::byName(const QString &value, QMessageDataComparator::EqualityComparator cmp) Returns a filter matching accounts whose name matches \a value, according to \a cmp. @@ -222,4 +234,19 @@ bool QMessageAccountFilter::operator!=(const QMessageAccountFilter& other) const \sa QMessageAccount::name() */ +QMessageAccountFilter QMessageAccountFilter::byName(const QString &pattern, QMessageDataComparator::LikeComparator cmp) +{ + QMessageAccountIdList ids; + foreach (QMessageAccountId const& id, QMessageManager().queryAccounts()) { + bool matched(MessagingUtil::globMatch(pattern, QMessageAccount(id).name())); + if ((matched && cmp == QMessageDataComparator::Like) + || (!matched && cmp == QMessageDataComparator::NotLike)) { + ids.push_back(id); + } + } + + return QMessageAccountFilter::byId(ids); +} + + QTM_END_NAMESPACE diff --git a/src/messaging/qmessageaccountfilter.h b/src/messaging/qmessageaccountfilter.h index 30498ab61d..bead2d13a6 100644 --- a/src/messaging/qmessageaccountfilter.h +++ b/src/messaging/qmessageaccountfilter.h @@ -78,6 +78,7 @@ public: static QMessageAccountFilter byId(const QMessageAccountIdList &ids, QMessageDataComparator::InclusionComparator cmp = QMessageDataComparator::Includes); static QMessageAccountFilter byId(const QMessageAccountFilter &filter, QMessageDataComparator::InclusionComparator cmp = QMessageDataComparator::Includes); + static QMessageAccountFilter byName(const QString &pattern, QMessageDataComparator::LikeComparator cmp); static QMessageAccountFilter byName(const QString &value, QMessageDataComparator::EqualityComparator cmp); static QMessageAccountFilter byName(const QString &value, QMessageDataComparator::InclusionComparator cmp = QMessageDataComparator::Includes); diff --git a/src/messaging/qmessagedatacomparator.h b/src/messaging/qmessagedatacomparator.h index e52345dfe6..de548706db 100644 --- a/src/messaging/qmessagedatacomparator.h +++ b/src/messaging/qmessagedatacomparator.h @@ -68,6 +68,12 @@ namespace QMessageDataComparator { GreaterThanEqual }; + enum LikeComparator + { + Like, + NotLike + }; + enum MatchFlag { MatchCaseSensitive = Qt::MatchCaseSensitive, diff --git a/src/messaging/qmessagefilter.cpp b/src/messaging/qmessagefilter.cpp index 930610463c..c2e1ba461a 100644 --- a/src/messaging/qmessagefilter.cpp +++ b/src/messaging/qmessagefilter.cpp @@ -40,6 +40,9 @@ ****************************************************************************/ #include "qmessagefilter.h" #include "qmessagefilter_p.h" +#include "qmessageid.h" +#include "messagingutil_p.h" +#include "qmessagemanager.h" QTM_BEGIN_NAMESPACE @@ -174,7 +177,13 @@ QTM_BEGIN_NAMESPACE /*! \fn QMessageFilter::operator|=(const QMessageFilter& other) - + foreach(QMessageAccount const& id, QMessageManager().queryMessages()) { + if (MessagingUtil::globMatch(pattern, QMessageAccount(id).name())) { + ids.push_back(id); + } + } + + return QMessageAccountFilter::byId(ids); Performs a logical OR with this filter and the filter \a other and assigns the result to this filter. */ @@ -233,6 +242,14 @@ bool QMessageFilter::operator!=(const QMessageFilter& other) const */ /*! + \fn QMessageFilter::bySender(const QString &pattern, QMessageDataComparator::LikeComparator cmp) + + Returns a filter matching messages whose sender matches \a value, according to \a cmp. + + \sa QMessage::from() +*/ + +/*! \fn QMessageFilter::bySender(const QString &value, QMessageDataComparator::EqualityComparator cmp) Returns a filter matching messages whose sender matches \a value, according to \a cmp. @@ -249,18 +266,45 @@ bool QMessageFilter::operator!=(const QMessageFilter& other) const */ /*! + \fn QMessageFilter::byRecipients(const QString &pattern, QMessageDataComparator::LikeComparator cmp) + + Returns a filter matching messages whose recipients include the substring \a pattern, + according to \a cmp. + + \sa QMessage::to(), QMessage::cc(), QMessage::bcc() +*/ + +/*! \fn QMessageFilter::byRecipients(const QString &value, QMessageDataComparator::InclusionComparator cmp) - - Returns a filter matching messages whose recipients include the substring \a value, + + Returns a filter matching messages whose recipients include the substring \a value, + according to \a cmp. + + \sa QMessage::to(), QMessage::cc(), QMessage::bcc() +*/ + +/*! + \fn QMessageFilter::byRecipients(const QString &value, QMessageDataComparator::EqualityComparator cmp) + + Returns a filter matching messages whose recipients include the substring \a value, according to \a cmp. \sa QMessage::to(), QMessage::cc(), QMessage::bcc() */ /*! - \fn QMessageFilter::bySubject(const QString &value, QMessageDataComparator::EqualityComparator cmp) + \fn QMessageFilter::bySubject(const QString &pattern, QMessageDataComparator::EqualityComparator cmp) - Returns a filter matching messages whose subject matches \a value, according to \a cmp. + Returns a filter matching messages whose subject matches \a pattern, according to \a cmp. + + \sa QMessage::subject() +*/ + +/*! + \fn QMessageFilter::bySubject(const QString &value, QMessageDataComparator::InclusionComparator cmp) + + Returns a filter matching messages whose subject matches the + substring \a value, according to \a cmp. \sa QMessage::subject() */ @@ -405,4 +449,212 @@ bool QMessageFilter::operator!=(const QMessageFilter& other) const \sa QMessage::parentFolderId() */ +/*! + \fn QMessageFilter::byTo(const QString &pattern, QMessageDataComparator::LikeComparator cmp) + + Returns a filter matching messages whose recipients include the substring \a pattern, + according to \a cmp. + + \sa QMessage::to(), QMessage::cc(), QMessage::bcc() +*/ + +/*! + \fn QMessageFilter::byTo(const QString &value, QMessageDataComparator::InclusionComparator cmp) + + Returns a filter matching messages whose recipients include the substring \a value, + according to \a cmp. + + \sa QMessage::to(), QMessage::cc(), QMessage::bcc() +*/ + +/*! + \fn QMessageFilter::byTo(const QString &value, QMessageDataComparator::EqualityComparator cmp) + + Returns a filter matching messages whose recipients include the substring \a value, + according to \a cmp. + + \sa QMessage::to(), QMessage::cc(), QMessage::bcc() +*/ + +/*! + \fn QMessageFilter::byCc(const QString &pattern, QMessageDataComparator::LikeComparator cmp) + + Returns a filter matching messages whose recipients include the substring \a pattern, + according to \a cmp. + + \sa QMessage::to(), QMessage::cc(), QMessage::bcc() +*/ + +/*! + \fn QMessageFilter::byCc(const QString &value, QMessageDataComparator::InclusionComparator cmp) + + Returns a filter matching messages whose recipients include the substring \a value, + according to \a cmp. + + \sa QMessage::to(), QMessage::cc(), QMessage::bcc() +*/ + +/*! + \fn QMessageFilter::byCc(const QString &value, QMessageDataComparator::EqualityComparator cmp) + + Returns a filter matching messages whose recipients include the substring \a value, + according to \a cmp. + + \sa QMessage::to(), QMessage::cc(), QMessage::bcc() +*/ + +/*! + \fn QMessageFilter::byBcc(const QString &pattern, QMessageDataComparator::LikeComparator cmp) + + Returns a filter matching messages whose recipients include the substring \a pattern, + according to \a cmp. + + \sa QMessage::to(), QMessage::cc(), QMessage::bcc() +*/ + +/*! + \fn QMessageFilter::byBcc(const QString &value, QMessageDataComparator::InclusionComparator cmp) + + Returns a filter matching messages whose recipients include the substring \a value, + according to \a cmp. + + \sa QMessage::to(), QMessage::cc(), QMessage::bcc() +*/ + +/*! + \fn QMessageFilter::byBcc(const QString &value, QMessageDataComparator::EqualityComparator cmp) + + Returns a filter matching messages whose recipients include the substring \a value, + according to \a cmp. + + \sa QMessage::to(), QMessage::cc(), QMessage::bcc() +*/ + + +QMessageFilter QMessageFilter::bySender(const QString &pattern, QMessageDataComparator::LikeComparator cmp) +{ + QMessageIdList ids; + foreach (QMessageId const& id, QMessageManager().queryMessages()) { + bool matched(MessagingUtil::globMatch(pattern, QMessage(id).from().addressee())); + if ((matched && cmp == QMessageDataComparator::Like) + || (!matched && cmp == QMessageDataComparator::NotLike)) { + ids.push_back(id); + } + } + + return QMessageFilter::byId(ids); +} + +QMessageFilter QMessageFilter::byRecipients(const QString &pattern, QMessageDataComparator::LikeComparator cmp) +{ + QMessageIdList ids; + + foreach (QMessageId const& id, QMessageManager().queryMessages()) { + QMessage msg(id); + QMessageAddressList addressList(msg.to()); + addressList.append(msg.cc()); + addressList.append(msg.bcc()); + + bool matched(false); + + foreach (QMessageAddress const& addr, addressList) { + if (MessagingUtil::globMatch(pattern, addr.addressee())) { + matched = true; + break; + } + } + + if ((matched && cmp == QMessageDataComparator::Like) + || (!matched && cmp == QMessageDataComparator::NotLike)) { + ids.push_back(id); + } + } + + return QMessageFilter::byId(ids); +} + +QMessageFilter QMessageFilter::bySubject(const QString &pattern, QMessageDataComparator::LikeComparator cmp) +{ + QMessageIdList ids; + foreach (QMessageId const& id, QMessageManager().queryMessages()) { + bool matched(MessagingUtil::globMatch(pattern, QMessage(id).subject())); + if ((matched && cmp == QMessageDataComparator::Like) + || (!matched && cmp == QMessageDataComparator::NotLike)) { + ids.push_back(id); + } + } + + return QMessageFilter::byId(ids); +} + +QMessageFilter QMessageFilter::byTo(const QString &pattern, QMessageDataComparator::LikeComparator cmp) +{ + QMessageIdList ids; + + foreach (QMessageId const& id, QMessageManager().queryMessages()) { + bool matched(false); + foreach (QMessageAddress const& addr, QMessage(id).to()) { + if (MessagingUtil::globMatch(pattern, addr.addressee())) { + matched = true; + break; + } + } + + if ((matched && cmp == QMessageDataComparator::Like) + || (!matched && cmp == QMessageDataComparator::NotLike)) { + ids.push_back(id); + } + } + + return QMessageFilter::byId(ids); +} + +QMessageFilter QMessageFilter::byCc(const QString &pattern, QMessageDataComparator::LikeComparator cmp) +{ + QMessageIdList ids; + + foreach (QMessageId const& id, QMessageManager().queryMessages()) { + bool matched(false); + foreach (QMessageAddress const& addr, QMessage(id).cc()) { + if (MessagingUtil::globMatch(pattern, addr.addressee())) { + matched = true; + break; + } + } + + if ((matched && cmp == QMessageDataComparator::Like) + || (!matched && cmp == QMessageDataComparator::NotLike)) { + ids.push_back(id); + } + + } + + return QMessageFilter::byId(ids); +} + +QMessageFilter QMessageFilter::byBcc(const QString &pattern, QMessageDataComparator::LikeComparator cmp) +{ + QMessageIdList ids; + + foreach (QMessageId const& id, QMessageManager().queryMessages()) { + bool matched(false); + foreach (QMessageAddress const& addr, QMessage(id).bcc()) { + if (MessagingUtil::globMatch(pattern, addr.addressee())) { + matched = true; + break; + } + } + + if ((matched && cmp == QMessageDataComparator::Like) + || (!matched && cmp == QMessageDataComparator::NotLike)) { + ids.push_back(id); + } + + } + + return QMessageFilter::byId(ids); +} + + + QTM_END_NAMESPACE diff --git a/src/messaging/qmessagefilter.h b/src/messaging/qmessagefilter.h index 45b256d9af..42646a0994 100644 --- a/src/messaging/qmessagefilter.h +++ b/src/messaging/qmessagefilter.h @@ -87,11 +87,15 @@ public: static QMessageFilter byType(QMessage::Type type, QMessageDataComparator::EqualityComparator cmp = QMessageDataComparator::Equal); static QMessageFilter byType(QMessage::TypeFlags type, QMessageDataComparator::InclusionComparator cmp); + static QMessageFilter bySender(const QString &pattern, QMessageDataComparator::LikeComparator cmp); static QMessageFilter bySender(const QString &value, QMessageDataComparator::EqualityComparator cmp); static QMessageFilter bySender(const QString &value, QMessageDataComparator::InclusionComparator cmp = QMessageDataComparator::Includes); + static QMessageFilter byRecipients(const QString &pattern, QMessageDataComparator::LikeComparator cmp); + static QMessageFilter byRecipients(const QString &value, QMessageDataComparator::EqualityComparator cmp); static QMessageFilter byRecipients(const QString &value, QMessageDataComparator::InclusionComparator cmp = QMessageDataComparator::Includes); + static QMessageFilter bySubject(const QString &pattern, QMessageDataComparator::LikeComparator cmp); static QMessageFilter bySubject(const QString &value, QMessageDataComparator::EqualityComparator cmp); static QMessageFilter bySubject(const QString &value, QMessageDataComparator::InclusionComparator cmp = QMessageDataComparator::Includes); @@ -120,6 +124,18 @@ public: static QMessageFilter byAncestorFolderIds(const QMessageFolderId &id, QMessageDataComparator::InclusionComparator cmp = QMessageDataComparator::Includes); static QMessageFilter byAncestorFolderIds(const QMessageFolderFilter &filter, QMessageDataComparator::InclusionComparator cmp = QMessageDataComparator::Includes); + static QMessageFilter byTo(const QString &pattern, QMessageDataComparator::LikeComparator cmp); + static QMessageFilter byTo(const QString &value, QMessageDataComparator::EqualityComparator cmp); + static QMessageFilter byTo(const QString &value, QMessageDataComparator::InclusionComparator cmp = QMessageDataComparator::Includes); + + static QMessageFilter byCc(const QString &pattern, QMessageDataComparator::LikeComparator cmp); + static QMessageFilter byCc(const QString &value, QMessageDataComparator::EqualityComparator cmp); + static QMessageFilter byCc(const QString &value, QMessageDataComparator::InclusionComparator cmp = QMessageDataComparator::Includes); + + static QMessageFilter byBcc(const QString &pattern, QMessageDataComparator::LikeComparator cmp); + static QMessageFilter byBcc(const QString &value, QMessageDataComparator::EqualityComparator cmp); + static QMessageFilter byBcc(const QString &value, QMessageDataComparator::InclusionComparator cmp = QMessageDataComparator::Includes); + private: QMessageFilterPrivate *d_ptr; }; diff --git a/src/messaging/qmessagefolderfilter.cpp b/src/messaging/qmessagefolderfilter.cpp index 36577e36ad..b3a19586da 100644 --- a/src/messaging/qmessagefolderfilter.cpp +++ b/src/messaging/qmessagefolderfilter.cpp @@ -40,6 +40,9 @@ ****************************************************************************/ #include "qmessagefolderfilter.h" #include "qmessagefolderfilter_p.h" +#include "messagingutil_p.h" +#include "qmessagefolder.h" +#include "qmessagemanager.h" QTM_BEGIN_NAMESPACE @@ -207,6 +210,14 @@ bool QMessageFolderFilter::operator!=(const QMessageFolderFilter& other) const */ /*! + \fn QMessageFolderFilter::byName(const QString &pattern, QMessageDataComparator::LikeComparator cmp) + + Returns a filter matching folders whose display name matches \a value, according to \a cmp. + + \sa QMessageFolder::name() +*/ + +/*! \fn QMessageFolderFilter::byName(const QString &value, QMessageDataComparator::EqualityComparator cmp) Returns a filter matching folders whose display name matches \a value, according to \a cmp. @@ -223,6 +234,14 @@ bool QMessageFolderFilter::operator!=(const QMessageFolderFilter& other) const */ /*! + \fn QMessageFolderFilter::byPath(const QString &pattern, QMessageDataComparator::LikeComparator cmp) + + Returns a filter matching folders whose path matches \a value, according to \a cmp. + + \sa QMessageFolder::path() +*/ + +/*! \fn QMessageFolderFilter::byPath(const QString &value, QMessageDataComparator::EqualityComparator cmp) Returns a filter matching folders whose path matches \a value, according to \a cmp. @@ -286,4 +305,29 @@ bool QMessageFolderFilter::operator!=(const QMessageFolderFilter& other) const \sa QMessageFolder::id() */ +QMessageFolderFilter QMessageFolderFilter::byName(const QString &pattern, QMessageDataComparator::LikeComparator cmp) +{ + QMessageFolderIdList ids; + foreach(QMessageFolderId const& id, QMessageManager().queryFolders()) { + if (MessagingUtil::globMatch(pattern, QMessageFolder(id).name())) { + ids.push_back(id); + } + } + + return QMessageFolderFilter::byId(ids); +} + +QMessageFolderFilter QMessageFolderFilter::byPath(const QString &pattern, QMessageDataComparator::LikeComparator cmp) +{ + QMessageFolderIdList ids; + foreach(QMessageFolderId const& id, QMessageManager().queryFolders()) { + if (MessagingUtil::globMatch(pattern, QMessageFolder(id).path())) { + ids.push_back(id); + } + } + + return QMessageFolderFilter::byId(ids); +} + + QTM_END_NAMESPACE diff --git a/src/messaging/qmessagefolderfilter.h b/src/messaging/qmessagefolderfilter.h index 7781e4d567..fa3f904880 100644 --- a/src/messaging/qmessagefolderfilter.h +++ b/src/messaging/qmessagefolderfilter.h @@ -81,9 +81,11 @@ public: static QMessageFolderFilter byId(const QMessageFolderIdList &ids, QMessageDataComparator::InclusionComparator cmp = QMessageDataComparator::Includes); static QMessageFolderFilter byId(const QMessageFolderFilter &filter, QMessageDataComparator::InclusionComparator cmp = QMessageDataComparator::Includes); + static QMessageFolderFilter byName(const QString &pattern, QMessageDataComparator::LikeComparator cmp); static QMessageFolderFilter byName(const QString &value, QMessageDataComparator::EqualityComparator cmp); static QMessageFolderFilter byName(const QString &value, QMessageDataComparator::InclusionComparator cmp = QMessageDataComparator::Includes); + static QMessageFolderFilter byPath(const QString &pattern, QMessageDataComparator::LikeComparator cmp); static QMessageFolderFilter byPath(const QString &value, QMessageDataComparator::EqualityComparator cmp); static QMessageFolderFilter byPath(const QString &value, QMessageDataComparator::InclusionComparator cmp = QMessageDataComparator::Includes); diff --git a/src/messaging/qmessagemanager.cpp b/src/messaging/qmessagemanager.cpp index d20ab690d1..90d1c210c7 100644 --- a/src/messaging/qmessagemanager.cpp +++ b/src/messaging/qmessagemanager.cpp @@ -468,6 +468,18 @@ bool QMessageManager::removeMessages(const QMessageFilter& filter, QMessageManag return store->removeMessages(filter, option); } + +/*! + \fn QMessageManager::removeAccount(const QMessageAccountId &id) + + Remove account \a id and all associated information (folders, messages etc.) + +*/ +bool QMessageManager::removeAccount(const QMessageAccountId &id) +{ + return store->removeAccount(id); +} + /*! \fn QMessageManager::addMessage(QMessage *message) diff --git a/src/messaging/qmessagemanager.h b/src/messaging/qmessagemanager.h index 03f8dc4dd4..9cad455176 100644 --- a/src/messaging/qmessagemanager.h +++ b/src/messaging/qmessagemanager.h @@ -113,6 +113,8 @@ public: bool removeMessage(const QMessageId &id, RemovalOption option = RemoveOnOriginatingServer); bool removeMessages(const QMessageFilter &filter, RemovalOption option = RemoveOnOriginatingServer); + bool removeAccount(const QMessageAccountId &id); + QMessage message(const QMessageId &id) const; QMessageFolder folder(const QMessageFolderId &id) const; QMessageAccount account(const QMessageAccountId &id) const; diff --git a/src/messaging/qmessageservice.cpp b/src/messaging/qmessageservice.cpp index 69a18a5a23..12a807e01c 100644 --- a/src/messaging/qmessageservice.cpp +++ b/src/messaging/qmessageservice.cpp @@ -301,6 +301,16 @@ QTM_BEGIN_NAMESPACE \sa QMessageManager::addMessage(), QMessageManager::updateMessage(), QMessageManager::removeMessage(), QMessageManager::removeMessages() */ + +/*! + \fn QMessageService::moveMessage(const QMessageId &messageId, const QMessageFolderId &toFolderId) + + Initiate a request to move message \a messageId to the folder \toFolderId + + The folder must be in the same account as the message. This will move the message on the external server, as well as locally. + + Returns true if the operation can be initiated; otherwise returns false. +*/ /*! \fn QMessageService::state() const diff --git a/src/messaging/qmessageservice.h b/src/messaging/qmessageservice.h index 991237c5f0..24bbf59b51 100644 --- a/src/messaging/qmessageservice.h +++ b/src/messaging/qmessageservice.h @@ -80,6 +80,9 @@ public: bool show(const QMessageId &id); bool exportUpdates(const QMessageAccountId &id); + bool moveMessages(const QMessageIdList &messageIds, const QMessageFolderId &toFolderId); + bool synchronize(const QMessageAccountId &id); + State state() const; QMessageManager::Error error() const; diff --git a/src/messaging/qmessageservice_qmf.cpp b/src/messaging/qmessageservice_qmf.cpp index 109a210444..24e96797f9 100644 --- a/src/messaging/qmessageservice_qmf.cpp +++ b/src/messaging/qmessageservice_qmf.cpp @@ -83,6 +83,7 @@ public: QMailTransmitAction _transmit; QMailRetrievalAction _retrieval; + QMailStorageAction _storage; QMailServiceAction *_active; QMessageManager::Error _error; bool _activeStoreAction; @@ -108,6 +109,7 @@ signals: protected slots: void transmitActivityChanged(QMailServiceAction::Activity a); void retrievalActivityChanged(QMailServiceAction::Activity a); + void storageActivityChanged(QMailServiceAction::Activity a); void statusChanged(const QMailServiceAction::Status &s); void completed(); void reportMatchingIds(); @@ -132,6 +134,9 @@ QMessageServicePrivate::QMessageServicePrivate() connect(&_retrieval, SIGNAL(activityChanged(QMailServiceAction::Activity)), this, SLOT(retrievalActivityChanged(QMailServiceAction::Activity))); connect(&_retrieval, SIGNAL(statusChanged(QMailServiceAction::Status)), this, SLOT(statusChanged(QMailServiceAction::Status))); + + connect(&_storage, SIGNAL(activityChanged(QMailServiceAction::Activity)), this, SLOT(storageActivityChanged(QMailServiceAction::Activity))); + connect(&_storage, SIGNAL(statusChanged(QMailServiceAction::Status)), this, SLOT(statusChanged(QMailServiceAction::Status))); } bool QMessageServicePrivate::isBusy() const @@ -202,6 +207,7 @@ void QMessageServicePrivate::retrievalActivityChanged(QMailServiceAction::Activi emit stateChanged(convert(a)); } + void QMessageServicePrivate::completed() { _activeStoreAction = false; @@ -580,6 +586,40 @@ bool QMessageService::exportUpdates(const QMessageAccountId &id) return true; } +void QMessageServicePrivate::storageActivityChanged(QMailServiceAction::Activity a) +{ + if ((a == QMailServiceAction::Failed) && (_error == QMessageManager::NoError)) { + _error = QMessageManager::RequestIncomplete; + } + + emit stateChanged(convert(a)); +} + +bool QMessageService::moveMessages(const QMessageIdList &messageIds, const QMessageFolderId &toFolderId) +{ + if (d_ptr->isBusy()) { + return false; + } + d_ptr->_active = 0; + d_ptr->_error = QMessageManager::NoError; + d_ptr->_active = &d_ptr->_storage; + d_ptr->_storage.moveMessages(convert(messageIds), convert(toFolderId)); + return true; +} + +bool QMessageService::synchronize(const QMessageAccountId &id) +{ + if (d_ptr->isBusy()) { + return false; + } + + d_ptr->_active = 0; + d_ptr->_error = QMessageManager::NoError; + d_ptr->_active = &d_ptr->_retrieval; + d_ptr->_retrieval.synchronize(convert(id), 0); + return true; +} + QMessageService::State QMessageService::state() const { if (d_ptr->_active) { diff --git a/src/messaging/qmessagestore.h b/src/messaging/qmessagestore.h index 7418c6e65f..fcca6e2bd3 100644 --- a/src/messaging/qmessagestore.h +++ b/src/messaging/qmessagestore.h @@ -84,6 +84,8 @@ public: bool removeMessage(const QMessageId &id, QMessageManager::RemovalOption option = QMessageManager::RemoveOnOriginatingServer); bool removeMessages(const QMessageFilter &filter, QMessageManager::RemovalOption option = QMessageManager::RemoveOnOriginatingServer); + bool removeAccount(const QMessageAccountId &id); + QMessage message(const QMessageId &id) const; QMessageFolder folder(const QMessageFolderId &id) const; QMessageAccount account(const QMessageAccountId &id) const; diff --git a/src/messaging/qmessagestore_maemo.cpp b/src/messaging/qmessagestore_maemo.cpp index f6e1c0e122..d7df1a86d2 100644 --- a/src/messaging/qmessagestore_maemo.cpp +++ b/src/messaging/qmessagestore_maemo.cpp @@ -290,6 +290,12 @@ bool QMessageStore::removeMessages(const QMessageFilter& filter, QMessageManager return true; } +bool QMessageStore::removeAccount(const QMessageAccountId &id) +{ +#warning TODO: implement + return false; +} + bool QMessageStore::addMessage(QMessage *m) { bool retVal = true; diff --git a/src/messaging/qmessagestore_qmf.cpp b/src/messaging/qmessagestore_qmf.cpp index 1e6909101a..24eef32ef9 100644 --- a/src/messaging/qmessagestore_qmf.cpp +++ b/src/messaging/qmessagestore_qmf.cpp @@ -251,6 +251,12 @@ bool QMessageStore::removeMessages(const QMessageFilter& filter, QMessageManager return d_ptr->_store->removeMessages(convert(filter), convert(option)); } +bool QMessageStore::removeAccount(const QMessageAccountId &id) +{ + d_ptr->_error = QMessageManager::NoError; + return d_ptr->_store->removeAccount(convert(id)); +} + bool QMessageStore::addMessage(QMessage *m) { // Ensure that the size estimate is updated if necessary diff --git a/src/messaging/qmessagestore_stub.cpp b/src/messaging/qmessagestore_stub.cpp index 520684aa4d..886fdda4f9 100644 --- a/src/messaging/qmessagestore_stub.cpp +++ b/src/messaging/qmessagestore_stub.cpp @@ -170,6 +170,11 @@ bool QMessageStore::removeMessages(const QMessageFilter& filter, QMessageManager return true; // stub } +bool QMessageStore::removeAccount(const QMessageAccountId &) +{ + return true; // stub +} + bool QMessageStore::addMessage(QMessage *m) { Q_UNUSED(m) diff --git a/src/messaging/qmessagestore_symbian.cpp b/src/messaging/qmessagestore_symbian.cpp index fe1322ef26..6c24720eeb 100644 --- a/src/messaging/qmessagestore_symbian.cpp +++ b/src/messaging/qmessagestore_symbian.cpp @@ -290,6 +290,12 @@ bool QMessageStorePrivate::removeMessages(const QMessageFilter &filter, QMessage return retVal; } +bool QMessageStorePrivate::removeAccount(const QMessageAccountId &id) +{ +#warning TODO: implementation + return false; +} + QMessage QMessageStorePrivate::message(const QMessageId& id) const { switch (idType(id)) { diff --git a/src/messaging/qmessagestore_symbian_p.h b/src/messaging/qmessagestore_symbian_p.h index a226ad9259..5e433a68da 100644 --- a/src/messaging/qmessagestore_symbian_p.h +++ b/src/messaging/qmessagestore_symbian_p.h @@ -85,6 +85,8 @@ public: bool updateMessage(QMessage *m); bool removeMessage(const QMessageId &id, QMessageManager::RemovalOption option); bool removeMessages(const QMessageFilter &filter, QMessageManager::RemovalOption option); + + bool removeAccount(const QMessageAccountId &id); QMessage message(const QMessageId& id) const; diff --git a/src/messaging/qmessagestore_win.cpp b/src/messaging/qmessagestore_win.cpp index cc1a2e43b2..d7449d462d 100644 --- a/src/messaging/qmessagestore_win.cpp +++ b/src/messaging/qmessagestore_win.cpp @@ -363,6 +363,12 @@ bool QMessageStore::removeMessages(const QMessageFilter& filter, QMessageManager return result; } +bool QMessageStore::removeAccount(const QMessageAccountId &id) +{ +#warning TODO: implement + return false; +} + bool QMessageStore::addMessage(QMessage *message) { bool result(false); |