Skip to content

Commit

Permalink
Merge branch 'jb36482-only-sync-folders' into 'master'
Browse files Browse the repository at this point in the history
Filter non-sync folder notifications

See merge request mer-core/qmf-notifications-plugin!14
  • Loading branch information
llewelld committed Sep 15, 2020
2 parents 424cd54 + 8bf5c60 commit d8bb3f6
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 2 deletions.
31 changes: 29 additions & 2 deletions src/mailstoreobserver.cpp
Expand Up @@ -145,6 +145,7 @@ void MailStoreObserver::reloadNotifications()
const QMailAccountIdList enabledAccounts(QMailStore::instance()->queryAccounts(QMailAccountKey::messageType(QMailMessage::Email)
& QMailAccountKey::status(QMailAccount::Enabled)));

clearFoldersToSync();
// Find the set of messages we've previously published notifications for
QList<QObject *> existingNotifications(Notification::notifications());
for (QObject *obj : existingNotifications) {
Expand Down Expand Up @@ -231,9 +232,11 @@ bool MailStoreObserver::notifyMessage(const QMailMessageMetaData &message)
{
if (message.messageType()==QMailMessage::Email &&
!(message.status() & QMailMessage::Read) &&
!(message.status() & QMailMessage::Temporary)&&
!(message.status() & QMailMessage::Temporary) &&
!(message.status() & QMailMessage::NoNotification) &&
!(message.status() & QMailMessage::Trash)) {
!(message.status() & QMailMessage::Junk) &&
!(message.status() & QMailMessage::Trash) &&
messageInFolderToSync(message)) {
return true;
} else {
return false;
Expand Down Expand Up @@ -435,6 +438,8 @@ void MailStoreObserver::notificationActionInvoked(const QString &name)

void MailStoreObserver::addMessages(const QMailMessageIdList &ids)
{
clearFoldersToSync();

for (const QMailMessageId &id : ids) {
const QMailMessageMetaData message(id);

Expand Down Expand Up @@ -464,6 +469,7 @@ void MailStoreObserver::updateMessages(const QMailMessageIdList &ids)
{
// TODO: notify messages that we already have and change the status
// from read to unread ???
clearFoldersToSync();

for (const QMailMessageId &id : ids) {
if (_publishedMessages.contains(id)) {
Expand Down Expand Up @@ -561,3 +567,24 @@ void MailStoreObserver::accountInboxDisplayed(int accountId)
}
}

void MailStoreObserver::clearFoldersToSync()
{
_tempFoldersToSync.clear();
}

bool MailStoreObserver::messageInFolderToSync(const QMailMessageMetaData &message)
{
QMailAccountId accountId = message.parentAccountId();
QMailFolderId folderId = message.parentFolderId();

// Optimise by only getting the folder list once for each account
if (_tempFoldersToSync.contains(accountId)) {
QList<QMailFolderId> const &folders = _tempFoldersToSync.value(accountId);
return folders.contains(folderId);
} else {
QList<QMailFolderId> const &folders = QMailAccount(accountId).foldersToSync();
_tempFoldersToSync.insert(accountId, folders);
return folders.contains(folderId);
}
}

3 changes: 3 additions & 0 deletions src/mailstoreobserver.h
Expand Up @@ -84,6 +84,7 @@ private slots:
QMailStore *_storage;
MessageHash _publishedMessages;
QSet<QMailMessageId> _newMessages;
QHash<QMailAccountId, QList<QMailFolderId>> _tempFoldersToSync;

void reloadNotifications();
void closeNotifications();
Expand All @@ -94,6 +95,8 @@ private slots:
bool notifyMessage(const QMailMessageMetaData &message);
void notifyOnly();
void updateNotifications();
void clearFoldersToSync();
bool messageInFolderToSync(const QMailMessageMetaData &message);
};

#endif // MAILSTOREOBSERVER_H

0 comments on commit d8bb3f6

Please sign in to comment.