bool QMessageService::send(QMessage &message) { if (d_ptr->_active) { return false; } d_ptr->_active = true; d_ptr->_error = QMessageManager::NoError; bool retVal = true; d_ptr->_state = QMessageService::ActiveState; emit stateChanged(d_ptr->_state); QMessageAccountId accountId = message.parentAccountId(); QMessage::Type msgType = QMessage::NoType; // Check message type if (message.type() == QMessage::AnyType || message.type() == QMessage::NoType) { QMessage::TypeFlags types = QMessage::NoType; if (accountId.isValid()) { // ParentAccountId was defined => Message type can be read // from parent account QMessageAccount account = QMessageAccount(accountId); QMessage::TypeFlags types = account.messageTypes(); if (types & QMessage::Sms) { msgType = QMessage::Sms; } else if (types & QMessage::Mms) { msgType = QMessage::Mms; } else if (types & QMessage::Email) { msgType = QMessage::Email; } } if (msgType == QMessage::NoType) { d_ptr->_error = QMessageManager::ConstraintFailure; retVal = false; } } if (retVal) { // Check account if (!accountId.isValid()) { accountId = QMessageAccount::defaultAccount(message.type()); if (!accountId.isValid()) { d_ptr->_error = QMessageManager::InvalidId; retVal = false; } } } QMessageAccount account(accountId); if (retVal) { // Check account/message type compatibility if (!(account.messageTypes() & message.type()) && (msgType == QMessage::NoType)) { d_ptr->_error = QMessageManager::ConstraintFailure; retVal = false; } } if (retVal) { // Check recipients QMessageAddressList recipients = message.to() + message.bcc() + message.cc(); if (recipients.isEmpty()) { d_ptr->_error = QMessageManager::ConstraintFailure; return false; } } if (retVal) { QMessage outgoing(message); // Set default account if unset if (!outgoing.parentAccountId().isValid()) { outgoing.setParentAccountId(accountId); } if (outgoing.type() == QMessage::AnyType || outgoing.type() == QMessage::NoType) { outgoing.setType(msgType); } if (account.messageTypes() & QMessage::Sms) { retVal = d_ptr->sendSMS(outgoing); } else if (account.messageTypes() & QMessage::Mms) { retVal = d_ptr->sendMMS(outgoing); } else if (account.messageTypes() & QMessage::Email) { retVal = d_ptr->sendEmail(outgoing); } QMessagePrivate* privateMessage = QMessagePrivate::implementation(message); privateMessage->_id = outgoing.id(); } if (retVal == false) { d_ptr->setFinished(retVal); } return retVal; }
bool QMessageAccountFilterPrivate::filter(const QMessageAccount &messageAccount, const QMessageAccountFilterPrivate &filter) { if ((filter._field == QMessageAccountFilterPrivate::None) && (filter._filterList.count() == 0)) { if (filter._notFilter) { return false; } else { return true; } } Qt::CaseSensitivity caseSensitivity = (filter._matchFlags & QMessageDataComparator::MatchCaseSensitive) ? Qt::CaseSensitive : Qt::CaseInsensitive; switch (filter._field) { case QMessageAccountFilterPrivate::Id: { if (filter._comparatorType == QMessageAccountFilterPrivate::Equality) { QMessageDataComparator::EqualityComparator cmp(static_cast<QMessageDataComparator::EqualityComparator>(filter._comparatorValue)); if (cmp == QMessageDataComparator::Equal) { if (messageAccount.id().toString() == filter._value.toString()) { return true; } } else { // NotEqual if (!(messageAccount.id().toString() == filter._value.toString())) { return true; } } } else if (filter._comparatorType == QMessageAccountFilterPrivate::Inclusion) { QMessageDataComparator::InclusionComparator cmp(static_cast<QMessageDataComparator::InclusionComparator>(filter._comparatorValue)); if (cmp == QMessageDataComparator::Includes) { if (filter._ids.contains(messageAccount.id())) { return true; } } else { // Excludes if (!filter._ids.contains(messageAccount.id())) { return true; } } } break; } case QMessageAccountFilterPrivate::Name: { if (filter._comparatorType == QMessageAccountFilterPrivate::Equality) { QMessageDataComparator::EqualityComparator cmp(static_cast<QMessageDataComparator::EqualityComparator>(filter._comparatorValue)); if (cmp == QMessageDataComparator::Equal) { if (messageAccount.name().compare(filter._value.toString(),caseSensitivity) == 0) { return true; } } else { // NotEqual if (messageAccount.name().compare(filter._value.toString(),caseSensitivity) != 0) { return true; } } } else if (filter._comparatorType == QMessageAccountFilterPrivate::Inclusion) { QMessageDataComparator::InclusionComparator cmp(static_cast<QMessageDataComparator::InclusionComparator>(filter._comparatorValue)); if (cmp == QMessageDataComparator::Includes) { if (messageAccount.name().contains(filter._value.toString(),caseSensitivity)) { return true; } } else { // Excludes if (!messageAccount.name().contains(filter._value.toString(),caseSensitivity)) { return true; } } } break; } case QMessageAccountFilterPrivate::None: break; } return false; }
bool QMessageStore::addMessage(QMessage *m) { bool retVal = true; QMessageAccountId accountId = m->parentAccountId(); QMessage::Type msgType = QMessage::NoType; // Check message type if (m->type() == QMessage::AnyType || m->type() == QMessage::NoType) { if (accountId.isValid()) { // ParentAccountId was defined => Message type can be read // from parent account QMessageAccount account = QMessageAccount(accountId); QMessage::TypeFlags types = account.messageTypes(); if (types & QMessage::Sms) { msgType = QMessage::Sms; } else if (account.messageTypes() & QMessage::InstantMessage) { msgType = QMessage::InstantMessage; } else if (types & QMessage::Mms) { msgType = QMessage::Mms; } else if (types & QMessage::Email) { msgType = QMessage::Email; } } if (msgType == QMessage::NoType) { retVal = false; } } if (retVal) { // Check account if (!accountId.isValid()) { accountId = QMessageAccount::defaultAccount(m->type()); if (!accountId.isValid()) { retVal = false; } } } QMessageAccount account(accountId); if (retVal) { // Check account/message type compatibility if (!(account.messageTypes() & m->type()) && (msgType == QMessage::NoType)) { retVal = false; } } if (retVal) { // Set default account if unset if (!m->parentAccountId().isValid()) { m->setParentAccountId(accountId); } if (account.messageTypes() & QMessage::Sms) { retVal = false; //TODO: qWarning() << "QMessageManager::add not yet implemented for SMS"; } else if (account.messageTypes() & QMessage::InstantMessage) { retVal = false; //TODO: qWarning() << "QMessageManager::add not yet implemented for Instant Message"; } else if (account.messageTypes() & QMessage::Mms) { retVal = false; //TODO: qWarning() << "QMessageManager::add not yet implemented for MMS"; } else if (account.messageTypes() & QMessage::Email) { retVal = ModestEngine::instance()->addMessage(*m); } } return retVal; }