Frameworks/Epics/kdepimlibs

From KDE Community Wiki

kdepimlibs Epic

Status

Status as at 16 Apr 2014.

  • Akonadi supports Qt 5 since release 1.11
  • All kdepim has CMake automoc
  • Most of the kdepimlibs subdirs are now building using ECM.
  • Porting the kdepim libraries to KF5/Qt5 started.
  • Maintainers are requested to fill in the Code Units grid below

Planning

At the KDE PIM sprint the following plan was discussed on the assumption that no work had been started yet, so it was better to wait until the kdelibs split had been performed:

  • Wait for the kdelibs split to be completed and the preview release to be made
  • A frameworks branch to be created in kdepimlibs
  • All obsolete libraries to be deleted
  • Qt5 / KF5 basic porting to be performed mostly by the Frameworks team (old frameworks branch to be reviewed and deleted)
  • Once work is started here no more style fixes to be applied to Master
  • Code relying on qt3support and deprecated libraries will be removed as part of the porting
  • All classes to be reviewed by key maintainers to decide if any should move elsewhere
  • Once basic porting is completed then kdepimlibs will be spilt into separate frameworks
  • Once split the maintainers of each framework will take over work to make any API and code changes required
  • PIM Frameworks will be released as and when they are ready, we do not need to release them all at the same time
  • PIM Frameworks will be prioritised depending on usage, i.e. libraries needed by KDE Workspaces and Kolab should be released first
  • kdepim-runtime will be split between PIM Framework and kdepim


Since then Stephen Kelly has advised he has already completed significant parts of the port and is recommending the following plan be followed:

  • Clean-up in Master branch
    • Port away from obsolete code
    • Includes
    • Q_SLOTS and Q_SIGNALS
    • kde4_add_library -> add_library
  • Merge to frameworks
  • Delete obsolete code from frameworks branch
  • Port to Qt5 / KF5
    • Adapt to upstream api changes, includes, cmake, etc
    • Use kde4support as required
  • Remove use of kde4support
  • Code rearranging
    • Internal library splits, merges
  • Code improvements
    • API changes
    • Refactoring
  • Coding Style fix
  • Split
  • Release

Policies

See the other Frameworks pages for the KDE Frameworks Policies, the kdelibs Split Policies and the Definition of Done .

The kdepimlibs specific policies are:

  • Modules that use qt3support are to be removed
  • Deprecated API is allowed to be removed
  • Source compatibility requirements are relaxed due to fewer clients, but major rewrites are discouraged. Instead port the old library and create a separate new library (e.g. KHolidays and QHolidays).
  • Most libraries will aim for Tier 2, but some may be able to target Tier 1.
  • The initial KF5 port may rely on kde4support to enable the port to be performed by non-experts, but no Framework released may rely on kde4support so the maintainer must remove all usage. In particular all KDateTime, KTimeZone and KLocale usage must be removed and the Qt replacements throughly tested for regressions and behaviour changes.

Priorities

The following libraries are known to be used outside of KDE PIM and so may be a higher priority in porting.

For Plasma support the decision has been made to deprecate the use of DataEngines and use QML includes instead.

Priority items:

  • Akonadi
  • KABC
  • KCalCore
  • KMime
  • KHolidays
  • QGpgme
  • KXMLRPCClient
  • + other Kolab libs

kde-workspace

Usage:

  • kde-workspace/libs/plasmaclock/
    • KHolidays (for selection widget, could be moved elsewhere?)
    • CalendarEngine
  • kde-workspace/plasma/generic/dataengines/akonadi/
    • Akonadi
    • KMime
    • KABC
    • Microblog
    • KPimUtils (linked but not included?)
    • AkonadiEngine not used anywhere
  • kde-workspace/plasma/generic/dataengines/calendar/
    • Akonadi
    • KCalCore
    • KCalUtils
    • KHolidays
    • CalendarEngine only used in kde-workspace/libs/plasmaclock/
  • kde-workspace/plasma/generic/dataengines/rss/
    • Syndication


Note: It is recommended that the Akonadi DataEngine be reworked/renamed as EMailEngine, ToDoEngine, etc, as this is client developer facing API and so the implementation name should be abstracted/hidden from them, i.e. as is done with the CalendarEngine.

kde-runtime

Usage:

  • kde-runtime/drkonqi/
    • KXMLRPCClient
  • kde-runtime/kwalletd
    • QGpgme

kdeplasma-addons

Usages:

  • kdeplasma-addons/libs/lancelot-datamodel
    • Akonadi - for email support
  • kdeplasma-addons/runners/contacts
    • Akonadi
    • KABC
  • kdeplasma-addons/runners/events
    • Akonadi
    • KCalCore
  • kdeplasma-addons/applets/news/
    • RssEngine
  • kdeplasma-addons/applets/rssnow/
    • RssEngine


