• 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
  • search
searchpattern.h
Go to the documentation of this file.
1 /* -*- mode: C++; c-file-style: "gnu" -*-
2 
3  Author: Marc Mutz <mutz@kde.org>
4 
5  This program is free software; you can redistribute it and/or modify
6  it under the terms of the GNU General Public License as published by
7  the Free Software Foundation; either version 2 of the License, or
8  (at your option) any later version.
9 
10  This program is distributed in the hope that it will be useful,
11  but WITHOUT ANY WARRANTY; without even the implied warranty of
12  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  GNU General Public License for more details.
14 
15  You should have received a copy of the GNU General Public License along
16  with this program; if not, write to the Free Software Foundation, Inc.,
17  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
18 */
19 
20 #ifndef MAILCOMMON_SEARCHPATTERN_H
21 #define MAILCOMMON_SEARCHPATTERN_H
22 
23 #include "mailcommon_export.h"
24 
25 #include <Akonadi/KMime/MessageStatus>
26 
27 #include <Nepomuk2/Query/GroupTerm>
28 #include <Nepomuk2/Query/ComparisonTerm>
29 
30 #include <KLocale>
31 #include <KUrl>
32 
33 #include <QList>
34 #include <QString>
35 
36 #include <boost/shared_ptr.hpp>
37 
38 using Akonadi::MessageStatus;
39 
40 
41 namespace Akonadi {
42  class Item;
43 }
44 
45 namespace KMime {
46  class Message;
47 }
48 
49 class KConfigGroup;
50 
51 namespace MailCommon {
52 
53 // maximum number of filter rules per filter
54 const int FILTER_MAX_RULES = 8;
55 
63 class MAILCOMMON_EXPORT SearchRule
64 {
65  public:
69  typedef boost::shared_ptr<SearchRule> Ptr;
70 
80  enum Function {
81  FuncNone = -1,
82  FuncContains = 0,
83  FuncContainsNot,
84  FuncEquals,
85  FuncNotEqual,
86  FuncRegExp,
87  FuncNotRegExp,
88  FuncIsGreater,
89  FuncIsLessOrEqual,
90  FuncIsLess,
91  FuncIsGreaterOrEqual,
92  FuncIsInAddressbook,
93  FuncIsNotInAddressbook,
94  FuncIsInCategory,
95  FuncIsNotInCategory,
96  FuncHasAttachment,
97  FuncHasNoAttachment,
98  FuncStartWith,
99  FuncNotStartWith,
100  FuncEndWith,
101  FuncNotEndWith
102  };
103 
104  enum RequiredPart {
105  Envelope = 0,
106  Header,
107  CompleteMessage
108  };
109 
117  explicit SearchRule ( const QByteArray &field = 0, Function function = FuncContains,
118  const QString &contents = QString() );
119 
123  SearchRule( const SearchRule &other );
124 
128  const SearchRule &operator=( const SearchRule &other );
129 
138  static SearchRule::Ptr createInstance( const QByteArray &field = 0,
139  Function function = FuncContains,
140  const QString &contents = QString() );
141 
150  static SearchRule::Ptr createInstance( const QByteArray &field,
151  const char *function,
152  const QString &contents );
153 
157  static SearchRule::Ptr createInstance( const SearchRule &other );
158 
162  static SearchRule::Ptr createInstance( QDataStream &stream );
163 
175  static SearchRule::Ptr createInstanceFromConfig( const KConfigGroup &group, int index );
176 
180  virtual ~SearchRule();
181 
190  virtual bool matches( const Akonadi::Item &item ) const = 0;
191 
198  virtual bool isEmpty() const = 0;
199 
203  virtual SearchRule::RequiredPart requiredPart() const = 0;
204 
214  void writeConfig( KConfigGroup &group, int index ) const;
215 
216  void generateSieveScript(QStringList &requires, QString &code);
217 
221  void setFunction( Function function );
222 
226  Function function() const;
227 
233  void setField( const QByteArray &name );
234 
248  QByteArray field() const;
249 
256  void setContents( const QString &contents );
257 
261  QString contents() const;
262 
266  const QString asString() const;
267 
271  virtual void addQueryTerms( Nepomuk2::Query::GroupTerm &groupTerm, bool &emptyIsNotAnError ) const = 0;
272 
273 
274  QDataStream &operator>>( QDataStream & ) const;
275 
276  protected:
280  bool isNegated() const;
281 
285  Nepomuk2::Query::ComparisonTerm::Comparator nepomukComparator() const;
286 
290  void addAndNegateTerm( const Nepomuk2::Query::Term &term,
291  Nepomuk2::Query::GroupTerm &termGroup ) const;
292 
293 protected:
294  QString quote( const QString &content ) const;
295 private:
296  static Function configValueToFunc( const char * );
297  static QString functionToString( Function );
298  QString conditionToString(Function function);
299 
300  QByteArray mField;
301  Function mFunction;
302  QString mContents;
303 };
304 
305 // Needed for MSVC 2010, as it seems to not implicit cast for a pointer anymore
306 #ifdef _MSC_VER
307 uint qHash( SearchRule::Ptr sr );
308 #endif
309 
317 class SearchRuleString : public SearchRule
318 {
319  public:
327  explicit SearchRuleString( const QByteArray &field = 0,
328  Function function = FuncContains,
329  const QString &contents = QString() );
330 
334  SearchRuleString( const SearchRuleString &other );
335 
339  const SearchRuleString &operator=( const SearchRuleString &other );
340 
344  virtual ~SearchRuleString();
345 
349  virtual bool isEmpty() const ;
350 
354  virtual RequiredPart requiredPart() const;
355 
359  virtual bool matches( const Akonadi::Item &item ) const;
360 
365  bool matchesInternal( const QString &contents ) const;
366 
370  virtual void addQueryTerms( Nepomuk2::Query::GroupTerm &groupTerm, bool &emptyIsNotAnError ) const;
371 
372  private:
376  void addPersonTerm( Nepomuk2::Query::GroupTerm &groupTerm, const QUrl &field ) const;
377  void addHeaderTerm( Nepomuk2::Query::GroupTerm &groupTerm,
378  const Nepomuk2::Query::Term &field ) const;
379 };
380 
387 class SearchRuleNumerical : public SearchRule
388 {
389  public:
397  explicit SearchRuleNumerical( const QByteArray &field = 0,
398  Function function = FuncContains,
399  const QString &contents = QString() );
400 
404  virtual bool isEmpty() const ;
405 
409  virtual bool matches( const Akonadi::Item &item ) const;
410 
414  virtual RequiredPart requiredPart() const;
415 
416  // Optimized matching not implemented, will use the unoptimized matching
417  // from SearchRule
418  using SearchRule::matches;
419 
424  bool matchesInternal( long numericalValue, long numericalContents,
425  const QString &contents ) const;
426 
430  virtual void addQueryTerms( Nepomuk2::Query::GroupTerm &groupTerm, bool &emptyIsNotAnError ) const;
431 
432 };
433 
434 
435 class SearchRuleDate : public SearchRule
436 {
437  public:
445  explicit SearchRuleDate( const QByteArray &field = 0,
446  Function function = FuncContains,
447  const QString &contents = QString() );
448 
452  virtual bool isEmpty() const ;
453 
457  virtual bool matches( const Akonadi::Item &item ) const;
458 
462  virtual RequiredPart requiredPart() const;
463 
464  // Optimized matching not implemented, will use the unoptimized matching
465  // from SearchRule
466  using SearchRule::matches;
467 
472  bool matchesInternal( const QDate& dateValue, const QDate& msgDate ) const;
473 
477  virtual void addQueryTerms( Nepomuk2::Query::GroupTerm &groupTerm, bool &emptyIsNotAnError ) const;
478 
479 };
480 
481 
482 
483 
484 
485 //TODO: Check if the below one is needed or not!
486 // The below are used in several places and here so they are accessible.
487 struct MessageStatusInfo {
488  const char *text;
489  const char *icon;
490 };
491 
492 // If you change the ordering here; also do it in the enum below
493 static const MessageStatusInfo StatusValues[] =
494 {
495  { I18N_NOOP2( "message status", "Important" ), "emblem-important" },
496  { I18N_NOOP2( "message status", "Action Item" ), "mail-task" },
497  { I18N_NOOP2( "message status", "Unread" ), "mail-unread" },
498  { I18N_NOOP2( "message status", "Read" ), "mail-read" },
499  { I18N_NOOP2( "message status", "Deleted" ), "mail-deleted" },
500  { I18N_NOOP2( "message status", "Replied" ), "mail-replied" },
501  { I18N_NOOP2( "message status", "Forwarded" ), "mail-forwarded" },
502  { I18N_NOOP2( "message status", "Queued" ), "mail-queued" },
503  { I18N_NOOP2( "message status", "Sent" ), "mail-sent" },
504  { I18N_NOOP2( "message status", "Watched" ), "mail-thread-watch" },
505  { I18N_NOOP2( "message status", "Ignored" ), "mail-thread-ignored" },
506  { I18N_NOOP2( "message status", "Spam" ), "mail-mark-junk" },
507  { I18N_NOOP2( "message status", "Ham" ), "mail-mark-notjunk" },
508  { I18N_NOOP2( "message status", "Has Attachment"), "mail-attachment" } //must be last
509 };
510 
511 // If you change the ordering here; also do it in the array above
512 enum StatusValueTypes {
513  StatusImportant = 0,
514  StatusToAct = 1,
515  StatusUnread = 2,
516  StatusRead = 3,
517  StatusDeleted = 4,
518  StatusReplied = 5,
519  StatusForwarded = 6,
520  StatusQueued = 7,
521  StatusSent = 8,
522  StatusWatched = 9,
523  StatusIgnored = 10,
524  StatusSpam = 11,
525  StatusHam = 12,
526  StatusHasAttachment = 13 //must be last
527 };
528 
529 static const int StatusValueCount =
530  sizeof( StatusValues ) / sizeof( MessageStatusInfo );
531 // we want to show all status entries in the quick search bar, but only the
532 // ones up to attachment in the search/filter dialog, because there the
533 // attachment case is handled separately.
534 static const int StatusValueCountWithoutHidden = StatusValueCount - 1;
535 
543 class MAILCOMMON_EXPORT SearchRuleStatus : public SearchRule
544 {
545  public:
546  explicit SearchRuleStatus( const QByteArray &field = 0,
547  Function function = FuncContains,
548  const QString &contents = QString() );
549 
550  explicit SearchRuleStatus( Akonadi::MessageStatus status,
551  Function function = FuncContains );
552 
553  virtual bool isEmpty() const ;
554  virtual bool matches( const Akonadi::Item &item ) const;
555 
559  virtual RequiredPart requiredPart() const;
560 
561  virtual void addQueryTerms( Nepomuk2::Query::GroupTerm &groupTerm, bool &emptyIsNotAnError ) const;
562 
563  //Not possible to implement optimized form for status searching
564  using SearchRule::matches;
565 
566  static Akonadi::MessageStatus statusFromEnglishName( const QString & );
567 
568  private:
569  void addTagTerm( Nepomuk2::Query::GroupTerm &groupTerm, const QString &tagId ) const;
570 
571  private:
572  Akonadi::MessageStatus mStatus;
573 };
574 
575 // ------------------------------------------------------------------------
576 
595 class MAILCOMMON_EXPORT SearchPattern : public QList<SearchRule::Ptr>
596 {
597 
598  public:
605  enum Operator {
606  OpAnd,
607  OpOr,
608  OpAll
609  };
610 
611 
612  enum SparqlQueryError {
613  NoError = 0,
614  MissingCheck,
615  FolderEmptyOrNotIndexed,
616  EmptyResult,
617  NotEnoughCharacters
618  };
619 
626  SearchPattern();
627 
633  explicit SearchPattern( const KConfigGroup &config );
634 
636  ~SearchPattern();
637 
648  bool matches( const Akonadi::Item &item, bool ignoreBody = false ) const;
649 
653  SearchRule::RequiredPart requiredPart() const;
654 
660  void purify();
661 
674  void readConfig( const KConfigGroup &config );
675 
683  void writeConfig( KConfigGroup &config ) const;
684 
688  QString name() const
689  {
690  return mName;
691  }
692 
697  void setName( const QString &newName )
698  {
699  mName = newName;
700  }
701 
705  SearchPattern::Operator op() const
706  {
707  return mOperator;
708  }
709 
713  void setOp( SearchPattern::Operator aOp )
714  {
715  mOperator = aOp;
716  }
717 
721  QString asString() const;
722 
727  SparqlQueryError asSparqlQuery(QString &queryStr, const KUrl::List& url = KUrl::List()) const;
728 
732  const SearchPattern &operator=( const SearchPattern &aPattern );
733 
737  QByteArray serialize() const;
738 
742  void deserialize( const QByteArray & );
743 
744  QDataStream &operator>>( QDataStream &s ) const;
745  QDataStream &operator<<( QDataStream &s );
746 
747 
748  void generateSieveScript(QStringList &requires, QString &code);
749 
750  private:
758  void importLegacyConfig( const KConfigGroup &config );
759 
764  void init();
765  Nepomuk2::Query::ComparisonTerm createChildTerm( const KUrl& url, bool& empty ) const;
766  QString mName;
767  Operator mOperator;
768 };
769 
770 }
771 
772 Q_DECLARE_METATYPE(MailCommon::SearchRule::RequiredPart)
773 
774 #endif /* MAILCOMMON_SEARCHPATTERN_H_ */
MailCommon::SearchRule::FuncIsInAddressbook
Definition: searchpattern.h:92
MailCommon::SearchRuleDate::matches
virtual bool matches(const Akonadi::Item &item) const
Tries to match the rule against the KMime::Message in the given item.
Definition: searchpattern.cpp:1295
MailCommon::SearchRule::FuncEndWith
Definition: searchpattern.h:100
MailCommon::SearchRuleNumerical::addQueryTerms
virtual void addQueryTerms(Nepomuk2::Query::GroupTerm &groupTerm, bool &emptyIsNotAnError) const
Adds query terms to the given term group.
Definition: searchpattern.cpp:1257
MailCommon::SearchRuleString::matchesInternal
bool matchesInternal(const QString &contents) const
A helper method for the main matches() method.
Definition: searchpattern.cpp:998
MailCommon::SearchRule::FuncIsGreaterOrEqual
Definition: searchpattern.h:91
MailCommon::SearchPattern::op
SearchPattern::Operator op() const
Returns the filter operator.
Definition: searchpattern.h:705
MailCommon::SearchPattern::MissingCheck
Definition: searchpattern.h:614
MailCommon::SearchPattern::OpOr
Definition: searchpattern.h:607
MailCommon::SearchRule::FuncContainsNot
Definition: searchpattern.h:83
MailCommon::SearchRuleNumerical::requiredPart
virtual RequiredPart requiredPart() const
Returns the required part from the item that is needed for the search to operate. ...
Definition: searchpattern.cpp:1197
MailCommon::SearchRule::FuncIsNotInAddressbook
Definition: searchpattern.h:93
MailCommon::SearchRuleNumerical::SearchRuleNumerical
SearchRuleNumerical(const QByteArray &field=0, Function function=FuncContains, const QString &contents=QString())
Creates new numerical search rule.
Definition: searchpattern.cpp:1153
MailCommon::SearchRuleDate::isEmpty
virtual bool isEmpty() const
Determines whether the rule is worth considering.
Definition: searchpattern.cpp:1290
MailCommon::SearchRule::FuncIsInCategory
Definition: searchpattern.h:94
MailCommon::SearchRule::FuncNotStartWith
Definition: searchpattern.h:99
MailCommon::SearchRuleNumerical
This class represents a search pattern rule operating on numerical values.
Definition: searchpattern.h:387
MailCommon::StatusSent
Definition: searchpattern.h:521
MailCommon::SearchRuleNumerical::isEmpty
virtual bool isEmpty() const
Determines whether the rule is worth considering.
Definition: searchpattern.cpp:1160
MailCommon::SearchRule::FuncHasAttachment
Definition: searchpattern.h:96
MailCommon::StatusValueCountWithoutHidden
static const int StatusValueCountWithoutHidden
Definition: searchpattern.h:534
MailCommon::StatusValueTypes
StatusValueTypes
Definition: searchpattern.h:512
MailCommon::SearchRule::Ptr
boost::shared_ptr< SearchRule > Ptr
Defines a pointer to a search rule.
Definition: searchpattern.h:69
MailCommon::StatusToAct
Definition: searchpattern.h:514
MailCommon::SearchRuleDate::matchesInternal
bool matchesInternal(const QDate &dateValue, const QDate &msgDate) const
A helper method for the main matches() method.
Definition: searchpattern.cpp:1313
MailCommon::SearchRule::FuncStartWith
Definition: searchpattern.h:98
MailCommon::SearchRule::FuncNotRegExp
Definition: searchpattern.h:87
MailCommon::StatusUnread
Definition: searchpattern.h:515
MailCommon::StatusQueued
Definition: searchpattern.h:520
MailCommon::StatusWatched
Definition: searchpattern.h:522
MailCommon::SearchRule::Function
Function
Describes operators for comparison of field and contents.
Definition: searchpattern.h:80
MailCommon::StatusReplied
Definition: searchpattern.h:518
MailCommon::SearchRule::FuncNotEqual
Definition: searchpattern.h:85
MailCommon::SearchRule::matches
virtual bool matches(const Akonadi::Item &item) const =0
Tries to match the rule against the KMime::Message in the given item.
MailCommon::SearchPattern::Operator
Operator
Boolean operators that connect the return values of the individual rules.
Definition: searchpattern.h:605
mailcommon_export.h
MailCommon::SearchRuleString::isEmpty
virtual bool isEmpty() const
Determines whether the rule is worth considering.
Definition: searchpattern.cpp:686
MailCommon::SearchRule::contents
QString contents() const
Returns the contents of the rule.
Definition: searchpattern.cpp:560
I18N_NOOP2
#define I18N_NOOP2(c, t)
Definition: searchpatternedit.cpp:48
MailCommon::SearchRuleString::SearchRuleString
SearchRuleString(const QByteArray &field=0, Function function=FuncContains, const QString &contents=QString())
Creates new new string search rule.
Definition: searchpattern.cpp:657
MailCommon::SearchRuleNumerical::matches
virtual bool matches(const Akonadi::Item &item) const
Tries to match the rule against the KMime::Message in the given item.
Definition: searchpattern.cpp:1168
MailCommon::SearchRuleDate::requiredPart
virtual RequiredPart requiredPart() const
Returns the required part from the item that is needed for the search to operate. ...
Definition: searchpattern.cpp:1341
MailCommon::SearchRule::RequiredPart
RequiredPart
Definition: searchpattern.h:104
MailCommon::SearchPattern::FolderEmptyOrNotIndexed
Definition: searchpattern.h:615
MailCommon::SearchRule::FuncHasNoAttachment
Definition: searchpattern.h:97
MailCommon::SearchPattern
This class is an abstraction of a search over messages.
Definition: searchpattern.h:595
MailCommon::SearchRule::field
QByteArray field() const
Returns the message header field name (without the trailing ':').
Definition: searchpattern.cpp:550
MailCommon::SearchRule::FuncRegExp
Definition: searchpattern.h:86
MailCommon::SearchRuleStatus
This class represents a search to be performed against the status of a messsage.
Definition: searchpattern.h:543
MailCommon::StatusDeleted
Definition: searchpattern.h:517
MAILCOMMON_EXPORT
#define MAILCOMMON_EXPORT
Definition: mailcommon_export.h:35
MailCommon::SearchRuleString::requiredPart
virtual RequiredPart requiredPart() const
Returns the required part from the item that is needed for the search to operate. ...
Definition: searchpattern.cpp:691
MailCommon::SearchRule
This class represents one search pattern rule.
Definition: searchpattern.h:63
MailCommon::SearchRule::FuncIsNotInCategory
Definition: searchpattern.h:95
MailCommon::SearchRule::FuncContains
Definition: searchpattern.h:82
MailCommon::SearchPattern::OpAnd
Definition: searchpattern.h:606
MailCommon::StatusForwarded
Definition: searchpattern.h:519
MailCommon::SearchRuleString::addQueryTerms
virtual void addQueryTerms(Nepomuk2::Query::GroupTerm &groupTerm, bool &emptyIsNotAnError) const
Adds query terms to the given term group.
Definition: searchpattern.cpp:868
MailCommon::operator>>
MAILCOMMON_EXPORT QDataStream & operator>>(QDataStream &stream, MailFilter &filter)
Definition: mailfilter.cpp:662
MailCommon::SearchRule::FuncIsGreater
Definition: searchpattern.h:88
MailCommon::SearchRuleString
This class represents a search pattern rule operating on a string.
Definition: searchpattern.h:317
MailCommon::SearchRuleString::operator=
const SearchRuleString & operator=(const SearchRuleString &other)
Initializes this rule with an other rule.
Definition: searchpattern.cpp:669
MailCommon::SearchRule::FuncIsLessOrEqual
Definition: searchpattern.h:89
MailCommon::SearchRuleDate
Definition: searchpattern.h:435
MailCommon::SearchRuleString::matches
virtual bool matches(const Akonadi::Item &item) const
Tries to match the rule against the KMime::Message in the given item.
Definition: searchpattern.cpp:710
MailCommon::operator<<
MAILCOMMON_EXPORT QDataStream & operator<<(QDataStream &stream, const MailFilter &filter)
Definition: mailfilter.cpp:631
MailCommon::StatusIgnored
Definition: searchpattern.h:523
MailCommon::SearchPattern::SparqlQueryError
SparqlQueryError
Definition: searchpattern.h:612
MailCommon::SearchPattern::setOp
void setOp(SearchPattern::Operator aOp)
Sets the filter operator.
Definition: searchpattern.h:713
MailCommon::StatusRead
Definition: searchpattern.h:516
MailCommon::StatusValues
static const MessageStatusInfo StatusValues[]
Definition: searchpattern.h:493
MailCommon::MessageStatusInfo::icon
const char * icon
Definition: searchpattern.h:489
MailCommon::SearchPattern::EmptyResult
Definition: searchpattern.h:616
MailCommon::StatusHasAttachment
Definition: searchpattern.h:526
MailCommon::MessageStatusInfo
Definition: searchpattern.h:487
MailCommon::SearchRuleString::~SearchRuleString
virtual ~SearchRuleString()
Destroys the string search rule.
Definition: searchpattern.cpp:682
MailCommon::SearchRule::Header
Definition: searchpattern.h:106
MailCommon::FILTER_MAX_RULES
const int FILTER_MAX_RULES
Definition: searchpattern.h:54
MailCommon::SearchRuleNumerical::matchesInternal
bool matchesInternal(long numericalValue, long numericalContents, const QString &contents) const
A helper method for the main matches() method.
Definition: searchpattern.cpp:1203
MailCommon::SearchRuleDate::addQueryTerms
virtual void addQueryTerms(Nepomuk2::Query::GroupTerm &groupTerm, bool &emptyIsNotAnError) const
Adds query terms to the given term group.
Definition: searchpattern.cpp:1348
MailCommon::StatusSpam
Definition: searchpattern.h:524
MailCommon::MessageStatusInfo::text
const char * text
Definition: searchpattern.h:488
MailCommon::SearchPattern::setName
void setName(const QString &newName)
Sets the name of the search pattern.
Definition: searchpattern.h:697
MailCommon::SearchRuleDate::SearchRuleDate
SearchRuleDate(const QByteArray &field=0, Function function=FuncContains, const QString &contents=QString())
Creates new date search rule.
Definition: searchpattern.cpp:1283
MailCommon::SearchRule::FuncIsLess
Definition: searchpattern.h:90
MailCommon::StatusHam
Definition: searchpattern.h:525
MailCommon::SearchRule::FuncEquals
Definition: searchpattern.h:84
MailCommon::StatusImportant
Definition: searchpattern.h:513
MailCommon::StatusValueCount
static const int StatusValueCount
Definition: searchpattern.h:529
MailCommon::SearchPattern::name
QString name() const
Returns the name of the search pattern.
Definition: searchpattern.h:688
QList
This file is part of the KDE documentation.
Documentation copyright © 1996-2014 The KDE developers.
Generated on Tue Oct 14 2014 22:55:15 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