From 460c52653ab0dcca6f19a4f492ed2c5e4e963ab0 Mon Sep 17 00:00:00 2001 From: toma Date: Wed, 25 Nov 2009 17:56:58 +0000 Subject: Copy the KDE 3.5 branch to branches/trinity for new KDE 3.5 features. BUG:215923 git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/kdepim@1054174 283d02a7-25f6-0310-bc7c-ecb5cbfe19da --- kmail/COMMITPOLICY | 13 + kmail/ChangeLog | 806 +++ kmail/DESIGN | 1 + kmail/KMail.desktop | 93 + kmail/Mainpage.dox | 871 ++++ kmail/Makefile.am | 237 + kmail/TODO | 36 + kmail/about/Makefile.am | 6 + kmail/about/kmail.css | 26 + kmail/about/main.html | 66 + kmail/about/top-right-kmail.png | Bin 0 -> 17996 bytes kmail/aboutdata.cpp | 229 + kmail/aboutdata.h | 49 + kmail/accountcombobox.cpp | 106 + kmail/accountcombobox.h | 61 + kmail/accountdialog.cpp | 2352 +++++++++ kmail/accountdialog.h | 340 ++ kmail/accountmanager.cpp | 415 ++ kmail/accountmanager.h | 141 + kmail/accountwizard.cpp | 799 +++ kmail/accountwizard.h | 138 + kmail/acljobs.cpp | 261 + kmail/acljobs.h | 177 + kmail/actionscheduler.cpp | 836 ++++ kmail/actionscheduler.h | 173 + kmail/annotationjobs.cpp | 253 + kmail/annotationjobs.h | 199 + kmail/antispamconfig.cpp | 98 + kmail/antispamconfig.h | 120 + kmail/antispamwizard.cpp | 1151 +++++ kmail/antispamwizard.h | 398 ++ kmail/app_octetstream.cpp | 66 + kmail/application_octetstream.desktop | 85 + kmail/attachmentcollector.cpp | 85 + kmail/attachmentcollector.h | 75 + kmail/attachmentlistview.cpp | 146 + kmail/attachmentlistview.h | 59 + kmail/attachmentstrategy.cpp | 209 + kmail/attachmentstrategy.h | 79 + kmail/avscripts/Makefile.am | 2 + kmail/avscripts/kmail_antivir.sh | 42 + kmail/avscripts/kmail_clamav.sh | 53 + kmail/avscripts/kmail_fprot.sh | 55 + kmail/avscripts/kmail_sav.sh | 42 + kmail/bodypartformatter.cpp | 334 ++ kmail/bodypartformatter.h | 58 + kmail/bodypartformatterfactory.cpp | 191 + kmail/bodypartformatterfactory.h | 72 + kmail/bodypartformatterfactory_p.h | 62 + kmail/bodyvisitor.cpp | 211 + kmail/bodyvisitor.h | 109 + kmail/cachedimapjob.cpp | 841 ++++ kmail/cachedimapjob.h | 141 + kmail/callback.cpp | 219 + kmail/callback.h | 91 + kmail/chiasmuskeyselector.cpp | 55 + kmail/chiasmuskeyselector.h | 27 + kmail/colorlistbox.cpp | 198 + kmail/colorlistbox.h | 73 + kmail/compactionjob.cpp | 292 ++ kmail/compactionjob.h | 114 + kmail/composer.cpp | 4 + kmail/composer.h | 153 + kmail/composercryptoconfiguration.ui | 158 + kmail/configure.in.bot | 14 + kmail/configure.in.in | 90 + kmail/configuredialog.cpp | 5064 +++++++++++++++++++ kmail/configuredialog.h | 90 + kmail/configuredialog_p.cpp | 437 ++ kmail/configuredialog_p.h | 1064 ++++ kmail/copyfolderjob.cpp | 283 ++ kmail/copyfolderjob.h | 110 + kmail/cr22-app-kmaillight.png | Bin 0 -> 1424 bytes kmail/cr32-app-kmaillight.png | Bin 0 -> 1744 bytes kmail/csshelper.cpp | 93 + kmail/csshelper.h | 46 + kmail/custommimeheader.kcfg | 15 + kmail/custommimeheader.kcfgc | 5 + kmail/customtemplates.cpp | 376 ++ kmail/customtemplates.h | 92 + kmail/customtemplates_base.ui | 303 ++ kmail/customtemplates_kfg.kcfg | 28 + kmail/customtemplates_kfg.kcfgc | 5 + kmail/dcopimap.desktop | 55 + kmail/dcopmail.desktop | 55 + kmail/dcoptest.cpp | 40 + kmail/dictionarycombobox.cpp | 149 + kmail/dictionarycombobox.h | 83 + kmail/distributionlistdialog.cpp | 261 + kmail/distributionlistdialog.h | 46 + kmail/editorwatcher.cpp | 181 + kmail/editorwatcher.h | 77 + kmail/encodingdetector.cpp | 1377 +++++ kmail/encodingdetector.h | 166 + kmail/encodingdetector_ja.cpp | 376 ++ kmail/encodingdetector_ja_p.h | 126 + kmail/eventsrc | 126 + kmail/expirejob.cpp | 252 + kmail/expirejob.h | 81 + kmail/expirypropertiesdialog.cpp | 197 + kmail/expirypropertiesdialog.h | 68 + kmail/favoritefolderview.cpp | 517 ++ kmail/favoritefolderview.h | 95 + kmail/filehtmlwriter.cpp | 108 + kmail/filehtmlwriter.h | 67 + kmail/filterimporterexporter.cpp | 216 + kmail/filterimporterexporter.h | 70 + kmail/filterlog.cpp | 165 + kmail/filterlog.h | 161 + kmail/filterlogdlg.cpp | 268 + kmail/filterlogdlg.h | 80 + kmail/folderIface.cpp | 150 + kmail/folderIface.h | 71 + kmail/folderdiaacltab.cpp | 817 +++ kmail/folderdiaacltab.h | 157 + kmail/folderdiaquotatab.cpp | 215 + kmail/folderdiaquotatab.h | 91 + kmail/folderdiaquotatab_p.cpp | 88 + kmail/folderdiaquotatab_p.h | 63 + kmail/folderjob.cpp | 130 + kmail/folderjob.h | 188 + kmail/folderpropertiesdialog.ui | 638 +++ kmail/folderpropertiesdialog.ui.h | 15 + kmail/folderrequester.cpp | 127 + kmail/folderrequester.h | 112 + kmail/foldershortcutdialog.cpp | 108 + kmail/foldershortcutdialog.h | 74 + kmail/folderstorage.cpp | 1176 +++++ kmail/folderstorage.h | 645 +++ kmail/foldertreebase.cpp | 243 + kmail/foldertreebase.h | 98 + kmail/folderviewtooltip.h | 55 + kmail/globalsettings.cpp | 62 + kmail/globalsettings.h | 59 + kmail/globalsettings_base.kcfgc | 7 + kmail/headeritem.cpp | 585 +++ kmail/headeritem.h | 241 + kmail/headerlistquicksearch.cpp | 193 + kmail/headerlistquicksearch.h | 102 + kmail/headerstrategy.cpp | 312 ++ kmail/headerstrategy.h | 80 + kmail/headerstyle.cpp | 983 ++++ kmail/headerstyle.h | 88 + kmail/hi128-app-kmail.png | Bin 0 -> 15605 bytes kmail/hi16-app-kmail.png | Bin 0 -> 1198 bytes kmail/hi22-app-kmail.png | Bin 0 -> 1521 bytes kmail/hi32-app-kmail.png | Bin 0 -> 2946 bytes kmail/hi48-app-kmail.png | Bin 0 -> 4799 bytes kmail/hi64-app-kmail.png | Bin 0 -> 6140 bytes kmail/hisc-app-kmail.svgz | Bin 0 -> 2953 bytes kmail/htmlstatusbar.cpp | 140 + kmail/htmlstatusbar.h | 100 + kmail/identitydialog.cpp | 700 +++ kmail/identitydialog.h | 118 + kmail/identitydrag.cpp | 86 + kmail/identitydrag.h | 65 + kmail/identitylistview.cpp | 146 + kmail/identitylistview.h | 86 + kmail/imapaccountbase.cpp | 1446 ++++++ kmail/imapaccountbase.h | 635 +++ kmail/imapjob.cpp | 711 +++ kmail/imapjob.h | 97 + kmail/index.cpp | 594 +++ kmail/index.h | 218 + kmail/interfaces/Makefile.am | 8 + kmail/interfaces/bodypart.h | 163 + kmail/interfaces/bodypartformatter.h | 95 + kmail/interfaces/bodyparturlhandler.h | 105 + kmail/interfaces/htmlwriter.h | 120 + kmail/interfaces/observable.h | 57 + kmail/interfaces/observer.h | 55 + kmail/interfaces/rulewidgethandler.h | 81 + kmail/interfaces/urlhandler.h | 79 + kmail/isubject.cpp | 39 + kmail/isubject.h | 63 + kmail/jobscheduler.cpp | 256 + kmail/jobscheduler.h | 156 + kmail/kcm_kmail.cpp | 85 + kmail/kcursorsaver.h | 61 + kmail/keyresolver.cpp | 1615 ++++++ kmail/keyresolver.h | 319 ++ kmail/khtmlparthtmlwriter.cpp | 154 + kmail/khtmlparthtmlwriter.h | 83 + kmail/kleo_util.h | 81 + kmail/klistboxdialog.cpp | 83 + kmail/klistboxdialog.h | 36 + kmail/klistviewindexedsearchline.cpp | 74 + kmail/klistviewindexedsearchline.h | 76 + kmail/kmaccount.cpp | 500 ++ kmail/kmaccount.h | 336 ++ kmail/kmacctcachedimap.cpp | 479 ++ kmail/kmacctcachedimap.h | 230 + kmail/kmacctfolder.cpp | 46 + kmail/kmacctfolder.h | 55 + kmail/kmacctimap.cpp | 621 +++ kmail/kmacctimap.h | 152 + kmail/kmacctlocal.cpp | 322 ++ kmail/kmacctlocal.h | 57 + kmail/kmacctmaildir.cpp | 234 + kmail/kmacctmaildir.h | 37 + kmail/kmacctseldlg.cpp | 77 + kmail/kmacctseldlg.h | 51 + kmail/kmaddrbook.cpp | 135 + kmail/kmaddrbook.h | 43 + ...il-3.1-update-new-mail-notification-settings.pl | 38 + kmail/kmail-3.1-use-UOID-for-identities.pl | 93 + ...kmail-3.1.4-dont-use-UOID-0-for-any-identity.pl | 88 + kmail/kmail-3.2-misc.sh | 78 + ...mail-3.2-update-loop-on-goto-unread-settings.sh | 21 + kmail/kmail-3.3-aegypten.pl | 28 + kmail/kmail-3.3-misc.pl | 27 + kmail/kmail-3.3-move-identities.pl | 31 + kmail/kmail-3.3-split-sign-encr-keys.sh | 31 + kmail/kmail-3.3-use-ID-for-accounts.pl | 236 + kmail/kmail-3.3b1-misc.pl | 38 + kmail/kmail-3.4-misc.pl | 27 + kmail/kmail-3.4.1-update-status-filters.pl | 42 + kmail/kmail-3.5-trigger-flag-migration.pl | 39 + kmail/kmail-pgpidentity.pl | 34 + kmail/kmail-upd-identities.pl | 54 + kmail/kmail.antispamrc | 237 + kmail/kmail.antispamrc-HOWTO | 154 + kmail/kmail.antivirusrc | 50 + kmail/kmail.kcfg | 670 +++ kmail/kmail.upd | 179 + kmail/kmailIface.h | 219 + kmail/kmail_config_accounts.desktop | 162 + kmail/kmail_config_appearance.desktop | 169 + kmail/kmail_config_composer.desktop | 150 + kmail/kmail_config_identity.desktop | 170 + kmail/kmail_config_misc.desktop | 166 + kmail/kmail_config_security.desktop | 172 + kmail/kmail_options.h | 31 + kmail/kmail_part.cpp | 251 + kmail/kmail_part.h | 100 + kmail/kmail_part.rc | 199 + kmail/kmail_view.desktop | 22 + kmail/kmailicalIface.h | 175 + kmail/kmailicalifaceimpl.cpp | 2297 +++++++++ kmail/kmailicalifaceimpl.h | 347 ++ kmail/kmailpartIface.h | 35 + kmail/kmatmlistview.cpp | 175 + kmail/kmatmlistview.h | 71 + kmail/kmcommands.cpp | 3559 +++++++++++++ kmail/kmcommands.h | 1101 ++++ kmail/kmcomposerui.rc | 115 + kmail/kmcomposewin.cpp | 5233 ++++++++++++++++++++ kmail/kmcomposewin.h | 911 ++++ kmail/kmdebug.h | 62 + kmail/kmdict.cpp | 117 + kmail/kmdict.h | 68 + kmail/kmedit.cpp | 766 +++ kmail/kmedit.h | 131 + kmail/kmfawidgets.cpp | 157 + kmail/kmfawidgets.h | 57 + kmail/kmfilter.cpp | 430 ++ kmail/kmfilter.h | 312 ++ kmail/kmfilteraction.cpp | 1930 ++++++++ kmail/kmfilteraction.h | 700 +++ kmail/kmfilterdlg.cpp | 1354 +++++ kmail/kmfilterdlg.h | 422 ++ kmail/kmfiltermgr.cpp | 509 ++ kmail/kmfiltermgr.h | 198 + kmail/kmfolder.cpp | 881 ++++ kmail/kmfolder.h | 694 +++ kmail/kmfoldercachedimap.cpp | 2992 +++++++++++ kmail/kmfoldercachedimap.h | 567 +++ kmail/kmfoldercombobox.cpp | 188 + kmail/kmfoldercombobox.h | 51 + kmail/kmfolderdia.cpp | 792 +++ kmail/kmfolderdia.h | 241 + kmail/kmfolderdir.cpp | 313 ++ kmail/kmfolderdir.h | 92 + kmail/kmfolderimap.cpp | 2434 +++++++++ kmail/kmfolderimap.h | 548 ++ kmail/kmfolderindex.cpp | 499 ++ kmail/kmfolderindex.h | 130 + kmail/kmfoldermaildir.cpp | 1172 +++++ kmail/kmfoldermaildir.h | 169 + kmail/kmfoldermbox.cpp | 1278 +++++ kmail/kmfoldermbox.h | 157 + kmail/kmfoldermgr.cpp | 604 +++ kmail/kmfoldermgr.h | 186 + kmail/kmfoldernode.cpp | 65 + kmail/kmfoldernode.h | 81 + kmail/kmfoldersearch.cpp | 1141 +++++ kmail/kmfoldersearch.h | 216 + kmail/kmfolderseldlg.cpp | 574 +++ kmail/kmfolderseldlg.h | 119 + kmail/kmfoldertree.cpp | 2126 ++++++++ kmail/kmfoldertree.h | 350 ++ kmail/kmfoldertype.h | 37 + kmail/kmglobal.h | 92 + kmail/kmgroupware.cpp | 88 + kmail/kmgroupware.h | 46 + kmail/kmheaders.cpp | 3569 +++++++++++++ kmail/kmheaders.h | 465 ++ kmail/kmkernel.cpp | 2401 +++++++++ kmail/kmkernel.h | 504 ++ kmail/kmlineeditspell.cpp | 216 + kmail/kmlineeditspell.h | 55 + kmail/kmmainwidget.cpp | 3979 +++++++++++++++ kmail/kmmainwidget.h | 564 +++ kmail/kmmainwin.cpp | 222 + kmail/kmmainwin.h | 80 + kmail/kmmainwin.rc | 205 + kmail/kmmessage.cpp | 4373 ++++++++++++++++ kmail/kmmessage.h | 916 ++++ kmail/kmmimeparttree.cpp | 395 ++ kmail/kmmimeparttree.h | 125 + kmail/kmmsgbase.cpp | 1483 ++++++ kmail/kmmsgbase.h | 472 ++ kmail/kmmsgdict.cpp | 651 +++ kmail/kmmsgdict.h | 168 + kmail/kmmsginfo.cpp | 700 +++ kmail/kmmsginfo.h | 126 + kmail/kmmsglist.cpp | 186 + kmail/kmmsglist.h | 96 + kmail/kmmsgpart.cpp | 602 +++ kmail/kmmsgpart.h | 255 + kmail/kmmsgpartdlg.cpp | 452 ++ kmail/kmmsgpartdlg.h | 163 + kmail/kmpopfiltercnfrmdlg.cpp | 470 ++ kmail/kmpopfiltercnfrmdlg.h | 111 + kmail/kmpopheaders.cpp | 75 + kmail/kmpopheaders.h | 63 + kmail/kmreadermainwin.cpp | 535 ++ kmail/kmreadermainwin.h | 92 + kmail/kmreadermainwin.rc | 75 + kmail/kmreaderwin.cpp | 2767 +++++++++++ kmail/kmreaderwin.h | 546 ++ kmail/kmsearchpattern.cpp | 929 ++++ kmail/kmsearchpattern.h | 407 ++ kmail/kmsearchpatternedit.cpp | 483 ++ kmail/kmsearchpatternedit.h | 211 + kmail/kmsender.cpp | 1231 +++++ kmail/kmsender.h | 174 + kmail/kmsender_p.h | 151 + kmail/kmservertest.cpp | 189 + kmail/kmservertest.h | 88 + kmail/kmstartup.cpp | 268 + kmail/kmstartup.h | 44 + kmail/kmsystemtray.cpp | 585 +++ kmail/kmsystemtray.h | 91 + kmail/kmtransport.cpp | 807 +++ kmail/kmtransport.h | 169 + kmail/kmversion.h | 8 + kmail/korghelper.cpp | 53 + kmail/korghelper.h | 32 + kmail/kwindowpositioner.cpp | 60 + kmail/kwindowpositioner.h | 47 + kmail/listjob.cpp | 255 + kmail/listjob.h | 146 + kmail/localsubscriptiondialog.cpp | 148 + kmail/localsubscriptiondialog.h | 67 + kmail/mailcomposerIface.h | 53 + kmail/maildirjob.cpp | 120 + kmail/maildirjob.h | 61 + kmail/mailinglist-magic.cpp | 414 ++ kmail/mailinglist-magic.h | 85 + kmail/mailinglistpropertiesdialog.cpp | 344 ++ kmail/mailinglistpropertiesdialog.h | 87 + kmail/mailserviceimpl.cpp | 135 + kmail/mailserviceimpl.h | 74 + kmail/mailsourceviewer.cpp | 84 + kmail/mailsourceviewer.h | 71 + kmail/main.cpp | 116 + kmail/managesievescriptsdialog.cpp | 347 ++ kmail/managesievescriptsdialog.h | 55 + kmail/managesievescriptsdialog_p.h | 27 + kmail/mboxjob.cpp | 124 + kmail/mboxjob.h | 61 + kmail/messageactions.cpp | 260 + kmail/messageactions.h | 106 + kmail/messagecomposer.cpp | 2284 +++++++++ kmail/messagecomposer.h | 279 ++ kmail/messagecopyhelper.cpp | 115 + kmail/messagecopyhelper.h | 79 + kmail/messageproperty.cpp | 173 + kmail/messageproperty.h | 112 + kmail/messagesender.h | 97 + kmail/mh2kmail | 27 + kmail/mh2kmailr | 29 + kmail/networkaccount.cpp | 367 ++ kmail/networkaccount.h | 142 + kmail/newfolderdialog.cpp | 311 ++ kmail/newfolderdialog.h | 79 + kmail/objecttreeparser.cpp | 2872 +++++++++++ kmail/objecttreeparser.h | 295 ++ kmail/partNode.cpp | 612 +++ kmail/partNode.h | 259 + kmail/partmetadata.h | 64 + kmail/partnodebodypart.cpp | 98 + kmail/partnodebodypart.h | 74 + kmail/pics/Makefile.am | 37 + kmail/pics/attachmentQuicklistClosed.png | Bin 0 -> 727 bytes kmail/pics/attachmentQuicklistOpened.png | Bin 0 -> 719 bytes kmail/pics/enterprise_bottom.png | Bin 0 -> 182 bytes kmail/pics/enterprise_bottom_left.png | Bin 0 -> 264 bytes kmail/pics/enterprise_bottom_right.png | Bin 0 -> 275 bytes kmail/pics/enterprise_icon.png | Bin 0 -> 10638 bytes kmail/pics/enterprise_left.png | Bin 0 -> 190 bytes kmail/pics/enterprise_right.png | Bin 0 -> 184 bytes kmail/pics/enterprise_s_left.png | Bin 0 -> 359 bytes kmail/pics/enterprise_s_right.png | Bin 0 -> 362 bytes kmail/pics/enterprise_sbar.png | Bin 0 -> 218 bytes kmail/pics/enterprise_sp_right.png | Bin 0 -> 1101 bytes kmail/pics/enterprise_sw.png | Bin 0 -> 2385 bytes kmail/pics/enterprise_top.png | Bin 0 -> 187 bytes kmail/pics/enterprise_top_left.png | Bin 0 -> 263 bytes kmail/pics/enterprise_top_right.png | Bin 0 -> 266 bytes kmail/pics/enterprise_w.png | Bin 0 -> 7223 bytes kmail/pics/icons/Makefile.am | 2 + kmail/pics/icons/cr128-action-online_status.png | Bin 0 -> 14284 bytes .../cr16-action-kmgroupware_folder_calendar.png | Bin 0 -> 904 bytes .../cr16-action-kmgroupware_folder_contacts.png | Bin 0 -> 1059 bytes .../cr16-action-kmgroupware_folder_journals.png | Bin 0 -> 963 bytes .../icons/cr16-action-kmgroupware_folder_notes.png | Bin 0 -> 866 bytes .../icons/cr16-action-kmgroupware_folder_tasks.png | Bin 0 -> 1025 bytes kmail/pics/icons/cr16-action-mail_flag.png | Bin 0 -> 745 bytes kmail/pics/icons/cr16-action-mail_ham.png | Bin 0 -> 661 bytes kmail/pics/icons/cr16-action-mail_ignore.png | Bin 0 -> 903 bytes kmail/pics/icons/cr16-action-mail_spam.png | Bin 0 -> 930 bytes kmail/pics/icons/cr16-action-mail_todo.png | Bin 0 -> 910 bytes kmail/pics/icons/cr16-action-online_status.png | Bin 0 -> 894 bytes .../cr22-action-kmgroupware_folder_calendar.png | Bin 0 -> 1215 bytes .../cr22-action-kmgroupware_folder_journals.png | Bin 0 -> 1564 bytes .../icons/cr22-action-kmgroupware_folder_tasks.png | Bin 0 -> 947 bytes kmail/pics/icons/cr22-action-mail_ham.png | Bin 0 -> 769 bytes kmail/pics/icons/cr22-action-mail_ignore.png | Bin 0 -> 1364 bytes kmail/pics/icons/cr22-action-mail_spam.png | Bin 0 -> 1502 bytes kmail/pics/icons/cr22-action-online_status.png | Bin 0 -> 1396 bytes .../cr32-action-kmgroupware_folder_calendar.png | Bin 0 -> 1155 bytes .../icons/cr32-action-kmgroupware_folder_tasks.png | Bin 0 -> 1358 bytes kmail/pics/icons/cr32-action-mail_ham.png | Bin 0 -> 1393 bytes kmail/pics/icons/cr32-action-mail_ignore.png | Bin 0 -> 2202 bytes kmail/pics/icons/cr32-action-mail_spam.png | Bin 0 -> 2512 bytes kmail/pics/icons/cr32-action-online_status.png | Bin 0 -> 2350 bytes kmail/pics/icons/cr48-action-online_status.png | Bin 0 -> 4204 bytes kmail/pics/icons/crsc-action-mail_ignore.svgz | Bin 0 -> 2309 bytes kmail/pics/icons/crsc-action-online_status.svgz | Bin 0 -> 6038 bytes kmail/pics/kmmsgattachment.png | Bin 0 -> 529 bytes kmail/pics/kmmsgdel.png | Bin 0 -> 545 bytes kmail/pics/kmmsgencryptionproblematic.png | Bin 0 -> 442 bytes kmail/pics/kmmsgflag.png | Bin 0 -> 568 bytes kmail/pics/kmmsgforwarded.png | Bin 0 -> 277 bytes kmail/pics/kmmsgfullyencrypted.png | Bin 0 -> 430 bytes kmail/pics/kmmsgfullysigned.png | Bin 0 -> 456 bytes kmail/pics/kmmsgham.png | Bin 0 -> 438 bytes kmail/pics/kmmsgignored.png | Bin 0 -> 589 bytes kmail/pics/kmmsgnew.png | Bin 0 -> 481 bytes kmail/pics/kmmsgpartiallyencrypted.png | Bin 0 -> 312 bytes kmail/pics/kmmsgpartiallysigned.png | Bin 0 -> 515 bytes kmail/pics/kmmsgqueued.png | Bin 0 -> 282 bytes kmail/pics/kmmsgread.png | Bin 0 -> 517 bytes kmail/pics/kmmsgread_fwd.png | Bin 0 -> 432 bytes kmail/pics/kmmsgread_fwd_replied.png | Bin 0 -> 406 bytes kmail/pics/kmmsgread_replied.png | Bin 0 -> 418 bytes kmail/pics/kmmsgreplied.png | Bin 0 -> 291 bytes kmail/pics/kmmsgsent.png | Bin 0 -> 291 bytes kmail/pics/kmmsgsignatureproblematic.png | Bin 0 -> 446 bytes kmail/pics/kmmsgspam.png | Bin 0 -> 660 bytes kmail/pics/kmmsgtodo.png | Bin 0 -> 910 bytes kmail/pics/kmmsgundefinedencrypted.png | Bin 0 -> 415 bytes kmail/pics/kmmsgundefinedsigned.png | Bin 0 -> 430 bytes kmail/pics/kmmsgunseen.png | Bin 0 -> 396 bytes kmail/pics/kmmsgwatched.png | Bin 0 -> 616 bytes kmail/pics/kmwizard.png | Bin 0 -> 24546 bytes kmail/pics/kmwizard.svg | 1875 +++++++ kmail/pics/pgp-keys.png | Bin 0 -> 4165 bytes kmail/pics/quotecollapse.png | Bin 0 -> 1142 bytes kmail/pics/quoteexpand.png | Bin 0 -> 1149 bytes kmail/popaccount.cpp | 1086 ++++ kmail/popaccount.h | 242 + kmail/profiles/Makefile.am | 14 + kmail/profiles/profile-default-rc.desktop | 180 + kmail/profiles/profile-high-contrast-rc.desktop | 164 + kmail/profiles/profile-html-rc.desktop | 109 + kmail/profiles/profile-purist-rc.desktop | 129 + kmail/profiles/profile-secure-rc.desktop | 136 + kmail/protocols.h | 45 + kmail/quotajobs.cpp | 147 + kmail/quotajobs.h | 194 + kmail/recipientseditor.cpp | 998 ++++ kmail/recipientseditor.h | 366 ++ kmail/recipientseditortest.cpp | 112 + kmail/recipientseditortest.h | 44 + kmail/recipientspicker.cpp | 878 ++++ kmail/recipientspicker.h | 248 + kmail/redirectdialog.cpp | 140 + kmail/redirectdialog.h | 92 + kmail/regexplineedit.cpp | 136 + kmail/regexplineedit.h | 79 + kmail/renamejob.cpp | 253 + kmail/renamejob.h | 95 + kmail/replyphrases.kcfg | 35 + kmail/replyphrases.kcfgc | 5 + kmail/rulewidgethandlermanager.cpp | 1520 ++++++ kmail/rulewidgethandlermanager.h | 100 + kmail/scalix.cpp | 104 + kmail/scalix.h | 83 + kmail/searchjob.cpp | 454 ++ kmail/searchjob.h | 136 + kmail/searchwindow.cpp | 946 ++++ kmail/searchwindow.h | 195 + kmail/secondarywindow.cpp | 81 + kmail/secondarywindow.h | 63 + kmail/sieveconfig.cpp | 170 + kmail/sieveconfig.h | 128 + kmail/sievedebugdialog.cpp | 410 ++ kmail/sievedebugdialog.h | 94 + kmail/sievejob.cpp | 289 ++ kmail/sievejob.h | 129 + kmail/signatureconfigurator.cpp | 268 + kmail/signatureconfigurator.h | 82 + kmail/simplestringlisteditor.cpp | 307 ++ kmail/simplestringlisteditor.h | 106 + kmail/smimeconfiguration.ui | 413 ++ kmail/snippetconfig.cpp | 25 + kmail/snippetconfig.h | 61 + kmail/snippetdlg.cpp | 108 + kmail/snippetdlg.h | 42 + kmail/snippetdlgbase.ui | 177 + kmail/snippetitem.cpp | 154 + kmail/snippetitem.h | 85 + kmail/snippetsettings.cpp | 53 + kmail/snippetsettings.h | 46 + kmail/snippetsettingsbase.ui | 184 + kmail/snippetwidget.cpp | 957 ++++ kmail/snippetwidget.h | 95 + kmail/spamheaderanalyzer.cpp | 157 + kmail/spamheaderanalyzer.h | 90 + kmail/stl_util.h | 47 + kmail/subscriptiondialog.cpp | 444 ++ kmail/subscriptiondialog.h | 156 + kmail/teehtmlwriter.cpp | 98 + kmail/teehtmlwriter.h | 71 + kmail/templateparser.cpp | 1093 ++++ kmail/templateparser.h | 90 + kmail/templatesconfiguration.cpp | 561 +++ kmail/templatesconfiguration.h | 75 + kmail/templatesconfiguration_base.ui | 332 ++ kmail/templatesconfiguration_kfg.kcfg | 43 + kmail/templatesconfiguration_kfg.kcfgc | 5 + kmail/templatesinsertcommand.cpp | 402 ++ kmail/templatesinsertcommand.h | 61 + kmail/tests/Makefile.am | 23 + kmail/tests/messagedicttests.cpp | 79 + kmail/tests/messagedicttests.h | 30 + kmail/tests/mimelibtests.cpp | 117 + kmail/tests/mimelibtests.h | 44 + kmail/tests/multipartmixed.mbox | 10 + kmail/tests/signedmail.mbox | 111 + kmail/tests/storagelayermodule.cpp | 16 + kmail/tests/utiltests.cpp | 207 + kmail/tests/utiltests.h | 30 + kmail/textsource.cpp | 65 + kmail/textsource.h | 46 + kmail/tips | 78 + kmail/transportmanager.cpp | 68 + kmail/transportmanager.h | 42 + kmail/undostack.cpp | 157 + kmail/undostack.h | 72 + kmail/upgrade-signature.pl | 63 + kmail/upgrade-transport.pl | 36 + kmail/urlhandlermanager.cpp | 597 +++ kmail/urlhandlermanager.h | 88 + kmail/util.cpp | 194 + kmail/util.h | 222 + kmail/vacation.cpp | 729 +++ kmail/vacation.h | 89 + kmail/vacationdialog.cpp | 195 + kmail/vacationdialog.h | 82 + kmail/vcardviewer.cpp | 96 + kmail/vcardviewer.h | 58 + kmail/warningconfiguration.ui | 408 ++ kmail/xfaceconfigurator.cpp | 285 ++ kmail/xfaceconfigurator.h | 64 + 578 files changed, 162849 insertions(+) create mode 100644 kmail/COMMITPOLICY create mode 100644 kmail/ChangeLog create mode 100644 kmail/DESIGN create mode 100644 kmail/KMail.desktop create mode 100644 kmail/Mainpage.dox create mode 100644 kmail/Makefile.am create mode 100644 kmail/TODO create mode 100644 kmail/about/Makefile.am create mode 100644 kmail/about/kmail.css create mode 100644 kmail/about/main.html create mode 100644 kmail/about/top-right-kmail.png create mode 100644 kmail/aboutdata.cpp create mode 100644 kmail/aboutdata.h create mode 100644 kmail/accountcombobox.cpp create mode 100644 kmail/accountcombobox.h create mode 100644 kmail/accountdialog.cpp create mode 100644 kmail/accountdialog.h create mode 100644 kmail/accountmanager.cpp create mode 100644 kmail/accountmanager.h create mode 100644 kmail/accountwizard.cpp create mode 100644 kmail/accountwizard.h create mode 100644 kmail/acljobs.cpp create mode 100644 kmail/acljobs.h create mode 100644 kmail/actionscheduler.cpp create mode 100644 kmail/actionscheduler.h create mode 100644 kmail/annotationjobs.cpp create mode 100644 kmail/annotationjobs.h create mode 100644 kmail/antispamconfig.cpp create mode 100644 kmail/antispamconfig.h create mode 100644 kmail/antispamwizard.cpp create mode 100644 kmail/antispamwizard.h create mode 100644 kmail/app_octetstream.cpp create mode 100644 kmail/application_octetstream.desktop create mode 100644 kmail/attachmentcollector.cpp create mode 100644 kmail/attachmentcollector.h create mode 100644 kmail/attachmentlistview.cpp create mode 100644 kmail/attachmentlistview.h create mode 100644 kmail/attachmentstrategy.cpp create mode 100644 kmail/attachmentstrategy.h create mode 100644 kmail/avscripts/Makefile.am create mode 100755 kmail/avscripts/kmail_antivir.sh create mode 100755 kmail/avscripts/kmail_clamav.sh create mode 100755 kmail/avscripts/kmail_fprot.sh create mode 100755 kmail/avscripts/kmail_sav.sh create mode 100644 kmail/bodypartformatter.cpp create mode 100644 kmail/bodypartformatter.h create mode 100644 kmail/bodypartformatterfactory.cpp create mode 100644 kmail/bodypartformatterfactory.h create mode 100644 kmail/bodypartformatterfactory_p.h create mode 100644 kmail/bodyvisitor.cpp create mode 100644 kmail/bodyvisitor.h create mode 100644 kmail/cachedimapjob.cpp create mode 100644 kmail/cachedimapjob.h create mode 100644 kmail/callback.cpp create mode 100644 kmail/callback.h create mode 100644 kmail/chiasmuskeyselector.cpp create mode 100644 kmail/chiasmuskeyselector.h create mode 100644 kmail/colorlistbox.cpp create mode 100644 kmail/colorlistbox.h create mode 100644 kmail/compactionjob.cpp create mode 100644 kmail/compactionjob.h create mode 100644 kmail/composer.cpp create mode 100644 kmail/composer.h create mode 100644 kmail/composercryptoconfiguration.ui create mode 100644 kmail/configure.in.bot create mode 100644 kmail/configure.in.in create mode 100644 kmail/configuredialog.cpp create mode 100644 kmail/configuredialog.h create mode 100644 kmail/configuredialog_p.cpp create mode 100644 kmail/configuredialog_p.h create mode 100644 kmail/copyfolderjob.cpp create mode 100644 kmail/copyfolderjob.h create mode 100644 kmail/cr22-app-kmaillight.png create mode 100644 kmail/cr32-app-kmaillight.png create mode 100644 kmail/csshelper.cpp create mode 100644 kmail/csshelper.h create mode 100644 kmail/custommimeheader.kcfg create mode 100644 kmail/custommimeheader.kcfgc create mode 100644 kmail/customtemplates.cpp create mode 100644 kmail/customtemplates.h create mode 100644 kmail/customtemplates_base.ui create mode 100644 kmail/customtemplates_kfg.kcfg create mode 100644 kmail/customtemplates_kfg.kcfgc create mode 100644 kmail/dcopimap.desktop create mode 100644 kmail/dcopmail.desktop create mode 100644 kmail/dcoptest.cpp create mode 100644 kmail/dictionarycombobox.cpp create mode 100644 kmail/dictionarycombobox.h create mode 100644 kmail/distributionlistdialog.cpp create mode 100644 kmail/distributionlistdialog.h create mode 100644 kmail/editorwatcher.cpp create mode 100644 kmail/editorwatcher.h create mode 100644 kmail/encodingdetector.cpp create mode 100644 kmail/encodingdetector.h create mode 100644 kmail/encodingdetector_ja.cpp create mode 100644 kmail/encodingdetector_ja_p.h create mode 100644 kmail/eventsrc create mode 100644 kmail/expirejob.cpp create mode 100644 kmail/expirejob.h create mode 100644 kmail/expirypropertiesdialog.cpp create mode 100644 kmail/expirypropertiesdialog.h create mode 100644 kmail/favoritefolderview.cpp create mode 100644 kmail/favoritefolderview.h create mode 100644 kmail/filehtmlwriter.cpp create mode 100644 kmail/filehtmlwriter.h create mode 100644 kmail/filterimporterexporter.cpp create mode 100644 kmail/filterimporterexporter.h create mode 100644 kmail/filterlog.cpp create mode 100644 kmail/filterlog.h create mode 100644 kmail/filterlogdlg.cpp create mode 100644 kmail/filterlogdlg.h create mode 100644 kmail/folderIface.cpp create mode 100644 kmail/folderIface.h create mode 100644 kmail/folderdiaacltab.cpp create mode 100644 kmail/folderdiaacltab.h create mode 100644 kmail/folderdiaquotatab.cpp create mode 100644 kmail/folderdiaquotatab.h create mode 100644 kmail/folderdiaquotatab_p.cpp create mode 100644 kmail/folderdiaquotatab_p.h create mode 100644 kmail/folderjob.cpp create mode 100644 kmail/folderjob.h create mode 100644 kmail/folderpropertiesdialog.ui create mode 100644 kmail/folderpropertiesdialog.ui.h create mode 100644 kmail/folderrequester.cpp create mode 100644 kmail/folderrequester.h create mode 100644 kmail/foldershortcutdialog.cpp create mode 100644 kmail/foldershortcutdialog.h create mode 100644 kmail/folderstorage.cpp create mode 100644 kmail/folderstorage.h create mode 100644 kmail/foldertreebase.cpp create mode 100644 kmail/foldertreebase.h create mode 100644 kmail/folderviewtooltip.h create mode 100644 kmail/globalsettings.cpp create mode 100644 kmail/globalsettings.h create mode 100644 kmail/globalsettings_base.kcfgc create mode 100644 kmail/headeritem.cpp create mode 100644 kmail/headeritem.h create mode 100644 kmail/headerlistquicksearch.cpp create mode 100644 kmail/headerlistquicksearch.h create mode 100644 kmail/headerstrategy.cpp create mode 100644 kmail/headerstrategy.h create mode 100644 kmail/headerstyle.cpp create mode 100644 kmail/headerstyle.h create mode 100644 kmail/hi128-app-kmail.png create mode 100644 kmail/hi16-app-kmail.png create mode 100644 kmail/hi22-app-kmail.png create mode 100644 kmail/hi32-app-kmail.png create mode 100644 kmail/hi48-app-kmail.png create mode 100644 kmail/hi64-app-kmail.png create mode 100644 kmail/hisc-app-kmail.svgz create mode 100644 kmail/htmlstatusbar.cpp create mode 100644 kmail/htmlstatusbar.h create mode 100644 kmail/identitydialog.cpp create mode 100644 kmail/identitydialog.h create mode 100644 kmail/identitydrag.cpp create mode 100644 kmail/identitydrag.h create mode 100644 kmail/identitylistview.cpp create mode 100644 kmail/identitylistview.h create mode 100644 kmail/imapaccountbase.cpp create mode 100644 kmail/imapaccountbase.h create mode 100644 kmail/imapjob.cpp create mode 100644 kmail/imapjob.h create mode 100644 kmail/index.cpp create mode 100644 kmail/index.h create mode 100644 kmail/interfaces/Makefile.am create mode 100644 kmail/interfaces/bodypart.h create mode 100644 kmail/interfaces/bodypartformatter.h create mode 100644 kmail/interfaces/bodyparturlhandler.h create mode 100644 kmail/interfaces/htmlwriter.h create mode 100644 kmail/interfaces/observable.h create mode 100644 kmail/interfaces/observer.h create mode 100644 kmail/interfaces/rulewidgethandler.h create mode 100644 kmail/interfaces/urlhandler.h create mode 100644 kmail/isubject.cpp create mode 100644 kmail/isubject.h create mode 100644 kmail/jobscheduler.cpp create mode 100644 kmail/jobscheduler.h create mode 100644 kmail/kcm_kmail.cpp create mode 100644 kmail/kcursorsaver.h create mode 100644 kmail/keyresolver.cpp create mode 100644 kmail/keyresolver.h create mode 100644 kmail/khtmlparthtmlwriter.cpp create mode 100644 kmail/khtmlparthtmlwriter.h create mode 100644 kmail/kleo_util.h create mode 100644 kmail/klistboxdialog.cpp create mode 100644 kmail/klistboxdialog.h create mode 100644 kmail/klistviewindexedsearchline.cpp create mode 100644 kmail/klistviewindexedsearchline.h create mode 100644 kmail/kmaccount.cpp create mode 100644 kmail/kmaccount.h create mode 100644 kmail/kmacctcachedimap.cpp create mode 100644 kmail/kmacctcachedimap.h create mode 100644 kmail/kmacctfolder.cpp create mode 100644 kmail/kmacctfolder.h create mode 100644 kmail/kmacctimap.cpp create mode 100644 kmail/kmacctimap.h create mode 100644 kmail/kmacctlocal.cpp create mode 100644 kmail/kmacctlocal.h create mode 100644 kmail/kmacctmaildir.cpp create mode 100644 kmail/kmacctmaildir.h create mode 100644 kmail/kmacctseldlg.cpp create mode 100644 kmail/kmacctseldlg.h create mode 100644 kmail/kmaddrbook.cpp create mode 100644 kmail/kmaddrbook.h create mode 100755 kmail/kmail-3.1-update-new-mail-notification-settings.pl create mode 100755 kmail/kmail-3.1-use-UOID-for-identities.pl create mode 100644 kmail/kmail-3.1.4-dont-use-UOID-0-for-any-identity.pl create mode 100755 kmail/kmail-3.2-misc.sh create mode 100755 kmail/kmail-3.2-update-loop-on-goto-unread-settings.sh create mode 100644 kmail/kmail-3.3-aegypten.pl create mode 100644 kmail/kmail-3.3-misc.pl create mode 100644 kmail/kmail-3.3-move-identities.pl create mode 100755 kmail/kmail-3.3-split-sign-encr-keys.sh create mode 100755 kmail/kmail-3.3-use-ID-for-accounts.pl create mode 100644 kmail/kmail-3.3b1-misc.pl create mode 100644 kmail/kmail-3.4-misc.pl create mode 100644 kmail/kmail-3.4.1-update-status-filters.pl create mode 100644 kmail/kmail-3.5-trigger-flag-migration.pl create mode 100755 kmail/kmail-pgpidentity.pl create mode 100755 kmail/kmail-upd-identities.pl create mode 100644 kmail/kmail.antispamrc create mode 100644 kmail/kmail.antispamrc-HOWTO create mode 100644 kmail/kmail.antivirusrc create mode 100644 kmail/kmail.kcfg create mode 100644 kmail/kmail.upd create mode 100644 kmail/kmailIface.h create mode 100644 kmail/kmail_config_accounts.desktop create mode 100644 kmail/kmail_config_appearance.desktop create mode 100644 kmail/kmail_config_composer.desktop create mode 100644 kmail/kmail_config_identity.desktop create mode 100644 kmail/kmail_config_misc.desktop create mode 100644 kmail/kmail_config_security.desktop create mode 100644 kmail/kmail_options.h create mode 100644 kmail/kmail_part.cpp create mode 100644 kmail/kmail_part.h create mode 100644 kmail/kmail_part.rc create mode 100644 kmail/kmail_view.desktop create mode 100644 kmail/kmailicalIface.h create mode 100644 kmail/kmailicalifaceimpl.cpp create mode 100644 kmail/kmailicalifaceimpl.h create mode 100644 kmail/kmailpartIface.h create mode 100644 kmail/kmatmlistview.cpp create mode 100644 kmail/kmatmlistview.h create mode 100644 kmail/kmcommands.cpp create mode 100644 kmail/kmcommands.h create mode 100644 kmail/kmcomposerui.rc create mode 100644 kmail/kmcomposewin.cpp create mode 100644 kmail/kmcomposewin.h create mode 100644 kmail/kmdebug.h create mode 100644 kmail/kmdict.cpp create mode 100644 kmail/kmdict.h create mode 100644 kmail/kmedit.cpp create mode 100644 kmail/kmedit.h create mode 100644 kmail/kmfawidgets.cpp create mode 100644 kmail/kmfawidgets.h create mode 100644 kmail/kmfilter.cpp create mode 100644 kmail/kmfilter.h create mode 100644 kmail/kmfilteraction.cpp create mode 100644 kmail/kmfilteraction.h create mode 100644 kmail/kmfilterdlg.cpp create mode 100644 kmail/kmfilterdlg.h create mode 100644 kmail/kmfiltermgr.cpp create mode 100644 kmail/kmfiltermgr.h create mode 100644 kmail/kmfolder.cpp create mode 100644 kmail/kmfolder.h create mode 100644 kmail/kmfoldercachedimap.cpp create mode 100644 kmail/kmfoldercachedimap.h create mode 100644 kmail/kmfoldercombobox.cpp create mode 100644 kmail/kmfoldercombobox.h create mode 100644 kmail/kmfolderdia.cpp create mode 100644 kmail/kmfolderdia.h create mode 100644 kmail/kmfolderdir.cpp create mode 100644 kmail/kmfolderdir.h create mode 100644 kmail/kmfolderimap.cpp create mode 100644 kmail/kmfolderimap.h create mode 100644 kmail/kmfolderindex.cpp create mode 100644 kmail/kmfolderindex.h create mode 100644 kmail/kmfoldermaildir.cpp create mode 100644 kmail/kmfoldermaildir.h create mode 100644 kmail/kmfoldermbox.cpp create mode 100644 kmail/kmfoldermbox.h create mode 100644 kmail/kmfoldermgr.cpp create mode 100644 kmail/kmfoldermgr.h create mode 100644 kmail/kmfoldernode.cpp create mode 100644 kmail/kmfoldernode.h create mode 100644 kmail/kmfoldersearch.cpp create mode 100644 kmail/kmfoldersearch.h create mode 100644 kmail/kmfolderseldlg.cpp create mode 100644 kmail/kmfolderseldlg.h create mode 100644 kmail/kmfoldertree.cpp create mode 100644 kmail/kmfoldertree.h create mode 100644 kmail/kmfoldertype.h create mode 100644 kmail/kmglobal.h create mode 100644 kmail/kmgroupware.cpp create mode 100644 kmail/kmgroupware.h create mode 100644 kmail/kmheaders.cpp create mode 100644 kmail/kmheaders.h create mode 100644 kmail/kmkernel.cpp create mode 100644 kmail/kmkernel.h create mode 100644 kmail/kmlineeditspell.cpp create mode 100644 kmail/kmlineeditspell.h create mode 100644 kmail/kmmainwidget.cpp create mode 100644 kmail/kmmainwidget.h create mode 100644 kmail/kmmainwin.cpp create mode 100644 kmail/kmmainwin.h create mode 100644 kmail/kmmainwin.rc create mode 100644 kmail/kmmessage.cpp create mode 100644 kmail/kmmessage.h create mode 100644 kmail/kmmimeparttree.cpp create mode 100644 kmail/kmmimeparttree.h create mode 100644 kmail/kmmsgbase.cpp create mode 100644 kmail/kmmsgbase.h create mode 100644 kmail/kmmsgdict.cpp create mode 100644 kmail/kmmsgdict.h create mode 100644 kmail/kmmsginfo.cpp create mode 100644 kmail/kmmsginfo.h create mode 100644 kmail/kmmsglist.cpp create mode 100644 kmail/kmmsglist.h create mode 100644 kmail/kmmsgpart.cpp create mode 100644 kmail/kmmsgpart.h create mode 100644 kmail/kmmsgpartdlg.cpp create mode 100644 kmail/kmmsgpartdlg.h create mode 100644 kmail/kmpopfiltercnfrmdlg.cpp create mode 100644 kmail/kmpopfiltercnfrmdlg.h create mode 100644 kmail/kmpopheaders.cpp create mode 100644 kmail/kmpopheaders.h create mode 100644 kmail/kmreadermainwin.cpp create mode 100644 kmail/kmreadermainwin.h create mode 100644 kmail/kmreadermainwin.rc create mode 100644 kmail/kmreaderwin.cpp create mode 100644 kmail/kmreaderwin.h create mode 100644 kmail/kmsearchpattern.cpp create mode 100644 kmail/kmsearchpattern.h create mode 100644 kmail/kmsearchpatternedit.cpp create mode 100644 kmail/kmsearchpatternedit.h create mode 100644 kmail/kmsender.cpp create mode 100644 kmail/kmsender.h create mode 100644 kmail/kmsender_p.h create mode 100644 kmail/kmservertest.cpp create mode 100644 kmail/kmservertest.h create mode 100644 kmail/kmstartup.cpp create mode 100644 kmail/kmstartup.h create mode 100644 kmail/kmsystemtray.cpp create mode 100644 kmail/kmsystemtray.h create mode 100644 kmail/kmtransport.cpp create mode 100644 kmail/kmtransport.h create mode 100644 kmail/kmversion.h create mode 100644 kmail/korghelper.cpp create mode 100644 kmail/korghelper.h create mode 100644 kmail/kwindowpositioner.cpp create mode 100644 kmail/kwindowpositioner.h create mode 100644 kmail/listjob.cpp create mode 100644 kmail/listjob.h create mode 100644 kmail/localsubscriptiondialog.cpp create mode 100644 kmail/localsubscriptiondialog.h create mode 100644 kmail/mailcomposerIface.h create mode 100644 kmail/maildirjob.cpp create mode 100644 kmail/maildirjob.h create mode 100644 kmail/mailinglist-magic.cpp create mode 100644 kmail/mailinglist-magic.h create mode 100644 kmail/mailinglistpropertiesdialog.cpp create mode 100644 kmail/mailinglistpropertiesdialog.h create mode 100644 kmail/mailserviceimpl.cpp create mode 100644 kmail/mailserviceimpl.h create mode 100644 kmail/mailsourceviewer.cpp create mode 100644 kmail/mailsourceviewer.h create mode 100644 kmail/main.cpp create mode 100644 kmail/managesievescriptsdialog.cpp create mode 100644 kmail/managesievescriptsdialog.h create mode 100644 kmail/managesievescriptsdialog_p.h create mode 100644 kmail/mboxjob.cpp create mode 100644 kmail/mboxjob.h create mode 100644 kmail/messageactions.cpp create mode 100644 kmail/messageactions.h create mode 100644 kmail/messagecomposer.cpp create mode 100644 kmail/messagecomposer.h create mode 100644 kmail/messagecopyhelper.cpp create mode 100644 kmail/messagecopyhelper.h create mode 100644 kmail/messageproperty.cpp create mode 100644 kmail/messageproperty.h create mode 100644 kmail/messagesender.h create mode 100755 kmail/mh2kmail create mode 100755 kmail/mh2kmailr create mode 100644 kmail/networkaccount.cpp create mode 100644 kmail/networkaccount.h create mode 100644 kmail/newfolderdialog.cpp create mode 100644 kmail/newfolderdialog.h create mode 100644 kmail/objecttreeparser.cpp create mode 100644 kmail/objecttreeparser.h create mode 100644 kmail/partNode.cpp create mode 100644 kmail/partNode.h create mode 100644 kmail/partmetadata.h create mode 100644 kmail/partnodebodypart.cpp create mode 100644 kmail/partnodebodypart.h create mode 100644 kmail/pics/Makefile.am create mode 100644 kmail/pics/attachmentQuicklistClosed.png create mode 100644 kmail/pics/attachmentQuicklistOpened.png create mode 100644 kmail/pics/enterprise_bottom.png create mode 100644 kmail/pics/enterprise_bottom_left.png create mode 100644 kmail/pics/enterprise_bottom_right.png create mode 100644 kmail/pics/enterprise_icon.png create mode 100644 kmail/pics/enterprise_left.png create mode 100644 kmail/pics/enterprise_right.png create mode 100644 kmail/pics/enterprise_s_left.png create mode 100644 kmail/pics/enterprise_s_right.png create mode 100644 kmail/pics/enterprise_sbar.png create mode 100644 kmail/pics/enterprise_sp_right.png create mode 100644 kmail/pics/enterprise_sw.png create mode 100644 kmail/pics/enterprise_top.png create mode 100644 kmail/pics/enterprise_top_left.png create mode 100644 kmail/pics/enterprise_top_right.png create mode 100644 kmail/pics/enterprise_w.png create mode 100644 kmail/pics/icons/Makefile.am create mode 100644 kmail/pics/icons/cr128-action-online_status.png create mode 100644 kmail/pics/icons/cr16-action-kmgroupware_folder_calendar.png create mode 100644 kmail/pics/icons/cr16-action-kmgroupware_folder_contacts.png create mode 100644 kmail/pics/icons/cr16-action-kmgroupware_folder_journals.png create mode 100644 kmail/pics/icons/cr16-action-kmgroupware_folder_notes.png create mode 100644 kmail/pics/icons/cr16-action-kmgroupware_folder_tasks.png create mode 100644 kmail/pics/icons/cr16-action-mail_flag.png create mode 100644 kmail/pics/icons/cr16-action-mail_ham.png create mode 100644 kmail/pics/icons/cr16-action-mail_ignore.png create mode 100644 kmail/pics/icons/cr16-action-mail_spam.png create mode 100644 kmail/pics/icons/cr16-action-mail_todo.png create mode 100644 kmail/pics/icons/cr16-action-online_status.png create mode 100644 kmail/pics/icons/cr22-action-kmgroupware_folder_calendar.png create mode 100644 kmail/pics/icons/cr22-action-kmgroupware_folder_journals.png create mode 100644 kmail/pics/icons/cr22-action-kmgroupware_folder_tasks.png create mode 100644 kmail/pics/icons/cr22-action-mail_ham.png create mode 100644 kmail/pics/icons/cr22-action-mail_ignore.png create mode 100644 kmail/pics/icons/cr22-action-mail_spam.png create mode 100644 kmail/pics/icons/cr22-action-online_status.png create mode 100644 kmail/pics/icons/cr32-action-kmgroupware_folder_calendar.png create mode 100644 kmail/pics/icons/cr32-action-kmgroupware_folder_tasks.png create mode 100644 kmail/pics/icons/cr32-action-mail_ham.png create mode 100644 kmail/pics/icons/cr32-action-mail_ignore.png create mode 100644 kmail/pics/icons/cr32-action-mail_spam.png create mode 100644 kmail/pics/icons/cr32-action-online_status.png create mode 100644 kmail/pics/icons/cr48-action-online_status.png create mode 100644 kmail/pics/icons/crsc-action-mail_ignore.svgz create mode 100644 kmail/pics/icons/crsc-action-online_status.svgz create mode 100644 kmail/pics/kmmsgattachment.png create mode 100644 kmail/pics/kmmsgdel.png create mode 100644 kmail/pics/kmmsgencryptionproblematic.png create mode 100644 kmail/pics/kmmsgflag.png create mode 100644 kmail/pics/kmmsgforwarded.png create mode 100644 kmail/pics/kmmsgfullyencrypted.png create mode 100644 kmail/pics/kmmsgfullysigned.png create mode 100644 kmail/pics/kmmsgham.png create mode 100644 kmail/pics/kmmsgignored.png create mode 100644 kmail/pics/kmmsgnew.png create mode 100644 kmail/pics/kmmsgpartiallyencrypted.png create mode 100644 kmail/pics/kmmsgpartiallysigned.png create mode 100644 kmail/pics/kmmsgqueued.png create mode 100644 kmail/pics/kmmsgread.png create mode 100644 kmail/pics/kmmsgread_fwd.png create mode 100644 kmail/pics/kmmsgread_fwd_replied.png create mode 100644 kmail/pics/kmmsgread_replied.png create mode 100644 kmail/pics/kmmsgreplied.png create mode 100644 kmail/pics/kmmsgsent.png create mode 100644 kmail/pics/kmmsgsignatureproblematic.png create mode 100644 kmail/pics/kmmsgspam.png create mode 100644 kmail/pics/kmmsgtodo.png create mode 100644 kmail/pics/kmmsgundefinedencrypted.png create mode 100644 kmail/pics/kmmsgundefinedsigned.png create mode 100644 kmail/pics/kmmsgunseen.png create mode 100644 kmail/pics/kmmsgwatched.png create mode 100644 kmail/pics/kmwizard.png create mode 100644 kmail/pics/kmwizard.svg create mode 100644 kmail/pics/pgp-keys.png create mode 100644 kmail/pics/quotecollapse.png create mode 100644 kmail/pics/quoteexpand.png create mode 100644 kmail/popaccount.cpp create mode 100644 kmail/popaccount.h create mode 100644 kmail/profiles/Makefile.am create mode 100644 kmail/profiles/profile-default-rc.desktop create mode 100644 kmail/profiles/profile-high-contrast-rc.desktop create mode 100644 kmail/profiles/profile-html-rc.desktop create mode 100644 kmail/profiles/profile-purist-rc.desktop create mode 100644 kmail/profiles/profile-secure-rc.desktop create mode 100644 kmail/protocols.h create mode 100644 kmail/quotajobs.cpp create mode 100644 kmail/quotajobs.h create mode 100644 kmail/recipientseditor.cpp create mode 100644 kmail/recipientseditor.h create mode 100644 kmail/recipientseditortest.cpp create mode 100644 kmail/recipientseditortest.h create mode 100644 kmail/recipientspicker.cpp create mode 100644 kmail/recipientspicker.h create mode 100644 kmail/redirectdialog.cpp create mode 100644 kmail/redirectdialog.h create mode 100644 kmail/regexplineedit.cpp create mode 100644 kmail/regexplineedit.h create mode 100644 kmail/renamejob.cpp create mode 100644 kmail/renamejob.h create mode 100644 kmail/replyphrases.kcfg create mode 100644 kmail/replyphrases.kcfgc create mode 100644 kmail/rulewidgethandlermanager.cpp create mode 100644 kmail/rulewidgethandlermanager.h create mode 100644 kmail/scalix.cpp create mode 100644 kmail/scalix.h create mode 100644 kmail/searchjob.cpp create mode 100644 kmail/searchjob.h create mode 100644 kmail/searchwindow.cpp create mode 100644 kmail/searchwindow.h create mode 100644 kmail/secondarywindow.cpp create mode 100644 kmail/secondarywindow.h create mode 100644 kmail/sieveconfig.cpp create mode 100644 kmail/sieveconfig.h create mode 100644 kmail/sievedebugdialog.cpp create mode 100644 kmail/sievedebugdialog.h create mode 100644 kmail/sievejob.cpp create mode 100644 kmail/sievejob.h create mode 100644 kmail/signatureconfigurator.cpp create mode 100644 kmail/signatureconfigurator.h create mode 100644 kmail/simplestringlisteditor.cpp create mode 100644 kmail/simplestringlisteditor.h create mode 100644 kmail/smimeconfiguration.ui create mode 100644 kmail/snippetconfig.cpp create mode 100644 kmail/snippetconfig.h create mode 100644 kmail/snippetdlg.cpp create mode 100644 kmail/snippetdlg.h create mode 100644 kmail/snippetdlgbase.ui create mode 100644 kmail/snippetitem.cpp create mode 100644 kmail/snippetitem.h create mode 100644 kmail/snippetsettings.cpp create mode 100644 kmail/snippetsettings.h create mode 100644 kmail/snippetsettingsbase.ui create mode 100644 kmail/snippetwidget.cpp create mode 100644 kmail/snippetwidget.h create mode 100644 kmail/spamheaderanalyzer.cpp create mode 100644 kmail/spamheaderanalyzer.h create mode 100644 kmail/stl_util.h create mode 100644 kmail/subscriptiondialog.cpp create mode 100644 kmail/subscriptiondialog.h create mode 100644 kmail/teehtmlwriter.cpp create mode 100644 kmail/teehtmlwriter.h create mode 100644 kmail/templateparser.cpp create mode 100644 kmail/templateparser.h create mode 100644 kmail/templatesconfiguration.cpp create mode 100644 kmail/templatesconfiguration.h create mode 100644 kmail/templatesconfiguration_base.ui create mode 100644 kmail/templatesconfiguration_kfg.kcfg create mode 100644 kmail/templatesconfiguration_kfg.kcfgc create mode 100644 kmail/templatesinsertcommand.cpp create mode 100644 kmail/templatesinsertcommand.h create mode 100644 kmail/tests/Makefile.am create mode 100644 kmail/tests/messagedicttests.cpp create mode 100644 kmail/tests/messagedicttests.h create mode 100644 kmail/tests/mimelibtests.cpp create mode 100644 kmail/tests/mimelibtests.h create mode 100644 kmail/tests/multipartmixed.mbox create mode 100644 kmail/tests/signedmail.mbox create mode 100644 kmail/tests/storagelayermodule.cpp create mode 100644 kmail/tests/utiltests.cpp create mode 100644 kmail/tests/utiltests.h create mode 100644 kmail/textsource.cpp create mode 100644 kmail/textsource.h create mode 100644 kmail/tips create mode 100644 kmail/transportmanager.cpp create mode 100644 kmail/transportmanager.h create mode 100644 kmail/undostack.cpp create mode 100644 kmail/undostack.h create mode 100755 kmail/upgrade-signature.pl create mode 100755 kmail/upgrade-transport.pl create mode 100644 kmail/urlhandlermanager.cpp create mode 100644 kmail/urlhandlermanager.h create mode 100644 kmail/util.cpp create mode 100644 kmail/util.h create mode 100644 kmail/vacation.cpp create mode 100644 kmail/vacation.h create mode 100644 kmail/vacationdialog.cpp create mode 100644 kmail/vacationdialog.h create mode 100644 kmail/vcardviewer.cpp create mode 100644 kmail/vcardviewer.h create mode 100644 kmail/warningconfiguration.ui create mode 100644 kmail/xfaceconfigurator.cpp create mode 100644 kmail/xfaceconfigurator.h (limited to 'kmail') diff --git a/kmail/COMMITPOLICY b/kmail/COMMITPOLICY new file mode 100644 index 00000000..5ebb56a0 --- /dev/null +++ b/kmail/COMMITPOLICY @@ -0,0 +1,13 @@ +KMail policy is decided by the KMail decision making group according +to the KMail decision making process, as was decided on the kde-core +development list and is reflected by the state of the KMail about +box. + +The KMail decision making group consists of all KMail core developers, +including maintainers. The decision making process is as follows: + +In the result of a conflict over a commit to the KMail section of KDE +CVS a resolution to this conflict, that is the decision to keep or +revert the commit can be decided by a unanimous agreement of the +maintainers, or failing that a resolution to the conflict will be +decided by a vote of KMail core developers. diff --git a/kmail/ChangeLog b/kmail/ChangeLog new file mode 100644 index 00000000..e9c2eaa1 --- /dev/null +++ b/kmail/ChangeLog @@ -0,0 +1,806 @@ + +NOTE: This file is out of date. For a detailed list of changes +please visit http://webcvs.kde.org + +2000-05-17 George Staikos + * Updated the authors list + * Added Stefan's external filter code and modified it somewhat + * bugfixes on size parameter again. + +2000-05-14 George Staikos + + * Forward now forwards ALL headers if ALL headers are set + +2000-05-12 George Staikos + + * Added an optional column for message size + * Created a context menu item for "Save As" + * Fixed various typos + * Created welcome message on inbox creation + +2000-03-25 Sven Radej + + * Removed old signal-driven "IPC" and introduced DCOP interface + kmailIface.h gets installed in include directory + * new class KMKernel, holds all previously static objects + (to access them, instead of "yourObject->something()" use + "kmkernel->yourObject()->something()" + +2000-02-28 Mario Weilguni + + * Corrected wrong shortcut in menu "File/&Filter" + * Added mini-icon to several subwindows of kmail + * Removed those ugly password dialogs with some + more modern and style one. + +2000-02-02 George Staikos (KMail-1.1.35) + Mail Sending + * External editor support + * Confirm before send + * Attach custom mime headers + + POP3 + * Settings entry for the POP3 timer + + Security + * Changed tpmnam to mkstemp + + General + * New mail received notification + * Sigfile editor + +2000-02-02 Jacek Stolarczyk + Settings + * Ported createPushButton, createLabeledEntry and addLabeledWidget + from char* to QString&. It was causing problems for passing + already internationalized strings. In cPB i18n() was unnecessarily + called for the second time. + +1999-12-15 Don Sanders (KMail-1.1.32) + + General + * Cache number of unread messages + * Added auto synchronization logic for correcting count of unread + messages. + * Added support for customizing colors in all three panes. (Currently + have to restart kmail for this to take effect due to HTML widget + renovations). + * Added support for customizing fonts and font sizes in all three + panes. (Currently have to restart kmail for this to take effect due + to HTML widget renovations). Fixed width fonts starting working too. + * Ported all the changes made to KMail 1.0.x. + * Ported KMail to QT 2.1 and KDE 2 kdelibs (that is it runs and works + now rather than just compiling) + + Privacy + * Committed patch by "J. Nick Koston" to add + support for GNU Privacy Guard. + + Filter Dialog + * Various buttons are enabled/disabled depending on whether they can + be used. + * Filter title is updated as the user enters filter details + * Fix a bug where changes could be lost when changing priority of + new filter. + * List of folders supports nested folders by indentation. + + Folder Tree Window + * Nested folder support. + * Improved DnD support (hover opening, auto scrolling, highlight + destination folder while dragging). + * Show count of unread messages in different color after the folder + name. + + Headers Window + * Ported kmheaders to QListView. + * Sorting is now done by QListView, this means the index file on + doesn't have to be updated, all sorting is done in main memory + (much faster). This also seems to have eliminated the lingering + problem of missorted mail. + * Implemented support for Shift and Ctrl selection and DnD. + * Show DnD cursor while dragging even in headers window. + * Eliminated flicker when changing folder. + * Speed up folder changing by reusing QListViewItems. + * When sorting always use the date as the second priority sorting key + * Added indicator in header for current sort column and direction. + * Eliminated needless gui updating when changing status, copying or + moving messages. This speeds up these operations a lot. + * Fixed problem with different date format being shown for current + message. + + Reader Window + * Committed patched by Daniel Naber that + fixes problem with messges with attachments and no text part. + * Lars Knoll ported the Reader Window to the new html widget. This + widget is still under construction (somethings haven't been + reimplemented yet) + * Show messages of type text/html as html (For Wired news etc). + * Added slight delay to updating reader window and so that holding + down the next/prev message key wouldn't cause the header window to + become out of sync with the reader window. + + Folder Settings Dialog + * Simplified by removing account related stuff. + * Added support for reparenting via combobox. + + Pixmaps + * Converted the pixmaps to png (expect for kdelogo which wasn't + looking right). + * New folder pixmaps contributed by + Greg Newton + + Composer Window + * Added undo/redo menu items. (Sent patch to support undo/redo in + QMultiLineEdit to Trolls) + * Updated KMail to use the new improved word wrapping in QMultiLineEdit + (no more signature munching). + * Set date of sent messages to current sent time rather than creation + time. + + Message class + * Worked with Jacek Stolarczyk to + fix bug that was preventing KMail from working on Alpha Architecture. + + Folder class + * Added extra protection so mail won't be lost if the disk was full. + * Fixed problem with unfiltered mail being lost with the help of + Bob Bernstein and dep + +1999-12-04 Stefan Taferner (KMail-1.1.31) + + * Implemented bouncing of mails. Hopefully this will help + to fool spammers ;-) + +1999-10-10 Stefan Taferner (KMail-1.1.25) + + * Switched folder-tree widget to QListView. Currently + drag&drop of messages is therefore broken. + * Added support for subdirectories in ~/Mail -> hierarchical + folders! + * Changed ancient folder edit/create dialog to something + more useful. + +1999-02-21 Stefan Taferner + + * Added extra ungrabbing of pointer and keyboard to avoid + locking problems when many message windows pop up. + +1999-02-10 Stefan Taferner (KMail-1.1.1) + + * Bugfix: new/unread messages that are displayed upon selecting + of a folder are now properly displayed as read. + + * Bugfix: filter-dialog: up/down moving (esp. of last entry) + now works properly + +1999-02-06 Stefan Taferner (KMail-1.1.0) + + * Added missing parts of documentation for proper install. + +1999-02-06 Sven Radej (KMail-1.0.17) + + * Server-client method - no more locking problems, lost instead + of sent mail, ghost messages... + Do the right thing when sending to "me@there (John Doe)" + Waldo's folderless-acount-segv-fix + More against destroyed last char in message + Better long/normal folder-list geometry bugfix + Don't quit while sending, and show a label while you send. + +1999-02-03 Sven Radej (KMail-1.0.16) + + * Bugfix: possible segv-on-create-folder. Reciever is properly + shown (index design & version updated) in sent&queued mail. + Fix agains overwriting last char in last message when appending + new one to folder. + +1999-01-30 Stefan Taferner (KMail-1.0.16) + + * Removed obsolete / commented-out code. + + * Bugfix: KMail now properly handles the 'filename' attribute + of message parts in the reader (Bug #445). + +1999-01-29 Stefan Taferner (KMail-1.0.15) + + * Bugfix: disabled deleting of system folders. + + * Removed save button in composer which is still not + implemented ;-> + + * Bugfix: disabled renaming of system folders (inbox, outbox, + sent-mails, trash). + + * Fix: improved performance when displaying messages (Bug #148). + + * Bugfix: fixed crash when dropping message on directory + entry in folder list. + + * Improved: email completion of composer (Ctrl-t) now + searches for appearance of given characters in addressbook's + list. Up to now only used beginning of string. + + * Added missing i18n() around "Spellcheck complete" in + composer. + + * Bugfix: Added %_ in composer settings, e.g. for indentation + template, to add a space at the end. Added %f which expands + to the two first characters of the name in the email address. + + * Bugfix: Indentation template (see composer settings) now + supports the same wildcards as the other fields, e.g. "%f>%_" + +1999-01-28 Stefan Taferner + + * Bugfix: kmail hangs when sending large messages via + SMTP. Actually was a performance issue with QRegExp. + + * Bugfix: main window was hidden upon press of Ok button + in settings dialog. + +1999-01-25 Stefan Taferner + + * Bugfix: 'From' column did not update new text at + first. + +1999-01-23 Stefan Taferner (KMail-1.0.14) + + * New feature: layout can now be switched between + "long folder list" and "short folder list". Option + setable in settings->appearance. + + * New feature: the "From" column now contains the + receiver for the folders outbox and sent-mail. Column + "Sender" automatically switches it's title to "Receiver" + for these folders. + + * Incorporated new documentation. + +1999-01-21 Stefan Taferner (KMail-1.0.13) + + * Fixed broken placement of contents in settings dialog. + + * Filter Dialog: changed combo box style to new style. + Now it is possible to have more folders than the screen + is high and still select them in the filter dialog. + * Filter Dialog: changed folder combo box to (semi) auto + resize. Changed layout of dialog to better display all + elements. Also enabled vertical resizing of dialog. + +1999-01-17 Stefan Taferner (KMail-1.0.12) + + Patches from Michael Teske : + * Fixed broken retrieve-all for pop accounts. + * Fixed broken marking of new mails as New. + +1999-01-01 Stefan Taferner (KMail-1.0.11) + + * Hopefully pgp zombies are fixed now. + * Applied patch for fixing problems with some inline + encoding switchings. + +1998-12-21 Stefan Taferner + + Applied several patches from Lars Heete : + * missing deletion of drop zone in composer destructor + * handling of NULL status field in message base + * reading process status of finished pgp process to avoid + zombies ;-) + * workaround for "Could not load..." warnings, that should + rather be debug messages, in message handler + +1998-12-20 Stefan Taferner (KMail-1.0.10) + + * Fixed possible crash when subject is empty. + +1998-12-17 Juraj Bednar + + * Added the capatability to insert arbitary public keys from public + keyring. (PGP) + +1998-12-16 Stefan Taferner (KMail-1.0.9) + + * Switched busy pointer (if not animated) and hand cursor + to new KCursor class. + + * Headers: status of message is now set to read also for + messages that are displayed when the folder is opened. + +1998-12-07 Stefan Taferner + + * Updated documentation + +1998-12-06 Stefan Taferner + + * Added i18n() around label in folder list. + +1998-12-03 Stefan Taferner (KMail-1.0.8) + + * New messages: added organization to message header + if given. + + * Headers: position of top message in folder list is + stored and reused upon next opening. Exception: if there + is a new or unread message in the folder, then the + first new/unread message is shown. + + * Composer: fixed missing last character in replies. + + * Composer: attachments are now included in forwards. + +1998-11-24 Stefan Taferner + + * Pop: does not stop pop retrieval now when pop server does + not understand LAST command. + +1998-11-15 Stefan Taferner (KMail-1.0.7) + + * Headers: now current message is not reset when reading mails + and checking for new messages meanwhile. + + * Pop: added configuration option for leave-mail-on-server. + + * Pop: Fixed problems in pop authentication code. + + * Pop: Enabled POP3 LAST command which was committed to + kdesupport some time ago. + +1998-11-15 Alex Zepeda + + * kfontutils.cpp (kfontToStr): Cast two const char *'s to char *'s as + egcs seems to barf without the casts. + +1998-11-10 Harri Porten + + * Removed hardcoded localkdedir() + + * Let KApplication() do the job of creating ~/.kde/share/config + +1998-10-31 Stefan Taferner (KMail-1.0.6) + + * Fixed: crash when fetching new mail and inbox folder + is not accessible. + +1998-10-21 Lars Knoll + * fixed a bug in the support for pgp-2.6 + +1998-10-08 Stefan Taferner (KMail-1.0.5) + + * Sorting messages: replaced sorting algorithm, which caused + random hangs, with stock qsort -- hopefully working now ;-) + + * Fixed: folder list went out of scope (current item pointing to + nowhere) when folder was deleted. + + * Composer: fixed broken confirm-close dialog. + + * Increased version to better match upcoming Kde-1.1 release. + + * Added call to kapp->quit() when last window is closed. + +1998-10-05 Lars Knoll + * Added new pgp classes. They should fix a lot of problems + with the current support of pgp5.0 and pgp2.6, and fix all + security problems with the old versions of kpgp, since all + comunication with pgp (including the passphrase) is done via + pipes. + +1998-09-26 Stefan Taferner (KMail-0.8.1) + + * Fixed crash upon close of a main- or composer window. + Bug seems to be introduced by changed behaviour of KTMainWindow. + Still KMail crashes when you click on any message afterwards. + + * Addressbook: finally fixed bug in not reading last line. + Thanks to all who reported! + + * Replaced occurrences of KTopLevelWidget with KTMainWindow. + +1998-09-21 Markus Wuebben + + * added a short cut for mail checking + +1998-09-12 Markus Wuebben + + * some nice little fixes + +1998-09-11 Juraj Bednar + + * finally wrote PGP replying and forwarding decryption + * PGP 5.0i should work now with no problems (should ;-) + +Sun Sep 6 19:20:34 1998 Markus Wuebben + + * kmacctpop.cpp (setPasswd): Fixed password problem. + +Sun Sep 6 18:28:45 1998 Markus Wuebben + + * kmreaderwin.cpp : Finally fixed attachment problem + +1998-07-31 Markus Wuebben + + * kmsettings.cpp / kmmainwin.cpp Implemented send mail on check. + * kmacctlocal.cpp (processNewMail): Added message box + warning if mail folder was not found. + + * kmmainwin.cpp Added editing of message in outbox folder. + * kmfolderdlg.cpp Removed out of index warning + + +1998-07-23 Stefan Taferner + + * Added message status "Read". This status is set to + messages which are loaded with check-mail that have + status set to "R". + + These messages appear whith blue text, but without + the green ball to the left, in the message list. + +1998-07-22 Markus Wuebben + + * main.cpp Applied session management patch. + * kmfolder.cpp Applied fseek patch for solaris + +1998-07-03 Stefan Taferner + + * PGP: fixed crash when no ~/.pgp/pubring.pgp is installed + and signed message is selected. + +1998-06-30 Stefan Taferner (KMail-0.7.9) + + * PGP: removed dialog asking for pass phrase when only + signed message was given, added missing asking for pass + phrase when encrypted/signed message is sent. + + * Composer: fixed bug that showed busy pointer all the + time with auto-append-signature set and no signature file + given. + + * Composer: removed mSendImmediate which seems unused + in the composer nowadays. Simplified code of slotSend, + slotSendNow, and slotSendLater (to be easier consistent). + +1998-06-29 Stefan Taferner (KMail-0.7.8) + + * Config: writeConfig() was not called when windows + got closed. Now it is. + +1998-06-27 Markus Wuebben + + * kmcomposewin.cpp (applyChanges): add false to applyChanges to + avoid segfault on ALPHAs. + +1998-06-24 Stefan Taferner + + * Pgp detection simplified and bugfixed. + + * Folder status messages for index creation and + compacting folder reduced from every 100th to every 10th. + +1998-06-23 Markus Wuebben (KMail-0.7.7) + + * removed various unnecessary assert()s. and replaced them + with if()s. Especially in functions that return void this + is very helpfull and makes kmail more stable. + + * Checked return values with if()s for some functions to + make sure that we run into to trouble with those problems. + +1998-06-23 Stefan Taferner (KMail-0.7.7) + + * Removed lots of old debug messages. + + * Composer: answering the confirmation is no longer + ignored. + + * Finetuning: added missing pixmaps to makefile and + repainted pixmap for queued and sent messages. + + * Composer: changed behaviour of email completion a bit. + Now it is possible to add multiple recipients with comma + separated and complete also those after the first one. + Drawback: email addresses with comma in them are not + handled properly currently. + + * Pop leave-on-server: due to the fact that we need another + field in the pop settings dialog "download-all-msgs" + the leave-on-server checkbox currently also toggles + the download-all-msgs feature. + So: download-all-msgs = !leave-on-server + + * Folders are now marked red after download if they + contain new or unread messages. As a feature, folders + that receive old messages are not marked. + + * Fixed problems in pop code downloading old messages + also. The "download" dialog is a bit misleading because + it should say now "checking message:" instead of + "downloading message:" because old messages are counted + here also. + +1998-06-22 Markus Wuebben (KMail-0.7.6) + + * fixed a whole bunch of stuff that made kmail segfault. + +1998-06-21 Mario Weilguni + + * small fix for quicker response in kmnewiostatus.cpp + + * "Delete folder" dialog now defaults to "No" (compliant to + KDE standards) + +1998-06-20 Markus Wuebben + + * kmsender.cpp (cleanup): Fixed the sendQueued problem. + If only one message from the outbox couldnt get sent all + following messages got deleted from the outbox. This is fixed now. + + +1998-06-19 Stefan Taferner (KMail-0.7.6) + + * Folder: fixed broken locking on systems without + flock(). Thanks to Werner Ertle + who sent me the patch. + +1998-06-18 Stefan Taferner (KMail-0.7.5) + + * Deleting folders crashed kmail. Fixed. + + * Folder-compacting: added busy pointer and progress + output in the status bar (idea from Mario). + + * Reader: removed ':' from the characters that mark + quoted text to catch smileys at the beginning of the + line ;-) + + * Main window configuration (geometry, etc.) is now + stored again. + + * Composer: changed completion key from Ctrl-. to Ctrl-T + as kfile has. + +1998-06-18 Mario Weilguni + + * Dialog for folder selection: Escape now closes dialog, + remembers last folder, has a default pushbutton + +1998-06-17 Stefan Taferner (KMail-0.7.4) + + * Message-list: now the first unread/new message is + displayed when opening a folder. + + * Message-status: now messages change status from + "new" to "unread" when the user changes folder (and + not when the folder is closed somewhere within KMail). + + * Reader: worked around problem of current HTML widget + with long lines (without '\n') + +1998-06-16 Stefan Taferner (KMail-0.7.3) + + * Headers: Improved switching between folders to do + less paints to avoid flickering where possible. + + * Warnings: changed warning messages of QPixmap and + QPainter to debug messages to avoid lots of message + boxes from broken KToolbar code when changing color + scheme. + + * Composer (email-address-completion) + Changed email-address completion to be case insensitive. + I think this is more useful in the general case. + + * Composer: fixed broken Tab handling. Replaced + Tab-completion in the email-address header lines + (To, From, Cc, etc.) with Ctrl-. completion. + + * Filters: removed some debug statements that slowed + down filtering a lot. + + * kmmsgbase.cpp: added isUnread() method. + + * Message-list: improved next/prev_unread_message methods. + Improved code that ensures that current item is visible + and added it to several places in the headers code. + +1998-06-15 Stefan Taferner + + * kmfilteraction.cpp (process): Removed patch for kmfilter + action "Move" of 1998-06-14. + Fixed bug in kmfilteraction "Move" action. + + * Fonts: reader- and composer-window now change + their font when the settings are changed. + + * Shutdown: improved handling of window-close and + KMail shutdown- and crash-handling. + + +1998-06-14 Markus Wuebben + + * kmfilteraction.cpp (process): Applied patch for kmfilter + actionmove. + +1998-06-13 Mario Weilguni (KMail-0.7.2) + + * key for next_unread_message and prev_unread_message added + +1998-06-12 Stefan Taferner + + * Folder loading: moved status message in index + creation to a more suitable place. Should be lots + faster now. + + * Composer: Now path of last filedialog for attachments + is stored. + + * Fonts: improved font settings. The HTML widget + unfortunately only honors the font family. Added new + functions (kfontutils.h) for easy font to/from string + conversion. + +1998-06-12 Mario Weilguni (KMail-0.7.1) + * new sort algorithm - quicksort instead of bubble-sort + +1998-06-11 Stefan Taferner (KMail-0.7.0) + + * Initial start now opens the settings dialog. Don't + be alerted, this will happen once for everybody now ;-) + + * Fonts: implemented font setting for HTML widget, + list of messages, and composer. + + * Drag&Drop: implemented drag&drop of messages to + folders. Dropping into HTML widget crashes KMail. + Could be a bug of the HTML widget, however. + + * Move-message: improved folder selection dialog. + + * Message-list: now cleared properly when the current + folder is deleted. + +1998-06-11 Markus Wuebben (KMail-0.6.9) + + * KMail now uses KFileDialog only! + +1998-06-11 Mario Weilguni (KMail-0.6.9) + + * "P" and "N" (next and previous mail) will cause the header + list to be scrolled if the new item is not visible + + * fixed some code to prevent compiler warning + + * panner position is now (again) restored + +1998-06-07 Stefan Taferner (KMail-0.6.8) + + * Folders: changed message about index-recreation + to debug from warning. + + * Message/Headers: Email addresses like + (with the <> around the address) no longer lead to + an empty field in the message list. + + * Headers: Removed extra space in header line(s). + + * Headers: Empty Subject moved From and Date one column + left. Fixed (hopefully). + + * Composer: Send again did not decode quoted-printable + sent messages. Fixed. + + * PGP: KMail did not ask for mantra upon first reading of + an encrypted message. Applied patch, from Michael Vogel + , which hopefully works :-) + +1998-05-13 Stefan Taferner (KMail-0.6.7) + + * Filters: Bugfix: when deleting a folder that was the target + of a filter the next get-mails crashed. + + * Filter Dialog: Deleting filter rules did not work. Fixed. + +1998-05-09 Markus Wuebben + + * kmsettings.cpp (KMAccountSettings): + Fixed "Delete mail from server". The row was too low. + * kmmainwin.cpp + Added a single account mail check option. + +1998-04-29 Markus Wuebben + + * Reader: Fixed the url parsing which made kmail + loop. + +1998-04-28 Stefan Taferner (KMail-0.6.6) + + * Folders: Emptying of the trash folder resulted in an infinite + loop. Fixed now. + +1998-04-04 Stefan Taferner (Kde Beta-4) + + * Filters: Removed warning dialog. Filters are working ok for + me for several weeks now. + + * Folders: After I finally also deleted lots of important messages + by mistake I now changed the behaviour of Folder->Empty to + move the messages into trash instead of deleting them ;-) + This made the "Are you sure" dialog now obsolete, IMO. + +1998-03-31 Stefan Taferner (KMail-0.6.5) + + * Folders: fixed bug introduced on 1998-03-26: open failed on + folders where lock() returned an error. + +1998-03-28 Stefan Taferner + + * Headers: when opening a folder the contents was not automatically + sorted, now is. + + * Pop: new messages retrieved from pop accounts were not + marked new. Now fixed. + +1998-03-26 Stefan Taferner + + * Folders: when opening and locking a folder there were + cases (in fact most of the time) when the folder seemed + to be not locked but was. Now this is handled better. + +1998-03-24 Stefan Taferner (KMail-0.6.4) + + * Message: decoding of quoted-printable RFC1522 strings + was broken for strings that started with a decoded character. + +1998-03-18 Stefan Taferner + + * Reader: improved detection of urls and email addresses + to ignore special characters at the end, e.g. "." or ")". + + * Messagelist: finally fixed sorting of messages. Also + implemented ascending/descending/none sorting (use multiple + clicks on the column headers to switch). Sorting order "none" + is what was IMO missing for the trash folder :-) + +1998-03-17 Stefan Taferner (KMail-0.6.3) + + * Composer: in menu view, when 'all headers' view is + activated, then the individual header line menu entries are + disabled now. + + * Folders: changed creation of folders to -rw------- + instead of the default -rw-r--r--. Same for the initial + creation of ~/Mail. + + * Attachments: temporary files (when viewing attachments) + are now also created with permissions -rw-------. + +1998-03-15 Stefan Taferner (KMail-0.6.2) + + * Startup: added option -check which does mail checking + upon startup. Also options that start with a '-' but which + are unknown are now skipped. + +1998-03-09 Stefan Taferner (KMail-0.6.1) + + * Reader: '_' was not considered part of a smart-detected email + address (auto detection of @). + + * Reader: attachments of type message/rfc822 are now shown + in an external reader window if open or view from the attachment + popup menu is chosen. + + * Composer: finally got insertion of tabs into message + working. + +(many changes are missing here, sorry) + +1998-02-14 Stefan Taferner + + * Startup: when recovering dead letters the auto signature was + appended twice. Fixed now. + + * Composer: fixed broken inserting of files. + + * kFileToString(): fixed handling of files with zero length. + +Initial version: 0.5.7 diff --git a/kmail/DESIGN b/kmail/DESIGN new file mode 100644 index 00000000..0d2c93c4 --- /dev/null +++ b/kmail/DESIGN @@ -0,0 +1 @@ +The contents of this file are now to be found and added to in Mainpage.dox. diff --git a/kmail/KMail.desktop b/kmail/KMail.desktop new file mode 100644 index 00000000..52e31f0e --- /dev/null +++ b/kmail/KMail.desktop @@ -0,0 +1,93 @@ +[Desktop Entry] +Name=KMail +Name[eo]=Retpoŝto +Name[hi]=के-मेल +Name[lv]=KPasts +Name[mk]=КПошта +Name[ne]=केडीई मेल +Name[pa]=ਕੇ-ਪੱਤਰ +Name[sv]=Kmail +Name[ta]=Kஅஞ்சல் +Name[th]=จัดการจดหมาย - K +Name[zh_TW]=KMail 郵件軟體 +Type=Application +Exec=kmail -caption "%c" %i %m +Icon=kmail +DocPath=kmail/index.html +GenericName=Mail Client +GenericName[af]=E-pos kliënt +GenericName[ar]=زبون البريد +GenericName[az]=Poçt Alıcısı +GenericName[be]=Паштовы кліент +GenericName[bg]=Пощенски клиент +GenericName[br]=Kliant postel +GenericName[bs]=Program za čitanje elektronske pošte +GenericName[ca]=Client de correu +GenericName[cs]=Klient pro čtení elektronické pošty +GenericName[cy]=Dibynnydd Ebost +GenericName[da]=E-mail-klient +GenericName[de]=Mail-Programm +GenericName[el]=Πελάτης mail +GenericName[eo]=Legi kaj sendi retpoŝton +GenericName[es]=Cliente de correo +GenericName[et]=E-posti klient +GenericName[eu]=Posta bezeroa +GenericName[fa]=کارخواه‌نامه +GenericName[fi]=Sähköpostiohjelma +GenericName[fr]=Logiciel de messagerie électronique +GenericName[fy]=E-portclient +GenericName[ga]=Cliant Ríomhphoist +GenericName[gl]=Cliente de correo +GenericName[he]=לקוח דוא"ל +GenericName[hi]=डाकिया +GenericName[hr]=Program za čitanje elektronske pošte +GenericName[hu]=Levelezőprogram +GenericName[id]=Klien Mail +GenericName[is]=Póstforrit +GenericName[it]=Programma di posta elettronica +GenericName[ja]=メールクライアント +GenericName[ka]=ფოსტის კლიენტი +GenericName[kk]=Эл.пошта клиент бағдарламасы +GenericName[km]=កម្មវិធី​អ៊ីមែល +GenericName[lt]=Pašto klientas +GenericName[lv]=Pasta Klients +GenericName[mk]=Клиент за електронска пошта +GenericName[ms]=Pelanggan Mel +GenericName[mt]=Klijent tal-imejl +GenericName[nb]=E-postklient +GenericName[nds]=Nettpostprogramm +GenericName[ne]=मेल क्लाइन्ट +GenericName[nl]=E-mailclient +GenericName[nn]=E-postklient +GenericName[pa]=ਪੱਤਰ ਕਲਾਂਇਟ +GenericName[pl]=Program pocztowy +GenericName[pt]=Cliente de E-mail +GenericName[pt_BR]=Cliente de E-mail +GenericName[ro]=Program de poştă electronică +GenericName[ru]=Почтовый клиент +GenericName[rw]=Umukiriya w'Ubutumwa +GenericName[se]=E-boastaprográmma +GenericName[sk]=Poštový klient +GenericName[sl]=Poštni odjemalec +GenericName[sr]=Поштански клијент +GenericName[sr@Latn]=Poštanski klijent +GenericName[sv]=E-postklient +GenericName[ta]=அஞ்சல் பயனர் +GenericName[tg]=Клиенти почтавӣ +GenericName[th]=ไคลเอนต์จดหมายอิเล็กทรอนิกส์ +GenericName[tr]=E-posta İstemcisi +GenericName[uk]=Поштовий клієнт +GenericName[uz]=Xat-xabar klienti +GenericName[uz@cyrillic]=Хат-хабар клиенти +GenericName[ven]=Mushumisani na poso +GenericName[xh]=Umxhasi Weposi +GenericName[zh_CN]=邮件客户程序 +GenericName[zh_TW]=收發信軟體 +GenericName[zu]=Imeyili Yomthengi +Terminal=false + +X-KDE-StartupNotify=true +X-DCOP-ServiceType=Unique +X-DCOP-ServiceName=kmail +ServiceTypes=DCOP/ResourceBackend/IMAP,DCOP/Mailer +Categories=Qt;KDE;Network;Office;Email; diff --git a/kmail/Mainpage.dox b/kmail/Mainpage.dox new file mode 100644 index 00000000..0b15ebfb --- /dev/null +++ b/kmail/Mainpage.dox @@ -0,0 +1,871 @@ +/** \mainpage KMail architectural overview + +\section KMail design principles + +This file is intended to guide the reader's way through the KMail +codebase. It should esp. be handy for people not hacking full-time on +KMail as well as people that want to trace bugs in parts of KMail +which they don't know well. + +Contents: +- Kernel +- Identity +- Filters +- ConfigureDialog +- MDNs +- Folders +- Index +- Headers +- Display + +TODO: reader, composer, messages, accounts, ... + +\section kernel KERNEL + +Files: kmkernel.h, kmkernel.cpp + +Contact Zack Rusin with questions... + +The first thing you'll notice about KMail is the extensive use of +kmkernel->xxx() constructs. The "kmkernel" is a define in kmkernel.h +declared as : +#define kmkernel KMKernel::self() +KMKernel is the central object in KMail. It's always created before +any other class, therefore you are _guaranteed_ that KMKernel::self() +(and therefore "kmkernel" construct) won't return 0 (null). + +KMKernel implements the KMailIface (our DCOP interface) and gives +access to all the core KMail functionality. + + +\section identity IDENTITY + +FIXME this has moved to libkpimidentities, right? + +Files: identity*, kmidentity.{h,cpp}, configuredialog.cpp, + signatureconfigurator.{h,cpp} + +Contact Marc Mutz on questions... + +Identities consists of various fields represented by +QStrings. Currently, those fields are hardcoded, but feel free to +implement KPIM::Identity as a map from strings to QVariants or somesuch. + +One part of identities are signatures. They can represent four modes +(Signature::Type) of operation (disabled, text from file or command +and inline text), which correspond to the combo box in the +identitydialog. + +Identities are designed to be used through the KPIM::IdentityManager: +const KPIM::Identity & ident = + kmkernel->identityManager()->identityForUoidOrDefault(...) +Make sure you assign to a _const_ reference, since the identityForFoo +methods are overloaded with non-const methods that access a different +list of identities in the manager that is used while configuring. That +is known source of errors when you use identityForFoo() as a parameter +to a method taking const KPIM::Identity &. + +WARNING: Don't hold the reference longer than the current functions +scope or next return to the event loop. That's b/c the config dialog +is not modal and the user may hit apply/ok anytime between calls to +function that want to use the identity reference. Store the UOID +instead if you need to keep track of the identity. You may also want +to connect to one of the KPIM::IdentityManager::changed() or ::deleted() +signals, if you want to do special processing in case the identity +changes. + +Thus, in the ConfigureDialog, you will see non-const KPIM::Identity +references being used, while everywhere else (KMMessage, +IdentityCombo) const references are used. + +The KPIM::IdentityCombo is what you see in the composer. It's a +self-updating combo box of KPIM::Identity's. Use this if you want the user +to choose an identity, e.g. in the folder dialog. + +Ihe IdentityListView is what you see in the config dialog's identity +management page. It's not meant to be used elsewhere, but is DnD +enabled (well, at the time of this writing, only drag-enabled). This +is going to be used to dnd identities around between KNode and KMail, +e.g. + +The SignatureConfigurator is the third tab in the identity +dialog. It's separate since it is used by the identity manager to +request a new file/command if the current value somehow fails. + + + +\section filter FILTER + +Contact Marc Mutz on questions... + +Filters consist of a search pattern and a list of actions plus a few +flags to indicate when they are to be applied (kmfilter.h). + They are managed in a QPtrList, called KMFilterMgr. This +filter magnager is responsible for loading and storing filters +(read/writeConfig) and for executing them (process). The unique +instance of the filter manager is held by the kernel +(KMKernel::filterMgr()). + +The search pattern is a QPtrList of search rules (kmsearchpattern.h) and a +boolean operator that defines their relation (and/or). + +A search rule consists of a field-QString, a "function"-enum and a +"contents" or "value" QString. The first gives the header (or +pseudoheader) to match against, the second says how to match (equals, +consists, is less than,...) and the third holds the pattern to match +against. + Currently, there are two types of search rules, which are mixed +together into a single class: String-valued and int-valued. The latter +is a hack to enable \verbatim\endverbatim and +\verbatim\endverbatim pseudo-header matching. + KMSearchRules should better be organized like KMFilterActions are. + +A filter action (kmfilteraction.h) inherits from KMFilterAction or one +of it's convenience sub-classes. They have three sub-interfaces: (1) +argument handling, (2) processing and (3) parameter widget handling. + Interface (1) consists of args{From,As}String(), name() and +isEmpty() and is used to read and write the arguments (if any) from/to +the config. + Interface (2) is used by the filter manager to execute the action +(process() / ReturnCode). + Interface (3) is used by the filter dialog to allow editing of +actions and consists of name(), label() and the +*ParamWidget*(). Complex parameter widgets are collected in +kmfawidget.{h,cpp}. + +A typical call for applying filters is + +KMKernel::filterMgr() +foreach message { + KMFilterMgr::process(): +} + + +\section configuration CONFIGURE DIALOG + +Files: configuredialog*.{h,cpp} ( identitylistview.{h,cpp} ) + +Contact Marc Mutz on questions... + +The configuredialog is made up of pages that in turn may consist of a +number of tabs. The genral rule of thumb is that each page and tab is +responsible for reading and writing the config options presented on +it, although in the future, that may be reduced to interacting with +the corresponding config manager instead. But that won't change the +basic principle. + +Thus, there is an abstract base class ConfigurePage (defined in +configuredialog_p.h), which derives from QWidget. It has four methods +of which you have to reimplement at least the first two: + +- void setup() + Re-read the config (from the config file or the manager) and update + the widgets correspondingly. That is, you should only create the + widgets in the ctor, not set the options yet. The reason for that is + that the config dialog, once created, is simply hidden and shown + subsequently, so we need a reset-like method anyway. + +- void apply() + Read the config from the widgets and write it into the config file + or the corresponding config manager. + +- void installProfile() + This is called when the user selected a profile and hit apply. A + profile is just another KConfig object. Therefore, this method + should be the same as setup(), except that you should only alter + widgets for configs that really exist in the profile. + +For tabbed config pages, there exists a convenience class called +TabbedConfigurationPage, which (as of this writing only offers the +addTab() convenience method. It is planned to also provide +reimplementations of setup, dismiss, apply and installProfile that just +call the same functions for each tab. + +\section mdn MDNs + +Files: libkdenetwork/kmime_mdn.{h,cpp} and kmmessage.{h,cpp}, mostly + +Contact Marc Mutz on questions... + +MDNs (Message Disposition Notifications; RFC 2298) are a way to send +back information regarding received messages back to their +sender. Examples include "message read/deleted/forwarded/processed". + +The code in kmime_mdn.{h,cpp} is responsible for creating the +message/disposition-notification body part (2nd child of +multipart/report that makes the MDN) and for providing the template +for human-readable text that goes into the text/plain part (1st child +of the multipart/report). + +The code in KMMessage::createMDN() actually constructs a message +containing a MDN for this message, using the kmime_mdn helper +functions. It starts by checking the index for an already sent MDN, +since the RFC demands that MDNs be sent only once for every +message. If that test succeeds, it goes on to check various other +constraints as per RFC and if all goes well the message containing the +multipart/report is created. + +If you need to use this functionality, see KMReaderWin::touchMsg() and +KMFilterAction::sendMDN() for examples. The touchMsg() code is invoked +on display of a message and sends a "displayed" MDN back (if so +configured), whereas the KMFilterAction method is a convenience helper +for the various filter actions that can provoke a MDN (move to trash, +redirect, forward, ...). + + +\section folders Folders + +Files: kmfolder*.{h,cpp}, folderstorage.{h,cpp} and *job.{h,cpp} + +Contact Zack Rusin with questions... + +The collaboration among KMail folder classes looks +as follows : + + KMFolderNode + / \ + / \ + KMFolderDir \ + KMFolder + . + . + v + FolderStorage + | + | + KMFolderIndex + | + | + ---< actual folder types: KMFolderImap, KMFolderMbox... >-- + +At the base KMail's folder design starts with KMFolderNode which +inherits QObject. KMFolderNode is the base class encapsulating +common folder properties such as the name and a boolean signifying whether +the folder is a folder holding mail directly or a KMFolderDir. +KMFolderNode's often do not have an on-disk representation, they are +entities existing only within KMail's design. + +KMFolder acts as the runtime representation of a folder with the physical +storage part being represented by a member of type FolderStorage. +KMFolder and FolderStorage have many functions with the same names and +signatures, but there is no inheritance. +KMFolderIndex contains some common indexing functionality for physical folders. +Subclasses of KMFolderIndex finally interact directly with physical storage +or with storage providers over the network. + +KMFolderDir is a directory abstraction which holds KMFolderNode's. +It inherits KMFolderNode and KMFolderNodeList which is a QPtrList. +A special case of a KMFolderDir is KMFolderRootDir; it represents +the toplevel KMFolderDir in KMail's folder hierarchy. + +KMFolderDir's contents are managed by KMFolderMgr's. +KMail contains three main KMFolderMgr's. They can be +accessed via KMKernel ( the "kmkernel" construct ). Those methods are : +1) KMFolderMgr *folderMgr() - which returns the folder manager for + the folders stored locally. +2) KMFolderMgr *imapFolderMgr() - which returns the folder manager + for all imap folders. They're handled a little differently because + for all imap messages only headers are cached locally while the + main contents of all messages is kept on the server. +3) KMFolderMgr *dimapFolderMgr() - which returns disconnected IMAP (dimap) + folder manager. In dimap, both the headers and a copy of the full message + are cached locally. +4) KMFolderMgr *searchFolderMgr() - which returns the folder manager + for search folders (folders created by using the "find + messages" tool). Other email clients call this type of folder + "virtual folders". + +FolderJob classes - These classes allow asynchronous operations on +KMFolder's. You create a Job on the heap, connect to one of its +signals and wait for the job to finish. Folders serve as FolderJob +factories. For example, to retrieve the full message from a folder +you do : + +FolderJob *job = folderParent->createJob( aMsg, tGetMessage ); +connect( job, SIGNAL(messageRetrieved(KMMessage*)), + SLOT(msgWasRetrieved(KMMessage*)) ); +job->start(); + + +\section index Index (old) + +Files: kmfolderindex.{h,cpp} and kmmsg{base,info}.{h,cpp} + +Contact Marc Mutz or + Till Adam or + Don Sanders +with questions... + + index := header *entry + + + header := magic LF NUL header-length byte-order-marker sizeof-long + + magic := "# KMail-Index V" 1*DIGITS + + header-length := Q_UINT32 + + byte-order-marker := Q_UINT32( 0x12345678 ) + + sizeof-long := Q_UINT32( 4 / 8 ) + + + entry := tag length value + + tag := Q_UINT32 ; little endian (native?) + + length := Q_UINT16 ; little endian (native?) + + value := unicode-string-value / ulong-value + + unicode-string-value := 0*256QChar ; network-byte-order + + ulong-value := unsigned_long ; little endian + +Currently defined tag values are: + + Msg*Part num. val type obtained by: + + No 0 u - + From 1 u fromStrip().stripWhitespace() + Subject 2 u subject().stripWhitespace() + To 3 u toStrip().stripWhiteSpace() + ReplyToIdMD5 4 u replyToIdMD5().stripWhiteSpace() + IdMD5 5 u msgIdMD5().stripWhiteSpace() + XMark 6 u xmark().stripWhiteSpace() + Offset 7 l folderOffset() (not only mbox!) + LegacyStatus 8 l mLegacyStatus + Size 9 l msgSize() + Date 10 l date() + File 11 u fileName() (not only maildir!) + CryptoState 12 l (signatureState() << 16) | encryptionState()) + MDNSent 13 l mdnSentState() + ReplyToAuxIdMD5 14 u replyToAuxIdMD5() + StrippedSubject 15 u strippedSubjectMD5().stripWhiteSpace() + Status 16 l status() + + u: unicode-string-value; l: ulong-value + +Proposed new (KDE 3.2 / KMail 1.6) entry format: + + index := header *entry + + entry := sync 1*( tag type content ) crc-tag crc-value + + sync := Q_UINT16 (32?) ; resync mark, some magic bit pattern + ; (together with preceding crc-tag provides + ; 24(40)bits to resync on in case of index + ; corruption) + + tag := Q_UINT8 + + type := Q_UINT8 + + content := variable-length-content / fixed-length-content + + crc-tag := tag type ; tag=CRC16, type=CRC16 + + crc-value := Q_UINT16 ; the CRC16 sum is calculated over all of + ; 1*( tag type content ) + + variable-length-content := length *512byte padding + + padding := *3NUL ; make the string a multiple of 4 octets in length + + fixed-length-content := 1*byte + + length := Q_UINT16 (Q_UINT8?) + + byte := Q_UINT8 + +The type field is pseudo-structured: + +bit: 7 6 5 4 3 2 1 0 + +-----+-----+-----+-----+-----+-----+-----+-----+ + | uniq | chunk | len | + +-----+-----+-----+-----+-----+-----+-----+-----+ + +uniq: 3 bits = max. 8 different types with same chunk size: + + for chunk = (0)00 (LSB(base)=0: octets): + 00(0) Utf8String + 01(0) BitField + 10(0) reserved + 11(0) Extend + + for chunk = (1)00 (LSB(base)=1: 16-octet blocks): + 00(1) MD5(Hash/List) + 01(1) reserved + 10(1) reserved + 11(1) Extend + + for chunk = 01 (shorts): + 000 Utf16String + 001-110 reserved + 111 Extend + + for chunk = 10 (int32): + 000 Utf32String (4; not to be used yet) + 001 Size32 + 010 Offset32 + 011 SerNum/UOID + 100 DateTime + 101 Color (QRgb: (a,r,g,b)) + 110 reserved + 111 Extend + + for chunk = 11 (int64): + 000 reserved + 001 Size64 + 010 Offset64 + 011-110 reserved + 111 Extend + +len: length in chunks + 000 (variable width -> Q_UINT16 with the real width follows) + 001..111: fixed-width data of length 2^len (2^1=2..2^6=128) + +You find all defined values for the type field in indexentrybase.cpp + +Currently defined tags are: + + tag type content + + DateSent DateTime Date: + DateReceived DateTime last Received:'s date-time + FromDisplayName String decoded display-name of first From: addr + ToDisplayName String dto. for To: + CcDisplayName String dto. for Cc: + FromAddrSpecs String possibly IMAA-encoded, comma-separated addr-spec's of From: + ToAddrSpecs String dto. for To: + CcAddrSpecs String dto. for Cc: + Subject String decoded Subject: + BaseSubjectMD5 String md5(utf8(stripOffPrefixes(subject()))) + BodyPeek String body preview + MaildirFile String Filename of maildir file for this messagea + MBoxOffset Offset(64) Offset in mbox file (pointing to From_) + MBoxLength Size(64) Length of message in mbox file (incl. From_) + Size Size(64) rfc2822-size of message (in mbox: excl. From_) + Status BitField (see below) + MessageIdMD5 MD5Hash MD5Hash of _normalized_ Message-Id: + MDNLink SerialNumber SerNum of MDN received for this message + DNSLink SerialNumber SerNUm of DSN received for this message + ThreadHeads SerialNumberList MD5Hash's of all (so far discovered) + _top-level thread parents_ + ThreadParents SerialNumberList MD5Hash's of all (so far discovered) + thread parents + + + "String" is either Utf8String or (Utf16String or Latin1String), + depending on content + +Currently allocated bits for the Status BitField are: + + Bit Value: on(/off) (\\imapflag) + + # "std stati": + 0 New (\\Recent) + 1 Read (\\Seen) + 2 Answered (\\Answered) + 3 Deleted (\\Deleted) + 4 Flagged (\\Flagged) + 5 Draft (\\Draft) + 6 Forwarded + 7 reserved + + # message properties: + 8 HasAttachments + 9 MDNSent ($MDNSent) + 10..11 00: unspecified, 01: Low, 10: Normal, 11: High Priority + 12..15 0001: Queued, 0010: Sent, 0011: DeliveryDelayed, + 0100: Delivered, 0101: DeliveryFailed, + 0110: DisplayedToReceiver, 0111: DeletedByReceiver, + 1001: ProcessedByReceiver, 1010: ForwardedByReceiver, + 1011-1110: reserved + 1111: AnswerReceived + + # signature / encryption state: + 16..19 0001: FullyEncrypted, 0010: PartiallyEncrypted, 1xxx: Problem + 20..23 0001: FullySigned, 0010: PartiallySigned, 1xxx: Problem + + # "workflow stati": + 24..25 01: Important, 10: ToDo, 11: Later (from Moz/Evo) + 26..27 01: Work, 10: Personal, 11: reserved (dto.) + 28..29 01: ThreadWatched, 10: ThreadIgnored, 11: reserved + 30..31 reserved + +All bits and combinations marked as reserved MUST NOT be altered if +set and MUST be set to zero (0) when creating the bitfield. + + +\section headers Headers (Threading and Sorting) + +Contact Till Adam or + Don Sanders +with questions... + +Threading and sorting is implemented in kmheaders.[cpp|h] and headeritem.[cpp|h] +and involves a handfull of players, namely: + +class KMHeaders: + this is the listview that contains the subject, date etc of each mail. + It's a singleton, which means there is only one, per mainwidget headers + list. It is actually a member of KMMainwidget and accessible there. + +class HeaderItem: + these are the [Q|K]ListViewItem descendend items the KMHeaders listview + consists of. There's one for each message. + +class SortCacheItem: + these are what the threading and sorting as well as the caching of those + operate on. Each is paired with a HeaderItem, such that each holds a + pointer to one, and vice versa, each header item holds a pointer to it's + associated sort cache item. + +.sorted file: + The order of the sorted and threaded (if threading is turned on for this + folder) messages is cached on disk in a file named .$FOLDER.index.sorted + so if, for example the name of a folder is foo, the associated sorting + cache file would be called ".foo.index.sorted". + For each message, its serial number, that of its parent, the length of its + sorting key, and the key itself are written to this file. At the start of + the file several per folder counts and flags are cached additionally, + immediately after a short file headers. The entries from the start of the + file are: + - "## KMail Sort V%04d\n\t" (magic header and version string) + - byteOrder flag containing 0x12345678 for byte order testing + - column, the sort column used for the folder + - ascending, the sort direction + - threaded, is the view threaded or is it not? + - appended, have there been items appended to the file (obsolete?) + - discovered_count, number of new mail discovered since the last sort file + generation + - sorted_count, number of sorted messages in the header list + +What is used for figuring out threading? + - messages can have an In-Reply-To header that contains the message id of + another message. This is called a perfect parent. + - additionally there is the References header which, if present, holds a + list of message ids that the current message is a follow up to. We + currently use the second to last entry in that list only. See further + down for the reasoning behind that. + - If the above two fail and the message is prefixed (Re: foo, Fwd: foo etc.) + an attempt is made to find a parent by looking for messages with the same + subject. How that is done is explained below as well. + + For all these comparisons of header contents, the md5 hashes of the headers + are used for speed reasons. They are stored in the index entry for each + message. All data structures described below use md5 hash strings unless + stated otherwise. + +Strategy: + When a folder is opened, updateMessageList is called, which in turn calls + readSortOrder where all the fun happens. If there is a .sorted file at the + expected location, it is openend and parsed. The header flags are read in + order to figure out the state in which this .sorted file was written. This + means the sort direction, whether the folder is threaded or not etc. + FIXME: is there currently sanity checking going on? + Now the file is parsed and for each message in the file a SortCacheItem is + created, which holds the offset in the .sorted file for this message as well + as it's sort key as read from the file. That sort cache item is entered into + the global mSortCache structure (member of the KMHeaders instance), which is + a QMemArray of the size mFolder->count(). Note that this + is the size reported by the folder, not as read from the .sorted file. The + mSortCache (along with some other structures) is updated when messages are + added or removed. More on that further down. + As soon as the serial number is read from the file, that number is looked up + in the message dict, to ensure it is still in the current folder. If not, it + has been moved away in the meantime (possibly by outside forces such as + other clients) and a deleted counter is incremented and all further + processing stopped for this message. + The messages parent serial number, as read from the sorted file is then + used to look up the parent and reset it to -1 should it not be in the + current folder anymore. -1 and -2 are special values that can show up + as parent serial numbers and are used to encode the following: + -1 means this message has no perfect parent, a parent for it needs to + be found from among the other messages, if there is a suitable one + -2 means this message is top level and will forever stay so, no need + to even try to find a parent. This is also used for the non-threaded + case. These are messages that have neither an In-Reply-To header nor + a References header and have a subject that is not prefixed. + In case there is a perfect parent, the current sort cache item is + appended to the parents list of unsorted children, or to that of + root, if there is not. A sort cache item is created in the mSortCache + for the parent, if it is not already there. Messages with a parent of + -1 are appended to the "unparented" list, which is later traversed and + its elements threaded. Messages with -2 as the parent are children of + root as well, as noted above, and will remain so. + + Once the end of the file is reached, we should have a nicely filled + mSortCache, containing a sort cache item for each message that was in the + sorted file. Messages with perfect parents know about them, top level + messages know about that as well, all others are on a list and will be + threaded later. + + Now, what happens when messages have been added to the store since the last + update of the .sorted file? Right, they don't have a sort cache item yet, + and would be overlooked. Consequently all message ids in the folder from 0 + to mFolder->count() are looked at and a SortCacheItem is created for the + ones that do not have one yet. This is where all sort cache items are created + if there was no sorted file. The items created here are by definition un- + sorted as well as unparented. On creation their sort key is figured out as + well. + + The next step is finding parents for those messages that are either new, or + had a parent of -1 in the .sorted file. To that end, a dict of all sort + cache items indexed by the md5 hash of their messsage id headers is created, + that will be used for looking up sort cache items by message id. The list of + yet unparented messages is then traversed and findParent() called for each + element wihch checks In-Reply-To and References headers and looks up the + sort cache item of those parents in the above mentioned dict. Should none be + found, the item is added to a second list the items of which will be subject + threaded. + + How does findParent() work, well, it tries to find the message pointed to by + the In-Reply-To header and if that fails looks for the one pointed to by the + second to last entry of the References header list. Why the second to last? + Imagine the following situation in Bob's kmail: + - Bob get's mail from Alice + - Bob replies to Alice's mail, but his mail is stored in the Outbox, not the + Inbox. + - Alice replies again, so Bob now has two mails from Alice which are part of + the same thread. The mail in the middle is somewhere else. We want that to + thread as follows: + Bob <- In-Reply-To: Alice1 + ============ + Alice1 + |_Alice <- In-Reply-To: Bob (not here), References: Alice, Bob + + - since the above is a common special case, it is worth trying. I think. ;) + + If the parent found is perfect (In-Reply-To), the sort cache items is marked + as such. mIsImperfectlyThreaded is used for that purposer, we will soon see + why that flag is needed. + + On this first pass, no subject threading is attempted yet. Once it is done, + the messages that are now top-level, the current thread heads, so to speak, + are collected into a second dict ( QDict< QPtrList< SortCacheItem > > ) + that contains for each different subject an entry holding a list of (so far + top level) messages with that subject, that are potential parents for + threading by subjects. These lists are sorted by date, so the parent closest + by date can be chosen. Sorting of these lists happens via insertion sort + while they are built because not only are they expected to be short (apart + from hard corner cases such as cvs commit lists, for which subject threading + makes little sense anyhow and where it should be turned off), but also since + the messages should be roughly pre sorted by date in the store already. + Some cursory benchmarking supports that assumption. + If now a parent is needed for a message with a certain subject, the list of + top level messages with that subject is traversed and the first one that is + older than our message is chosen as it's parent. Parents more than six weeks + older than the message are not accepted. The reasoning being that if a new + message with the same subject turns up after such a long time, the chances + that it is still part of the same thread are slim. The value of six weeks + is chosen as a result of a poll conducted on #kde-devel, so it's probably + bogus. :) All of this happens in the aptly named: findParentBySubject(). + + Everthing that still has no parent after this ends up at toplevel, no further + attemp is made at finding one. If you are reading this because you want to + implement threading by body search or somesuch, please go away, I don't like + you. :) + + Ok, so far we have only operated on sort cache items, nothing ui wise has + happened yet. Now that we have established the parent/child relations of all + messages, it's time to create HeaderItems for them for use in the header + list. But wait, you say, what about sorting? Wouldn't it make sense to do + that first? Exactly, you're a clever bugger, ey? Here, have a cookie. ;) + Both creation of header items and sorting of the as of yet unsorted sort + cache items happen at the same time. + + As previously mentioned (or not) each sort cache item holds a list of its + sorted and one of its unsorted children. Starting with the root node the + unsorted list is first qsorted, and then merged with the list of already + sorted children. To achieve that, the heads of both lists are compared and + the one with the "better" key is added to the list view next by creating a + KMHeaderListItem for it. That header item receives both its sort key as well + as its id from the sort cache item. Should the current sort cache item have + children, it is added to the end of a queue of nodes to repeat these steps + on after the current level is sorted. This way, a breadth first merge sort + is performed on the sort cache items and header items are created at each + node. + + What follows is another iteration over all message ids in the folder, to + make sure that there are HeaderItems for each now. Should that not be the + case, top level emergency items are created. This loop is also used to add + all header items that are imperfectly threaded to a list so they can be + reevalutated when a new message arrives. Here the reverse mapping from + header items to sort cache items are made as well. Those are also necessary + so the sort cache item based data structures can be updated when a message + is removed. + + The rest of readSortOrder should make sense on itself, I guess, if not, drop + me an email. + +What happens when a message arrives in the folder? + Among other things, the msgAdded slot is called, which creates the necessary + sort cache item and header item for the new message and makes sure the data + structures described above are updated accordingly. If threading is enabled, + the new message is threaded using the same findParent and findParentBySubject + methods used on folder open. If the message ends up in a watched or ignored + thread, those status bits are inherited from the parent. The message is also + added to the dict of header items, the index of messages by message id and, + if applicable and if the message is threaded at top level, to the list of + potential parents for subject threading. + + After those house keeping tasks are performed, the list of as of yet imper- + fectly threaded messages is traversed and our newly arrived message is + considered as a new parent for each item on it. This is especially important + to ensure that parents arriving out of order after their children still end + up as parents. If necessary, the entries in the .sorted file of rethreaded + messages are updated. An entry for the new message itself is appended to the + .sorted file as well. + + Note that as an optimization newly arriving mail as part of a mailcheck in + an imap folder is not added via msgAdded, but rather via complete reload of + the folder via readSortOrder(). That's because only the headers are gotten + for each mail on imap and that is so fast, that adding them individually to + the list view is very slow by comparison. Thus we need to make sure that + writeSortOrder() is called whenever something related to sorting changes, + otherwise we read stale info from the .sorted file. The reload is triggered + by the folderComplete() signal of imap folders. + +What happens when a message is removed from the folder? + In this case the msgRemoved slot kicks in and updates the headers list. First + the sort cache item and header item representing our message are removed from + the data structures and the ids of all items after it in the store decre- + mented. Then a list of children of the message is assembled containing those + children that have to be reparented now that our message has gone away. If + one of those children has been marked as toBeDeleted, it is simply added to + root at top level, because there is no need to find a parent for it if it is + to go away as well. This is an optimization to avoid rethreading all + messages in a thread when deleting several messages in a thread, or even the + whole thread. The KMMoveCommand marks all messages that will be moved out of + the folder as such so that can be detected here and the useless reparenting + can be avoided. Note that that does not work when moving messages via filter + action. + + That list of children is then traversed and a new parent found for each one + using, again, findParent and findParentBySubject. When a message becomes + imperfectly threaded in the process, it is added to the corresponding list. + + The message itself is removed from the list of imperfectly threaded messages + and its header item is finally deleted. The HeaderItem destructor destroys + the SortCacheItem as well, which is hopefully no longer referenced anywhere + at this point. + + + +\section display DISPLAY (reader window - new) + + Contact Marc Mutz with questions... + +What happens when a message is to displayed in the reader window? + First, since KMMessagePart and KMMessage don't work with nested body + parts, a hierarchical tree of MIME body parts is constructed with + partNode's (being wrappers around KMMessagePart and + DwBodyPart). This is done in KMReaderWin::parseMsg(KMMessage*). + After some legacy handling, an ObjectTreeParser is instantiated and + it's parseObjectTree() method called on the root + partNode. ObjectTreeParser is the result of an ongoing refactoring + to enhance the design of the message display code. It's an + implementation of the Method Object pattern, used to break down a + huuuge method into many smaller ones without the need to pass around + a whole lot of paramters (those are made members + instead). parseObjectTree() recurses into the partNode tree and + generates an HTML representation of each node in the tree (although + some can be hidden by setting them to processed beforehand or - the + new way - by using AttachmentStrategy::Hidden). The HTML generation + is delegated to BodyPartFormatters, while the HTML is written to + HTMLWriters, which abstract away HTML sinks. One of those is + KHTMLPartHTMLWriter, which writes to the KHTMLPart in the + readerwindow. This is the current state of the code. The goal of the + ongoing refactoring is to make the HTML generation blissfully + ignorant of the readerwindow and to allow display plugins that can + operate against stable interfaces even though the internal KMail + classes change dramatically. + + To this end, we designed a new set of interfaces that allows plugins + to be written that need or want to asynchronously update their HTML + representation. This set of interfaces consists of the following: + + - @em BodyPartFormatterPlugin + the plugin base class. Allows the BodyPartFormatterFactory to + query it for an arbitray number of BodyPartFormatters and + their associated metadata and url handlers. + + - @em BodyPartFormatter + the formatter interface. Contains a single method format() + that takes a BodyPart to process and an HTMLWriter to write the + generated HTML to and returns a result code with which it can + request more information or delegate the formatting back to + some default processor. BodyPartFormatters are meant to be + Flyweights, implying that the format() method is not allowed + to maintain state between calls, but see Mememto below. + + - @em BodyPart + body part interface. Contains methods to retrieve the content + of a message part and some of the more interesting header + information. This interface decouples the bodypart formatters + from the implementation used in KMail (or KNode, for that + matter). Also contains methods to set and retrieve a Memento, + which is used by BodyPartFormatters to maintain state between + calls of format(). + + - @em BodyPartMemento + interface for opaque state storage and event handling. + Contains only a virtual destructor to enable the backend + processing code to destroy the object without the help of the + bodypart formatter. + + +During the design phase we identified a need for BodyPartFormatters to +request their being called on some form of events, e.g. a dcop +signal. Thus, the Memento interface also includes the IObserver and +ISubject interfaces. If a BodyPartFormatter needs to react to a signal +(Qt or DCOP), it implements the Memento interface using a QObject, +connects the signal to a slot on the Memento and (as an ISubject) +notifies it's IObservers when the slot is called. If a Memento is +created, the reader window registers itself as an observer of the +Memento and will magically invoke the corresponding BodyPartFormatter, +passing along the Memento to be retrieved from the BodyPart interface. + +An example should make this clearer. Suppose, we want to update our +display after 10 seconds. Initially, we just write out an icon, and +after 10 seconds, we want to replace the icon by a "Hello world!" +line. The following code does exactly this: + +@code +class DelayedHelloWorldBodyPartFormatter + : public KMail::BodyPartFormatter { +public: + Result format( KMail::BodyPart * bodyPart, + KMail::HTMLWriter * htmlWriter ) { + if ( !bodyPart->memento() ) { + bodyPart->registerMemento( new DelayedHelloWorldBodyPartMemento() ); + return AsIcon; + } else { + htmlWriter->write( "Hello, world!" ); + return Ok; + } + } +}; + +class DelayedHelloWorldBodyPartMemento + : public QObject, public KMail::BodyPartMemento { +public: + DelayedHelloWorldBodyPartMemento() + : QObject( 0, "DelayedHelloWorldBodyPartMemento" ), + KMail::BodyPartMemento() + { + QTimer::singleShot( 10*1000, this, SLOT(slotTimeout()) ); + } + +private slots: + void slotTimeout() { notify(): } + +private: + // need to reimplement this abstract method... + bool update() { return true; } +}; +@endcode + +*/ diff --git a/kmail/Makefile.am b/kmail/Makefile.am new file mode 100644 index 00000000..ea566c45 --- /dev/null +++ b/kmail/Makefile.am @@ -0,0 +1,237 @@ +#KDE_OPTIONS = nofinal +KDE_CXXFLAGS = $(USE_RTTI) + +SUBDIRS = interfaces . about pics profiles avscripts tests + +INCLUDES = -I$(top_srcdir)/libkmime \ + -I$(top_srcdir)/libkpgp \ + -I$(top_srcdir)/libkdenetwork \ + -I$(top_srcdir)/libkdepim \ + -I$(top_srcdir)/libkpimidentities \ + -I$(top_srcdir)/libemailfunctions \ + -I$(top_srcdir)/libksieve \ + -I$(top_srcdir)/mimelib \ + -I$(top_srcdir)/certmanager/lib \ + -I$(top_srcdir)/certmanager/lib/ui \ + -I$(top_srcdir)/indexlib \ + -I$(top_srcdir)/ktnef \ + -I$(top_srcdir)/korganizer \ + -I$(top_srcdir) \ + $(GPGME_CFLAGS) \ + $(all_includes) + +if add_indexlib +INDEXLIB=../indexlib/libindex.la +endif + +lib_LTLIBRARIES = libkmailprivate.la +libkmailprivate_la_LDFLAGS = $(all_libraries) -avoid-version -no-undefined +libkmailprivate_la_LIBADD = \ + ../libkmime/libkmime.la ../libkpgp/libkpgp.la ../libkdepim/libkdepim.la \ + ../libkpimidentities/libkpimidentities.la ../mimelib/libmimelib.la \ + ../libksieve/libksieve.la ../libemailfunctions/libemailfunctions.la \ + ../certmanager/lib/libkleopatra.la $(INDEXLIB) \ + ../libkcal/libkcal.la \ + $(LIB_KHTML) $(LIB_KSPELL) $(LIB_KABC) + +kde_module_LTLIBRARIES = kcm_kmail.la libkmailpart.la libkmail_bodypartformatter_application_octetstream.la +libkmailpart_la_LDFLAGS = $(all_libraries) $(KDE_RPATH) -module -avoid-version -no-undefined +libkmailpart_la_LIBADD = libkmailprivate.la + +kcm_kmail_la_SOURCES = kcm_kmail.cpp +kcm_kmail_la_LDFLAGS = $(all_libraries) -module -avoid-version -no-undefined +kcm_kmail_la_LIBADD = libkmailprivate.la $(LIB_KDECORE) + +libkmail_bodypartformatter_application_octetstream_la_SOURCES = app_octetstream.cpp +libkmail_bodypartformatter_application_octetstream_la_LDFLAGS = $(all_libraries) -module $(KDE_PLUGIN) + +linkdir = $(kde_datadir)/kmail/plugins/bodypartformatter +link_DATA = application_octetstream.desktop + +bin_PROGRAMS = kmail +kmail_LDFLAGS = $(all_libraries) $(KDE_RPATH) +kmail_LDADD = libkmailprivate.la + +libkmailprivate_la_SOURCES = kmmessage.cpp kmmainwin.cpp configuredialog.cpp \ + configuredialog_p.cpp klistviewindexedsearchline.cpp \ + simplestringlisteditor.cpp index.cpp \ + identitydrag.cpp identitylistview.cpp identitydialog.cpp \ + kmfolderdia.cpp kmfoldertree.cpp kmtransport.cpp \ + kmfoldercombobox.cpp kmaccount.cpp kmheaders.cpp \ + headeritem.cpp listjob.cpp \ + kmcomposewin.cpp kmfolder.cpp kmmsgpartdlg.cpp \ + kmreaderwin.cpp htmlstatusbar.cpp kmmsgdict.cpp \ + kmgroupware.cpp folderstorage.cpp \ + csshelper.cpp klistboxdialog.cpp \ + actionscheduler.cpp messageproperty.cpp \ + kmmsgpart.cpp kmmsginfo.cpp \ + accountmanager.cpp kmacctfolder.cpp kmdict.cpp \ + kmsystemtray.cpp kmacctlocal.cpp kmfolderdir.cpp \ + kmfoldermgr.cpp kmfoldernode.cpp kmsender.cpp \ + kmacctseldlg.cpp kmfiltermgr.cpp kmsearchpatternedit.cpp \ + filterimporterexporter.cpp \ + encodingdetector.cpp encodingdetector_ja.cpp \ + kmfilteraction.cpp kmsearchpattern.cpp \ + kmfolderseldlg.cpp kmfilter.cpp kmfilterdlg.cpp \ + kmmsgbase.cpp kmmsglist.cpp kmaddrbook.cpp \ + signatureconfigurator.cpp xfaceconfigurator.cpp \ + networkaccount.cpp imapaccountbase.cpp \ + kmservertest.cpp kmacctimap.cpp kmacctcachedimap.cpp \ + kmfawidgets.cpp kmfoldermbox.cpp kmfolderimap.cpp \ + undostack.cpp kmfoldercachedimap.cpp \ + kmfoldermaildir.cpp popaccount.cpp colorlistbox.cpp \ + kmkernel.cpp kmailIface.skel kmailicalIface.skel \ + accountdialog.cpp searchwindow.cpp vcardviewer.cpp \ + vacationdialog.cpp vacation.cpp sievedebugdialog.cpp \ + sieveconfig.cpp sievejob.cpp \ + kmpopheaders.cpp kmpopfiltercnfrmdlg.cpp \ + kmmimeparttree.cpp \ + mailinglist-magic.cpp kmacctmaildir.cpp \ + attachmentstrategy.cpp \ + headerstrategy.cpp headerstyle.cpp khtmlparthtmlwriter.cpp \ + filehtmlwriter.cpp teehtmlwriter.cpp \ + mailcomposerIface.skel objecttreeparser.cpp \ + attachmentcollector.cpp \ + bodypartformatter.cpp bodypartformatterfactory.cpp \ + partNode.cpp \ + mailsourceviewer.cpp \ + kmcommands.cpp kmreadermainwin.cpp \ + kmstartup.cpp kmmainwidget.cpp \ + folderpropertiesdialog.ui kmfolderindex.cpp \ + kmfoldersearch.cpp transportmanager.cpp \ + folderjob.cpp cachedimapjob.cpp \ + maildirjob.cpp mboxjob.cpp imapjob.cpp \ + subscriptiondialog.cpp kmailicalifaceimpl.cpp aboutdata.cpp \ + folderIface.cpp folderIface.skel mailserviceimpl.cpp \ + attachmentlistview.cpp kmedit.cpp kmlineeditspell.cpp \ + kmatmlistview.cpp composer.cpp \ + isubject.cpp bodyvisitor.cpp antispamwizard.cpp \ + urlhandlermanager.cpp dictionarycombobox.cpp \ + secondarywindow.cpp filterlog.cpp filterlogdlg.cpp \ + korganizeriface.stub messagecomposer.cpp \ + keyresolver.cpp globalsettings.cpp globalsettings_base.kcfgc \ + regexplineedit.cpp rulewidgethandlermanager.cpp \ + headerlistquicksearch.cpp acljobs.cpp folderdiaacltab.cpp \ + quotajobs.cpp folderdiaquotatab.cpp folderdiaquotatab_p.cpp \ + partnodebodypart.cpp \ + expirejob.cpp compactionjob.cpp jobscheduler.cpp callback.cpp \ + searchjob.cpp renamejob.cpp \ + composercryptoconfiguration.ui \ + warningconfiguration.ui smimeconfiguration.ui annotationjobs.cpp \ + accountcombobox.cpp redirectdialog.cpp foldershortcutdialog.cpp \ + folderrequester.cpp \ + spamheaderanalyzer.cpp antispamconfig.cpp \ + replyphrases.kcfgc custommimeheader.kcfgc \ + recipientseditor.cpp \ + recipientspicker.cpp kwindowpositioner.cpp \ + distributionlistdialog.cpp expirypropertiesdialog.cpp \ + mailinglistpropertiesdialog.cpp newfolderdialog.cpp \ + accountwizard.cpp textsource.cpp \ + managesievescriptsdialog.cpp chiasmuskeyselector.cpp \ + util.cpp templatesinsertcommand.cpp \ + customtemplates_base.ui customtemplates.cpp \ + customtemplates_kfg.kcfgc \ + templatesconfiguration_base.ui templatesconfiguration.cpp \ + templatesconfiguration_kfg.kcfgc \ + templateparser.cpp \ + copyfolderjob.cpp \ + messagecopyhelper.cpp \ + localsubscriptiondialog.cpp \ + editorwatcher.cpp \ + kcalendariface.stub \ + favoritefolderview.cpp \ + foldertreebase.cpp \ + snippetdlgbase.ui \ + snippetwidget.cpp \ + snippetconfig.cpp \ + snippetdlg.cpp \ + snippetitem.cpp \ + snippetsettings.cpp \ + snippetsettingsbase.ui \ + scalix.cpp \ + messageactions.cpp \ + korghelper.cpp + +libkmailprivate_la_COMPILE_FIRST = globalsettings_base.h customtemplates_base.h templatesconfiguration_base.h + +kmail_SOURCES = main.cpp + +kmail_COMPILE_FIRST = globalsettings_base.h customtemplates_base.h templatesconfiguration_base.h + +libkmailpart_la_SOURCES = kmailpartIface.skel kmail_part.cpp + +libkmailpart_la_COMPILE_FIRST = globalsettings_base.h customtemplates_base.h templatesconfiguration_base.h + +check_PROGRAMS = dcoptest recipienteditortest + +METASOURCES = AUTO + +dcoptest_SOURCES = dcoptest.cpp kmailIface.skel kmailIface.stub mailcomposerIface.skel mailcomposerIface.stub +dcoptest_LDADD = $(LIB_KIO) +dcoptest_LDFLAGS = $(all_libraries) + +recipienteditortest_SOURCES = recipientseditortest.cpp +recipienteditortest_LDADD = libkmailprivate.la ../libkdepim/libkdepim.la $(LIB_KIO) $(LIB_KABC) +recipienteditortest_LDFLAGS = $(all_libraries) + +kmailIface_DCOPIDLNG = true +kmailicalIface_DCOPIDLNG = true + +korganizeriface_DIR = $(top_srcdir)/korganizer +kcalendariface_DIR = $(top_srcdir)/korganizer + +include_HEADERS = kmailIface.h kmailpartIface.h kmailicalIface.h + +xdg_apps_DATA = KMail.desktop kmail_view.desktop + +# why? +EXTRA_DIST = KMail.desktop $(link_DATA) + +KDE_ICON = AUTO + +rcdir = $(kde_datadir)/kmail +rc_DATA = kmcomposerui.rc kmmainwin.rc kmreadermainwin.rc eventsrc kmail_part.rc + +updatedir = $(kde_datadir)/kconf_update +update_DATA = kmail.upd +update_SCRIPTS = upgrade-transport.pl kmail-pgpidentity.pl \ + upgrade-signature.pl kmail-upd-identities.pl \ + kmail-3.1-use-UOID-for-identities.pl \ + kmail-3.1-update-new-mail-notification-settings.pl \ + kmail-3.1.4-dont-use-UOID-0-for-any-identity.pl \ + kmail-3.2-update-loop-on-goto-unread-settings.sh \ + kmail-3.2-misc.sh \ + kmail-3.3-use-ID-for-accounts.pl \ + kmail-3.3-move-identities.pl \ + kmail-3.3-aegypten.pl \ + kmail-3.3-split-sign-encr-keys.sh \ + kmail-3.3-misc.pl \ + kmail-3.3b1-misc.pl \ + kmail-3.4-misc.pl \ + kmail-3.4.1-update-status-filters.pl \ + kmail-3.5-trigger-flag-migration.pl + +confdir = $(kde_confdir) +conf_DATA = kmail.antispamrc kmail.antivirusrc + +tipdir = $(kde_datadir)/kmail +tip_DATA = tips + +servicetypedir = $(kde_servicetypesdir) +servicetype_DATA = dcopmail.desktop dcopimap.desktop + +kde_services_DATA = kmail_config_misc.desktop kmail_config_appearance.desktop \ + kmail_config_identity.desktop kmail_config_accounts.desktop kmail_config_composer.desktop \ + kmail_config_security.desktop + +messages: rc.cpp + rm -f tips.cpp + $(PREPARETIPS) > tips.cpp + $(XGETTEXT) -ktranslate *.cpp *.h -o $(podir)/kmail.pot + rm -f tips.cpp + +kde_kcfg_DATA = kmail.kcfg replyphrases.kcfg custommimeheader.kcfg \ + templatesconfiguration_kfg.kcfg customtemplates_kfg.kcfg + +DOXYGEN_REFERENCES = kdeui +include $(top_srcdir)/admin/Doxyfile.am diff --git a/kmail/TODO b/kmail/TODO new file mode 100644 index 00000000..cf5792a1 --- /dev/null +++ b/kmail/TODO @@ -0,0 +1,36 @@ +Around the 3.4 release +TA: remove the disabled expiry tab code from kmfolderdia.cpp once it is clear + that it won't be used anymore + +Before the first 3.2 Beta +MM: Write config upgrade script for + - AttachmentStyle -> AttachmentStrategy change + - HeaderStyle -> { HeaderStyle, HeaderStrategy } split +DS: Full Text Indexing +DS: Client side imap filtering +DS: Support for multipart/related mails +DS: Support for html composing +DS: Better for replying to html mail +??: Disconnected IMAP + +Needs more planning: +DS: BBDB like functionality +DS: Fuller DCOP interface (requires hidden dcop interfaces thanks Alex!) +DS: Console (plain text) client using dcop interface +DS: XFace with support for Allison reconstruction. +DS: writeindex incrementally update for deleted items. +DS: (improve status showing, for concurrent account checking) +DS: Use takeitem to hide read messages, with special behavior + in threaded mode +DS: Propoganda: Analysis Articles, head-to-head comparisons +DS: Single message class +DS: Zero-copy display of message 15465 +DS: Zero-copy downloading from pop server +DS: Set color action +DS: XML GUI context menus to support KMail plugins +DS: IMAP body searching +??: Dock Windows + +Groupware: +KHZ: Make groupware use a real vCal parser +MM: Implement generic viewer plugin diff --git a/kmail/about/Makefile.am b/kmail/about/Makefile.am new file mode 100644 index 00000000..4ac57fc2 --- /dev/null +++ b/kmail/about/Makefile.am @@ -0,0 +1,6 @@ +about_DATA = \ + top-right-kmail.png \ + main.html \ + kmail.css + +aboutdir = $(kde_datadir)/kmail/about diff --git a/kmail/about/kmail.css b/kmail/about/kmail.css new file mode 100644 index 00000000..3fb2ce90 --- /dev/null +++ b/kmail/about/kmail.css @@ -0,0 +1,26 @@ + +#headerR { + position: absolute; + right: 0px; + width: 430px; + height: 131px; + background-image: url(top-right-kmail.png); +} + +#title { + right: 125px; +} + +#tagline { + right: 125px; +} + +#boxCenter { + background-image: url(box-center-kmail.png); + background-repeat: no-repeat; + background-color: #dfe7f3; + background-position: bottom right; +} + +/* vim:set sw=2 et nocindent smartindent: */ + diff --git a/kmail/about/main.html b/kmail/about/main.html new file mode 100644 index 00000000..bc367933 --- /dev/null +++ b/kmail/about/main.html @@ -0,0 +1,66 @@ + + + + + + + + + + KMail + + + +