This brings a reworked folder tree and and a new message list, which is much more powerful than the old one.
New features include grouping, multiline items and the ability to customize just about everything of the look of the message list.
Also, we have a tabbed interface for opening more than one folder at once now.
An important aspect of the new message list is that drawing speed is now fast again (there was a regression in Q3ListView that
made huge folders a real pain to navigate, reading commit folders was not a nice thing to do).
There are probably more things which I forgot to list here.
Also, this is big step forward in getting rid of Qt3Support in KMail, now just some tiny bits are left.
Many thanks to SoC student Szymon Stefanek for his awesome work on his project! I can't stress enough how great this
achivment is. He even added very good API documentation to his classes :)
This requires the lastest version of qt-copy, otherwise you'll get mysterious crashes in Qt painting code from time to time.
We hope that this patch will be added to the next Qt 4.4.x version.
And finally, this merge also brings many regressions, which is not unnatural for such a big change.
In the remaining time before the KDE 4.2 release, we'll have to work on those to get it polished and regression-free.
Help here is always needed, and is a good opportunity to start working on KMail, since many regressions are low hanging fruit.
It also means the message list and the folder tree need a bit of testing.
If you find bugs, report them under the "new message list" and "new folder tree" component of the bug tracker, thanks.
I also plan to setup a wiki page with known regressions.
CCMAIL: kde-pim@kde.org
GUI:
CCBUG: 117808
BUG: 163469
FEATURE: 18170
FEATURE: 32400
FEATURE: 42107
FEATURE: 45526
FEATURE: 81272
FEATURE: 90142
FEATURE: 107450
(and probably many others)
svn path=/trunk/KDE/kdepim/; revision=881321
svn+ssh://tmcguire@svn.kde.org/home/kde/branches/KDE/4.1/kdepim
........
r870426 | tmcguire | 2008-10-12 16:23:56 +0200 (Sun, 12 Oct 2008) | 17 lines
Backport r867007 by tmcguire from trunk to the 4.1 branch:
Fix the charset name being "ISO 8859-xx" instead of "ISO-8859-xx".
This is because KCharsets::encodingForName() prefers to return something "human-readable" now,
thank you very much. I wonder why this worked in 3.5, the hypen seems to be missing there as well.
The KCharsets code is too much magic to be understandable unfortunatley.
Apparently KMail has been sending invalid messages ever since 4.1 was released.
Urgh :(
I hope I didn't mix human- and machine-readable names anywhere, otherwise things will
break. This is also the reason I was too afraid to change this in kdelibs.
CCBUG: 171947
........
svn path=/branches/kdepim/enterprise4/kdepim/; revision=870472
This is because KCharsets::encodingForName() prefers to return something "human-readable" now,
thank you very much. I wonder why this worked in 3.5, the hypen seems to be missing there as well.
The KCharsets code is too much magic to be understandable unfortunatley.
Apparently KMail has been sending invalid messages ever since 4.1 was released.
Urgh :(
I hope I didn't mix human- and machine-readable names anywhere, otherwise things will
break. This is also the reason I was too afraid to change this in kdelibs.
BUG: 171947
svn path=/trunk/KDE/kdepim/; revision=867007
Some fixes for online IMAP filtering:
- In the action scheduler, don't error out when the filtered message
couldn't be moved back to the target folder. Instead, ignore the error
(but don't delete the orginal message). This fixes filtering
stopping on GMail accounts once a message was encountered that was not
moved to another folder, but stayed in the same folder (GMail prevents moving
in this case, since it thinks it is a duplicate message)
- When moving the filtered message with the action scheduler from the
temporary filter folder to the target folder, the original message wouldn't
get deleted properly.
The reason for this was that the move command thought the move failed because
a message with another serial number arrived.
Fix this by remembering the serial number (based on the message ID) when using
the action scheduler for filtering.
This fixes filters which move messages to other folders: Now the message is properly
removed from the source folder again.
- add comments and kDebug output
This does _not_ solve the following problem:
When using GMail and online IMAP, filter actions which modify the message will not have
any effect, since GMails duplicate message prevention prevents the filtered message to
be moved back to the IMAP folder.
This will not be fixed, I see no way to work around this. GMail should fix their IMAP
server instead.
Please test, I'm not sure if this is safe to backport.
CCBUG: 166150
svn path=/branches/KDE/4.1/kdepim/; revision=836580
svn+ssh://tmcguire@svn.kde.org/home/kde/trunk/KDE/kdepim
........
r833475 | tmcguire | 2008-07-16 23:07:56 +0200 (Wed, 16 Jul 2008) | 32 lines
Some fixes for online IMAP filtering:
- In the action scheduler, don't error out when the filtered message
couldn't be moved back to the target folder. Instead, ignore the error
(but don't delete the orginal message). This fixes filtering
stopping on GMail accounts once a message was encountered that was not
moved to another folder, but stayed in the same folder (GMail prevents moving
in this case, since it thinks it is a duplicate message)
- When moving the filtered message with the action scheduler from the
temporary filter folder to the target folder, the original message wouldn't
get deleted properly.
The reason for this was that the move command thought the move failed because
a message with another serial number arrived.
Fix this by remembering the serial number (based on the message ID) when using
the action scheduler for filtering.
This fixes filters which move messages to other folders: Now the message is properly
removed from the source folder again.
- add comments and kDebug output
This does _not_ solve the following problem:
When using GMail and online IMAP, filter actions which modify the message will not have
any effect, since GMails duplicate message prevention prevents the filtered message to
be moved back to the IMAP folder.
This will not be fixed, I see no way to work around this. GMail should fix their IMAP
server instead.
Please test, I'm not sure if this is safe to backport.
CCBUG: 166150
........
svn path=/branches/kdepim/enterprise4/kdepim/; revision=835021
- In the action scheduler, don't error out when the filtered message
couldn't be moved back to the target folder. Instead, ignore the error
(but don't delete the orginal message). This fixes filtering
stopping on GMail accounts once a message was encountered that was not
moved to another folder, but stayed in the same folder (GMail prevents moving
in this case, since it thinks it is a duplicate message)
- When moving the filtered message with the action scheduler from the
temporary filter folder to the target folder, the original message wouldn't
get deleted properly.
The reason for this was that the move command thought the move failed because
a message with another serial number arrived.
Fix this by remembering the serial number (based on the message ID) when using
the action scheduler for filtering.
This fixes filters which move messages to other folders: Now the message is properly
removed from the source folder again.
- add comments and kDebug output
This does _not_ solve the following problem:
When using GMail and online IMAP, filter actions which modify the message will not have
any effect, since GMails duplicate message prevention prevents the filtered message to
be moved back to the IMAP folder.
This will not be fixed, I see no way to work around this. GMail should fix their IMAP
server instead.
Please test, I'm not sure if this is safe to backport.
CCBUG: 166150
svn path=/trunk/KDE/kdepim/; revision=833475
svn+ssh://tmcguire@svn.kde.org/home/kde/branches/kdepim/enterprise4/kdepim
........
r814982 | mutz | 2008-05-31 22:44:41 +0200 (Sat, 31 May 2008) | 1 line
GpgME::Error::asString() is encoded in local8Bit. Also fixed one each of size() > 0 --> !empty() and foo[0] -> foo.front().
........
r820931 | osterfeld | 2008-06-15 21:57:50 +0200 (Sun, 15 Jun 2008) | 1 line
Do not crash if the header filed is empty (such as "fieldname*=")
........
r821539 | staniek | 2008-06-17 20:07:18 +0200 (Tue, 17 Jun 2008) | 8 lines
Attachment tree widget:
- usability++: provide popup menu with just one "Save All Attachments"
action when user clicks root node or the empty area;
- do not display actions like "save as" for the root node (avoids assertion)
- clicking on the root node reloads contents of the tree,
so select this item again afterwards
........
r822092 | tilladam | 2008-06-19 07:23:45 +0200 (Thu, 19 Jun 2008) | 2 lines
Don't crash by accessing the job after the event loop deletes it.
........
r822161 | osterfeld | 2008-06-19 13:16:11 +0200 (Thu, 19 Jun 2008) | 1 line
do not crash if the signature has no fingerprint
........
r822454 | staniek | 2008-06-20 11:38:03 +0200 (Fri, 20 Jun 2008) | 2 lines
explicitly use boolean as the condition
........
svn path=/trunk/KDE/kdepim/; revision=822593
-use K_GLOBAL_STATIC for static data
-an attempt to fix possible crashes and "null messages appearing in folders like outbox"
Details:
M kmail/kmfolderindex_sqlite.cpp
M kmail/kmfolderindex.h
* executes "DELETE FROM messages WHERE id=.." for every for messages
with 0 serial number, especially for the outbox
* removed commented-out old impl.
M kmail/kmmessage.h
use K_GLOBAL_STATIC
M kmail/kmfoldermaildir.cpp
* minor change
M kmail/jobscheduler.cpp
M kmail/jobscheduler.h
* ~JobScheduler() use qDeleteAll() (and clear for sanity)
M kmail/networkaccount.cpp
* use K_GLOBAL_STATIC
* use value() to avoid inserting 0 values
* NetworkAccount::resetConnectionList(): use remove() instead of inserting 0
M kmail/kmmessage.cpp
* use K_GLOBAL_STATIC
M kmail/kmcommands.cpp
* KMMoveCommand::execute(): skip mesages with serial number == 0
-this avoids crashes when user tries to clean up a folder with "no subject" items
M kmail/kmmsgbase.cpp
* #ifdef code related to using_mmap when using sqlite mode
M kmail/networkaccount.h
* use QPointer<KIO::Slave> mSlave and bits for boolean members
svn path=/trunk/KDE/kdepim/; revision=809620
- use QChar instead of QCharRef in swapEndian()
- build the serial cache of a folder when opening
it with the headerview
Now the remaining slowness comes from Qt, especially
from Q3ListView::paintBranches(), which sucks away most
of the CPU.
svn path=/trunk/KDE/kdepim/; revision=807757
- Enable some code again
- style fixes
Still totally broken, though.
Do not use a KMail version newer than the nommap branch merge.
svn path=/trunk/KDE/kdepim/; revision=805166
from
/branches/work/kmail-nommap (r799390..804487)
/branches/work/kdepim-nommap/kmail (r804484..804960)
The SQLite mode is currently enabled only on Windows (by KMAIL_SQLITE_INDEX define),
so on !Windows, the code for standard 'mmap' mode is compiled.
CCMAIL:kde-pim@kde.org
svn path=/trunk/KDE/kdepim/; revision=805075
Fixes incorrect display of a sender with umlauts, but missing RFC 2047 encoding
(yes, I'm looking at you, bugzilla!)
svn path=/trunk/KDE/kdepim/; revision=796628
That fixes incorrect spaces/tabs in the subject, a regression introduced
with my recent decodeRFC2047String removal.
svn path=/trunk/KDE/kdepim/; revision=793387
>SVN commit 788330 by tmcguire:
>Use decode/encodeRFC2047String from KMime instead of rolling our own.
The reason is that our encodeRFC2047String does not encode quoted words (e.g. the
address part of a mailbox), while the encodeRFC2047String from KMime does, and
I couldn't find a method in KMime which does not encode quoted words.
BUG: 159995
svn path=/trunk/KDE/kdepim/; revision=792011
FolderStorage::canAccess() now returns bool,
and thus also the same method in KMFolderSearch, KMFolderMaildir,
KMFolderMbox, KMFolder
- Maildir filenames: use '!' character separator instead of ':' for windows
(KMAIL_MAILDIR_FNAME_SEPARATOR macro),
as it is impossible to create a file containing ':' (regardless of the
used filesystem - it is a property of the FS API itself)
- KMFolderMaildir::canAccess() use QFileInfo instead of access() - solves
problem with undefined
X_OK flag on windows and is still enough efficient as there are no hundreds
of dirs in a maildir
- KMFolderIndex::recreateIndex() now returns bool
- KMFolderDir::reload() simplified
svn path=/trunk/KDE/kdepim/; revision=773959
KConfigBase:
- remove separator argument from list entry reading/writing functions
- introduce {read,write}XdgListEntry()
- kill readPathListEntry(), add readPathEntry() overload
instead. the default value is not optional any more, as it defines the
return type. this is consistent with the readEntry() functions.
- rename clean() => markAsClean(), remove rollback()
- rename ConfigState => AccessMode, getConfigState() => accessMode()
- rename {entry,group}IsImmutable() => is{Entry,Group}Immutable()
- remove NLS alias to Localized
KConfig:
- remove setGroup() & group()
- reshuffle OpenFlag enum, introduce NoCascade for symmetry
- remove setExtraConfigFiles() alias to addConfigSources()
KConfigGroup:
- inherit KConfigBase::deleteGroup() overloads
- make convertToQVariant() private, it will probably change somehow
- KConfig & KConfigGroup: deprecate entryMap()
- remove bogus declarations: KConfigGroup::setReadDefaults(),
KConfig::readEntryUntranslated()
- apidox
- reshuffle the declarations in the headers
svn path=/trunk/KDE/kdepim/; revision=728852
Forward port of:
>SVN commit 633411 by adridg
>mIndexStreamPtrLength comes from struct stat, should be a size_t. It *is*
>a size (of the index file) after all. Also make the size information
>available in the KMFolderIndex API and add a touch of documentation.
>We need the size information to be able to judge if a KMMsgBase
>object has index information or not.
Forward port of:
>SVN commit 633413 by adridg
>Stop KMail from crashing all the time in PIM+;
>check if the data range in the index for this message would make sense at all.
>If not, no string part. Needs r. 633411 API changes.
This is another example why having some many branches is not a good idea.
Adriaan, Ismail: Are there more unported bugfixes in the 3.5.5+ branch?
CCMAIL: groot@kde.org
CCMAIL: onurf@su.sabanciuniv.edu
svn path=/trunk/KDE/kdepim/; revision=706981
for the new kDebug/kError/kWarning/kFatal syntax.
You can use the following command to find 'old' code:
egrep -r -A 5 '(kDebug|kError|kWarning|kFatal).*' * | grep -v ".svn" | grep "<< *endl;"
svn path=/trunk/KDE/kdepim/; revision=695781
but since the difficult part is over, I hope I will improve it over time.
Currently it has the following features:
- Ability to tag emails (with possibly more than one tag)
- Changing the appearance of message headers (font and text color) according to the message's tags.
- Configuration of tags through a new tab called "Message Tags" on the "Configure KMail->Appearance" configuration page.
- You can add toolbar buttons for easy tagging.
- You can assign shortcuts to tags.
- Tagging through the right-click menu.
- Quick filtering using the combobox for "status" filtering. See the screenshot.
Some short-term todos:
- Incorporate Nepomuk
- A column for tags in the header view
- Incorporate Ellen's usability comments
Some long-term todos:
- Filter action for automatic tagging
- Searching based on tags ( which enables having 'tag folders' through use of search folders )
I'm sorry that I didn't have enough time to test my current commit completely. In the last two days, I have been constantly compiling
kdelibs, kdepimlibs, kdebase to keep up with very frequent changes. I finally was able to compile all at once:)
BUGS: 50409
CCBUG: 15391, 122977
svn path=/trunk/KDE/kdepim/; revision=692089
SVN commit 654636 by mkoller:
BUG#50462
I dare to close this bug report with this commit.
It basically automatically recreates the index whenever a "should never
happen" situation occurs in getting data from the index and retries to get
the requested information.
I hope it works as advertised
svn path=/branches/kdepim/enterprise/kdepim/; revision=668925
The cause for this crash was an out-of-bounds array access.
The same problem is in KMail in 3.5 branch, but it doesn't crash. I think Qt4 introduced a new assert when accessing a QString.
svn path=/trunk/KDE/kdepim/; revision=667702