void MessageModel::setContact(const QContact& contact) { clear(); // Locate messages whose sender is this contact QMailMessageKey msgsFrom; // Locate messages whose recipients list contains this contact QMailMessageKey msgsTo; // Match on any of contact's phone numbers foreach(const QString& number, contact.phoneNumbers().values()) { msgsFrom |= QMailMessageKey(QMailMessageKey::Sender, number); msgsTo |= QMailMessageKey(QMailMessageKey::Recipients, number, QMailMessageKey::Contains); } // Match on any of contact's email addresses foreach(const QString& address, contact.emailList()) { msgsFrom |= QMailMessageKey(QMailMessageKey::Sender, address); msgsTo |= QMailMessageKey(QMailMessageKey::Recipients, address, QMailMessageKey::Contains); } // Sort messages by timestamp, newest to oldest QMailMessageSortKey sort(QMailMessageSortKey::TimeStamp, Qt::DescendingOrder); // Fetch the messages matching either of our queries, and return them sorted QMailIdList matches(QMailStore::instance()->queryMessages(msgsFrom | msgsTo, sort)); // Add each returned message to our data model foreach (const QMailId& id, matches) appendRow(new MessageItem(id)); }
QMailMessageKey EmailStandardFolderMessageSet::contentKey(QMailFolder::StandardFolder type) { QMailMessageKey key; quint64 setMask = 0; quint64 unsetMask = 0; switch (type) { case QMailFolder::OutboxFolder: setMask = QMailMessage::Outbox; unsetMask = QMailMessage::Trash; break; case QMailFolder::DraftsFolder: setMask = QMailMessage::Draft; unsetMask = QMailMessage::Trash | QMailMessage::Outbox; break; case QMailFolder::TrashFolder: setMask = QMailMessage::Trash; break; case QMailFolder::SentFolder: setMask = QMailMessage::Sent; unsetMask = QMailMessage::Trash; break; case QMailFolder::JunkFolder: setMask = QMailMessage::Junk; unsetMask = QMailMessage::Trash; break; default: break; } if (setMask) { key &= QMailMessageKey(QMailMessageKey::status(setMask, QMailDataComparator::Includes)); } if (unsetMask) { key &= QMailMessageKey(QMailMessageKey::status(unsetMask, QMailDataComparator::Excludes)); } if (key.isEmpty()) { return QMailMessageKey::nonMatchingKey(); } return key; }
void MessageFolder::openMailbox() { if (QMailStore* store = QMailStore::instance()) { if (!mFolder.id().isValid()) { QMailFolderKey key(QMailFolderKey::Name,mailbox()); key &= QMailFolderKey(QMailFolderKey::ParentId,QMailFolderId()); QMailFolderIdList folderIdList = QMailStore::instance()->queryFolders(key); if(folderIdList.isEmpty()) { // create folder QMailFolder newFolder(mailbox()); if(!QMailStore::instance()->addFolder(&newFolder)) qWarning() << "Failed to add folder " << mailbox(); mFolder = newFolder; } else { // load folder QMailFolderId folderId = folderIdList.first(); mFolder = QMailFolder(folderId); } //set the folder key mParentFolderKey = QMailMessageKey(QMailMessageKey::ParentFolderId,mFolder.id()); } // notify when our content is reported to have changed connect(store, SIGNAL(folderContentsModified(QMailFolderIdList)), this, SLOT(folderContentsModified(QMailFolderIdList))); } }
bool MessageFolder::contains(const QMailMessageId& id) const { return ( messageCount(QMailMessageKey(QMailMessageKey::Id, id)) > 0 ); }
QMailMessageKey EmailActionMessageSet::contentKey() { // Return all messages of type email return QMailMessageKey(QMailMessageKey::Type, QMailMessage::Email); }
QMailMessageKey ActionFolderMessageSet::contentKey(const QMailFolderId &id) { // Only return non-email messages from this foder return (QMailFolderMessageSet::contentKey(id, false) & QMailMessageKey(QMailMessageKey::Type, QMailMessage::Email, QMailDataComparator::NotEqual)); }