Runners could be converted to either use KPeople, or to use the QML includes? Or the DataEngines?

Kolab

Basically most of the lower-level libraries and kdelibs(kdecore)!

Dependencies of libkolab:

  • KIMAP
  • KABC
  • KCalCore
  • KMime
  • KCalUtils (only for invitation formatting, incidenceformatter.h/stringify.h)
  • KPimUtils (only for email parsing, email.h)
  • akonadi/notes (note wrapper around KMime message)
  • kdelibs (KDateTime, jobs and dependencies of kdepimlibs)

Since libkolab is used on the server, all it's dependencies shouldn't have GUI/DBUS/runtime-deamon dependencies.

Code Units

The following is a high-level list of the different Code Units in kdepimlibs and kdepim-runtime. A Unit may be a library or other software artefact that is to be considered as a stand-alone unit of code.

Initial listing of top-level directories and the README and MAINTAINERS files. If subdirectories need breaking out separately then please add to list.

Note that the status listed in this table is solely whether the information required has been completed, not that theport has been completed.

kdepimlibs

Status Unit Description Maintainer Dependencies External Usage
IN PROGRESS akonadi Client access library for using the Akonadi PIM data server. Dan Vratil KJob, KDialog, KDebug, KLocale, KMimeType, Ki18n, KIcon, KPixmapSequence, KComboBox, KLineEdit, KStandardShortcut, KItemModels/Views, KXmlGui, KApp/KCD/KCmdLineArgs, KPimUtils, KAction, KConfig, KStandardDirs, misc K* widgets, KColorScheme, KIO, KTextBrowser, KDateTime, Solid, KGlobal::ref, KInputDialog, KMessageBox, KProcess, KRun, KUser, KFileDialog, KPluginLoader, KRandom, KMime (tests only)
IN PROGRESS akonadi/calendar Calendar-specific Akonadi client library Akonadi, Akonadi Contacts, Akonadi KMime, Mailtransport, KCalCore, KCalUtils, Mailtransport, Ki18n, KLocale, KDateTime, KTimeZone, KJob, KPimIdentities, KEmailSettings, KIO, KTemporaryFile, KMessageBox, various K widgets, KStandardDirs, KIcon, KItemModels, KPimUtils
IN PROGRESS akonadi/contacts Contact-specific Akonadi client library Akonadi, KABC, Ki18n, KLocale, KConfig, KStandarddirs, KJob, KIO (incl. NetAccess), KStringHandler, KDialog, KPluginFactory/Info, various K widgets, KIcon, KMessageBox, KToolInvocation, KRun, KDebug, KAction, KColorSchme, KTextBrowser/Edit, KDatePicker, KPixmapRegionSelectorDialog, KFileDialog, KAccelManager, KPimUtils, KApp/KCD/KCmdLineArgs (tests only), KCalCore, KMime, KCM, KAboutData (kcm and tests only), Nepomuk2 Core, Phonon
TODO akonadi/kabc what's the difference to the above? none!?
DONE akonadi/kcal KCal-specific Akonadi client library (deprecated?) to be deleted
IN PROGRESS akonadi/kmime Mail-specific Akonadi client library Akonadi, KMime, Ki18n, KDebug, KMessageBox, KIO, KAction, KIcon, KLocale, KApp/KCD/KCmdLineArgs (tests only)
IN PROGRESS akonadi/notes Notes-specific Akonadi client library Akonadi, KMime, KDateTime, KDebug, Ki18n
IN PROGRESS akonadi/socialutils Social media Akonadi client library Akonadi, KIO, QJson, KImageCache, KDebug, KDateTime
DONE cmake N/A
TODO docs KDoctools
IN PROGRESS gpgme++ C++ API for libgpgme Marc Mutz no Qt/KDE
DONE includes Camel case forwarding headers
DONE kabc Tobias koenig KLocale, Ki18n, KStandardDirs, KCD, KRandom, KConfig*, KMessageBox, KCodec, KDialog (? KRes removal ifdef seems not strict enough), KMimeType, KApplication & friends (tests only)
IN PROGRESS kalarmcal David Jarvie KCalCore, KHolidays, Akonadi, KLocale, KTimeZone, Ki18n, KDebug, KPimIdentities, KMessageBox, KDateTime, KConfig
IN PROGRESS kblog C++ API for weblogging access Christian Weilbach KDebug, KDateTime, KTimeZone, KXmlRpcClient, KIO, KCal, Ki18n, KStandardDirs
DONE kcal C++ API for the iCalendar and vCalendar formats (Deprecated by kcalcore and kcalutils) Sergio Martins, Allen Winter to be removed
IN PROGRESS kcalcore C++ API for the iCalendar and vCalendar formats Sergio Martins, Allen Winter KDebug, KDateTime, KTimeZone, KCodecs, KRandom, KConfig, K[Temp,Save]File, KMimeType, KStandardDirs, KApp/KCD/KCmdLine (tests only)
IN PROGRESS kcalutils C++ library containing utility functions on top of kcalcore. Sergio Martins, Allen Winter kcalcore, kpimidentities, ki18n, kpimutils, KDialog, KDebug, KMimeType, KTimeZone, KDateTime, KCalendarSystem, KIconLoader, KMessageBox, KLocale
DONE kholidays C++ library for calendar holidays John Layt, Allen Winter kdeui, kio ( KComboBox, KStandardDirs, KCalendarSystem, KLocale, KLocalizedString) Plasma, KMyMoney
IN PROGRESS kimap C++ API for IMAP support Christian Mollekopf KMime, KDebug, K1i8n, KTcpSocket, KIO/SSL, KJob, KCD/KAboutData (tests only)
DONE kioslaves/imap4 imap4 kioslave to be removed
DONE kioslaves/ldap ldap kioslave Ki18n, KIO, KDebug, KCD, KLDAP
DONE kioslaves/mbox mbox kioslave Ki18n, KIO, KDebug, KCD
DONE kioslaves/nntp nntp kioslave Ki18n, KIO, KDebug, KCD
DONE kioslaves/pop3 pop3 kioslave Ki18n, KIO, KDebug, KCD, KMD5, SASL2
DONE kioslaves/sieve Sieve kioslave Ki18n, KIO, KDebug, KCD, KMessageBox, SASL2
DONE kioslaves/smtp smtp kioslave Ki18n, KIO, KDebug, KCD, SASL2, KEmailSettings
DONE kldap C++ API for LDAP access Szombathelyi György KDebug, Ki18n, KProgressDialog, KLineEdit, KMessageBox, KComboBox
DONE kmbox Bertjan Broeksema KMime, KStandardDirs, KDebug, KTempDir (tests only)
IN PROGRESS kmime C++ API for MIME handling Volker Krause, Marc Mutz KCharsets, KLocale, KDateTime, KCalendarSystem, KDebug, KAscii, kpimutils (header-only), KCD (tests only), Ki18n
IN PROGRESS kontactinterface The glue for embedding KParts into Kontact Allen Winter KPlugin, KXmlGui, some K widgets, KDialog, KPimUtils, K[Unique]Applications/KCmdLineArgs, KWindowSystem, KParts, KAboutData, KCD, KStandardDirs, KRun, KDebug, KGlobalSettings, KIcon*, KStartupInfo, KLocale
IN PROGRESS kpimidentities C++ API for shared identities for mail applications KPimUtils, KEmailSettings, KConfig*, KUser, KRandom, Ki18n, various K* widgets, KDebug, KProcess, KMessagebox, KRichTextEdit, KIcon*, KShellCompletion, KPimTextEdit, Sonnet
IN PROGRESS kpimtextedit Provides a textedit with PIM-specific features and can convert the textedit content to various markup formats Thomas McGuire, Stephen Kelly KImageIO, KFileDialog, KDialog, KAction*, KRichtextEdit, KIcon*, KCharSelect, KI18n, KStdDirs, various K widgets, KEmoticons, KMime, Sonnet, KCursor
IN PROGRESS kpimutils A library for general purpose PIM utilities KMessageBox, KStdGuiItem, KI18n, KDebug, KURL, KMime (yay, cyclic dependency!), KEmoticons, KPixmapSequence
DONE kresources Tobias Koenig to be removed
IN PROGRESS ktnef C++ API for the handling of TNEF data Michael Goffioul KPimUtils, KCalCore, KABC, Ki18n, KDateTime, KMimeType, KSaveFile, KDebug
DONE kxmlrpclient An XML-RPC client library KIO, KDebug, Ki18n
IN PROGRESS mailtransport C++ API and support code for managing mail transport Ki18n, KDebug, KDialog, KJob, KStringHandler, KMime, Akonadi, KStdDirs, KMessageBox, some K widgets, KIO, KApp/KCD/KCmdLineArgs (tests only), KWallet, KConfig, KEmailSettings, KRandom, Akonadi KMime, KCM/KPlugin* (KCM only), KTcpSocket/SASL (no-KIO mode)
DONE microblog A library for microblogging Tom Albers KDebug, KPimUtils
IN PROGRESS qgpgme A C++ wrapper for gpgme Marc Mutz QtCore only
IN PROGRESS syndication An RSS/Atom feed parser library Frank Osterfeld KIO, KCharset, KDateTime, KDebug, Kapp/Kcmdlineargs/KCD (tests only), KRandom, KProcess

