• Skip to content
  • Skip to link menu
KDE API Reference
  • KDE API Reference
  • kdepim API Reference
  • KDE Home
  • Contact Us
 

mailcommon

  • sources
  • kde-4.14
  • kdepim
  • mailcommon
  • search
  • searchrule
searchrulestatus.cpp
Go to the documentation of this file.
1 /*
2  Copyright (c) 2015 Montel Laurent <montel@kde.org>
3 
4  This program is free software; you can redistribute it and/or modify it
5  under the terms of the GNU General Public License, version 2, as
6  published by the Free Software Foundation.
7 
8  This program is distributed in the hope that it will be useful, but
9  WITHOUT ANY WARRANTY; without even the implied warranty of
10  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11  General Public License for more details.
12 
13  You should have received a copy of the GNU General Public License along
14  with this program; if not, write to the Free Software Foundation, Inc.,
15  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
16 */
17 
18 
19 #include "searchrulestatus.h"
20 #include "filterlog.h"
21 using MailCommon::FilterLog;
22 
23 #include <KMime/KMimeMessage>
24 #include <KGlobal>
25 
26 using namespace MailCommon;
27 
28 struct _statusNames {
29  const char *name;
30  Akonadi::MessageStatus status;
31 };
32 
33 static struct _statusNames statusNames[] =
34 {
35 { "Important", Akonadi::MessageStatus::statusImportant() },
36 { "Unread", Akonadi::MessageStatus::statusUnread() },
37 { "Read", Akonadi::MessageStatus::statusRead() },
38 { "Deleted", Akonadi::MessageStatus::statusDeleted() },
39 { "Replied", Akonadi::MessageStatus::statusReplied() },
40 { "Forwarded", Akonadi::MessageStatus::statusForwarded() },
41 { "Queued", Akonadi::MessageStatus::statusQueued() },
42 { "Sent", Akonadi::MessageStatus::statusSent() },
43 { "Watched", Akonadi::MessageStatus::statusWatched() },
44 { "Ignored", Akonadi::MessageStatus::statusIgnored() },
45 { "Action Item", Akonadi::MessageStatus::statusToAct() },
46 { "Spam", Akonadi::MessageStatus::statusSpam() },
47 { "Ham", Akonadi::MessageStatus::statusHam() },
48 { "Has Attachment", Akonadi::MessageStatus::statusHasAttachment() }
49 };
50 
51 static const int numStatusNames =
52  sizeof statusNames / sizeof ( struct _statusNames );
53 
54 
55 QString englishNameForStatus( const Akonadi::MessageStatus &status )
56 {
57  for ( int i=0; i< numStatusNames; ++i ) {
58  if ( statusNames[i].status == status ) {
59  return statusNames[i].name;
60  }
61  }
62  return QString();
63 }
64 
65 SearchRuleStatus::SearchRuleStatus( const QByteArray &field,
66  Function func, const QString &aContents )
67  : SearchRule( field, func, aContents )
68 {
69  // the values are always in english, both from the conf file as well as
70  // the patternedit gui
71  mStatus = statusFromEnglishName( aContents );
72 }
73 
74 SearchRuleStatus::SearchRuleStatus( Akonadi::MessageStatus status, Function func )
75  : SearchRule( "<status>", func, englishNameForStatus( status ) )
76 {
77  mStatus = status;
78 }
79 
80 Akonadi::MessageStatus SearchRuleStatus::statusFromEnglishName( const QString &aStatusString )
81 {
82  for ( int i=0; i< numStatusNames; ++i ) {
83  if ( !aStatusString.compare( statusNames[i].name ) ) {
84  return statusNames[i].status;
85  }
86  }
87  Akonadi::MessageStatus unknown;
88  return unknown;
89 }
90 
91 QString SearchRuleStatus::informationAboutNotValidRules() const
92 {
93  //KF5 add i18n
94  //TODO
95  return QLatin1String("");
96 }
97 
98 bool SearchRuleStatus::isEmpty() const
99 {
100  return field().trimmed().isEmpty() || contents().isEmpty();
101 }
102 
103 bool SearchRuleStatus::matches( const Akonadi::Item &item ) const
104 {
105  Akonadi::MessageStatus status;
106  status.setStatusFromFlags( item.flags() );
107  bool rc = false;
108  switch ( function() ) {
109  case FuncEquals: // fallthrough. So that "<status> 'is' 'read'" works
110  case FuncContains:
111  if ( status & mStatus ) {
112  rc = true;
113  }
114  break;
115  case FuncNotEqual: // fallthrough. So that "<status> 'is not' 'read'" works
116  case FuncContainsNot:
117  if ( ! ( status & mStatus ) ) {
118  rc = true;
119  }
120  break;
121  // FIXME what about the remaining funcs, how can they make sense for
122  // stati?
123  default:
124  break;
125  }
126  if ( FilterLog::instance()->isLogging() ) {
127  QString msg = ( rc ? "<font color=#00FF00>1 = </font>" : "<font color=#FF0000>0 = </font>" );
128  msg += FilterLog::recode( asString() );
129  FilterLog::instance()->add( msg, FilterLog::RuleResult );
130  }
131  return rc;
132 }
133 
134 SearchRule::RequiredPart SearchRuleStatus::requiredPart() const
135 {
136  return SearchRule::Envelope;
137 }
138 
139 void SearchRuleStatus::addQueryTerms( Akonadi::SearchTerm &groupTerm, bool &emptyIsNotAnError ) const
140 {
141  using namespace Akonadi;
142  emptyIsNotAnError = true;
143  //TODO double check that isRead also works
144  if (!mStatus.statusFlags().isEmpty()) {
145  EmailSearchTerm term(EmailSearchTerm::MessageStatus, mStatus.statusFlags().toList().first(), akonadiComparator());
146  term.setIsNegated( isNegated() );
147  groupTerm.addSubTerm(term);
148  } else {
149  //Special case Unread
150  Akonadi::MessageStatus status;
151  status.setRead(true);
152  EmailSearchTerm term(EmailSearchTerm::MessageStatus, status.statusFlags().toList().first(), akonadiComparator());
153  term.setIsNegated( !isNegated() );
154  groupTerm.addSubTerm(term);
155  }
156 }
englishNameForStatus
QString englishNameForStatus(const Akonadi::MessageStatus &status)
Definition: searchrulestatus.cpp:55
MailCommon::FilterLog::recode
static QString recode(const QString &plain)
Returns an escaped version of the log which can be used in a HTML document.
Definition: filterlog.cpp:228
MailCommon::SearchRuleStatus::statusFromEnglishName
static Akonadi::MessageStatus statusFromEnglishName(const QString &)
Definition: searchrulestatus.cpp:80
QByteArray::trimmed
QByteArray trimmed() const
QByteArray
MailCommon::SearchRule::FuncContainsNot
Definition: searchrule.h:58
MailCommon::SearchRule::akonadiComparator
Akonadi::SearchTerm::Condition akonadiComparator() const
Converts the rule function into the corresponding Akonadi query operator.
Definition: searchrule.cpp:526
QByteArray::isEmpty
bool isEmpty() const
MailCommon::SearchRuleStatus::addQueryTerms
virtual void addQueryTerms(Akonadi::SearchTerm &groupTerm, bool &emptyIsNotAnError) const
Adds query terms to the given term group.
Definition: searchrulestatus.cpp:139
MailCommon::FilterLog::instance
static FilterLog * instance()
Returns the single global instance of the filter log.
Definition: filterlog.cpp:107
MailCommon::FilterLog
KMail Filter Log Collector.
Definition: filterlog.h:55
filterlog.h
MailCommon::SearchRuleStatus::requiredPart
virtual RequiredPart requiredPart() const
Returns the required part from the item that is needed for the search to operate. ...
Definition: searchrulestatus.cpp:134
MailCommon::SearchRule::Function
Function
Describes operators for comparison of field and contents.
Definition: searchrule.h:55
MailCommon::SearchRule::FuncNotEqual
Definition: searchrule.h:60
searchrulestatus.h
MailCommon::FilterLog::isLogging
bool isLogging() const
Returns whether the filter log is currently active.
Definition: filterlog.cpp:116
MailCommon::SearchRule::asString
const QString asString() const
Returns the rule as string for debugging purpose.
Definition: searchrule.cpp:516
MailCommon::SearchRule::contents
QString contents() const
Returns the contents of the rule.
Definition: searchrule.cpp:511
QString::isEmpty
bool isEmpty() const
MailCommon::SearchRuleStatus::SearchRuleStatus
SearchRuleStatus(const QByteArray &field=QByteArray(), Function function=FuncContains, const QString &contents=QString())
Definition: searchrulestatus.cpp:65
MailCommon::SearchRule::RequiredPart
RequiredPart
Definition: searchrule.h:79
QString
MailCommon::SearchRuleStatus::informationAboutNotValidRules
virtual QString informationAboutNotValidRules() const
Definition: searchrulestatus.cpp:91
MailCommon::SearchRule::field
QByteArray field() const
Returns the message header field name (without the trailing ':').
Definition: searchrule.cpp:501
statusNames
static struct _statusNames statusNames[]
Definition: searchrulestatus.cpp:33
MailCommon::SearchRule::isNegated
bool isNegated() const
Helper that returns whether the rule has a negated function.
Definition: searchrule.cpp:567
MailCommon::SearchRule
This class represents one search pattern rule.
Definition: searchrule.h:38
MailCommon::SearchRule::Envelope
Definition: searchrule.h:80
MailCommon::SearchRule::FuncContains
Definition: searchrule.h:57
MailCommon::SearchRuleStatus::matches
virtual bool matches(const Akonadi::Item &item) const
Tries to match the rule against the KMime::Message in the given item.
Definition: searchrulestatus.cpp:103
QLatin1String
numStatusNames
static const int numStatusNames
Definition: searchrulestatus.cpp:51
MailCommon::SearchRuleStatus::isEmpty
virtual bool isEmpty() const
Determines whether the rule is worth considering.
Definition: searchrulestatus.cpp:98
MailCommon::FilterLog::add
void add(const QString &entry, ContentType type)
Adds the given log entry under the given content type to the log.
Definition: filterlog.cpp:164
QString::compare
int compare(const QString &other) const
MailCommon::SearchRule::FuncEquals
Definition: searchrule.h:59
MailCommon::FilterLog::RuleResult
Log all rule matching results.
Definition: filterlog.h:76
This file is part of the KDE documentation.
Documentation copyright © 1996-2020 The KDE developers.
Generated on Mon Jun 22 2020 13:31:41 by doxygen 1.8.7 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

mailcommon

Skip menu "mailcommon"
  • Main Page
  • Namespace List
  • Namespace Members
  • Alphabetical List
  • Class List
  • Class Hierarchy
  • Class Members
  • File List
  • File Members
  • Related Pages

kdepim API Reference

Skip menu "kdepim API Reference"
  • akonadi_next
  • akregator
  • blogilo
  • calendarsupport
  • console
  •   kabcclient
  •   konsolekalendar
  • kaddressbook
  • kalarm
  •   lib
  • kdgantt2
  • kjots
  • kleopatra
  • kmail
  • knode
  • knotes
  • kontact
  • korgac
  • korganizer
  • ktimetracker
  • libkdepim
  • libkleo
  • libkpgp
  • mailcommon
  • messagelist
  • messageviewer
  • pimprint

Search



Report problems with this website to our bug tracking system.
Contact the specific authors with questions and comments about the page contents.

KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal