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

mailcommon

  • sources
  • kde-4.12
  • kdepim
  • mailcommon
  • filter
  • filterimporter
filterimporterthunderbird.cpp
Go to the documentation of this file.
1 /*
2  Copyright (c) 2011, 2012, 2013 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 #include "filterimporterthunderbird_p.h"
19 #include "mailfilter.h"
20 
21 #include <KDebug>
22 
23 #include <QFile>
24 #include <QDir>
25 
26 using namespace MailCommon;
27 
28 FilterImporterThunderbird::FilterImporterThunderbird(QFile *file , bool interactive)
29  : FilterImporterAbstract(interactive)
30 {
31  QTextStream stream(file);
32  readStream(stream);
33 }
34 
35 FilterImporterThunderbird::FilterImporterThunderbird(QString string , bool interactive)
36  : FilterImporterAbstract(interactive)
37 {
38  QTextStream stream(&string);
39  readStream(stream);
40 }
41 
42 FilterImporterThunderbird::~FilterImporterThunderbird()
43 {
44 }
45 
46 void FilterImporterThunderbird::readStream(QTextStream &stream)
47 {
48  MailFilter *filter = 0;
49  while ( !stream.atEnd() ) {
50  QString line = stream.readLine();
51  kDebug() << " line :" << line << " filter " << filter;
52  filter = parseLine( stream, line, filter );
53  }
54  appendFilter(filter);
55 }
56 
57 QString FilterImporterThunderbird::defaultFiltersSettingsPath()
58 {
59  return QString::fromLatin1( "%1/.thunderbird/" ).arg( QDir::homePath() );
60 }
61 
62 MailCommon::MailFilter *FilterImporterThunderbird::parseLine( QTextStream &stream,
63  QString line,
64  MailCommon::MailFilter *filter )
65 {
66  if ( line.startsWith( QLatin1String( "name=" ) ) ) {
67  appendFilter(filter);
68  filter = new MailFilter();
69  line = cleanArgument( line, QLatin1String( "name=" ) );
70  filter->pattern()->setName( line );
71  filter->setToolbarName( line );
72  } else if ( line.startsWith( QLatin1String( "action=" ) ) ) {
73  line = cleanArgument( line, QLatin1String( "action=" ) );
74  QString value;
75  QString actionName = extractActions( line, filter, value );
76  if ( !stream.atEnd() ) {
77  line = stream.readLine();
78  if ( line.startsWith( QLatin1String( "actionValue=" ) ) ) {
79  value = cleanArgument( line, QLatin1String( "actionValue=" ) );
80  //change priority
81  if (actionName == QLatin1String("Change priority")) {
82  QStringList lstValue;
83  lstValue << QLatin1String("X-Priority");
84  if (value == QLatin1String("Highest")) {
85  value = QLatin1String("1 (Highest)");
86  } else if (value == QLatin1String("High")) {
87  value = QLatin1String("2 (High)");
88  } else if (value == QLatin1String("Normal")) {
89  value = QLatin1String("3 (Normal)");
90  } else if (value == QLatin1String("Low")) {
91  value = QLatin1String("4 (Low)");
92  } else if (value == QLatin1String("Lowest")) {
93  value = QLatin1String("5 (Lowest)");
94  }
95  lstValue << value;
96  value = lstValue.join(QLatin1String("\t"));
97  actionName = QLatin1String("add header");
98  } else if (actionName == QLatin1String("copy") || actionName == QLatin1String("transfer")) {
99  KUrl url(value);
100  if (url.isValid()) {
101  QString path = url.path();
102  if (path.startsWith(QLatin1Char('/'))) {
103  path.remove(0,1); //Remove '/'
104  }
105  value = path;
106  }
107  }
108  createFilterAction( filter, actionName, value );
109  } else {
110  createFilterAction( filter, actionName, value );
111  filter = parseLine( stream, line, filter );
112  }
113  } else {
114  createFilterAction( filter, actionName, value );
115  }
116  } else if ( line.startsWith( QLatin1String( "enabled=" ) ) ) {
117  line = cleanArgument( line, QLatin1String( "enabled=" ) );
118  if ( line == QLatin1String( "no" ) ) {
119  filter->setEnabled( false );
120  }
121  } else if ( line.startsWith( QLatin1String( "condition=" ) ) ) {
122  line = cleanArgument( line, QLatin1String( "condition=" ) );
123  extractConditions( line, filter );
124  } else if ( line.startsWith( QLatin1String( "type=" ) ) ) {
125  line = cleanArgument( line, QLatin1String( "type=" ) );
126  extractType( line, filter );
127  } else if ( line.startsWith( QLatin1String( "version=" ) ) ) {
128  line = cleanArgument( line, QLatin1String( "version=" ) );
129  if ( line.toInt() != 9 ) {
130  kDebug() << " thunderbird filter version different of 9 need to look at if it changed";
131  }
132  } else if ( line.startsWith( QLatin1String( "logging=" ) ) ) {
133  line = cleanArgument( line, QLatin1String( "logging=" ) );
134  if ( line == QLatin1String( "no" ) ) {
135  //TODO
136  } else if ( line == QLatin1String( "yes" ) ) {
137  //TODO
138  } else {
139  kDebug() << " Logging option not implemented " << line;
140  }
141  } else {
142  kDebug() << "unknown tag : " << line;
143  }
144  return filter;
145 }
146 
147 void FilterImporterThunderbird::extractConditions( const QString &line,
148  MailCommon::MailFilter *filter )
149 {
150  if ( line.startsWith( QLatin1String( "AND" ) ) ) {
151  filter->pattern()->setOp( SearchPattern::OpAnd );
152  const QStringList conditionsList = line.split( QLatin1String( "AND " ) );
153  const int numberOfCond( conditionsList.count() );
154  for ( int i = 0; i < numberOfCond; ++i ) {
155  if ( !conditionsList.at( i ).trimmed().isEmpty() ) {
156  splitConditions( conditionsList.at( i ), filter );
157  }
158  }
159  } else if ( line.startsWith( QLatin1String( "OR" ) ) ) {
160  filter->pattern()->setOp( SearchPattern::OpOr );
161  const QStringList conditionsList = line.split( QLatin1String( "OR " ) );
162  const int numberOfCond( conditionsList.count() );
163  for ( int i = 0; i < numberOfCond; ++i ) {
164  if ( !conditionsList.at( i ).trimmed().isEmpty() ) {
165  splitConditions( conditionsList.at( i ), filter );
166  }
167  }
168  } else if ( line.startsWith( QLatin1String( "ALL" ) ) ){
169  filter->pattern()->setOp( SearchPattern::OpAll );
170  } else {
171  kDebug() << " missing extract condition" << line;
172  }
173 }
174 
175 bool FilterImporterThunderbird::splitConditions( const QString &cond,
176  MailCommon::MailFilter *filter )
177 {
178  /*
179  * {nsMsgSearchAttrib::Subject, "subject"},
180  {nsMsgSearchAttrib::Sender, "from"},
181  {nsMsgSearchAttrib::Body, "body"},
182  {nsMsgSearchAttrib::Date, "date"},
183  {nsMsgSearchAttrib::Priority, "priority"},
184  {nsMsgSearchAttrib::MsgStatus, "status"},
185  {nsMsgSearchAttrib::To, "to"},
186  {nsMsgSearchAttrib::CC, "cc"},
187  {nsMsgSearchAttrib::ToOrCC, "to or cc"},
188  {nsMsgSearchAttrib::AllAddresses, "all addresses"},
189  {nsMsgSearchAttrib::AgeInDays, "age in days"},
190  {nsMsgSearchAttrib::Label, "label"},
191  {nsMsgSearchAttrib::Keywords, "tag"},
192  {nsMsgSearchAttrib::Size, "size"},
193  // this used to be nsMsgSearchAttrib::SenderInAddressBook
194  // we used to have two Sender menuitems
195  // for backward compatibility, we can still parse
196  // the old style. see bug #179803
197  {nsMsgSearchAttrib::Sender, "from in ab"},
198  {nsMsgSearchAttrib::JunkStatus, "junk status"},
199  {nsMsgSearchAttrib::JunkPercent, "junk percent"},
200  {nsMsgSearchAttrib::JunkScoreOrigin, "junk score origin"},
201  {nsMsgSearchAttrib::HasAttachmentStatus, "has attachment status"},
202 
203  */
204 
205  QString str = cond.trimmed();
206  str.remove( QLatin1Char('(') );
207  str.remove( str.length() - 1, 1 ); //remove last )
208 
209  const QStringList listOfCond = str.split( QLatin1Char( ',' ) );
210  if ( listOfCond.count() < 3 ) {
211  kDebug() << "We have a pb in cond:" << cond;
212  return false;
213  }
214  const QString field = listOfCond.at( 0 );
215  const QString function = listOfCond.at( 1 );
216  const QString contents = listOfCond.at( 2 );
217 
218  QByteArray fieldName;
219  if ( field == QLatin1String( "subject" ) ) {
220  fieldName = "subject";
221  } else if ( field == QLatin1String( "from" ) ) {
222  fieldName = "from";
223  } else if ( field == QLatin1String( "body" ) ) {
224  fieldName = "<body>";
225  } else if ( field == QLatin1String( "date" ) ) {
226  fieldName = "<date>";
227  } else if ( field == QLatin1String( "priority" ) ) {
228  //TODO
229  } else if ( field == QLatin1String( "status" ) ) {
230  fieldName = "<status>";
231  } else if ( field == QLatin1String( "to" ) ) {
232  fieldName = "to";
233  } else if ( field == QLatin1String( "cc" ) ) {
234  fieldName = "cc";
235  } else if ( field == QLatin1String( "to or cc" ) ) {
236  fieldName = "<recipients>";
237  } else if ( field == QLatin1String( "all addresses" ) ) {
238  fieldName = "<recipients>";
239  } else if ( field == QLatin1String( "age in days" ) ) {
240  fieldName = "<age in days>";
241  } else if ( field == QLatin1String( "label" ) ) {
242  //TODO
243  } else if ( field == QLatin1String( "tag" ) ) {
244  fieldName = "<tag>";
245  } else if ( field == QLatin1String( "size" ) ) {
246  fieldName = "<size>";
247  } else if ( field == QLatin1String( "from in ab" ) ) {
248  //TODO
249  } else if ( field == QLatin1String( "junk status" ) ) {
250  //TODO
251  } else if ( field == QLatin1String( "junk percent" ) ) {
252  //TODO
253  } else if ( field == QLatin1String( "junk score origin" ) ) {
254  //TODO
255  } else if ( field == QLatin1String( "has attachment status" ) ) {
256  //TODO
257  }
258 
259  if ( fieldName.isEmpty() ) {
260  kDebug() << " Field not implemented: " << field;
261  }
262  /*
263  {nsMsgSearchOp::Contains, "contains"},
264  {nsMsgSearchOp::DoesntContain,"doesn't contain"},
265  {nsMsgSearchOp::Is,"is"},
266  {nsMsgSearchOp::Isnt, "isn't"},
267  {nsMsgSearchOp::IsEmpty, "is empty"},
268  {nsMsgSearchOp::IsntEmpty, "isn't empty"},
269  {nsMsgSearchOp::IsBefore, "is before"},
270  {nsMsgSearchOp::IsAfter, "is after"},
271  {nsMsgSearchOp::IsHigherThan, "is higher than"},
272  {nsMsgSearchOp::IsLowerThan, "is lower than"},
273  {nsMsgSearchOp::BeginsWith, "begins with"},
274  {nsMsgSearchOp::EndsWith, "ends with"},
275  {nsMsgSearchOp::IsInAB, "is in ab"},
276  {nsMsgSearchOp::IsntInAB, "isn't in ab"},
277  {nsMsgSearchOp::IsGreaterThan, "is greater than"},
278  {nsMsgSearchOp::IsLessThan, "is less than"},
279  {nsMsgSearchOp::Matches, "matches"},
280  {nsMsgSearchOp::DoesntMatch, "doesn't match"}
281 */
282  SearchRule::Function functionName = SearchRule::FuncNone;
283 
284  if ( function == QLatin1String( "contains" ) ) {
285  functionName = SearchRule::FuncContains;
286  } else if ( function == QLatin1String( "doesn't contain" ) ) {
287  functionName = SearchRule::FuncContainsNot;
288  } else if ( function == QLatin1String( "is" ) ) {
289  functionName = SearchRule::FuncEquals;
290  } else if ( function == QLatin1String( "isn't" ) ) {
291  functionName = SearchRule::FuncNotEqual;
292  } else if ( function == QLatin1String( "is empty" ) ) {
293  //TODO
294  } else if ( function == QLatin1String( "isn't empty" ) ) {
295  //TODO
296  } else if ( function == QLatin1String( "is before" ) ) {
297  functionName = SearchRule::FuncIsLess;
298  } else if ( function == QLatin1String( "is after" ) ) {
299  functionName = SearchRule::FuncIsGreater;
300  } else if ( function == QLatin1String( "is higher than" ) ) {
301  functionName = SearchRule::FuncIsGreater;
302  } else if ( function == QLatin1String( "is lower than" ) ) {
303  functionName = SearchRule::FuncIsLess;
304  } else if ( function == QLatin1String( "begins with" ) ) {
305  functionName = SearchRule::FuncStartWith;
306  } else if ( function == QLatin1String( "ends with" ) ) {
307  functionName = SearchRule::FuncEndWith;
308  } else if ( function == QLatin1String( "is in ab" ) ) {
309  functionName = SearchRule::FuncIsInAddressbook;
310  } else if ( function == QLatin1String( "isn't in ab" ) ) {
311  functionName = SearchRule::FuncIsNotInAddressbook;
312  } else if ( function == QLatin1String( "is greater than" ) ) {
313  functionName = SearchRule::FuncIsGreater;
314  } else if ( function == QLatin1String( "is less than" ) ) {
315  functionName = SearchRule::FuncIsLess;
316  } else if ( function == QLatin1String( "matches" ) ) {
317  functionName = SearchRule::FuncEquals;
318  } else if ( function == QLatin1String( "doesn't match" ) ) {
319  functionName = SearchRule::FuncNotEqual;
320  }
321 
322  if ( functionName == SearchRule::FuncNone ) {
323  kDebug() << " functionName not implemented: " << function;
324  }
325  QString contentsName;
326  if ( fieldName == "<status>" ) {
327  if ( contents == QLatin1String( "read" ) ) {
328  contentsName = QLatin1String( "Read" );
329  } else if ( contents == QLatin1String( "unread" ) ) {
330  contentsName = QLatin1String( "Unread" );
331  } else if ( contents == QLatin1String( "new" ) ) {
332  contentsName = QLatin1String( "New" );
333  } else if ( contents == QLatin1String( "forwarded" ) ) {
334  contentsName = QLatin1String( "Forwarded" );
335  } else {
336  kDebug() << " contents for status not implemented " << contents;
337  }
338  } else if ( fieldName == "<size>" ) {
339  int value = contents.toInt();
340  value = value * 1024; //Ko
341  contentsName = QString::number( value );
342  } else if ( fieldName == "<date>" ) {
343  QLocale locale(QLocale::C);
344  const QDate date = locale.toDate(contents,QString::fromLatin1("dd-MMM-yyyy"));
345  contentsName = date.toString(Qt::ISODate);
346  } else {
347  contentsName = contents;
348  }
349 
350  SearchRule::Ptr rule = SearchRule::createInstance( fieldName, functionName, contentsName );
351  filter->pattern()->append( rule );
352  //kDebug() << " field :" << field << " function :" << function
353  // << " contents :" << contents << " cond :" << cond;
354  return true;
355 }
356 
357 QString FilterImporterThunderbird::extractActions( const QString &line,
358  MailCommon::MailFilter *filter,
359  QString &value )
360 {
361  /*
362  { nsMsgFilterAction::MoveToFolder, "Move to folder"},
363  { nsMsgFilterAction::CopyToFolder, "Copy to folder"},
364  { nsMsgFilterAction::ChangePriority, "Change priority"},
365  { nsMsgFilterAction::Delete, "Delete"},
366  { nsMsgFilterAction::MarkRead, "Mark read"},
367  { nsMsgFilterAction::KillThread, "Ignore thread"},
368  { nsMsgFilterAction::KillSubthread, "Ignore subthread"},
369  { nsMsgFilterAction::WatchThread, "Watch thread"},
370  { nsMsgFilterAction::MarkFlagged, "Mark flagged"},
371  { nsMsgFilterAction::Label, "Label"},
372  { nsMsgFilterAction::Reply, "Reply"},
373  { nsMsgFilterAction::Forward, "Forward"},
374  { nsMsgFilterAction::StopExecution, "Stop execution"},
375  { nsMsgFilterAction::DeleteFromPop3Server, "Delete from Pop3 server"},
376  { nsMsgFilterAction::LeaveOnPop3Server, "Leave on Pop3 server"},
377  { nsMsgFilterAction::JunkScore, "JunkScore"},
378  { nsMsgFilterAction::FetchBodyFromPop3Server, "Fetch body from Pop3Server"},
379  { nsMsgFilterAction::AddTag, "AddTag"},
380  { nsMsgFilterAction::Custom, "Custom"},
381  */
382 
383  QString actionName;
384  if ( line == QLatin1String( "Move to folder" ) ) {
385  actionName = QLatin1String( "transfer" );
386  } else if ( line == QLatin1String( "Forward" ) ) {
387  actionName = QLatin1String( "forward" );
388  } else if ( line == QLatin1String( "Mark read" ) ) {
389  actionName = QLatin1String( "set status" );
390  value = QLatin1String( "R" );
391  } else if ( line == QLatin1String( "Mark unread" ) ) {
392  actionName = QLatin1String( "set status" );
393  value = QLatin1String( "U" ); //TODO verify
394  } else if ( line == QLatin1String( "Copy to folder" ) ) {
395  actionName = QLatin1String( "copy" );
396  } else if ( line == QLatin1String( "AddTag" ) ) {
397  actionName = QLatin1String( "add tag" );
398  } else if ( line == QLatin1String( "Delete" ) ) {
399  actionName = QLatin1String( "delete" );
400  } else if ( line == QLatin1String( "Change priority" ) ) {
401  actionName = QLatin1String("Change priority"); //Doesn't exist in kmail but we help us to importing
402  } else if ( line == QLatin1String( "Ignore thread" ) ) {
403  } else if ( line == QLatin1String( "Ignore subthread" ) ) {
404  } else if ( line == QLatin1String( "Watch thread" ) ) {
405  } else if ( line == QLatin1String( "Mark flagged" ) ) {
406  } else if ( line == QLatin1String( "Label" ) ) {
407  } else if ( line == QLatin1String( "Reply" ) ) {
408  actionName = QLatin1String( "set Reply-To" );
409  } else if ( line == QLatin1String( "Stop execution" ) ) {
410  filter->setStopProcessingHere( true );
411  return QString();
412  } else if ( line == QLatin1String( "Delete from Pop3 server" ) ) {
413  } else if ( line == QLatin1String( "JunkScore" ) ) {
414  } else if ( line == QLatin1String( "Fetch body from Pop3Server" ) ) {
415  } else if ( line == QLatin1String( "Custom" ) ) {
416  }
417  if ( actionName.isEmpty() ) {
418  kDebug() << QString::fromLatin1( " missing convert method: %1" ).arg( line );
419  }
420  return actionName;
421 }
422 
423 void FilterImporterThunderbird::extractType( const QString &line, MailCommon::MailFilter *filter )
424 {
425  const int value = line.toInt();
426  if ( value == 1 ) {
427  filter->setApplyOnInbound( true );
428  filter->setApplyOnExplicit( false );
429  //Checking mail
430  } else if ( value == 16 ) {
431  filter->setApplyOnInbound( false );
432  filter->setApplyOnExplicit( true );
433  //Manual mail
434  } else if ( value == 17 ) {
435  filter->setApplyOnInbound( true );
436  filter->setApplyOnExplicit( true );
437  //Checking mail or manual
438  } else if ( value == 32 ) {
439  filter->setApplyOnExplicit( false );
440  filter->setApplyOnOutbound( true );
441  filter->setApplyOnInbound( false );
442  //checking mail after classification
443  } else if ( value == 48 ) {
444  filter->setApplyOnExplicit( true );
445  filter->setApplyOnOutbound( true );
446  filter->setApplyOnInbound( false );
447  //checking mail after classification or manual check
448  } else {
449  kDebug() << " type value is not valid :" << value;
450  }
451 }
452 
453 QString FilterImporterThunderbird::cleanArgument( const QString &line, const QString &removeStr )
454 {
455  QString str = line;
456  str.remove( removeStr );
457  str.remove( QLatin1String( "\"" ) );
458  str.remove( str.length(), 1 ); //remove last "
459  return str;
460 }
MailCommon::SearchRule::FuncIsInAddressbook
Definition: searchpattern.h:92
MailCommon::FilterImporterThunderbird::~FilterImporterThunderbird
~FilterImporterThunderbird()
Definition: filterimporterthunderbird.cpp:42
MailCommon::SearchRule::FuncEndWith
Definition: searchpattern.h:100
MailCommon::SearchPattern::OpAll
Definition: searchpattern.h:608
filterimporterthunderbird_p.h
MailCommon::SearchPattern::OpOr
Definition: searchpattern.h:607
MailCommon::SearchRule::FuncContainsNot
Definition: searchpattern.h:83
MailCommon::SearchRule::FuncIsNotInAddressbook
Definition: searchpattern.h:93
MailCommon::MailFilter::setApplyOnOutbound
void setApplyOnOutbound(bool aApply=true)
Set whether this filter should be applied on outbound messages (aApply == true) or not...
Definition: mailfilter.cpp:192
MailCommon::FilterImporterThunderbird::FilterImporterThunderbird
FilterImporterThunderbird(QFile *file, bool interactive=true)
Definition: filterimporterthunderbird.cpp:28
mailfilter.h
MailCommon::SearchRule::Ptr
boost::shared_ptr< SearchRule > Ptr
Defines a pointer to a search rule.
Definition: searchpattern.h:69
MailCommon::SearchRule::FuncStartWith
Definition: searchpattern.h:98
MailCommon::MailFilter::setStopProcessingHere
void setStopProcessingHere(bool aStop)
Definition: mailfilter.cpp:307
MailCommon::SearchRule::Function
Function
Describes operators for comparison of field and contents.
Definition: searchpattern.h:80
MailCommon::SearchRule::FuncNotEqual
Definition: searchpattern.h:85
MailCommon::MailFilter::setToolbarName
void setToolbarName(const QString &toolbarName)
This sets the toolbar name for this filter.
Definition: mailfilter.cpp:338
MailCommon::FilterImporterAbstract
Definition: filterimporterabstract_p.h:33
MailCommon::MailFilter::setEnabled
void setEnabled(bool)
Definition: mailfilter.cpp:739
MailCommon::SearchRule::FuncNone
Definition: searchpattern.h:81
MailCommon::SearchRule::FuncContains
Definition: searchpattern.h:82
MailCommon::SearchPattern::OpAnd
Definition: searchpattern.h:606
MailCommon::SearchRule::FuncIsGreater
Definition: searchpattern.h:88
MailCommon::FilterImporterAbstract::appendFilter
void appendFilter(MailCommon::MailFilter *filter)
Definition: filterimporterabstract.cpp:47
MailCommon::SearchPattern::setOp
void setOp(SearchPattern::Operator aOp)
Sets the filter operator.
Definition: searchpattern.h:713
MailCommon::MailFilter::setApplyOnExplicit
void setApplyOnExplicit(bool aApply=true)
Set whether this filter should be applied on explicit (CTRL-J) filtering (aApply == true) or not...
Definition: mailfilter.cpp:222
MailCommon::MailFilter::setApplyOnInbound
void setApplyOnInbound(bool aApply=true)
Set whether this filter should be applied on inbound messages (aApply == true) or not...
Definition: mailfilter.cpp:212
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: searchpattern.cpp:140
MailCommon::FilterImporterThunderbird::defaultFiltersSettingsPath
static QString defaultFiltersSettingsPath()
Definition: filterimporterthunderbird.cpp:57
MailCommon::MailFilter::pattern
SearchPattern * pattern()
Provides a reference to the internal pattern.
Definition: mailfilter.cpp:182
MailCommon::MailFilter
Definition: mailfilter.h:42
MailCommon::SearchPattern::setName
void setName(const QString &newName)
Sets the name of the search pattern.
Definition: searchpattern.h:697
MailCommon::SearchRule::FuncIsLess
Definition: searchpattern.h:90
MailCommon::FilterImporterAbstract::createFilterAction
void createFilterAction(MailCommon::MailFilter *filter, const QString &actionName, const QString &value)
Definition: filterimporterabstract.cpp:64
MailCommon::SearchRule::FuncEquals
Definition: searchpattern.h:84
This file is part of the KDE documentation.
Documentation copyright © 1996-2014 The KDE developers.
Generated on Tue Oct 14 2014 22:55:14 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

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