kdepim-runtime

Status Unit Description Maintainer Dependencies External Usage
TODO accountwizard Generic account setup wizard framework - how does this relate to WebAccounts? Kross, Akonadi, Mailtransport, KPimIdentities, QtUiTools, KNewStuff3, KConfig, KMime, KIO, K[Unique]App/KCD/KCmdLineArgs, KAboutData, KMessageBox, KAssistantDialog, KPageWidget*, KDebug, KLocale, Ki18n, KStringHandler, KDebug, KWallet, KPimUtils, KMimeType, KDesktopFile
TODO agents/invitations Map iTip invitations to a calendar
TODO agents/maildispatcher Mail sending
TODO agents/migration Migration agent
TODO agents/nemailnotifier New Mail Notfications
TODO cmake
TODO defaultsetup Akonadi
TODO doc
TODO kcm
TODO kioslave Akonadi KIO integration
TODO kresources Akonadi KResources Kevin Krammer to be removed
TODO libkdepim-copy
TODO migration Plug-ins for the migration agent, and other migration tools
TODO opensync
TODO plugins Serializer Plugins
TODO qml
TODO resources/agentserver
TODO resources/birthdays Birthday Resources
TODO resources/contacts Local Addressbook Tobias König
TODO resources/facebook Facebook Resource Martin Klapetek
TODO resources/ical iCal File Resource
TODO resources/imap IMAP Resource Christian Mollekopf
DONE resources/kabc KABC KRes Resource Kevin Krammer to be removed
DONE resources/kcal KCal KRes Resource Kevin Krammer to be removed
TODO resources/kolabproxy Kolab Resource Christian Mollekopf
TODO resources/maildir Maildir Resource Andras Mantia
TODO resources/mixedmaildir KMail1 legacy resource
TODO resources/nntp NNTP Resource
TODO resources/pop3 POP3 Resource Thomas McGuire
TODO resources/vcard VCard file resource
TODO resources/akonotes
TODO resources/dav
TODO resources/google Martin Klapetek
TODO resources/icaldir
TODO resources/kalarm David Jarvie
TODO resources/kdeaccounts
TODO resources/localbookmarks
TODO resources/mailtransport_dummy Mailtransport Unit Test Resource (move to mailtransport?)
TODO resources/mbox MBox file resource
TODO resources/nepomuktag Tag folders
TODO resources/openxchange
TODO resources/shared
TODO resources/vcarddir
TODO resourcetester
DONE tray Akonadi Tray kill

