summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEric Springer <eric.springer@nokia.com>2010-12-06 17:59:27 +1000
committerEric Springer <eric.springer@nokia.com>2010-12-06 18:00:17 +1000
commit8bf7d4e0c2d95ec80d4c99631ff89a8c687892ce (patch)
tree94677a895f6668e728ae646617d235a8863c730c
parent266d85e67c6ba9a24c2df1afa5c94080da6401d0 (diff)
New API additions
-rw-r--r--src/messaging/messagingutil.cpp40
-rw-r--r--src/messaging/messagingutil_p.h1
-rw-r--r--src/messaging/qmessageaccountfilter.cpp29
-rw-r--r--src/messaging/qmessageaccountfilter.h1
-rw-r--r--src/messaging/qmessagedatacomparator.h6
-rw-r--r--src/messaging/qmessagefilter.cpp262
-rw-r--r--src/messaging/qmessagefilter.h16
-rw-r--r--src/messaging/qmessagefolderfilter.cpp44
-rw-r--r--src/messaging/qmessagefolderfilter.h2
-rw-r--r--src/messaging/qmessagemanager.cpp12
-rw-r--r--src/messaging/qmessagemanager.h2
-rw-r--r--src/messaging/qmessageservice.cpp10
-rw-r--r--src/messaging/qmessageservice.h3
-rw-r--r--src/messaging/qmessageservice_qmf.cpp40
-rw-r--r--src/messaging/qmessagestore.h2
-rw-r--r--src/messaging/qmessagestore_maemo.cpp6
-rw-r--r--src/messaging/qmessagestore_qmf.cpp6
-rw-r--r--src/messaging/qmessagestore_stub.cpp5
-rw-r--r--src/messaging/qmessagestore_symbian.cpp6
-rw-r--r--src/messaging/qmessagestore_symbian_p.h2
-rw-r--r--src/messaging/qmessagestore_win.cpp6
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);