• 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
searchrule.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 #include "searchrule.h"
18 #include "searchrule/searchrulenumerical.h"
19 #include "searchrule/searchruledate.h"
20 #include "searchrule/searchrulestring.h"
21 #include "searchrule/searchrulestatus.h"
22 
23 
24 #include <KMime/KMimeMessage>
25 
26 #include <KDebug>
27 #include <KConfigGroup>
28 #include <KLocale>
29 #include <KGlobal>
30 
31 #include <QDataStream>
32 #include <QRegExp>
33 
34 #include <algorithm>
35 #ifndef Q_MOC_RUN
36 #include <boost/bind.hpp>
37 #endif
38 
39 using namespace MailCommon;
40 
41 static const char *funcConfigNames[] =
42 {
43  "contains", "contains-not",
44  "equals", "not-equal",
45  "regexp", "not-regexp",
46  "greater", "less-or-equal", "less", "greater-or-equal",
47  "is-in-addressbook", "is-not-in-addressbook",
48  "is-in-category", "is-not-in-category",
49  "has-attachment", "has-no-attachment",
50  "start-with", "not-start-with",
51  "end-with", "not-end-with"
52 };
53 
54 static const int numFuncConfigNames =
55  sizeof funcConfigNames / sizeof *funcConfigNames;
56 
57 
58 //==================================================
59 //
60 // class SearchRule (was: KMFilterRule)
61 //
62 //==================================================
63 
64 SearchRule::SearchRule( const QByteArray &field, Function func, const QString &contents )
65  : mField( field ),
66  mFunction( func ),
67  mContents( contents )
68 {
69 }
70 
71 SearchRule::SearchRule( const SearchRule &other )
72  : mField( other.mField ),
73  mFunction( other.mFunction ),
74  mContents( other.mContents )
75 {
76 }
77 
78 const SearchRule & SearchRule::operator=( const SearchRule &other )
79 {
80  if ( this == &other ) {
81  return *this;
82  }
83 
84  mField = other.mField;
85  mFunction = other.mFunction;
86  mContents = other.mContents;
87 
88  return *this;
89 }
90 
91 SearchRule::Ptr SearchRule::createInstance( const QByteArray &field,
92  Function func,
93  const QString &contents )
94 {
95  SearchRule::Ptr ret;
96  if ( field == "<status>" ) {
97  ret = SearchRule::Ptr( new SearchRuleStatus( field, func, contents ) );
98  } else if ( field == "<age in days>" || field == "<size>" ) {
99  ret = SearchRule::Ptr( new SearchRuleNumerical( field, func, contents ) );
100  } else if ( field == "<date>" ) {
101  ret = SearchRule::Ptr( new SearchRuleDate( field, func, contents ) );
102  } else {
103  ret = SearchRule::Ptr( new SearchRuleString( field, func, contents ) );
104  }
105 
106  return ret;
107 }
108 
109 SearchRule::Ptr SearchRule::createInstance( const QByteArray &field,
110  const char *func,
111  const QString &contents )
112 {
113  return ( createInstance( field, configValueToFunc( func ), contents ) );
114 }
115 
116 SearchRule::Ptr SearchRule::createInstance( const SearchRule &other )
117 {
118  return ( createInstance( other.field(), other.function(), other.contents() ) );
119 }
120 
121 SearchRule::Ptr SearchRule::createInstanceFromConfig( const KConfigGroup &config, int aIdx )
122 {
123  const char cIdx = char( int( 'A' ) + aIdx );
124 
125  static const QString & field = KGlobal::staticQString( "field" );
126  static const QString & func = KGlobal::staticQString( "func" );
127  static const QString & contents = KGlobal::staticQString( "contents" );
128 
129  const QByteArray &field2 = config.readEntry( field + cIdx, QString() ).toLatin1();
130  Function func2 = configValueToFunc( config.readEntry( func + cIdx, QString() ).toLatin1() );
131  const QString & contents2 = config.readEntry( contents + cIdx, QString() );
132 
133  if ( field2 == "<To or Cc>" ) { // backwards compat
134  return SearchRule::createInstance( "<recipients>", func2, contents2 );
135  } else {
136  return SearchRule::createInstance( field2, func2, contents2 );
137  }
138 }
139 
140 SearchRule::Ptr SearchRule::createInstance( QDataStream &s )
141 {
142  QByteArray field;
143  s >> field;
144  QString function;
145  s >> function;
146  Function func = configValueToFunc( function.toUtf8() );
147  QString contents;
148  s >> contents;
149  return createInstance( field, func, contents );
150 }
151 
152 SearchRule::~SearchRule()
153 {
154 }
155 
156 SearchRule::Function SearchRule::configValueToFunc( const char *str )
157 {
158  if ( !str ) {
159  return FuncNone;
160  }
161 
162  for ( int i = 0; i < numFuncConfigNames; ++i ) {
163  if ( qstricmp( funcConfigNames[i], str ) == 0 ) {
164  return (Function)i;
165  }
166  }
167 
168  return FuncNone;
169 }
170 
171 QString SearchRule::functionToString( Function function )
172 {
173  if ( function != FuncNone ) {
174  return funcConfigNames[int( function )];
175  } else {
176  return "invalid";
177  }
178 }
179 
180 void SearchRule::writeConfig( KConfigGroup &config, int aIdx ) const
181 {
182  const char cIdx = char( 'A' + aIdx );
183  static const QString & field = KGlobal::staticQString( "field" );
184  static const QString & func = KGlobal::staticQString( "func" );
185  static const QString & contents = KGlobal::staticQString( "contents" );
186 
187  config.writeEntry( field + cIdx, QString(mField) );
188  config.writeEntry( func + cIdx, functionToString( mFunction ) );
189  config.writeEntry( contents + cIdx, mContents );
190 }
191 
192 QString SearchRule::conditionToString(Function function)
193 {
194  QString str;
195  switch(function) {
196  case FuncEquals:
197  str = i18n("equal");
198  break;
199  case FuncNotEqual:
200  str = i18n("not equal");
201  break;
202  case FuncIsGreater:
203  str = i18n("is greater");
204  break;
205  case FuncIsLessOrEqual:
206  str = i18n("is less or equal");
207  break;
208  case FuncIsLess:
209  str = i18n("is less");
210  break;
211  case FuncIsGreaterOrEqual:
212  str = i18n("is greater or equal");
213  break;
214  case FuncIsInAddressbook:
215  str = i18n("is in addressbook");
216  break;
217  case FuncIsNotInAddressbook:
218  str = i18n("is not in addressbook");
219  break;
220  case FuncIsInCategory:
221  str = i18n("is in category");
222  break;
223  case FuncIsNotInCategory:
224  str = i18n("is in category");
225  break;
226  case FuncHasAttachment:
227  str = i18n("has an attachment");
228  break;
229  case FuncHasNoAttachment:
230  str = i18n("has not an attachment");
231  break;
232  case FuncStartWith:
233  str = i18n("start with");
234  break;
235  case FuncNotStartWith:
236  str = i18n("not start with");
237  break;
238  case FuncEndWith:
239  str = i18n("end with");
240  break;
241  case FuncNotEndWith:
242  str = i18n("not end with");
243  break;
244  case FuncNone:
245  str = i18n("none");
246  break;
247  case FuncContains:
248  str = i18n("contains");
249  break;
250  case FuncContainsNot:
251  str = i18n("not contains");
252  break;
253  case FuncRegExp:
254  str = i18n("has regexp");
255  break;
256  case FuncNotRegExp:
257  str = i18n("not regexp");
258  break;
259  }
260  return str;
261 }
262 
263 void SearchRule::generateSieveScript(QStringList &requires, QString &code)
264 {
265  QString contentStr = mContents;
266  if (mField == "<size>") {
267  QString comparaison;
268  int offset = 0;
269  switch(mFunction) {
270  case FuncEquals:
271  comparaison = QLatin1Char('"') + i18n("size equals not supported") + QLatin1Char('"');
272  break;
273  case FuncNotEqual:
274  comparaison = QLatin1Char('"') + i18n("size not equals not supported") + QLatin1Char('"');
275  break;
276  case FuncIsGreater:
277  comparaison = QLatin1String(":over");
278  break;
279  case FuncIsLessOrEqual:
280  comparaison = QLatin1String(":under");
281  offset = 1;
282  break;
283  case FuncIsLess:
284  comparaison = QLatin1String(":under");
285  break;
286  case FuncIsGreaterOrEqual:
287  comparaison = QLatin1String(":over");
288  offset = -1;
289  break;
290  case FuncIsInAddressbook:
291  case FuncIsNotInAddressbook:
292  case FuncIsInCategory:
293  case FuncIsNotInCategory:
294  case FuncHasAttachment:
295  case FuncHasNoAttachment:
296  case FuncStartWith:
297  case FuncNotStartWith:
298  case FuncEndWith:
299  case FuncNotEndWith:
300  case FuncNone:
301  case FuncContains:
302  case FuncContainsNot:
303  case FuncRegExp:
304  case FuncNotRegExp:
305  code += QLatin1Char('"') + i18n("\"%1\" is not supported with condition \"%2\"", QLatin1String(mField), conditionToString(mFunction)) + QLatin1Char('"');
306  return;
307  }
308  code += QString::fromLatin1("size %1 %2K").arg(comparaison).arg(QString::number(mContents.toInt() + offset));
309  } else if (mField == "<status>") {
310  //TODO ?
311  code += QLatin1Char('"') + i18n("<status> not implemented/supported") + QLatin1Char('"');
312  } else if (mField == "<any header>") {
313  //TODO ?
314  code += QLatin1Char('"') + i18n("<any header> not implemented/supported") + QLatin1Char('"');
315  } else if (mField == "contents") {
316  //TODO ?
317  code += QLatin1Char('"') + i18n("<contents> not implemented/supported") + QLatin1Char('"');
318  } else if (mField == "<age in days>") {
319  //TODO ?
320  code += QLatin1Char('"') + i18n("<age in days> not implemented/supported") + QLatin1Char('"');
321  } else if (mField == "<date>") {
322  //TODO ?
323  code += QLatin1Char('"') + i18n("<date> not implemented/supported") + QLatin1Char('"');
324  } else if (mField == "<recipients>") {
325  //TODO ?
326  code += QLatin1Char('"') + i18n("<recipients> not implemented/supported") + QLatin1Char('"');
327  } else if (mField == "<tag>") {
328  code += QLatin1Char('"') + i18n("<Tag> is not supported") + QLatin1Char('"');
329  } else if (mField == "<message>") {
330  //TODO ?
331  code += i18n("<message> not implemented/supported");
332  } else if (mField == "<body>") {
333  if (!requires.contains(QLatin1String("body")))
334  requires << QLatin1String("body");
335  QString comparaison;
336  bool negative = false;
337  switch(mFunction) {
338  case FuncNone:
339  break;
340  case FuncContains:
341  comparaison = QLatin1String(":contains");
342  break;
343  case FuncContainsNot:
344  negative = true;
345  comparaison = QLatin1String(":contains");
346  break;
347  case FuncEquals:
348  comparaison = QLatin1String(":is");
349  break;
350  case FuncNotEqual:
351  comparaison = QLatin1String(":is");
352  negative = true;
353  break;
354  case FuncRegExp:
355  comparaison = QLatin1String(":regex");
356  if (!requires.contains(QLatin1String("regex")))
357  requires << QLatin1String("regex");
358  break;
359  case FuncNotRegExp:
360  if (!requires.contains(QLatin1String("regex")))
361  requires << QLatin1String("regex");
362  comparaison = QLatin1String(":regex");
363  negative = true;
364  break;
365  case FuncStartWith:
366  comparaison = QLatin1String(":regex");
367  if (!requires.contains(QLatin1String("regex")))
368  requires << QLatin1String("regex");
369  contentStr = QLatin1Char('^') + contentStr;
370  break;
371  case FuncNotStartWith:
372  comparaison = QLatin1String(":regex");
373  if (!requires.contains(QLatin1String("regex")))
374  requires << QLatin1String("regex");
375  comparaison = QLatin1String(":regex");
376  contentStr = QLatin1Char('^') + contentStr;
377  negative = true;
378  break;
379  case FuncEndWith:
380  comparaison = QLatin1String(":regex");
381  if (!requires.contains(QLatin1String("regex")))
382  requires << QLatin1String("regex");
383  comparaison = QLatin1String(":regex");
384  contentStr = contentStr + QLatin1Char('$');
385  break;
386  case FuncNotEndWith:
387  comparaison = QLatin1String(":regex");
388  if (!requires.contains(QLatin1String("regex")))
389  requires << QLatin1String("regex");
390  comparaison = QLatin1String(":regex");
391  contentStr = contentStr + QLatin1Char('$');
392  negative = true;
393  break;
394  case FuncIsGreater:
395  case FuncIsLessOrEqual:
396  case FuncIsLess:
397  case FuncIsGreaterOrEqual:
398  case FuncIsInAddressbook:
399  case FuncIsNotInAddressbook:
400  case FuncIsInCategory:
401  case FuncIsNotInCategory:
402  case FuncHasAttachment:
403  case FuncHasNoAttachment:
404  code += QLatin1Char('"') + i18n("\"%1\" is not supported with condition \"%2\"", QLatin1String(mField), conditionToString(mFunction)) + QLatin1Char('"');
405  return;
406  }
407  code += (negative ? QLatin1String("not ") : QString()) + QString::fromLatin1("body :text %1 \"%2\"").arg(comparaison).arg(contentStr);
408  } else {
409  QString comparaison;
410  bool negative = false;
411  switch(mFunction) {
412  case FuncNone:
413  break;
414  case FuncContains:
415  comparaison = QLatin1String(":contains");
416  break;
417  case FuncContainsNot:
418  negative = true;
419  comparaison = QLatin1String(":contains");
420  break;
421  case FuncEquals:
422  comparaison = QLatin1String(":is");
423  break;
424  case FuncNotEqual:
425  comparaison = QLatin1String(":is");
426  negative = true;
427  break;
428  case FuncRegExp:
429  comparaison = QLatin1String(":regex");
430  if (!requires.contains(QLatin1String("regex")))
431  requires << QLatin1String("regex");
432  break;
433  case FuncNotRegExp:
434  if (!requires.contains(QLatin1String("regex")))
435  requires << QLatin1String("regex");
436  comparaison = QLatin1String(":regex");
437  negative = true;
438  break;
439  case FuncStartWith:
440  comparaison = QLatin1String(":regex");
441  if (!requires.contains(QLatin1String("regex")))
442  requires << QLatin1String("regex");
443  contentStr = QLatin1Char('^') + contentStr;
444  break;
445  case FuncNotStartWith:
446  comparaison = QLatin1String(":regex");
447  if (!requires.contains(QLatin1String("regex")))
448  requires << QLatin1String("regex");
449  comparaison = QLatin1String(":regex");
450  contentStr = QLatin1Char('^') + contentStr;
451  negative = true;
452  break;
453  case FuncEndWith:
454  comparaison = QLatin1String(":regex");
455  if (!requires.contains(QLatin1String("regex")))
456  requires << QLatin1String("regex");
457  comparaison = QLatin1String(":regex");
458  contentStr = contentStr + QLatin1Char('$');
459  break;
460  case FuncNotEndWith:
461  comparaison = QLatin1String(":regex");
462  if (!requires.contains(QLatin1String("regex")))
463  requires << QLatin1String("regex");
464  comparaison = QLatin1String(":regex");
465  contentStr = contentStr + QLatin1Char('$');
466  negative = true;
467  break;
468 
469  case FuncIsGreater:
470  case FuncIsLessOrEqual:
471  case FuncIsLess:
472  case FuncIsGreaterOrEqual:
473  case FuncIsInAddressbook:
474  case FuncIsNotInAddressbook:
475  case FuncIsInCategory:
476  case FuncIsNotInCategory:
477  case FuncHasAttachment:
478  case FuncHasNoAttachment:
479  code += QLatin1Char('"') + i18n("\"%1\" is not supported with condition \"%2\"", QLatin1String(mField), conditionToString(mFunction)) + QLatin1Char('"');
480  return;
481  }
482  code += (negative ? QLatin1String("not ") : QString()) + QString::fromLatin1("header %1 \"%2\" \"%3\"").arg(comparaison).arg(QLatin1String(mField)).arg(contentStr);
483  }
484 }
485 
486 void SearchRule::setFunction( Function function )
487 {
488  mFunction = function;
489 }
490 
491 SearchRule::Function SearchRule::function() const
492 {
493  return mFunction;
494 }
495 
496 void SearchRule::setField( const QByteArray &field )
497 {
498  mField = field;
499 }
500 
501 QByteArray SearchRule::field() const
502 {
503  return mField;
504 }
505 
506 void SearchRule::setContents( const QString &contents )
507 {
508  mContents = contents;
509 }
510 
511 QString SearchRule::contents() const
512 {
513  return mContents;
514 }
515 
516 const QString SearchRule::asString() const
517 {
518  QString result = QLatin1String("\"") + mField + QLatin1String("\" <");
519  result += functionToString( mFunction );
520  result += "> \"" + mContents + "\"";
521 
522  return result;
523 }
524 
525 
526 Akonadi::SearchTerm::Condition SearchRule::akonadiComparator() const
527 {
528  switch ( function() ) {
529  case SearchRule::FuncContains:
530  case SearchRule::FuncContainsNot:
531  return Akonadi::SearchTerm::CondContains;
532 
533  case SearchRule::FuncEquals:
534  case SearchRule::FuncNotEqual:
535  return Akonadi::SearchTerm::CondEqual;
536 
537  case SearchRule::FuncIsGreater:
538  return Akonadi::SearchTerm::CondGreaterThan;
539 
540  case SearchRule::FuncIsGreaterOrEqual:
541  return Akonadi::SearchTerm::CondGreaterOrEqual;
542 
543  case SearchRule::FuncIsLess:
544  return Akonadi::SearchTerm::CondLessThan;
545 
546  case SearchRule::FuncIsLessOrEqual:
547  return Akonadi::SearchTerm::CondLessOrEqual;
548 
549  case SearchRule::FuncRegExp:
550  case SearchRule::FuncNotRegExp:
551  //TODO is this sufficient?
552  return Akonadi::SearchTerm::CondContains;
553 
554  case SearchRule::FuncStartWith:
555  case SearchRule::FuncNotStartWith:
556  case SearchRule::FuncEndWith:
557  case SearchRule::FuncNotEndWith:
558  //TODO is this sufficient?
559  return Akonadi::SearchTerm::CondContains;
560  default:
561  kDebug() << "Unhandled function type: " << function();
562  }
563 
564  return Akonadi::SearchTerm::CondEqual;
565 }
566 
567 bool SearchRule::isNegated() const
568 {
569  bool negate = false;
570  switch ( function() ) {
571  case SearchRule::FuncContainsNot:
572  case SearchRule::FuncNotEqual:
573  case SearchRule::FuncNotRegExp:
574  case SearchRule::FuncHasNoAttachment:
575  case SearchRule::FuncIsNotInCategory:
576  case SearchRule::FuncIsNotInAddressbook:
577  case SearchRule::FuncNotStartWith:
578  case SearchRule::FuncNotEndWith:
579  negate = true;
580  default:
581  break;
582  }
583  return negate;
584 }
585 
586 QDataStream &SearchRule::operator >>( QDataStream &s ) const
587 {
588  s << mField << functionToString( mFunction ) << mContents;
589  return s;
590 }
591 
MailCommon::SearchRule::FuncIsInAddressbook
Definition: searchrule.h:67
MailCommon::SearchRule::FuncEndWith
Definition: searchrule.h:75
MailCommon::SearchRule::operator>>
QDataStream & operator>>(QDataStream &) const
Definition: searchrule.cpp:586
MailCommon::SearchRule::FuncIsGreaterOrEqual
Definition: searchrule.h:66
MailCommon::SearchRule::FuncNotEndWith
Definition: searchrule.h:76
QByteArray
MailCommon::SearchRule::FuncContainsNot
Definition: searchrule.h:58
MailCommon::SearchRule::FuncIsNotInAddressbook
Definition: searchrule.h:68
MailCommon::SearchRule::setField
void setField(const QByteArray &name)
Sets the message header field name.
Definition: searchrule.cpp:496
MailCommon::SearchRule::FuncIsInCategory
Definition: searchrule.h:69
QDataStream
numFuncConfigNames
static const int numFuncConfigNames
Definition: searchrule.cpp:54
MailCommon::SearchRule::FuncNotStartWith
Definition: searchrule.h:74
MailCommon::SearchRule::akonadiComparator
Akonadi::SearchTerm::Condition akonadiComparator() const
Converts the rule function into the corresponding Akonadi query operator.
Definition: searchrule.cpp:526
MailCommon::SearchRuleNumerical
This class represents a search pattern rule operating on numerical values.
Definition: searchrulenumerical.h:30
QStringList::contains
bool contains(const QString &str, Qt::CaseSensitivity cs) const
MailCommon::SearchRule::writeConfig
void writeConfig(KConfigGroup &group, int index) const
Saves the object into a given config group.
Definition: searchrule.cpp:180
MailCommon::SearchRule::FuncHasAttachment
Definition: searchrule.h:71
MailCommon::SearchRule::Ptr
boost::shared_ptr< SearchRule > Ptr
Defines a pointer to a search rule.
Definition: searchrule.h:44
MailCommon::SearchRule::setContents
void setContents(const QString &contents)
Set the contents of the rule.
Definition: searchrule.cpp:506
MailCommon::SearchRule::setFunction
void setFunction(Function function)
Sets the filter function of the rule.
Definition: searchrule.cpp:486
MailCommon::SearchRule::FuncStartWith
Definition: searchrule.h:73
MailCommon::SearchRule::FuncNotRegExp
Definition: searchrule.h:62
MailCommon::SearchRule::operator=
const SearchRule & operator=(const SearchRule &other)
Initializes this rule with an other rule.
Definition: searchrule.cpp:78
QString::number
QString number(int n, int base)
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::SearchRule::createInstanceFromConfig
static SearchRule::Ptr createInstanceFromConfig(const KConfigGroup &group, int index)
Creates a new search rule from a given config group.
Definition: searchrule.cpp:121
MailCommon::SearchRule::asString
const QString asString() const
Returns the rule as string for debugging purpose.
Definition: searchrule.cpp:516
QString::toInt
int toInt(bool *ok, int base) const
MailCommon::SearchRule::contents
QString contents() const
Returns the contents of the rule.
Definition: searchrule.cpp:511
MailCommon::SearchRule::~SearchRule
virtual ~SearchRule()
Destroys the search rule.
Definition: searchrule.cpp:152
MailCommon::SearchRule::FuncNone
Definition: searchrule.h:56
QString
MailCommon::SearchRule::FuncHasNoAttachment
Definition: searchrule.h:72
MailCommon::SearchRule::field
QByteArray field() const
Returns the message header field name (without the trailing ':').
Definition: searchrule.cpp:501
QStringList
MailCommon::SearchRule::FuncRegExp
Definition: searchrule.h:61
MailCommon::SearchRule::isNegated
bool isNegated() const
Helper that returns whether the rule has a negated function.
Definition: searchrule.cpp:567
MailCommon::SearchRuleStatus
This class represents a search to be performed against the status of a messsage.
Definition: searchrulestatus.h:85
QLatin1Char
MailCommon::SearchRule
This class represents one search pattern rule.
Definition: searchrule.h:38
MailCommon::SearchRule::FuncIsNotInCategory
Definition: searchrule.h:70
MailCommon::SearchRule::FuncContains
Definition: searchrule.h:57
MailCommon::SearchRule::function
Function function() const
Returns the filter function of the rule.
Definition: searchrule.cpp:491
funcConfigNames
static const char * funcConfigNames[]
Definition: searchrule.cpp:41
MailCommon::SearchRule::generateSieveScript
void generateSieveScript(QStringList &requires, QString &code)
Definition: searchrule.cpp:263
MailCommon::SearchRule::FuncIsGreater
Definition: searchrule.h:63
MailCommon::SearchRuleString
Definition: searchrulestring.h:32
MailCommon::SearchRule::FuncIsLessOrEqual
Definition: searchrule.h:64
MailCommon::SearchRuleDate
Definition: searchruledate.h:25
QLatin1String
searchrule.h
QString::fromLatin1
QString fromLatin1(const char *str, int size)
searchrulestring.h
searchrulenumerical.h
MailCommon::SearchRule::createInstance
static SearchRule::Ptr createInstance(const QByteArray &field=0, Function function=FuncContains, const QString &contents=QString())
Creates a new search rule of a certain type by instantiating the appropriate subclass depending on th...
Definition: searchrule.cpp:91
searchruledate.h
QString::arg
QString arg(qlonglong a, int fieldWidth, int base, const QChar &fillChar) const
MailCommon::SearchRule::SearchRule
SearchRule(const QByteArray &field=QByteArray(), Function function=FuncContains, const QString &contents=QString())
Creates new new search rule.
Definition: searchrule.cpp:64
MailCommon::SearchRule::FuncIsLess
Definition: searchrule.h:65
MailCommon::SearchRule::FuncEquals
Definition: searchrule.h:59
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