Split Tasks

kdepimlibs Tasks

Status Framework Tier Assigned Priority Action Required
TODO akonadi merge with akonadi server?
TODO akonadi/calendar Tier 3?
TODO akonadi/contacts Tier 3?
TODO akonadi/kabc Tier 3? merge to akonadi/contacts? Only defines 2 aliases for payload parts and is only used by akonadi_serializer_addressee, but I've never seen such part names in my Akonadi. Maybe it could even be deleted?
DONE akonadi/kcal N/A deprecated - delete
TODO akonadi/kmime Tier 3?
TODO akonadi/notes Tier 3?
TODO akonadi/socialutils Tier 3?
DONE cmake N/A FindLDAP: move to kldap, FindQgpgme: obsolete by config file, FindGpgme: move to gpgme++, FindQJSon: obsolete, already upstream, FindQtOAuth: ?, CheckTimezones: ? FindLibical: move to kcalcore, FindXsltproc: rename and move to Akonadi
DONE doc KRES KCM: obsolete, KIOslave docs: move to slaves
TODO gpgme++
DONE includes N/A distribute to splitted modules, auto-generate?
DONE kabc remove KResource dependencies
DONE kalarmcal remove optional KCal dependency
TODO kblog port to KCalCore
DONE kcal N/A To be deleted
TODO kcalcore High (Workspace)
TODO kcalutils High (Workspace)
TODO kholidays Tier 1 High (Workspace) Split as is and clean-up api. Will be replaced later by OpenHolidays. Will need internal copy of QCalendarSystem, Gui uses KComboBox. Replace KStandardDirs?
TODO kimap
DONE kioslave/imap4 N/A To be deleted
TODO kioslave/ldap
TODO kioslave/mbox
TODO kioslave/nntp
TODO kioslave/pop3
TODO kioslave/sieve
TODO kioslave/smtp
TODO kldap
TODO kmbox
TODO kmime
TODO kontactinterface
TODO kpimidentities
TODO kpimtextedit
IN PROGRESS kpimutils remove networkaccesshelper and spellingfilter, move the used functions from processes.h to kontactinterfaces
DONE kresources N/A delete
DONE ktnef remove KCal dependency
TODO kxmlrpcclient
TODO mailtransport
TODO microblog obsolete after microblog resource removal?
TODO qgpgme
TODO syndication